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

control for motor connectors, instrument and cab lighting. keyboard leds signalling, increased level of detail in zoom mode

This commit is contained in:
tmj-fstate
2017-04-18 18:41:49 +02:00
parent 4e516fd807
commit 62520bd4e8
9 changed files with 316 additions and 191 deletions

View File

@@ -82,29 +82,14 @@ public static Int32 GetScreenSaverTimeout()
// static class member storage allocation // static class member storage allocation
TKeyTrans Console::ktTable[4 * 256]; TKeyTrans Console::ktTable[4 * 256];
// Ra: do poprawienia // Ra: bajer do migania LED-ami w klawiaturze
void SetLedState(unsigned char Code, bool bOn){ void SetLedState( unsigned char Code, bool bOn ) {
// Ra: bajer do migania LED-ami w klawiaturze #ifdef _WINDOWS
// NOTE: disabled for the time being if( bOn != ( ::GetKeyState( Code ) != 0 ) ) {
// TODO: find non Borland specific equivalent, or get rid of it keybd_event( Code, MapVirtualKey( Code, 0 ), KEYEVENTF_EXTENDEDKEY | 0, 0 );
/* if (Win32Platform == VER_PLATFORM_WIN32_NT) keybd_event( Code, MapVirtualKey( Code, 0 ), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );
{ }
// WriteLog(AnsiString(int(GetAsyncKeyState(Code)))); #endif
if (bool(GetAsyncKeyState(Code)) != bOn)
{
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(Code, MapVirtualKey(Code, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}
else
{
TKeyboardState KBState;
GetKeyboardState(KBState);
KBState[Code] = bOn ? 1 : 0;
SetKeyboardState(KBState);
};
*/
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -243,22 +228,24 @@ void Console::BitsUpdate(int mask)
switch (iMode) switch (iMode)
{ {
case 1: // sterowanie światełkami klawiatury: CA/SHP+opory case 1: // sterowanie światełkami klawiatury: CA/SHP+opory
if (mask & 3) // gdy SHP albo CA if( mask & 3 ) {
SetLedState(VK_CAPITAL, (iBits & 3) != 0); // gdy SHP albo CA
if (mask & 4) // gdy jazda na oporach SetLedState( VK_CAPITAL, ( iBits & 3 ) != 0 );
{ // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny }
SetLedState(VK_SCROLL, true); // przyciśnięty if (mask & 4) {
SetLedState(VK_SCROLL, false); // zwolniony // gdy jazda na oporach
SetLedState( VK_SCROLL, ( iBits & 4 ) != 0 );
++iConfig; // licznik użycia Scroll Lock ++iConfig; // licznik użycia Scroll Lock
} }
break; break;
case 2: // sterowanie światełkami klawiatury: CA+SHP case 2: // sterowanie światełkami klawiatury: CA+SHP
if (mask & 2) // gdy CA if( mask & 2 ) {
SetLedState(VK_CAPITAL, (iBits & 2) != 0); // gdy CA
if (mask & 1) // gdy SHP SetLedState( VK_CAPITAL, ( iBits & 2 ) != 0 );
{ // Scroll Lock ma jakoś dziwnie... zmiana stanu na przeciwny }
SetLedState(VK_SCROLL, true); // przyciśnięty if (mask & 1) {
SetLedState(VK_SCROLL, false); // zwolniony // gdy SHP
SetLedState( VK_SCROLL, ( iBits & 1 ) != 0 );
++iConfig; // licznik użycia Scroll Lock ++iConfig; // licznik użycia Scroll Lock
} }
break; break;

View File

@@ -675,7 +675,7 @@ public:
headlight_right = 0x10, headlight_right = 0x10,
redmarker_right = 0x20, redmarker_right = 0x20,
}; };
bool ScndInMain = false; /*zaleznosc bocznika od nastawnika*/ int ScndInMain{ 0 }; /*zaleznosc bocznika od nastawnika*/
bool MBrake = false; /*Czy jest hamulec reczny*/ bool MBrake = false; /*Czy jest hamulec reczny*/
double StopBrakeDecc = 0.0; double StopBrakeDecc = 0.0;
TSecuritySystem SecuritySystem; TSecuritySystem SecuritySystem;
@@ -880,6 +880,7 @@ public:
bool FuseFlag = false; /*!o bezpiecznik nadmiarowy*/ bool FuseFlag = false; /*!o bezpiecznik nadmiarowy*/
bool ConvOvldFlag = false; /*! nadmiarowy przetwornicy i ogrzewania*/ bool ConvOvldFlag = false; /*! nadmiarowy przetwornicy i ogrzewania*/
bool StLinFlag = false; /*!o styczniki liniowe*/ bool StLinFlag = false; /*!o styczniki liniowe*/
bool StLinSwitchOff{ false }; // state of the button forcing motor connectors open
bool ResistorsFlag = false; /*!o jazda rezystorowa*/ bool ResistorsFlag = false; /*!o jazda rezystorowa*/
double RventRot = 0.0; /*!s obroty wentylatorow rozruchowych*/ double RventRot = 0.0; /*!s obroty wentylatorow rozruchowych*/
bool UnBrake = false; /*w EZT - nacisniete odhamowywanie*/ bool UnBrake = false; /*w EZT - nacisniete odhamowywanie*/

View File

@@ -129,11 +129,15 @@ double TMoverParameters::current(double n, double U)
R = RList[MainCtrlActualPos].R * Bn + CircuitRes; R = RList[MainCtrlActualPos].R * Bn + CircuitRes;
if ((TrainType != dt_EZT) || (Imin != IminLo) || if( ( TrainType != dt_EZT )
(!ScndS)) // yBARC - boczniki na szeregu poprawnie || ( Imin != IminLo )
Mn = RList[MainCtrlActualPos].Mn; // to jest wykonywane dla EU07 || ( false == ScndS ) ) {
else // yBARC - boczniki na szeregu poprawnie
Mn = RList[MainCtrlActualPos].Mn * RList[MainCtrlActualPos].Bn; Mn = RList[ MainCtrlActualPos ].Mn; // to jest wykonywane dla EU07
}
else {
Mn = RList[ MainCtrlActualPos ].Mn * RList[ MainCtrlActualPos ].Bn;
}
// writepaslog("#", // writepaslog("#",
// "C++-----------------------------------------------------------------------------"); // "C++-----------------------------------------------------------------------------");
@@ -154,21 +158,25 @@ double TMoverParameters::current(double n, double U)
if (DynamicBrakeFlag && (!FuseFlag) && (DynamicBrakeType == dbrake_automatic) && if (DynamicBrakeFlag && (!FuseFlag) && (DynamicBrakeType == dbrake_automatic) &&
ConverterFlag && Mains) // hamowanie EP09 //TUHEX ConverterFlag && Mains) // hamowanie EP09 //TUHEX
{ {
// TODO: zrobic bardziej uniwersalne nie tylko dla EP09
MotorCurrent = MotorCurrent =
-Max0R(MotorParam[0].fi * (Vadd / (Vadd + MotorParam[0].Isat) - MotorParam[0].fi0), 0) * -Max0R(MotorParam[0].fi * (Vadd / (Vadd + MotorParam[0].Isat) - MotorParam[0].fi0), 0) * n * 2.0 / ep09resED;
n * 2.0 / ep09resED; // TODO: zrobic bardziej uniwersalne nie tylko dla EP09 }
else if( ( RList[ MainCtrlActualPos ].Bn == 0 )
|| ( false == StLinFlag ) ) {
// wylaczone
MotorCurrent = 0;
} }
else if ((RList[MainCtrlActualPos].Bn == 0) || (!StLinFlag))
MotorCurrent = 0; // wylaczone
else else
{ // wlaczone... { // wlaczone...
SP = ScndCtrlActualPos; SP = ScndCtrlActualPos;
if (ScndCtrlActualPos < 255) // tak smiesznie bede wylaczal if (ScndCtrlActualPos < 255) // tak smiesznie bede wylaczal
{ {
if (ScndInMain) if( ( ScndInMain )
if (!(RList[MainCtrlActualPos].ScndAct == 255)) && ( RList[ MainCtrlActualPos ].ScndAct != 255 ) ) {
SP = RList[MainCtrlActualPos].ScndAct; SP = RList[ MainCtrlActualPos ].ScndAct;
}
Rz = Mn * WindingRes + R; Rz = Mn * WindingRes + R;
@@ -212,10 +220,10 @@ double TMoverParameters::current(double n, double U)
{ {
if (U > 0) if (U > 0)
MotorCurrent = MotorCurrent =
(U1 - Isf * Rz - Mn * MotorParam[SP].fi * n + sqrt(Delta)) / (2.0 * Rz); (U1 - Isf * Rz - Mn * MotorParam[SP].fi * n + std::sqrt(Delta)) / (2.0 * Rz);
else else
MotorCurrent = MotorCurrent =
(U1 - Isf * Rz - Mn * MotorParam[SP].fi * n - sqrt(Delta)) / (2.0 * Rz); (U1 - Isf * Rz - Mn * MotorParam[SP].fi * n - std::sqrt(Delta)) / (2.0 * Rz);
} }
else else
MotorCurrent = 0; MotorCurrent = 0;
@@ -1593,7 +1601,7 @@ bool TMoverParameters::IncMainCtrl(int CtrlSpeed)
// OK = false; // OK = false;
// } // }
//} //}
} }
if( ( TrainType == dt_ET42 ) && ( true == DynamicBrakeFlag ) ) { if( ( TrainType == dt_ET42 ) && ( true == DynamicBrakeFlag ) ) {
if( MainCtrlPos > 20 ) { if( MainCtrlPos > 20 ) {
@@ -4895,7 +4903,8 @@ bool TMoverParameters::AutoRelayCheck(void)
(MainCtrlActualPos == 0) && (ActiveDir != 0)) (MainCtrlActualPos == 0) && (ActiveDir != 0))
{ //^^ TODO: sprawdzic BUG, prawdopodobnie w CreateBrakeSys() { //^^ TODO: sprawdzic BUG, prawdopodobnie w CreateBrakeSys()
DelayCtrlFlag = true; DelayCtrlFlag = true;
if (LastRelayTime >= InitialCtrlDelay) if( (LastRelayTime >= InitialCtrlDelay)
&& ( false == StLinSwitchOff ) )
{ {
StLinFlag = true; // ybARC - zalaczenie stycznikow liniowych StLinFlag = true; // ybARC - zalaczenie stycznikow liniowych
MainCtrlActualPos = 1; MainCtrlActualPos = 1;
@@ -5975,10 +5984,15 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
continue; continue;
} }
if( inputline.length() == 0 ) { if( inputline[ 0 ] == ' ' ) {
// guard against malformed config files with leading spaces
inputline.erase( 0, inputline.find_first_not_of( ' ' ) );
}
if( inputline.length() == 0 ) {
startBPT = false; startBPT = false;
continue; continue;
} }
// checking if table parsing should be switched off goes first... // checking if table parsing should be switched off goes first...
if( issection( "END-MPT", inputline ) ) { if( issection( "END-MPT", inputline ) ) {
startBPT = false; startBPT = false;

232
Train.cpp
View File

@@ -170,6 +170,7 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::linebreakertoggle, &TTrain::OnCommand_linebreakertoggle }, { user_command::linebreakertoggle, &TTrain::OnCommand_linebreakertoggle },
{ user_command::convertertoggle, &TTrain::OnCommand_convertertoggle }, { user_command::convertertoggle, &TTrain::OnCommand_convertertoggle },
{ user_command::compressortoggle, &TTrain::OnCommand_compressortoggle }, { user_command::compressortoggle, &TTrain::OnCommand_compressortoggle },
{ user_command::motorconnectorsopen, &TTrain::OnCommand_motorconnectorsopen },
{ user_command::motoroverloadrelaythresholdtoggle, &TTrain::OnCommand_motoroverloadrelaythresholdtoggle }, { user_command::motoroverloadrelaythresholdtoggle, &TTrain::OnCommand_motoroverloadrelaythresholdtoggle },
{ user_command::heatingtoggle, &TTrain::OnCommand_heatingtoggle }, { user_command::heatingtoggle, &TTrain::OnCommand_heatingtoggle },
{ user_command::headlighttoggleleft, &TTrain::OnCommand_headlighttoggleleft }, { user_command::headlighttoggleleft, &TTrain::OnCommand_headlighttoggleleft },
@@ -182,6 +183,9 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::headlighttogglerearupper, &TTrain::OnCommand_headlighttogglerearupper }, { user_command::headlighttogglerearupper, &TTrain::OnCommand_headlighttogglerearupper },
{ user_command::redmarkertogglerearleft, &TTrain::OnCommand_redmarkertogglerearleft }, { user_command::redmarkertogglerearleft, &TTrain::OnCommand_redmarkertogglerearleft },
{ user_command::redmarkertogglerearright, &TTrain::OnCommand_redmarkertogglerearright }, { user_command::redmarkertogglerearright, &TTrain::OnCommand_redmarkertogglerearright },
{ user_command::interiorlighttoggle, &TTrain::OnCommand_interiorlighttoggle },
{ user_command::interiorlightdimtoggle, &TTrain::OnCommand_interiorlightdimtoggle },
{ user_command::instrumentlighttoggle, &TTrain::OnCommand_instrumentlighttoggle },
{ user_command::doortoggleleft, &TTrain::OnCommand_doortoggleleft }, { user_command::doortoggleleft, &TTrain::OnCommand_doortoggleleft },
{ user_command::doortoggleright, &TTrain::OnCommand_doortoggleright }, { user_command::doortoggleright, &TTrain::OnCommand_doortoggleright },
{ user_command::departureannounce, &TTrain::OnCommand_departureannounce }, { user_command::departureannounce, &TTrain::OnCommand_departureannounce },
@@ -866,7 +870,9 @@ void TTrain::OnCommand_brakeactingspeedincrease( TTrain *Train, command_data con
if( true == Train->mvOccupied->BrakeDelaySwitch( fasterbrakesetting ) ) { if( true == Train->mvOccupied->BrakeDelaySwitch( fasterbrakesetting ) ) {
// audio feedback // audio feedback
Train->play_sound( Train->dsbSwitch ); Train->play_sound( Train->dsbSwitch );
/*
Train->play_sound( Train->dsbPneumaticRelay ); Train->play_sound( Train->dsbPneumaticRelay );
*/
// visual feedback // visual feedback
if( Train->ggBrakeProfileCtrl.SubModel != nullptr ) { if( Train->ggBrakeProfileCtrl.SubModel != nullptr ) {
Train->ggBrakeProfileCtrl.UpdateValue( Train->ggBrakeProfileCtrl.UpdateValue(
@@ -904,7 +910,9 @@ void TTrain::OnCommand_brakeactingspeeddecrease( TTrain *Train, command_data con
if( true == Train->mvOccupied->BrakeDelaySwitch( slowerbrakesetting ) ) { if( true == Train->mvOccupied->BrakeDelaySwitch( slowerbrakesetting ) ) {
// audio feedback // audio feedback
Train->play_sound( Train->dsbSwitch ); Train->play_sound( Train->dsbSwitch );
/*
Train->play_sound( Train->dsbPneumaticRelay ); Train->play_sound( Train->dsbPneumaticRelay );
*/
// visual feedback // visual feedback
if( Train->ggBrakeProfileCtrl.SubModel != nullptr ) { if( Train->ggBrakeProfileCtrl.SubModel != nullptr ) {
Train->ggBrakeProfileCtrl.UpdateValue( Train->ggBrakeProfileCtrl.UpdateValue(
@@ -1584,6 +1592,36 @@ void TTrain::OnCommand_compressortoggle( TTrain *Train, command_data const &Comm
*/ */
} }
void TTrain::OnCommand_motorconnectorsopen( TTrain *Train, command_data const &Command ) {
// TODO: don't rely on presense of 3d model to determine presence of the switch
if( Train->ggStLinOffButton.SubModel == nullptr ) {
return;
}
if( Command.action != GLFW_RELEASE ) {
// button works while it's held down
if( true == Train->mvControlled->StLinFlag ) {
// yBARC - zmienione na przeciwne, bo true to zalaczone
Train->mvControlled->StLinFlag = false;
Train->play_sound( Train->dsbRelay );
}
Train->mvControlled->StLinSwitchOff = true;
// visual feedback
Train->ggStLinOffButton.UpdateValue( 1.0 );
// sound feedback
if( Train->ggStLinOffButton.GetValue() < 0.05 ) {
Train->play_sound( Train->dsbSwitch );
}
}
else {
// button released
Train->mvControlled->StLinSwitchOff = false;
// visual feedback
Train->ggStLinOffButton.UpdateValue( 0.0 );
}
}
void TTrain::OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command ) { void TTrain::OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_PRESS ) { if( Command.action == GLFW_PRESS ) {
@@ -1987,6 +2025,107 @@ void TTrain::OnCommand_redmarkertogglerearright( TTrain *Train, command_data con
} }
} }
void TTrain::OnCommand_interiorlighttoggle( TTrain *Train, command_data const &Command ) {
// NOTE: the check is disabled, as we're presuming light control is present in every vehicle
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
if( Train->ggCabLightButton.SubModel == nullptr ) {
return;
}
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->bCabLight ) {
// turn on
Train->bCabLight = true;
Train->btCabLight.TurnOn();
// audio feedback
if( Train->ggCabLightButton.GetValue() < 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggCabLightButton.UpdateValue( 1.0 );
}
else {
//turn off
Train->bCabLight = false;
Train->btCabLight.TurnOff();
// audio feedback
if( Train->ggCabLightButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggCabLightButton.UpdateValue( 0.0 );
}
}
}
void TTrain::OnCommand_interiorlightdimtoggle( TTrain *Train, command_data const &Command ) {
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
if( Train->ggCabLightDimButton.SubModel == nullptr ) {
return;
}
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( false == Train->bCabLightDim ) {
// turn on
Train->bCabLightDim = true;
// audio feedback
if( Train->ggCabLightDimButton.GetValue() < 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggCabLightDimButton.UpdateValue( 1.0 );
}
else {
//turn off
Train->bCabLightDim = false;
// audio feedback
if( Train->ggCabLightDimButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggCabLightDimButton.UpdateValue( 0.0 );
}
}
}
void TTrain::OnCommand_instrumentlighttoggle( TTrain *Train, command_data const &Command ) {
// NOTE: the check is disabled, as we're presuming light control is present in every vehicle
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
if( Train->ggUniversal3Button.SubModel == nullptr ) {
return;
}
if( Command.action == GLFW_PRESS ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
// NOTE: instrument lighting isn't fully implemented, so we have to rely on the state of the 'button' i.e. light itself
if( false == Train->LampkaUniversal3_st ) {
// turn on
Train->LampkaUniversal3_st = true;
// audio feedback
if( Train->ggUniversal3Button.GetValue() < 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggUniversal3Button.UpdateValue( 1.0 );
}
else {
//turn off
Train->LampkaUniversal3_st = false;
// audio feedback
if( Train->ggUniversal3Button.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
// visual feedback
Train->ggUniversal3Button.UpdateValue( 0.0 );
}
}
}
void TTrain::OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ) { void TTrain::OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ) {
if( Train->ggTrainHeatingButton.SubModel == nullptr ) { if( Train->ggTrainHeatingButton.SubModel == nullptr ) {
@@ -2530,14 +2669,13 @@ void TTrain::OnKeyDown(int cKey)
} }
} }
} }
#endif
//----------- //-----------
// hunter-131211: dzwiek dla przelacznika universala podniesionego // hunter-131211: dzwiek dla przelacznika universala podniesionego
// hunter-091012: ubajerowanie swiatla w kabinie (wyrzucenie // hunter-091012: ubajerowanie swiatla w kabinie (wyrzucenie
// przyciemnienia pod Univ4) // przyciemnienia pod Univ4)
else if (cKey == Global::Keys[k_Univ3]) else if (cKey == Global::Keys[k_Univ3])
{ {
if (Global::ctrlState) if( Global::ctrlState )
{ {
if (bCabLight == false) //(ggCabLightButton.GetValue()==0) if (bCabLight == false) //(ggCabLightButton.GetValue()==0)
{ {
@@ -2571,7 +2709,6 @@ void TTrain::OnKeyDown(int cKey)
} }
} }
} }
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
//----------- //-----------
else if (cKey == Global::Keys[k_PantFrontUp]) else if (cKey == Global::Keys[k_PantFrontUp])
{ // Winger 160204: podn. { // Winger 160204: podn.
@@ -3736,7 +3873,6 @@ if
} }
} }
} }
#endif
//----------- //-----------
// hunter-131211: dzwiek dla przelacznika universala // hunter-131211: dzwiek dla przelacznika universala
// hunter-091012: ubajerowanie swiatla w kabinie (wyrzucenie // hunter-091012: ubajerowanie swiatla w kabinie (wyrzucenie
@@ -3763,7 +3899,6 @@ if
} */ } */
} }
} }
//----------- //-----------
// hunter-091012: dzwiek dla przyciemnienia swiatelka w kabinie // hunter-091012: dzwiek dla przyciemnienia swiatelka w kabinie
else if (cKey == Global::Keys[k_Univ4]) else if (cKey == Global::Keys[k_Univ4])
@@ -3777,7 +3912,6 @@ if
} }
} }
//----------- //-----------
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
else if (cKey == Global::Keys[k_PantFrontDown]) // Winger 160204: else if (cKey == Global::Keys[k_PantFrontDown]) // Winger 160204:
// opuszczanie prz. patyka // opuszczanie prz. patyka
{ {
@@ -4118,7 +4252,8 @@ if
else if ((cKey == Global::Keys[k_StLinOff]) && (!Global::shiftState) && (!Global::ctrlState)) // Winger 110904: wylacznik st. else if ((cKey == Global::Keys[k_StLinOff]) && (!Global::shiftState) && (!Global::ctrlState)) // Winger 110904: wylacznik st.
// liniowych // liniowych
{ {
if ((mvControlled->TrainType != dt_EZT) && (mvControlled->TrainType != dt_EP05) && #ifdef EU07_USE_OLD_COMMAND_SYSTEM
if( ( mvControlled->TrainType != dt_EZT ) && ( mvControlled->TrainType != dt_EP05 ) &&
(mvControlled->TrainType != dt_ET40)) (mvControlled->TrainType != dt_ET40))
{ {
ggStLinOffButton.PutValue(1); // Ra: było Fuse... ggStLinOffButton.PutValue(1); // Ra: było Fuse...
@@ -4130,6 +4265,7 @@ if
play_sound( dsbRelay ); play_sound( dsbRelay );
} }
} }
#endif
if (mvControlled->TrainType == dt_EZT) if (mvControlled->TrainType == dt_EZT)
{ {
if (mvControlled->Signalling == true) if (mvControlled->Signalling == true)
@@ -4268,7 +4404,8 @@ if
void TTrain::OnKeyUp(int cKey) void TTrain::OnKeyUp(int cKey)
{ // zwolnienie klawisza { // zwolnienie klawisza
if (Global::shiftState) #ifdef EU07_USE_OLD_COMMAND_SYSTEM
if( Global::shiftState )
{ // wciśnięty [Shift] { // wciśnięty [Shift]
} }
else else
@@ -4280,6 +4417,7 @@ void TTrain::OnKeyUp(int cKey)
ggStLinOffButton.PutValue(0); ggStLinOffButton.PutValue(0);
} }
} }
#endif
}; };
// cab movement update, fixed step part // cab movement update, fixed step part
@@ -5347,7 +5485,7 @@ bool TTrain::Update( double const Deltatime )
// - pokićkał ktoś? // - pokićkał ktoś?
scp = mvControlled->RList[mvControlled->MainCtrlPos].ScndAct; scp = mvControlled->RList[mvControlled->MainCtrlPos].ScndAct;
scp = (scp == 255 ? 0 : scp); // Ra: whatta hella is this? scp = (scp == 255 ? 0 : scp); // Ra: whatta hella is this?
if ((mvControlled->ScndCtrlPos > 0) || (mvControlled->ScndInMain) && (scp > 0)) if ((mvControlled->ScndCtrlPos > 0) || (mvControlled->ScndInMain != 0) && (scp > 0))
{ // boczniki pojedynczo { // boczniki pojedynczo
btLampkaBocznik1.TurnOn(); btLampkaBocznik1.TurnOn();
btLampkaBocznik2.Turn(mvControlled->ScndCtrlPos > 1); btLampkaBocznik2.Turn(mvControlled->ScndCtrlPos > 1);
@@ -6305,6 +6443,7 @@ bool TTrain::Update( double const Deltatime )
if (DynamicObject->Mechanik ? !DynamicObject->Mechanik->AIControllFlag : if (DynamicObject->Mechanik ? !DynamicObject->Mechanik->AIControllFlag :
false) // nie wyłączać, gdy AI false) // nie wyłączać, gdy AI
mvControlled->PantCompFlag = false; // wyłączona, gdy nie trzymamy klawisza mvControlled->PantCompFlag = false; // wyłączona, gdy nie trzymamy klawisza
if (Console::Pressed(Global::Keys[k_Univ2])) if (Console::Pressed(Global::Keys[k_Univ2]))
{ {
if (!DebugModeFlag) if (!DebugModeFlag)
@@ -6317,6 +6456,7 @@ bool TTrain::Update( double const Deltatime )
} }
} }
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
// hunter-091012: zrobione z uwzglednieniem przelacznika swiatla // hunter-091012: zrobione z uwzglednieniem przelacznika swiatla
if (Console::Pressed(Global::Keys[k_Univ3])) if (Console::Pressed(Global::Keys[k_Univ3]))
{ {
@@ -6367,47 +6507,7 @@ bool TTrain::Update( double const Deltatime )
} }
} }
} }
#endif
// hunter-091012: to w ogole jest bez sensu i tak namodzone ze nie wiadomo o
// co chodzi - zakomentowalem i zrobilem po swojemu
/*
if ( Console::Pressed(Global::Keys[k_Univ3]) )
{
if (ggUniversal3Button.SubModel)
if (Global::ctrlState)
{//z [Ctrl] zapalamy albo gasimy światełko w kabinie
//tutaj jest bez sensu, trzeba reagować na wciskanie klawisza!
if (Global::shiftState)
{//zapalenie
if (iCabLightFlag<2) ++iCabLightFlag;
}
else
{//gaszenie
if (iCabLightFlag) --iCabLightFlag;
}
}
else
{//bez [Ctrl] przełączamy cośtem
if (Global::shiftState)
{
ggUniversal3Button.PutValue(1); //hunter-131211: z UpdateValue na
PutValue - by zachowywal sie jak pozostale przelaczniki
if (btLampkaUniversal3.Active())
LampkaUniversal3_st=true;
}
else
{
ggUniversal3Button.PutValue(0); //hunter-131211: z UpdateValue na
PutValue - by zachowywal sie jak pozostale przelaczniki
if (btLampkaUniversal3.Active())
LampkaUniversal3_st=false;
}
}
} */
// ABu030405 obsluga lampki uniwersalnej: // ABu030405 obsluga lampki uniwersalnej:
if (btLampkaUniversal3.Active()) // w ogóle jest if (btLampkaUniversal3.Active()) // w ogóle jest
if (LampkaUniversal3_st) // załączona if (LampkaUniversal3_st) // załączona
@@ -6428,28 +6528,12 @@ bool TTrain::Update( double const Deltatime )
else else
btLampkaUniversal3.TurnOff(); btLampkaUniversal3.TurnOff();
/* #ifdef EU07_USE_OLD_COMMAND_SYSTEM
if (Console::Pressed(Global::Keys[k_Univ4]))
{
if (ggUniversal4Button.SubModel)
if (Global::shiftState)
{
ActiveUniversal4=true;
//ggUniversal4Button.UpdateValue(1);
}
else
{
ActiveUniversal4=false;
//ggUniversal4Button.UpdateValue(0);
}
}
*/
// hunter-091012: przepisanie univ4 i zrobione z uwzglednieniem przelacznika // hunter-091012: przepisanie univ4 i zrobione z uwzglednieniem przelacznika
// swiatla // swiatla
if (Console::Pressed(Global::Keys[k_Univ4])) if (Console::Pressed(Global::Keys[k_Univ4]))
{ {
if (Global::shiftState) if( Global::shiftState )
{ {
if (Global::ctrlState) if (Global::ctrlState)
{ {
@@ -6484,7 +6568,6 @@ bool TTrain::Update( double const Deltatime )
} }
} }
} }
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
// Odskakiwanie hamulce EP // Odskakiwanie hamulce EP
if ((!Console::Pressed(Global::Keys[k_DecBrakeLevel])) && if ((!Console::Pressed(Global::Keys[k_DecBrakeLevel])) &&
(!Console::Pressed(Global::Keys[k_WaveBrake])) && (mvOccupied->BrakeCtrlPos == -1) && (!Console::Pressed(Global::Keys[k_WaveBrake])) && (mvOccupied->BrakeCtrlPos == -1) &&
@@ -7754,6 +7837,17 @@ void TTrain::set_cab_controls() {
ggRightEndLightButton.PutValue( 1.0 ); ggRightEndLightButton.PutValue( 1.0 );
} }
// cab lights
if( true == bCabLight ) {
ggCabLightButton.PutValue( 1.0 );
}
if( true == bCabLightDim ) {
ggCabLightDimButton.PutValue( 1.0 );
}
if( true == LampkaUniversal3_st ) {
ggUniversal3Button.PutValue( 1.0 );
}
// doors // doors
// NOTE: we're relying on the cab models to have switches reversed for the rear cab(?) // NOTE: we're relying on the cab models to have switches reversed for the rear cab(?)
ggDoorLeftButton.PutValue( mvOccupied->DoorLeftOpened ? 1.0 : 0.0 ); ggDoorLeftButton.PutValue( mvOccupied->DoorLeftOpened ? 1.0 : 0.0 );

View File

@@ -146,6 +146,7 @@ class TTrain
static void OnCommand_linebreakertoggle( TTrain *Train, command_data const &Command ); static void OnCommand_linebreakertoggle( TTrain *Train, command_data const &Command );
static void OnCommand_convertertoggle( TTrain *Train, command_data const &Command ); static void OnCommand_convertertoggle( TTrain *Train, command_data const &Command );
static void OnCommand_compressortoggle( TTrain *Train, command_data const &Command ); static void OnCommand_compressortoggle( TTrain *Train, command_data const &Command );
static void OnCommand_motorconnectorsopen( TTrain *Train, command_data const &Command );
static void OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command ); static void OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command );
static void OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ); static void OnCommand_heatingtoggle( TTrain *Train, command_data const &Command );
static void OnCommand_headlighttoggleleft( TTrain *Train, command_data const &Command ); static void OnCommand_headlighttoggleleft( TTrain *Train, command_data const &Command );
@@ -158,6 +159,9 @@ class TTrain
static void OnCommand_headlighttogglerearupper( TTrain *Train, command_data const &Command ); static void OnCommand_headlighttogglerearupper( TTrain *Train, command_data const &Command );
static void OnCommand_redmarkertogglerearleft( TTrain *Train, command_data const &Command ); static void OnCommand_redmarkertogglerearleft( TTrain *Train, command_data const &Command );
static void OnCommand_redmarkertogglerearright( TTrain *Train, command_data const &Command ); static void OnCommand_redmarkertogglerearright( TTrain *Train, command_data const &Command );
static void OnCommand_interiorlighttoggle( TTrain *Train, command_data const &Command );
static void OnCommand_interiorlightdimtoggle( TTrain *Train, command_data const &Command );
static void OnCommand_instrumentlighttoggle( TTrain *Train, command_data const &Command );
static void OnCommand_doortoggleleft( TTrain *Train, command_data const &Command ); static void OnCommand_doortoggleleft( TTrain *Train, command_data const &Command );
static void OnCommand_doortoggleright( TTrain *Train, command_data const &Command ); static void OnCommand_doortoggleright( TTrain *Train, command_data const &Command );
static void OnCommand_departureannounce( TTrain *Train, command_data const &Command ); static void OnCommand_departureannounce( TTrain *Train, command_data const &Command );

View File

@@ -112,8 +112,15 @@ const int k_ProgramHelp = 48;
{ "redmarkertogglerearright", command_target::vehicle }, { "redmarkertogglerearright", command_target::vehicle },
/* /*
const int k_SmallCompressor = 63; const int k_SmallCompressor = 63;
const int k_StLinOff = 64; */
{ "motorconnectorsopen", command_target::vehicle },
/*
const int k_CurrentNext = 65; const int k_CurrentNext = 65;
*/
{ "interiorlighttoggle", command_target::vehicle },
{ "interiorlightdimtoggle", command_target::vehicle },
{ "instrumentlighttoggle", command_target::vehicle },
/*
const int k_Univ1 = 66; const int k_Univ1 = 66;
const int k_Univ2 = 67; const int k_Univ2 = 67;
const int k_Univ3 = 68; const int k_Univ3 = 68;

View File

@@ -104,8 +104,15 @@ const int k_ProgramHelp = 48;
redmarkertogglerearright, redmarkertogglerearright,
/* /*
const int k_SmallCompressor = 63; const int k_SmallCompressor = 63;
const int k_StLinOff = 64; */
motorconnectorsopen,
/*
const int k_CurrentNext = 65; const int k_CurrentNext = 65;
*/
interiorlighttoggle,
interiorlightdimtoggle,
instrumentlighttoggle,
/*
const int k_Univ1 = 66; const int k_Univ1 = 66;
const int k_Univ2 = 67; const int k_Univ2 = 67;
const int k_Univ3 = 68; const int k_Univ3 = 68;

View File

@@ -92,112 +92,112 @@ void
keyboard_input::default_bindings() { keyboard_input::default_bindings() {
m_commands = { m_commands = {
//"mastercontrollerincrease" // mastercontrollerincrease
{ GLFW_KEY_KP_ADD }, { GLFW_KEY_KP_ADD },
//"mastercontrollerincreasefast" // mastercontrollerincreasefast
{ GLFW_KEY_KP_ADD | keymodifier::shift }, { GLFW_KEY_KP_ADD | keymodifier::shift },
// "mastercontrollerdecrease" // mastercontrollerdecrease
{ GLFW_KEY_KP_SUBTRACT }, { GLFW_KEY_KP_SUBTRACT },
// "mastercontrollerdecreasefast" // mastercontrollerdecreasefast
{ GLFW_KEY_KP_SUBTRACT | keymodifier::shift }, { GLFW_KEY_KP_SUBTRACT | keymodifier::shift },
// "secondcontrollerincrease" // secondcontrollerincrease
{ GLFW_KEY_KP_DIVIDE }, { GLFW_KEY_KP_DIVIDE },
// "secondcontrollerincreasefast" // secondcontrollerincreasefast
{ GLFW_KEY_KP_DIVIDE | keymodifier::shift }, { GLFW_KEY_KP_DIVIDE | keymodifier::shift },
// "secondcontrollerdecrease" // secondcontrollerdecrease
{ GLFW_KEY_KP_MULTIPLY }, { GLFW_KEY_KP_MULTIPLY },
// "secondcontrollerdecreasefast" // secondcontrollerdecreasefast
{ GLFW_KEY_KP_MULTIPLY | keymodifier::shift }, { GLFW_KEY_KP_MULTIPLY | keymodifier::shift },
// "independentbrakeincrease" // independentbrakeincrease
{ GLFW_KEY_KP_1 }, { GLFW_KEY_KP_1 },
// "independentbrakeincreasefast" // independentbrakeincreasefast
{ GLFW_KEY_KP_1 | keymodifier::shift }, { GLFW_KEY_KP_1 | keymodifier::shift },
// "independentbrakedecrease" // independentbrakedecrease
{ GLFW_KEY_KP_7 }, { GLFW_KEY_KP_7 },
// "independentbrakedecreasefast" // independentbrakedecreasefast
{ GLFW_KEY_KP_7 | keymodifier::shift }, { GLFW_KEY_KP_7 | keymodifier::shift },
// "independentbrakebailoff" // independentbrakebailoff
{ GLFW_KEY_KP_4 }, { GLFW_KEY_KP_4 },
// "trainbrakeincrease" // trainbrakeincrease
{ GLFW_KEY_KP_3 }, { GLFW_KEY_KP_3 },
// "trainbrakedecrease" // trainbrakedecrease
{ GLFW_KEY_KP_9 }, { GLFW_KEY_KP_9 },
// "trainbrakecharging" // trainbrakecharging
{ GLFW_KEY_KP_DECIMAL }, { GLFW_KEY_KP_DECIMAL },
// "trainbrakerelease" // trainbrakerelease
{ GLFW_KEY_KP_6 }, { GLFW_KEY_KP_6 },
// "trainbrakefirstservice" // trainbrakefirstservice
{ GLFW_KEY_KP_8 }, { GLFW_KEY_KP_8 },
// "trainbrakeservice" // trainbrakeservice
{ GLFW_KEY_KP_5 }, { GLFW_KEY_KP_5 },
// "trainbrakefullservice" // trainbrakefullservice
{ GLFW_KEY_KP_2 }, { GLFW_KEY_KP_2 },
// "trainbrakeemergency" // trainbrakeemergency
{ GLFW_KEY_KP_0 }, { GLFW_KEY_KP_0 },
/* /*
const int k_AntiSlipping = 21; const int k_AntiSlipping = 21;
const int k_Sand = 22; const int k_Sand = 22;
*/ */
// "reverserincrease" // reverserincrease
{ GLFW_KEY_D }, { GLFW_KEY_D },
// "reverserdecrease" // reverserdecrease
{ GLFW_KEY_R }, { GLFW_KEY_R },
// "linebreakertoggle" // linebreakertoggle
{ GLFW_KEY_M }, { GLFW_KEY_M },
/* /*
const int k_Fuse = 26; const int k_Fuse = 26;
*/ */
// "convertertoggle" // convertertoggle
{ GLFW_KEY_X }, { GLFW_KEY_X },
// "compressortoggle" // compressortoggle
{ GLFW_KEY_C }, { GLFW_KEY_C },
// "motoroverloadrelaythresholdtoggle" // motoroverloadrelaythresholdtoggle
{ GLFW_KEY_F }, { GLFW_KEY_F },
// "notchingrelaytoggle" // notchingrelaytoggle
{ GLFW_KEY_G }, { GLFW_KEY_G },
// "epbrakecontroltoggle" // epbrakecontroltoggle
{ GLFW_KEY_Z | keymodifier::control }, { GLFW_KEY_Z | keymodifier::control },
// "brakeactingspeedincrease" // brakeactingspeedincrease
{ GLFW_KEY_B | keymodifier::shift }, { GLFW_KEY_B | keymodifier::shift },
// "brakeactingspeeddecrease" // brakeactingspeeddecrease
{ GLFW_KEY_B }, { GLFW_KEY_B },
/* /*
const int k_BrakeProfile = 31; const int k_BrakeProfile = 31;
*/ */
// "alerteracknowledge" // alerteracknowledge
{ GLFW_KEY_SPACE }, { GLFW_KEY_SPACE },
/* /*
const int k_Horn = 33; const int k_Horn = 33;
const int k_Horn2 = 34; const int k_Horn2 = 34;
const int k_FailedEngineCutOff = 35; const int k_FailedEngineCutOff = 35;
*/ */
// "viewturn" // viewturn
{ -1 }, { -1 },
// "movevector" // movevector
{ -1 }, { -1 },
// "moveleft" // moveleft
{ GLFW_KEY_LEFT }, { GLFW_KEY_LEFT },
// "moveright" // moveright
{ GLFW_KEY_RIGHT }, { GLFW_KEY_RIGHT },
// "moveforward" // moveforward
{ GLFW_KEY_UP }, { GLFW_KEY_UP },
// "moveback" // moveback
{ GLFW_KEY_DOWN }, { GLFW_KEY_DOWN },
// "moveup" // moveup
{ GLFW_KEY_PAGE_UP }, { GLFW_KEY_PAGE_UP },
// "movedown" // movedown
{ GLFW_KEY_PAGE_DOWN }, { GLFW_KEY_PAGE_DOWN },
// "moveleftfast" // moveleftfast
{ -1 }, { -1 },
// "moverightfast" // moverightfast
{ -1 }, { -1 },
// "moveforwardfast" // moveforwardfast
{ -1 }, { -1 },
// "movebackfast" // movebackfast
{ -1 }, { -1 },
// "moveupfast" // moveupfast
{ -1 }, { -1 },
// "movedownfast" // movedownfast
{ -1 }, { -1 },
/* /*
const int k_CabForward = 42; const int k_CabForward = 42;
@@ -208,49 +208,60 @@ const int k_ProgramQuit = 46;
// const int k_ProgramPause= 47; // const int k_ProgramPause= 47;
const int k_ProgramHelp = 48; const int k_ProgramHelp = 48;
*/ */
// "doortoggleleft" // doortoggleleft
{ GLFW_KEY_COMMA }, { GLFW_KEY_COMMA },
// "doortoggleright" // doortoggleright
{ GLFW_KEY_PERIOD }, { GLFW_KEY_PERIOD },
// "departureannounce" // departureannounce
{ GLFW_KEY_SLASH }, { GLFW_KEY_SLASH },
// "doorlocktoggle" // doorlocktoggle
{ GLFW_KEY_S | keymodifier::shift }, { GLFW_KEY_S | keymodifier::shift },
// "pantographtogglefront" // pantographtogglefront
{ GLFW_KEY_P }, { GLFW_KEY_P },
// "pantographtogglerear" // pantographtogglerear
{ GLFW_KEY_O }, { GLFW_KEY_O },
// "pantographlowerall" // pantographlowerall
{ GLFW_KEY_P | keymodifier::control }, { GLFW_KEY_P | keymodifier::control },
// "heatingtoggle" // heatingtoggle
{ GLFW_KEY_H }, { GLFW_KEY_H },
/* /*
// const int k_FreeFlyMode= 59; // const int k_FreeFlyMode= 59;
*/ */
// "headlighttoggleleft" // headlighttoggleleft
{ GLFW_KEY_Y }, { GLFW_KEY_Y },
// "headlighttoggleright" // headlighttoggleright
{ GLFW_KEY_I }, { GLFW_KEY_I },
// "headlighttoggleupper" // headlighttoggleupper
{ GLFW_KEY_U }, { GLFW_KEY_U },
// "redmarkertoggleleft" // redmarkertoggleleft
{ GLFW_KEY_Y | keymodifier::shift }, { GLFW_KEY_Y | keymodifier::shift },
// "redmarkertoggleright" // redmarkertoggleright
{ GLFW_KEY_I | keymodifier::shift }, { GLFW_KEY_I | keymodifier::shift },
// "headlighttogglerearleft" // headlighttogglerearleft
{ GLFW_KEY_Y | keymodifier::control }, { GLFW_KEY_Y | keymodifier::control },
// "headlighttogglerearright" // headlighttogglerearright
{ GLFW_KEY_I | keymodifier::control }, { GLFW_KEY_I | keymodifier::control },
// "headlighttogglerearupper" // headlighttogglerearupper
{ GLFW_KEY_U | keymodifier::control }, { GLFW_KEY_U | keymodifier::control },
// "redmarkertogglerearleft" // redmarkertogglerearleft
{ GLFW_KEY_Y | keymodifier::control | keymodifier::shift }, { GLFW_KEY_Y | keymodifier::control | keymodifier::shift },
// "redmarkertogglerearright" // redmarkertogglerearright
{ GLFW_KEY_I | keymodifier::control | keymodifier::shift }, { GLFW_KEY_I | keymodifier::control | keymodifier::shift },
/* /*
const int k_SmallCompressor = 63; const int k_SmallCompressor = 63;
const int k_StLinOff = 64; */
// motorconnectorsopen
{ GLFW_KEY_L },
/*
const int k_CurrentNext = 65; const int k_CurrentNext = 65;
*/
// interiorlighttoggle
{ GLFW_KEY_APOSTROPHE },
// interiorlightdimtoggle
{ GLFW_KEY_APOSTROPHE | keymodifier::control },
// instrumentlighttoggle
{ GLFW_KEY_SEMICOLON },
/*
const int k_Univ1 = 66; const int k_Univ1 = 66;
const int k_Univ2 = 67; const int k_Univ2 = 67;
const int k_Univ3 = 68; const int k_Univ3 = 68;

View File

@@ -319,7 +319,7 @@ opengl_renderer::Render( TDynamicObject *Dynamic ) {
// setup // setup
TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji
double squaredistance = SquareMagnitude( Global::pCameraPosition - Dynamic->vPosition ) / Global::ZoomFactor; double squaredistance = SquareMagnitude( ( Global::pCameraPosition - Dynamic->vPosition ) / Global::ZoomFactor );
Dynamic->ABuLittleUpdate( squaredistance ); // ustawianie zmiennych submodeli dla wspólnego modelu Dynamic->ABuLittleUpdate( squaredistance ); // ustawianie zmiennych submodeli dla wspólnego modelu
::glPushMatrix(); ::glPushMatrix();
@@ -591,7 +591,7 @@ opengl_renderer::Render_Alpha( TDynamicObject *Dynamic ) {
// setup // setup
TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji
double squaredistance = SquareMagnitude( Global::pCameraPosition - Dynamic->vPosition ) / Global::ZoomFactor; double squaredistance = SquareMagnitude( ( Global::pCameraPosition - Dynamic->vPosition ) / Global::ZoomFactor );
Dynamic->ABuLittleUpdate( squaredistance ); // ustawianie zmiennych submodeli dla wspólnego modelu Dynamic->ABuLittleUpdate( squaredistance ); // ustawianie zmiennych submodeli dla wspólnego modelu
::glPushMatrix(); ::glPushMatrix();