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:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
40
Driver.cpp
40
Driver.cpp
@@ -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 );
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user