16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 00:09:18 +02:00

Merge branch 'tmj-dev' into milek-dev

This commit is contained in:
milek7
2018-06-30 19:06:55 +02:00
5 changed files with 66 additions and 58 deletions

View File

@@ -567,20 +567,42 @@ void TAnimModel::RaPrepare()
for (int i = 0; i < iNumLights; ++i) for (int i = 0; i < iNumLights; ++i)
{ {
auto const lightmode { static_cast<int>( lsLights[ i ] ) }; auto const lightmode { static_cast<int>( lsLights[ i ] ) };
switch (lightmode) switch( lightmode ) {
{ case ls_On:
case ls_Blink: // migotanie case ls_Off: {
state = ( fBlinkTimer < fOnTime ); // zapalony albo zgaszony
break; state = ( lightmode == ls_On );
case ls_Dark: // zapalone, gdy ciemno break;
state = ( }
Global.fLuminance <= ( case ls_Blink: {
lsLights[i] == 3.f ? // migotanie
DefaultDarkThresholdLevel : state = ( fBlinkTimer < fOnTime );
( lsLights[i] - 3.f ) ) ); break;
break; }
default: // zapalony albo zgaszony case ls_Dark: {
state = (lightmode == ls_On); // zapalone, gdy ciemno
state = (
Global.fLuminance <= (
lsLights[ i ] == static_cast<float>( ls_Dark ) ?
DefaultDarkThresholdLevel :
( lsLights[ i ] - static_cast<float>( ls_Dark ) ) ) );
break;
}
case ls_Home: {
// like ls_dark but off late at night
auto const simulationhour { simulation::Time.data().wHour };
state = (
Global.fLuminance <= (
lsLights[ i ] == static_cast<float>( ls_Home ) ?
DefaultDarkThresholdLevel :
( lsLights[ i ] - static_cast<float>( ls_Home ) ) ) );
// force the lights off between 1-5am
state = state && (( simulationhour < 1 ) || ( simulationhour >= 5 ));
break;
}
default: {
break;
}
} }
if (LightsOn[i]) if (LightsOn[i])
LightsOn[i]->iVisible = state; LightsOn[i]->iVisible = state;
@@ -757,31 +779,6 @@ void TAnimModel::LightSet(int const n, float const v)
if (n >= iMaxNumLights) if (n >= iMaxNumLights)
return; // przekroczony zakres return; // przekroczony zakres
lsLights[ n ] = v; lsLights[ n ] = v;
switch( static_cast<int>( lsLights[ n ] ) ) {
// interpretacja ułamka zależnie od typu
case ls_Off: {
// ustalenie czasu migotania, t<1s (f>1Hz), np. 0.1 => t=0.1 (f=10Hz)
break;
}
case ls_On: {
// ustalenie wypełnienia ułamkiem, np. 1.25 => zapalony przez 1/4 okresu
break;
}
case ls_Blink: {
// ustalenie częstotliwości migotania, f<1Hz (t>1s), np. 2.2 => f=0.2Hz (t=5s)
break;
}
case ls_Dark: {
// zapalenie świateł zależne od oświetlenia scenerii
/*
if( v == 3.f ) {
// standardowy próg zaplania
lsLights[ n ] = 3.f + DefaultDarkThresholdLevel;
}
*/
break;
}
}
}; };
void TAnimModel::AnimUpdate(double dt) void TAnimModel::AnimUpdate(double dt)

View File

@@ -25,12 +25,12 @@ const int iMaxNumLights = 8;
float const DefaultDarkThresholdLevel { 0.325f }; float const DefaultDarkThresholdLevel { 0.325f };
// typy stanu świateł // typy stanu świateł
enum TLightState enum TLightState {
{
ls_Off = 0, // zgaszone ls_Off = 0, // zgaszone
ls_On = 1, // zapalone ls_On = 1, // zapalone
ls_Blink = 2, // migające ls_Blink = 2, // migające
ls_Dark = 3 // Ra: zapalajce się automatycznie, gdy zrobi się ciemno ls_Dark = 3, // Ra: zapalajce się automatycznie, gdy zrobi się ciemno
ls_Home = 4 // like ls_dark but off late at night
}; };
class TAnimVocaloidFrame class TAnimVocaloidFrame

View File

@@ -1990,7 +1990,6 @@ bool TController::CheckVehicles(TOrders user)
} }
d = p->DirectionSet(d ? 1 : -1); // zwraca położenie następnego (1=zgodny,0=odwrócony - d = p->DirectionSet(d ? 1 : -1); // zwraca położenie następnego (1=zgodny,0=odwrócony -
// względem czoła składu) // względem czoła składu)
p->fScanDist = 300.0; // odległość skanowania w poszukiwaniu innych pojazdów
p->ctOwner = this; // dominator oznacza swoje terytorium p->ctOwner = this; // dominator oznacza swoje terytorium
p = p->Next(); // pojazd podłączony od tyłu (licząc od czoła) p = p->Next(); // pojazd podłączony od tyłu (licząc od czoła)
} }
@@ -2005,13 +2004,22 @@ bool TController::CheckVehicles(TOrders user)
} }
else if (OrderCurrentGet() & (Shunt | Connect)) else if (OrderCurrentGet() & (Shunt | Connect))
{ {
Lights( // HACK: the 'front' and 'rear' of the consist is determined by current consist direction
light::headlight_right, // since direction shouldn't affect Tb1 light configuration, we 'counter' this behaviour by virtually swapping end vehicles
( pVehicles[ 1 ]->MoverParameters->CabNo ) ? if( mvOccupied->ActiveDir > 0 ) {
1 : Lights(
0 ); //światła manewrowe (Tb1) na pojeździe z napędem light::headlight_right,
if (OrderCurrentGet() & Connect) // jeśli łączenie, skanować dalej ( pVehicles[ 1 ]->MoverParameters->CabNo != 0 ?
pVehicles[0]->fScanDist = 5000.0; // odległość skanowania w poszukiwaniu innych pojazdów light::headlight_left :
0 ) ); //światła manewrowe (Tb1) na pojeździe z napędem
}
else {
Lights(
( pVehicles[ 1 ]->MoverParameters->CabNo != 0 ?
light::headlight_left :
0 ),
light::headlight_right ); //światła manewrowe (Tb1) na pojeździe z napędem
}
} }
else if( OrderCurrentGet() == Disconnect ) { else if( OrderCurrentGet() == Disconnect ) {
if( mvOccupied->ActiveDir > 0 ) { if( mvOccupied->ActiveDir > 0 ) {
@@ -2746,11 +2754,11 @@ bool TController::IncSpeed()
// (if there's only one parallel mode configuration it'll be used regardless of current speed) // (if there's only one parallel mode configuration it'll be used regardless of current speed)
auto const scndctrl = ( auto const scndctrl = (
( mvControlling->StLinFlag ) ( mvControlling->StLinFlag )
&& ( mvControlling->RList[ mvControlling->MainCtrlActualPos ].R < 0.01 ) && ( mvControlling->RList[ mvControlling->MainCtrlPos ].R < 0.01 )
&& ( useseriesmode ? && ( useseriesmode ?
mvControlling->RList[ mvControlling->MainCtrlActualPos ].Bn == 1 : mvControlling->RList[ mvControlling->MainCtrlPos ].Bn == 1 :
( ( mvOccupied->Vel <= ( ( mvOccupied->BrakeDelayFlag & bdelay_G ) != 0 ? 55 : 45 ) + ( mvControlling->ScndCtrlPos == 0 ? 0 : 5 ) ) ? ( ( mvOccupied->Vel <= ( ( mvOccupied->BrakeDelayFlag & bdelay_G ) != 0 ? 55 : 45 ) + ( mvControlling->ScndCtrlPos == 0 ? 0 : 5 ) ) ?
mvControlling->RList[ mvControlling->MainCtrlActualPos ].Bn > 1 : mvControlling->RList[ mvControlling->MainCtrlPos ].Bn > 1 :
mvControlling->MainCtrlPos == mvControlling->MainCtrlPosNo ) ) ); mvControlling->MainCtrlPos == mvControlling->MainCtrlPosNo ) ) );
double Vs = 99999; double Vs = 99999;
@@ -4609,7 +4617,7 @@ TController::UpdateSituation(double dt) {
{ // jeśli tamten porusza się z niewielką prędkością albo stoi { // jeśli tamten porusza się z niewielką prędkością albo stoi
if( OrderCurrentGet() & Connect ) { if( OrderCurrentGet() & Connect ) {
// jeśli spinanie, to jechać dalej // jeśli spinanie, to jechać dalej
AccPreferred = std::min( 0.25, AccPreferred ); // nie hamuj AccPreferred = std::min( 0.35, AccPreferred ); // nie hamuj
VelDesired = VelDesired =
min_speed( min_speed(
VelDesired, VelDesired,
@@ -4661,7 +4669,7 @@ TController::UpdateSituation(double dt) {
VelDesired = VelDesired =
min_speed( min_speed(
VelDesired, VelDesired,
( vehicle->fTrackBlock > 150.0 ? ( vehicle->fTrackBlock > 100.0 ?
20.0 : 20.0 :
4.0 ) ); 4.0 ) );
} }
@@ -4832,7 +4840,11 @@ TController::UpdateSituation(double dt) {
} }
else { else {
// przy dużej różnicy wysoki stopień (1,00 potrzebnego opoznienia) // przy dużej różnicy wysoki stopień (1,00 potrzebnego opoznienia)
if( ( std::max( 100.0, fMaxProximityDist ) + fBrakeDist * braking_distance_multiplier( VelNext ) ) >= ( ActualProximityDist - fMaxProximityDist ) ) { auto const slowdowndistance { (
( OrderCurrentGet() & Connect ) == 0 ?
100.0 :
25.0 ) };
if( ( std::max( slowdowndistance, fMaxProximityDist ) + fBrakeDist * braking_distance_multiplier( VelNext ) ) >= ( ActualProximityDist - fMaxProximityDist ) ) {
// don't slow down prematurely; as long as we have room to come to a full stop at a safe distance, we're good // don't slow down prematurely; as long as we have room to come to a full stop at a safe distance, we're good
// ensure some minimal coasting speed, otherwise a vehicle entering this zone at very low speed will be crawling forever // ensure some minimal coasting speed, otherwise a vehicle entering this zone at very low speed will be crawling forever
auto const brakingpointoffset = VelNext * braking_distance_multiplier( VelNext ); auto const brakingpointoffset = VelNext * braking_distance_multiplier( VelNext );

View File

@@ -1745,7 +1745,6 @@ TDynamicObject::TDynamicObject() {
smBrakeSet = NULL; // nastawa hamulca (wajcha) smBrakeSet = NULL; // nastawa hamulca (wajcha)
smLoadSet = NULL; // nastawa ładunku (wajcha) smLoadSet = NULL; // nastawa ładunku (wajcha)
smWiper = NULL; // wycieraczka (poniekąd też wajcha) smWiper = NULL; // wycieraczka (poniekąd też wajcha)
fScanDist = 300.0; // odległość skanowania, zwiększana w trybie łączenia
ctOwner = NULL; // na początek niczyj ctOwner = NULL; // na początek niczyj
iOverheadMask = 0; // maska przydzielana przez AI pojazdom posiadającym iOverheadMask = 0; // maska przydzielana przez AI pojazdom posiadającym
// pantograf, aby wymuszały // pantograf, aby wymuszały

View File

@@ -1 +1 @@
#define VERSION_INFO "M7 30.06.2018, based on tmj 5dfbd5b" #define VERSION_INFO "M7 30.06.2018/2, based on tmj 293787c"