mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-23 00:29:19 +02:00
build 170520. compressor activation for multi-unit engines, gamepad support toggle, local brake logic fix for multi-unit engines
This commit is contained in:
103
Driver.cpp
103
Driver.cpp
@@ -2246,76 +2246,79 @@ bool TController::ReleaseEngine()
|
|||||||
bool TController::IncBrake()
|
bool TController::IncBrake()
|
||||||
{ // zwiększenie hamowania
|
{ // zwiększenie hamowania
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
switch (mvOccupied->BrakeSystem)
|
switch( mvOccupied->BrakeSystem ) {
|
||||||
{
|
case Individual: {
|
||||||
case Individual:
|
if( mvOccupied->LocalBrake == ManualBrake ) {
|
||||||
if (mvOccupied->LocalBrake == ManualBrake)
|
OK = mvOccupied->IncManualBrakeLevel( 1 + static_cast<int>( std::floor( 0.5 + std::fabs( AccDesired ) ) ) );
|
||||||
OK = mvOccupied->IncManualBrakeLevel( 1 + static_cast<int>( std::floor( 0.5 + std::fabs(AccDesired))) );
|
}
|
||||||
else
|
else {
|
||||||
OK = mvOccupied->IncLocalBrakeLevel( std::floor( 1.5 + std::abs( AccDesired ) ) );
|
OK = mvOccupied->IncLocalBrakeLevel( std::floor( 1.5 + std::abs( AccDesired ) ) );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Pneumatic:
|
}
|
||||||
|
case Pneumatic: {
|
||||||
// NOTE: can't perform just test whether connected vehicle == nullptr, due to virtual couplers formed with nearby vehicles
|
// NOTE: can't perform just test whether connected vehicle == nullptr, due to virtual couplers formed with nearby vehicles
|
||||||
if ((mvOccupied->Couplers[0].CouplingFlag == 0) &&
|
bool standalone{ true };
|
||||||
(mvOccupied->Couplers[1].CouplingFlag == 0))
|
if( ( mvOccupied->TrainType == dt_ET41 )
|
||||||
|
|| ( mvOccupied->TrainType == dt_ET42 ) ) {
|
||||||
|
// NOTE: we're doing simplified checks full of presuptions here.
|
||||||
|
// they'll break if someone does strange thing like turning around the second unit
|
||||||
|
if( ( mvOccupied->Couplers[ 1 ].CouplingFlag & coupling::permanent )
|
||||||
|
&& ( mvOccupied->Couplers[ 1 ].Connected->Couplers[ 1 ].CouplingFlag > 0 ) ) {
|
||||||
|
standalone = false;
|
||||||
|
}
|
||||||
|
if( ( mvOccupied->Couplers[ 0 ].CouplingFlag & coupling::permanent )
|
||||||
|
&& ( mvOccupied->Couplers[ 0 ].Connected->Couplers[ 0 ].CouplingFlag > 0 ) ) {
|
||||||
|
standalone = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
standalone =
|
||||||
|
( ( mvOccupied->Couplers[ 0 ].CouplingFlag == 0 )
|
||||||
|
&& ( mvOccupied->Couplers[ 1 ].CouplingFlag == 0 ) );
|
||||||
|
}
|
||||||
|
if( true == standalone ) {
|
||||||
OK = mvOccupied->IncLocalBrakeLevel(
|
OK = mvOccupied->IncLocalBrakeLevel(
|
||||||
1 + static_cast<int>( std::floor( 0.5 + std::fabs(AccDesired))) ); // hamowanie lokalnym bo luzem jedzie
|
1 + static_cast<int>( std::floor( 0.5 + std::fabs( AccDesired ) ) ) ); // hamowanie lokalnym bo luzem jedzie
|
||||||
else
|
}
|
||||||
{
|
else {
|
||||||
if (mvOccupied->BrakeCtrlPos + 1 == mvOccupied->BrakeCtrlPosNo)
|
if( mvOccupied->BrakeCtrlPos + 1 == mvOccupied->BrakeCtrlPosNo ) {
|
||||||
{
|
if( AccDesired < -1.5 ) // hamowanie nagle
|
||||||
if (AccDesired < -1.5) // hamowanie nagle
|
|
||||||
OK = mvOccupied->IncBrakeLevel();
|
OK = mvOccupied->IncBrakeLevel();
|
||||||
else
|
else
|
||||||
OK = false;
|
OK = false;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
/*
|
|
||||||
if (AccDesired>-0.2) and ((Vel<20) or (Vel-VelNext<10)))
|
|
||||||
begin
|
|
||||||
if BrakeCtrlPos>0)
|
|
||||||
OK:=IncBrakeLevel
|
|
||||||
else;
|
|
||||||
OK:=IncLocalBrakeLevel(1); //finezyjne hamowanie lokalnym
|
|
||||||
end
|
|
||||||
else
|
|
||||||
*/
|
|
||||||
// dodane dla towarowego
|
// dodane dla towarowego
|
||||||
if (mvOccupied->BrakeDelayFlag == bdelay_G ?
|
if( mvOccupied->BrakeDelayFlag == bdelay_G ?
|
||||||
-AccDesired * 6.6 > std::min(2, mvOccupied->BrakeCtrlPos) :
|
-AccDesired * 6.6 > std::min( 2, mvOccupied->BrakeCtrlPos ) :
|
||||||
true)
|
true ) {
|
||||||
{
|
|
||||||
OK = mvOccupied->IncBrakeLevel();
|
OK = mvOccupied->IncBrakeLevel();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
OK = false;
|
OK = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mvOccupied->BrakeCtrlPos > 0)
|
if( mvOccupied->BrakeCtrlPos > 0 ) {
|
||||||
mvOccupied->BrakeReleaser(0);
|
mvOccupied->BrakeReleaser( 0 );
|
||||||
break;
|
|
||||||
case ElectroPneumatic:
|
|
||||||
if (mvOccupied->EngineType == ElectricInductionMotor)
|
|
||||||
{
|
|
||||||
OK = mvOccupied->IncLocalBrakeLevel(1);
|
|
||||||
}
|
}
|
||||||
else if (mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos(bh_EPB))
|
break;
|
||||||
{
|
}
|
||||||
mvOccupied->BrakeLevelSet(mvOccupied->Handle->GetPos(bh_EPB));
|
case ElectroPneumatic: {
|
||||||
if (mvOccupied->Handle->GetPos(bh_EPR) - mvOccupied->Handle->GetPos(bh_EPN) < 0.1)
|
if( mvOccupied->EngineType == ElectricInductionMotor ) {
|
||||||
mvOccupied->SwitchEPBrake(1); // to nie chce działać
|
OK = mvOccupied->IncLocalBrakeLevel( 1 );
|
||||||
|
}
|
||||||
|
else if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_EPB ) ) {
|
||||||
|
mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_EPB ) );
|
||||||
|
if( mvOccupied->Handle->GetPos( bh_EPR ) - mvOccupied->Handle->GetPos( bh_EPN ) < 0.1 )
|
||||||
|
mvOccupied->SwitchEPBrake( 1 ); // to nie chce działać
|
||||||
OK = true;
|
OK = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
OK = false;
|
OK = false;
|
||||||
// if (mvOccupied->BrakeCtrlPos<mvOccupied->BrakeCtrlPosNo)
|
break;
|
||||||
// if
|
}
|
||||||
// (mvOccupied->BrakePressureTable[mvOccupied->BrakeCtrlPos+1+2].BrakeType==ElectroPneumatic)
|
default: { break; }
|
||||||
// //+2 to indeks Pascala
|
|
||||||
// OK=mvOccupied->IncBrakeLevel();
|
|
||||||
// else
|
|
||||||
// OK=false;
|
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1879,8 +1879,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424"
|
|||||||
{ // McZapkie-040602: jeśli coś siedzi w pojeździe
|
{ // McZapkie-040602: jeśli coś siedzi w pojeździe
|
||||||
if (Name == Global::asHumanCtrlVehicle) // jeśli pojazd wybrany do prowadzenia
|
if (Name == Global::asHumanCtrlVehicle) // jeśli pojazd wybrany do prowadzenia
|
||||||
{
|
{
|
||||||
if (DebugModeFlag ? false : MoverParameters->EngineType !=
|
if ( MoverParameters->EngineType != Dumb)
|
||||||
Dumb) // jak nie Debugmode i nie jest dumbem
|
|
||||||
Controller = Humandriver; // wsadzamy tam sterującego
|
Controller = Humandriver; // wsadzamy tam sterującego
|
||||||
else // w przeciwnym razie trzeba włączyć pokazywanie kabiny
|
else // w przeciwnym razie trzeba włączyć pokazywanie kabiny
|
||||||
bDisplayCab = true;
|
bDisplayCab = true;
|
||||||
|
|||||||
2
EU07.cpp
2
EU07.cpp
@@ -411,8 +411,10 @@ int main(int argc, char *argv[])
|
|||||||
&& GfxRenderer.Render())
|
&& GfxRenderer.Render())
|
||||||
{
|
{
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
|
if( true == Global::InputGamepad ) {
|
||||||
input::Gamepad.poll();
|
input::Gamepad.poll();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Console::Off(); // wyłączenie konsoli (komunikacji zwrotnej)
|
Console::Off(); // wyłączenie konsoli (komunikacji zwrotnej)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ int Global::iWindowHeight = 600;
|
|||||||
float Global::fDistanceFactor = Global::ScreenHeight / 768.0; // baza do przeliczania odległości dla LoD
|
float Global::fDistanceFactor = Global::ScreenHeight / 768.0; // baza do przeliczania odległości dla LoD
|
||||||
int Global::iFeedbackMode = 1; // tryb pracy informacji zwrotnej
|
int Global::iFeedbackMode = 1; // tryb pracy informacji zwrotnej
|
||||||
int Global::iFeedbackPort = 0; // dodatkowy adres dla informacji zwrotnych
|
int Global::iFeedbackPort = 0; // dodatkowy adres dla informacji zwrotnych
|
||||||
|
bool Global::InputGamepad{ true };
|
||||||
bool Global::bFreeFly = false;
|
bool Global::bFreeFly = false;
|
||||||
bool Global::bFullScreen = false;
|
bool Global::bFullScreen = false;
|
||||||
bool Global::VSync{ false };
|
bool Global::VSync{ false };
|
||||||
@@ -801,6 +802,11 @@ void Global::ConfigParse(cParser &Parser)
|
|||||||
>> Global::Background[1] // g
|
>> Global::Background[1] // g
|
||||||
>> Global::Background[2]; // b
|
>> Global::Background[2]; // b
|
||||||
}
|
}
|
||||||
|
else if( token == "input.gamepad" ) {
|
||||||
|
// czy grupować eventy o tych samych nazwach
|
||||||
|
Parser.getTokens();
|
||||||
|
Parser >> Global::InputGamepad;
|
||||||
|
}
|
||||||
// maciek001: ustawienia MWD
|
// maciek001: ustawienia MWD
|
||||||
else if (token == "mwdmasterenable") { // główne włączenie maszyny!
|
else if (token == "mwdmasterenable") { // główne włączenie maszyny!
|
||||||
Parser.getTokens();
|
Parser.getTokens();
|
||||||
|
|||||||
@@ -255,6 +255,7 @@ class Global
|
|||||||
static std::string LastGLError;
|
static std::string LastGLError;
|
||||||
static int iFeedbackMode; // tryb pracy informacji zwrotnej
|
static int iFeedbackMode; // tryb pracy informacji zwrotnej
|
||||||
static int iFeedbackPort; // dodatkowy adres dla informacji zwrotnych
|
static int iFeedbackPort; // dodatkowy adres dla informacji zwrotnych
|
||||||
|
static bool InputGamepad; // whether gamepad support is enabled
|
||||||
static double fLuminance; // jasność światła do automatycznego zapalania
|
static double fLuminance; // jasność światła do automatycznego zapalania
|
||||||
static float SunAngle; // angle of the sun relative to horizon
|
static float SunAngle; // angle of the sun relative to horizon
|
||||||
static int iMultiplayer; // blokada działania niektórych eventów na rzecz kominikacji
|
static int iMultiplayer; // blokada działania niektórych eventów na rzecz kominikacji
|
||||||
@@ -287,7 +288,6 @@ class Global
|
|||||||
static int iKeyLast; // ostatnio naciśnięty klawisz w celu logowania
|
static int iKeyLast; // ostatnio naciśnięty klawisz w celu logowania
|
||||||
static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=tło,b3=lagi,b4=wczytywanie
|
static int iPause; // globalna pauza ruchu: b0=start,b1=klawisz,b2=tło,b3=lagi,b4=wczytywanie
|
||||||
static bool bActive; // czy jest aktywnym oknem
|
static bool bActive; // czy jest aktywnym oknem
|
||||||
static void BindTexture(GLuint t);
|
|
||||||
static int iConvertModels; // tworzenie plików binarnych
|
static int iConvertModels; // tworzenie plików binarnych
|
||||||
static int iErorrCounter; // licznik sprawdzań do śledzenia błędów OpenGL
|
static int iErorrCounter; // licznik sprawdzań do śledzenia błędów OpenGL
|
||||||
static bool bInactivePause; // automatyczna pauza, gdy okno nieaktywne
|
static bool bInactivePause; // automatyczna pauza, gdy okno nieaktywne
|
||||||
|
|||||||
@@ -3063,56 +3063,104 @@ void TMoverParameters::CompressorCheck(double dt)
|
|||||||
CompressorFlag = false; // bez tamtego członu nie zadziała
|
CompressorFlag = false; // bez tamtego członu nie zadziała
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
CompressorFlag = (CompressorAllow) &&
|
CompressorFlag =
|
||||||
((ConverterFlag) || (CompressorPower == 0)) && (Mains);
|
( ( CompressorAllow )
|
||||||
|
&& ( Mains )
|
||||||
|
&& ( ( ConverterFlag )
|
||||||
|
|| ( CompressorPower == 0 ) ) );
|
||||||
|
|
||||||
if( Compressor > MaxCompressor ) {
|
if( Compressor > MaxCompressor ) {
|
||||||
// wyłącznik ciśnieniowy jest niezależny od sposobu zasilania
|
// wyłącznik ciśnieniowy jest niezależny od sposobu zasilania
|
||||||
CompressorFlag = false;
|
CompressorFlag = false;
|
||||||
CompressorGovernorLock = true; // prevent manual activation until the pressure goes below cut-in level
|
CompressorGovernorLock = true; // prevent manual activation until the pressure goes below cut-in level
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( ( TrainType == dt_ET41 )
|
||||||
|
|| ( TrainType == dt_ET42 ) ) {
|
||||||
|
// for these multi-unit engines compressors turn off whenever any of them was affected by the governor
|
||||||
|
// NOTE: this is crude implementation, TODO: re-implement when a more elegant/flexible system is in place
|
||||||
|
if( ( Couplers[ 1 ].Connected != nullptr )
|
||||||
|
&& ( true == TestFlag( Couplers[ 1 ].CouplingFlag, coupling::permanent ) ) ) {
|
||||||
|
// the first unit isn't allowed to start its compressor until second unit can start its own as well
|
||||||
|
CompressorFlag &= ( Couplers[ 1 ].Connected->CompressorGovernorLock == false );
|
||||||
}
|
}
|
||||||
else // jeśli nie załączona
|
if( ( Couplers[ 0 ].Connected != nullptr )
|
||||||
|
&& ( true == TestFlag( Couplers[ 0 ].CouplingFlag, coupling::permanent ) ) ) {
|
||||||
|
// the second unit isn't allowed to start its compressor until first unit can start its own as well
|
||||||
|
CompressorFlag &= ( Couplers[ 0 ].Connected->CompressorGovernorLock == false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// jeśli nie załączona
|
||||||
|
if( Compressor < MinCompressor ) {
|
||||||
|
// if the pressure drops below the cut-in level, we can reset compressor governor
|
||||||
|
CompressorGovernorLock = false;
|
||||||
|
}
|
||||||
|
|
||||||
if( ( ( Compressor < MinCompressor )
|
if( ( ( Compressor < MinCompressor )
|
||||||
|| ( ( Compressor < MaxCompressor )
|
|| ( ( Compressor < MaxCompressor )
|
||||||
&& ( false == CompressorGovernorLock ) ) )
|
&& ( false == CompressorGovernorLock ) ) )
|
||||||
&& (LastSwitchingTime > CtrlDelay) ) {
|
&& ( LastSwitchingTime > CtrlDelay ) ) {
|
||||||
// załączenie przy małym ciśnieniu
|
// załączenie przy małym ciśnieniu
|
||||||
// jeśli nie załączona, a ciśnienie za małe
|
// jeśli nie załączona, a ciśnienie za małe
|
||||||
// or if the switch is on and the pressure isn't maxed
|
// or if the switch is on and the pressure isn't maxed
|
||||||
if( CompressorPower == 5 ) // jeśli zasilanie z następnego członu
|
if( CompressorPower == 5 ) // jeśli zasilanie z następnego członu
|
||||||
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
|
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
|
||||||
if (Couplers[1].Connected != NULL)
|
if( Couplers[ 1 ].Connected != nullptr ) {
|
||||||
CompressorFlag =
|
CompressorFlag =
|
||||||
(Couplers[1].Connected->CompressorAllow &&
|
( Couplers[ 1 ].Connected->CompressorAllow
|
||||||
Couplers[1].Connected->ConverterFlag && Couplers[1].Connected->Mains);
|
&& Couplers[ 1 ].Connected->ConverterFlag
|
||||||
else
|
&& Couplers[ 1 ].Connected->Mains );
|
||||||
|
}
|
||||||
|
else {
|
||||||
CompressorFlag = false; // bez tamtego członu nie zadziała
|
CompressorFlag = false; // bez tamtego członu nie zadziała
|
||||||
}
|
}
|
||||||
else if (CompressorPower == 4) // jeśli zasilanie z poprzedniego członu
|
}
|
||||||
|
else if( CompressorPower == 4 ) // jeśli zasilanie z poprzedniego członu
|
||||||
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
|
{ // zasilanie sprężarki w członie ra z członu silnikowego (sprzęg 1)
|
||||||
if (Couplers[0].Connected != NULL)
|
if( Couplers[ 0 ].Connected != nullptr ) {
|
||||||
CompressorFlag =
|
CompressorFlag =
|
||||||
(Couplers[0].Connected->CompressorAllow &&
|
( Couplers[ 0 ].Connected->CompressorAllow
|
||||||
Couplers[0].Connected->ConverterFlag && Couplers[0].Connected->Mains);
|
&& Couplers[ 0 ].Connected->ConverterFlag
|
||||||
else
|
&& Couplers[ 0 ].Connected->Mains );
|
||||||
|
}
|
||||||
|
else {
|
||||||
CompressorFlag = false; // bez tamtego członu nie zadziała
|
CompressorFlag = false; // bez tamtego członu nie zadziała
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
CompressorFlag = (CompressorAllow) &&
|
else {
|
||||||
((ConverterFlag) || (CompressorPower == 0)) && (Mains);
|
CompressorFlag =
|
||||||
|
( ( CompressorAllow )
|
||||||
|
&& ( Mains )
|
||||||
|
&& ( ( ConverterFlag )
|
||||||
|
|| ( CompressorPower == 0 ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: crude way to enforce simultaneous activation of compressors in multi-unit setups
|
||||||
|
// TODO: replace this with a more universal activation system down the road
|
||||||
|
if( ( TrainType == dt_ET41 )
|
||||||
|
|| ( TrainType == dt_ET42 ) ) {
|
||||||
|
|
||||||
|
if( ( Couplers[1].Connected != nullptr )
|
||||||
|
&& ( true == TestFlag( Couplers[ 1 ].CouplingFlag, coupling::permanent ) ) ) {
|
||||||
|
// the first unit isn't allowed to start its compressor until second unit can start its own as well
|
||||||
|
CompressorFlag &= ( Couplers[ 1 ].Connected->CompressorGovernorLock == false );
|
||||||
|
}
|
||||||
|
if( ( Couplers[ 0 ].Connected != nullptr )
|
||||||
|
&& ( true == TestFlag( Couplers[ 0 ].CouplingFlag, coupling::permanent ) ) ) {
|
||||||
|
// the second unit isn't allowed to start its compressor until first unit can start its own as well
|
||||||
|
CompressorFlag &= ( Couplers[ 0 ].Connected->CompressorGovernorLock == false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( CompressorFlag ) {
|
if( CompressorFlag ) {
|
||||||
// jeśli została załączona
|
// jeśli została załączona
|
||||||
LastSwitchingTime = 0; // to trzeba ograniczyć ponowne włączenie
|
LastSwitchingTime = 0; // to trzeba ograniczyć ponowne włączenie
|
||||||
if( Compressor < MinCompressor ) {
|
|
||||||
// if the activation took place at pressure below the cut-in level, we can reset compressor governor
|
|
||||||
CompressorGovernorLock = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// for b:=0 to 1 do //z Megapacka
|
|
||||||
// with Couplers[b] do
|
|
||||||
// if TestFlag(CouplingFlag,ctrain_scndpneumatic) then
|
|
||||||
// Connected.CompressorFlag:=CompressorFlag;
|
|
||||||
if (CompressorFlag)
|
if (CompressorFlag)
|
||||||
if ((EngineType == DieselElectric) && (CompressorPower > 0))
|
if ((EngineType == DieselElectric) && (CompressorPower > 0))
|
||||||
CompressedVolume += dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) /
|
CompressedVolume += dt * CompressorSpeed * (2.0 * MaxCompressor - Compressor) /
|
||||||
|
|||||||
@@ -114,7 +114,10 @@ bool TSegment::Init(vector3 &NewPoint1, vector3 NewCPointOut, vector3 NewCPointI
|
|||||||
{
|
{
|
||||||
ErrorLog( "Bad geometry (zero length) for spline \"" + pOwner->NameGet() + "\" at " + Where( Point1 ) );
|
ErrorLog( "Bad geometry (zero length) for spline \"" + pOwner->NameGet() + "\" at " + Where( Point1 ) );
|
||||||
// MessageBox(0,"Length<=0","TSegment::Init",MB_OK);
|
// MessageBox(0,"Length<=0","TSegment::Init",MB_OK);
|
||||||
|
fLength = 0.01; // crude workaround TODO: fix this properly
|
||||||
|
/*
|
||||||
return false; // zerowe nie mogą być
|
return false; // zerowe nie mogą być
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( pOwner->eType == tt_Switch )
|
if( ( pOwner->eType == tt_Switch )
|
||||||
|
|||||||
@@ -532,7 +532,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name)
|
|||||||
// na przechyłce doliczyć jeszcze pół przechyłki
|
// na przechyłce doliczyć jeszcze pół przechyłki
|
||||||
}
|
}
|
||||||
if( fRadius != 0 ) // gdy podany promień
|
if( fRadius != 0 ) // gdy podany promień
|
||||||
segsize = clamp( 0.2 + fabs( fRadius ) * 0.02, 2.5, 10.0 );
|
segsize = clamp( 0.2 + std::fabs( fRadius ) * 0.02, 2.0, 10.0 );
|
||||||
else
|
else
|
||||||
segsize = 10.0; // for straights, 10m per segment works good enough
|
segsize = 10.0; // for straights, 10m per segment works good enough
|
||||||
|
|
||||||
@@ -595,7 +595,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name)
|
|||||||
// na przechyłce doliczyć jeszcze pół przechyłki?
|
// na przechyłce doliczyć jeszcze pół przechyłki?
|
||||||
}
|
}
|
||||||
if (fRadiusTable[0] > 0)
|
if (fRadiusTable[0] > 0)
|
||||||
segsize = clamp( 0.2 + fRadiusTable[0] * 0.02, 2.5, 5.0 );
|
segsize = clamp( 0.2 + fRadiusTable[0] * 0.02, 2.0, 5.0 );
|
||||||
else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne
|
else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne
|
||||||
{ // jak promień zerowy, to przeliczamy punkty kontrolne
|
{ // jak promień zerowy, to przeliczamy punkty kontrolne
|
||||||
cp1 = (p1 + p1 + p2) / 3.0 - p1; // jak jest prosty, to się zoptymalizuje
|
cp1 = (p1 + p1 + p2) / 3.0 - p1; // jak jest prosty, to się zoptymalizuje
|
||||||
@@ -625,7 +625,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fRadiusTable[1] > 0)
|
if (fRadiusTable[1] > 0)
|
||||||
segsize = clamp( 0.2 + fRadiusTable[ 1 ] * 0.02, 2.5, 5.0 );
|
segsize = clamp( 0.2 + fRadiusTable[ 1 ] * 0.02, 2.0, 5.0 );
|
||||||
|
|
||||||
else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne
|
else if (eType != tt_Cross) // dla skrzyżowań muszą być podane kontrolne
|
||||||
{ // jak promień zerowy, to przeliczamy punkty kontrolne
|
{ // jak promień zerowy, to przeliczamy punkty kontrolne
|
||||||
|
|||||||
@@ -375,11 +375,12 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
|||||||
WriteLog( "Load time: " +
|
WriteLog( "Load time: " +
|
||||||
std::to_string( std::chrono::duration_cast<std::chrono::seconds>(( std::chrono::system_clock::now() - timestart )).count() )
|
std::to_string( std::chrono::duration_cast<std::chrono::seconds>(( std::chrono::system_clock::now() - timestart )).count() )
|
||||||
+ " seconds");
|
+ " seconds");
|
||||||
|
/*
|
||||||
if (DebugModeFlag) // w Debugmode automatyczne włączenie AI
|
if (DebugModeFlag) // w Debugmode automatyczne włączenie AI
|
||||||
if (Train)
|
if (Train)
|
||||||
if (Train->Dynamic()->Mechanik)
|
if (Train->Dynamic()->Mechanik)
|
||||||
Train->Dynamic()->Mechanik->TakeControl(true);
|
Train->Dynamic()->Mechanik->TakeControl(true);
|
||||||
|
*/
|
||||||
UILayer.set_progress();
|
UILayer.set_progress();
|
||||||
UILayer.set_background( "" );
|
UILayer.set_background( "" );
|
||||||
UILayer.clear_texts();
|
UILayer.clear_texts();
|
||||||
@@ -1748,11 +1749,9 @@ TWorld::Update_UI() {
|
|||||||
Global::Bezogonkow( "| " + station + " | " + arrival + " | " + departure + " | " + vmax + " | " + tableline->StationWare, true ),
|
Global::Bezogonkow( "| " + station + " | " + arrival + " | " + departure + " | " + vmax + " | " + tableline->StationWare, true ),
|
||||||
( ( owner->iStationStart < table->StationIndex )
|
( ( owner->iStationStart < table->StationIndex )
|
||||||
&& ( i < table->StationIndex )
|
&& ( i < table->StationIndex )
|
||||||
&& ( time.wHour >= tableline->Dh )
|
&& ( ( time.wHour * 60 + time.wMinute ) >= ( tableline->Dh * 60 + tableline->Dm ) ) ?
|
||||||
&& ( time.wMinute >= tableline->Dm ) ?
|
|
||||||
float4( 0.0f, 1.0f, 0.0f, 1.0f ) :// czas minął i odjazd był, to nazwa stacji będzie na zielono
|
float4( 0.0f, 1.0f, 0.0f, 1.0f ) :// czas minął i odjazd był, to nazwa stacji będzie na zielono
|
||||||
Global::UITextColor )
|
Global::UITextColor ) );
|
||||||
);
|
|
||||||
// divider/footer
|
// divider/footer
|
||||||
UITable->text_lines.emplace_back( "+----------------------------+-------+-------+-----+", Global::UITextColor );
|
UITable->text_lines.emplace_back( "+----------------------------+-------+-------+-----+", Global::UITextColor );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user