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

build 171102: mouse support for light preset switch, vehicle lights cab indicators

This commit is contained in:
tmj-fstate
2017-11-02 21:51:44 +01:00
parent 3456fbd651
commit da11e689ce
10 changed files with 226 additions and 261 deletions

432
Train.cpp
View File

@@ -246,6 +246,8 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::motoroverloadrelaythresholdtoggle, &TTrain::OnCommand_motoroverloadrelaythresholdtoggle }, { user_command::motoroverloadrelaythresholdtoggle, &TTrain::OnCommand_motoroverloadrelaythresholdtoggle },
{ user_command::motoroverloadrelayreset, &TTrain::OnCommand_motoroverloadrelayreset }, { user_command::motoroverloadrelayreset, &TTrain::OnCommand_motoroverloadrelayreset },
{ user_command::heatingtoggle, &TTrain::OnCommand_heatingtoggle }, { user_command::heatingtoggle, &TTrain::OnCommand_heatingtoggle },
{ user_command::lightspresetactivatenext, &TTrain::OnCommand_lightspresetactivatenext },
{ user_command::lightspresetactivateprevious, &TTrain::OnCommand_lightspresetactivateprevious },
{ user_command::headlighttoggleleft, &TTrain::OnCommand_headlighttoggleleft }, { user_command::headlighttoggleleft, &TTrain::OnCommand_headlighttoggleleft },
{ user_command::headlighttoggleright, &TTrain::OnCommand_headlighttoggleright }, { user_command::headlighttoggleright, &TTrain::OnCommand_headlighttoggleright },
{ user_command::headlighttoggleupper, &TTrain::OnCommand_headlighttoggleupper }, { user_command::headlighttoggleupper, &TTrain::OnCommand_headlighttoggleupper },
@@ -2067,6 +2069,60 @@ void TTrain::OnCommand_motoroverloadrelayreset( TTrain *Train, command_data cons
} }
} }
void TTrain::OnCommand_lightspresetactivatenext( TTrain *Train, command_data const &Command ) {
if( Train->mvOccupied->LightsPosNo == 0 ) {
// lights are controlled by preset selector
return;
}
if( Command.action != GLFW_PRESS ) {
// one change per key press
return;
}
if( ( Train->mvOccupied->LightsPos < Train->mvOccupied->LightsPosNo )
|| ( true == Train->mvOccupied->LightsWrap ) ) {
// active light preset is stored as value in range 1-LigthPosNo
Train->mvOccupied->LightsPos = (
Train->mvOccupied->LightsPos < Train->mvOccupied->LightsPosNo ?
Train->mvOccupied->LightsPos + 1 :
1 ); // wrap mode
Train->SetLights();
// visual feedback
if( Train->ggLightsButton.SubModel != nullptr ) {
Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch );
}
}
}
void TTrain::OnCommand_lightspresetactivateprevious( TTrain *Train, command_data const &Command ) {
if( Train->mvOccupied->LightsPosNo == 0 ) {
// lights are controlled by preset selector
return;
}
if( Command.action != GLFW_PRESS ) {
// one change per key press
return;
}
if( ( Train->mvOccupied->LightsPos > 1 )
|| ( true == Train->mvOccupied->LightsWrap ) ) {
// active light preset is stored as value in range 1-LigthPosNo
Train->mvOccupied->LightsPos = (
Train->mvOccupied->LightsPos > 1 ?
Train->mvOccupied->LightsPos - 1 :
Train->mvOccupied->LightsPosNo ); // wrap mode
Train->SetLights();
// visual feedback
if( Train->ggLightsButton.SubModel != nullptr ) {
Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch );
}
}
}
void TTrain::OnCommand_headlighttoggleleft( TTrain *Train, command_data const &Command ) { void TTrain::OnCommand_headlighttoggleleft( TTrain *Train, command_data const &Command ) {
if( Train->mvOccupied->LightsPosNo > 0 ) { if( Train->mvOccupied->LightsPosNo > 0 ) {
@@ -2900,7 +2956,8 @@ void TTrain::OnKeyDown(int cKey)
DynamicObject->Mechanik->TakeControl(true); DynamicObject->Mechanik->TakeControl(true);
} }
} }
else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne - #ifdef EU07_USE_OLD_COMMAND_SYSTEM
else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne -
// włączenie // włączenie
{ {
if (mvOccupied->LightsPosNo > 0) //kręciolek od swiatel if (mvOccupied->LightsPosNo > 0) //kręciolek od swiatel
@@ -2917,6 +2974,7 @@ void TTrain::OnKeyDown(int cKey)
} }
} }
} }
#endif
} }
else // McZapkie-240302 - klawisze bez shifta else // McZapkie-240302 - klawisze bez shifta
{ {
@@ -3013,8 +3071,7 @@ void TTrain::OnKeyDown(int cKey)
} }
} }
} }
// McZapkie-240302 - wylaczanie automatycznego pilota (w trybie ~debugmode // McZapkie-240302 - wylaczanie automatycznego pilota (w trybie ~debugmode mozna tylko raz)
// mozna tylko raz)
else if (cKey == GLFW_KEY_Q) // bez Shift else if (cKey == GLFW_KEY_Q) // bez Shift
{ {
if (DynamicObject->Mechanik) if (DynamicObject->Mechanik)
@@ -3249,6 +3306,7 @@ if
} }
} }
} }
#ifdef EU07_USE_OLD_COMMAND_SYSTEM
else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne - else if (cKey == Global::Keys[k_UpperSign]) // ABu 060205: światło górne -
// wyłączenie // wyłączenie
{ {
@@ -3266,6 +3324,7 @@ if
} }
} }
} }
#endif
// else // else
if (DebugModeFlag) if (DebugModeFlag)
{ // przesuwanie składu o 100m { // przesuwanie składu o 100m
@@ -4317,9 +4376,6 @@ bool TTrain::Update( double const Deltatime )
true : true :
false ) ); false ) );
// hunter-261211: jakis stary kod (i niezgodny z prawda),
// zahaszowalem i poprawilem
// youBy-220913: ale przyda sie do lampki samej przetwornicy
btLampkaPrzetw.Turn( !mvControlled->ConverterFlag ); btLampkaPrzetw.Turn( !mvControlled->ConverterFlag );
btLampkaNadmPrzetw.Turn( mvControlled->ConvOvldFlag ); btLampkaNadmPrzetw.Turn( mvControlled->ConvOvldFlag );
@@ -4330,10 +4386,12 @@ bool TTrain::Update( double const Deltatime )
btLampkaBezoporowa.Turn(mvControlled->ResistorsFlagCheck() || btLampkaBezoporowa.Turn(mvControlled->ResistorsFlagCheck() ||
(mvControlled->MainCtrlActualPos == 0)); // do EU04 (mvControlled->MainCtrlActualPos == 0)); // do EU04
if ((mvControlled->Itot != 0) || (mvOccupied->BrakePress > 2) || if( ( mvControlled->Itot != 0 )
(mvOccupied->PipePress < 3.6)) || ( mvOccupied->BrakePress > 2 )
btLampkaStyczn.TurnOff(); // Ra: czy to jest udawanie działania || ( mvOccupied->PipePress < 3.6 ) ) {
// styczników liniowych? // Ra: czy to jest udawanie działania styczników liniowych?
btLampkaStyczn.TurnOff();
}
else if (mvOccupied->BrakePress < 1) else if (mvOccupied->BrakePress < 1)
btLampkaStyczn.TurnOn(); // mozna prowadzic rozruch btLampkaStyczn.TurnOn(); // mozna prowadzic rozruch
if (((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) && if (((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) &&
@@ -4513,15 +4571,8 @@ bool TTrain::Update( double const Deltatime )
btLampkaNadmPrzetwB.TurnOn(); btLampkaNadmPrzetwB.TurnOn();
btLampkaPrzetwB.TurnOff(); btLampkaPrzetwB.TurnOff();
} }
}
// hunter-261211: jakis stary kod (i niezgodny z prawda), zahaszowalem
// if (tmp)
// if (tmp->MoverParameters->ConverterFlag==true)
// btLampkaNadmPrzetwB.TurnOff();
// else
// btLampkaNadmPrzetwB.TurnOn();
} //**************************************************** */
if( mvControlled->Battery || mvControlled->ConverterFlag ) if( mvControlled->Battery || mvControlled->ConverterFlag )
{ {
switch (mvControlled->TrainType) switch (mvControlled->TrainType)
@@ -4551,6 +4602,18 @@ bool TTrain::Update( double const Deltatime )
btLampkaForward.Turn(mvControlled->ActiveDir > 0); // jazda do przodu btLampkaForward.Turn(mvControlled->ActiveDir > 0); // jazda do przodu
btLampkaBackward.Turn(mvControlled->ActiveDir < 0); // jazda do tyłu btLampkaBackward.Turn(mvControlled->ActiveDir < 0); // jazda do tyłu
btLampkaED.Turn(mvControlled->DynamicBrakeFlag); // hamulec ED btLampkaED.Turn(mvControlled->DynamicBrakeFlag); // hamulec ED
// light indicators
// NOTE: sides are hardcoded to deal with setups where single cab is equipped with all indicators
btLampkaUpperLight.Turn( ( mvOccupied->iLights[ side::front ] & light::headlight_upper ) != 0 );
btLampkaLeftLight.Turn( ( mvOccupied->iLights[ side::front ] & light::headlight_left ) != 0 );
btLampkaRightLight.Turn( ( mvOccupied->iLights[ side::front ] & light::headlight_right ) != 0 );
btLampkaLeftEndLight.Turn( ( mvOccupied->iLights[ side::front ] & light::redmarker_left ) != 0 );
btLampkaRightEndLight.Turn( ( mvOccupied->iLights[ side::front ] & light::redmarker_right ) != 0 );
btLampkaRearUpperLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::headlight_upper ) != 0 );
btLampkaRearLeftLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::headlight_left ) != 0 );
btLampkaRearRightLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::headlight_right ) != 0 );
btLampkaRearLeftEndLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::redmarker_left ) != 0 );
btLampkaRearRightEndLight.Turn( ( mvOccupied->iLights[ side::rear ] & light::redmarker_right ) != 0 );
} }
else else
{ // gdy bateria wyłączona { // gdy bateria wyłączona
@@ -4566,7 +4629,19 @@ bool TTrain::Update( double const Deltatime )
btLampkaForward.TurnOff(); btLampkaForward.TurnOff();
btLampkaBackward.TurnOff(); btLampkaBackward.TurnOff();
btLampkaED.TurnOff(); btLampkaED.TurnOff();
// light indicators
btLampkaUpperLight.TurnOff();
btLampkaLeftLight.TurnOff();
btLampkaRightLight.TurnOff();
btLampkaLeftEndLight.TurnOff();
btLampkaRightEndLight.TurnOff();
btLampkaRearUpperLight.TurnOff();
btLampkaRearLeftLight.TurnOff();
btLampkaRearRightLight.TurnOff();
btLampkaRearLeftEndLight.TurnOff();
btLampkaRearRightEndLight.TurnOff();
} }
// McZapkie-080602: obroty (albo translacje) regulatorow // McZapkie-080602: obroty (albo translacje) regulatorow
if (ggMainCtrl.SubModel) { if (ggMainCtrl.SubModel) {
@@ -4830,12 +4905,6 @@ bool TTrain::Update( double const Deltatime )
ggRearRightLightButton.PutValue(-1); ggRearRightLightButton.PutValue(-1);
} }
#endif #endif
if (ggLightsButton.SubModel)
{
ggLightsButton.PutValue(mvOccupied->LightsPos - 1);
ggLightsButton.Update();
}
ggDimHeadlightsButton.Update();
//--------- //---------
// hunter-080812: poprawka na ogrzewanie w elektrykach - usuniete uzaleznienie od przetwornicy // hunter-080812: poprawka na ogrzewanie w elektrykach - usuniete uzaleznienie od przetwornicy
if ((((mvControlled->EngineType == ElectricSeriesMotor) && (mvControlled->Mains == true) && if ((((mvControlled->EngineType == ElectricSeriesMotor) && (mvControlled->Mains == true) &&
@@ -4909,9 +4978,7 @@ bool TTrain::Update( double const Deltatime )
} }
} }
//******************************************
// przelaczniki // przelaczniki
#ifdef EU07_USE_OLD_COMMAND_SYSTEM #ifdef EU07_USE_OLD_COMMAND_SYSTEM
if( Console::Pressed( Global::Keys[ k_Horn ] ) ) if( Console::Pressed( Global::Keys[ k_Horn ] ) )
{ {
@@ -5652,6 +5719,7 @@ bool TTrain::Update( double const Deltatime )
ggPantCompressorButton.Update(); ggPantCompressorButton.Update();
ggPantCompressorValve.Update(); ggPantCompressorValve.Update();
ggLightsButton.Update();
ggUpperLightButton.Update(); ggUpperLightButton.Update();
ggLeftLightButton.Update(); ggLeftLightButton.Update();
ggRightLightButton.Update(); ggRightLightButton.Update();
@@ -5663,6 +5731,7 @@ bool TTrain::Update( double const Deltatime )
ggRearRightLightButton.Update(); ggRearRightLightButton.Update();
ggRearLeftEndLightButton.Update(); ggRearLeftEndLightButton.Update();
ggRearRightEndLightButton.Update(); ggRearRightEndLightButton.Update();
ggDimHeadlightsButton.Update();
//------------ //------------
ggConverterButton.Update(); ggConverterButton.Update();
ggConverterLocalButton.Update(); ggConverterLocalButton.Update();
@@ -5673,14 +5742,14 @@ bool TTrain::Update( double const Deltatime )
ggHornButton.Update(); ggHornButton.Update();
ggHornLowButton.Update(); ggHornLowButton.Update();
ggHornHighButton.Update(); ggHornHighButton.Update();
/* #ifdef EU07_USE_OLD_COMMAND_SYSTEM
ggUniversal1Button.Update(); ggUniversal1Button.Update();
ggUniversal2Button.Update(); ggUniversal2Button.Update();
if( Universal4Active ) { if( Universal4Active ) {
ggUniversal4Button.PermIncValue( dt ); ggUniversal4Button.PermIncValue( dt );
} }
ggUniversal4Button.Update(); ggUniversal4Button.Update();
*/ #endif
for( auto &universal : ggUniversals ) { for( auto &universal : ggUniversals ) {
universal.Update(); universal.Update();
} }
@@ -6597,6 +6666,17 @@ void TTrain::clear_cab_controls()
btLampkaWylSzybkiB.Clear(); btLampkaWylSzybkiB.Clear();
btLampkaForward.Clear(); btLampkaForward.Clear();
btLampkaBackward.Clear(); btLampkaBackward.Clear();
// light indicators
btLampkaUpperLight.Clear();
btLampkaLeftLight.Clear();
btLampkaRightLight.Clear();
btLampkaLeftEndLight.Clear();
btLampkaRightEndLight.Clear();
btLampkaRearUpperLight.Clear();
btLampkaRearLeftLight.Clear();
btLampkaRearRightLight.Clear();
btLampkaRearLeftEndLight.Clear();
btLampkaRearRightEndLight.Clear();
btCabLight.Clear(); // hunter-171012 btCabLight.Clear(); // hunter-171012
ggLeftLightButton.Clear(); ggLeftLightButton.Clear();
ggRightLightButton.Clear(); ggRightLightButton.Clear();
@@ -6706,6 +6786,8 @@ void TTrain::set_cab_controls() {
ggMaxCurrentCtrl.PutValue( 1.0 ); ggMaxCurrentCtrl.PutValue( 1.0 );
} }
// lights // lights
ggLightsButton.PutValue( mvOccupied->LightsPos - 1 );
int const vehicleside = int const vehicleside =
( mvOccupied->ActiveCab == 1 ? ( mvOccupied->ActiveCab == 1 ?
side::front : side::front :
@@ -6802,227 +6884,88 @@ void TTrain::set_cab_controls() {
// TODO: when cleaning up break setting indicator state into a separate function, so we can reuse it // TODO: when cleaning up break setting indicator state into a separate function, so we can reuse it
} }
// initializes a button matching provided label. returns: true if the label was found, false // initializes a button matching provided label. returns: true if the label was found, false otherwise
// otherwise
// NOTE: this is temporary work-around for compiler else-if limit
// TODO: refactor the cabin controls into some sensible structure // TODO: refactor the cabin controls into some sensible structure
bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int const Cabindex) bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int const Cabindex) {
{
/* std::unordered_map<std::string, TButton &> const lights = {
TButton *bt; // roboczy wskaźnik na obiekt animujący lampkę { "i-maxft:", btLampkaMaxSila },
*/ { "i-maxftt:", btLampkaPrzekrMaxSila },
// SEKCJA LAMPEK { "i-radio:", btLampkaRadio },
if (Label == "i-maxft:") { "i-manual_brake:", btLampkaHamulecReczny },
{ { "i-door_blocked:", btLampkaBlokadaDrzwi },
btLampkaMaxSila.Load(Parser, DynamicObject->mdKabina); { "i-slippery:", btLampkaPoslizg },
{ "i-contactors:", btLampkaStyczn },
{ "i-conv_ovld:", btLampkaNadmPrzetw },
{ "i-converter:", btLampkaPrzetw },
{ "i-diff_relay:", btLampkaPrzekRozn },
{ "i-diff_relay2:", btLampkaPrzekRoznPom },
{ "i-motor_ovld:", btLampkaNadmSil },
{ "i-train_controll:", btLampkaUkrotnienie },
{ "i-brake_delay_r:", btLampkaHamPosp },
{ "i-mainbreaker:", btLampkaWylSzybki },
{ "i-vent_ovld:", btLampkaNadmWent },
{ "i-comp_ovld:", btLampkaNadmSpr },
{ "i-resistors:", btLampkaOpory },
{ "i-no_resistors:", btLampkaBezoporowa },
{ "i-no_resistors_b:", btLampkaBezoporowaB },
{ "i-highcurrent:", btLampkaWysRozr },
{ "i-vent_trim:", btLampkaWentZaluzje },
{ "i-trainheating:", btLampkaOgrzewanieSkladu },
{ "i-security_aware:", btLampkaCzuwaka },
{ "i-security_cabsignal:", btLampkaSHP },
{ "i-door_left:", btLampkaDoorLeft },
{ "i-door_right:", btLampkaDoorRight },
{ "i-departure_signal:", btLampkaDepartureSignal },
{ "i-reserve:", btLampkaRezerwa },
{ "i-scnd:", btLampkaBoczniki },
{ "i-scnd1:", btLampkaBocznik1 },
{ "i-scnd2:", btLampkaBocznik2 },
{ "i-scnd3:", btLampkaBocznik3 },
{ "i-scnd4:", btLampkaBocznik4 },
{ "i-braking:", btLampkaHamienie },
{ "i-dynamicbrake:", btLampkaED },
{ "i-braking-ezt:", btLampkaHamowanie1zes },
{ "i-braking-ezt2:", btLampkaHamowanie2zes },
{ "i-compressor:", btLampkaSprezarka },
{ "i-compressorb:", btLampkaSprezarkaB },
{ "i-voltbrake:", btLampkaNapNastHam },
{ "i-mainbreakerb:", btLampkaWylSzybkiB },
{ "i-resistorsb:", btLampkaOporyB },
{ "i-contactorsb:", btLampkaStycznB },
{ "i-conv_ovldb:", btLampkaNadmPrzetwB },
{ "i-converterb:", btLampkaPrzetwB },
{ "i-forward:", btLampkaForward },
{ "i-backward:", btLampkaBackward },
{ "i-upperlight:", btLampkaUpperLight },
{ "i-leftlight:", btLampkaLeftLight },
{ "i-rightlight:", btLampkaRightLight },
{ "i-leftend:", btLampkaLeftEndLight },
{ "i-rightend:", btLampkaRightEndLight },
{ "i-rearupperlight:", btLampkaRearUpperLight },
{ "i-rearleftlight:", btLampkaRearLeftLight },
{ "i-rearrightlight:", btLampkaRearRightLight },
{ "i-rearleftend:", btLampkaRearLeftEndLight },
{ "i-rearrightend:", btLampkaRearRightEndLight },
{ "i-cablight:", btCabLight }
};
auto lookup = lights.find( Label );
if( lookup != lights.end() ) {
lookup->second.Load( Parser, DynamicObject->mdKabina );
} }
else if (Label == "i-maxftt:")
{ else if( Label == "i-instrumentlight:" ) {
btLampkaPrzekrMaxSila.Load(Parser, DynamicObject->mdKabina); btInstrumentLight.Load( Parser, DynamicObject->mdKabina, DynamicObject->mdModel );
}
else if (Label == "i-radio:")
{
btLampkaRadio.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-manual_brake:")
{
btLampkaHamulecReczny.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-door_blocked:")
{
btLampkaBlokadaDrzwi.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-slippery:")
{
btLampkaPoslizg.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-contactors:")
{
btLampkaStyczn.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-conv_ovld:")
{
btLampkaNadmPrzetw.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-converter:")
{
btLampkaPrzetw.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-diff_relay:")
{
btLampkaPrzekRozn.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-diff_relay2:")
{
btLampkaPrzekRoznPom.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-motor_ovld:")
{
btLampkaNadmSil.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-train_controll:")
{
btLampkaUkrotnienie.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-brake_delay_r:")
{
btLampkaHamPosp.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-mainbreaker:")
{
btLampkaWylSzybki.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-vent_ovld:")
{
btLampkaNadmWent.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-comp_ovld:")
{
btLampkaNadmSpr.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-resistors:")
{
btLampkaOpory.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-no_resistors:")
{
btLampkaBezoporowa.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-no_resistors_b:")
{
btLampkaBezoporowaB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-highcurrent:")
{
btLampkaWysRozr.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-instrumentlight:")
{
btInstrumentLight.Load(Parser, DynamicObject->mdKabina, DynamicObject->mdModel);
InstrumentLightType = 0; InstrumentLightType = 0;
} }
else if (Label == "i-instrumentlight_M:") else if( Label == "i-instrumentlight_M:" ) {
{ btInstrumentLight.Load( Parser, DynamicObject->mdKabina, DynamicObject->mdModel );
btInstrumentLight.Load(Parser, DynamicObject->mdKabina, DynamicObject->mdModel);
InstrumentLightType = 1; InstrumentLightType = 1;
} }
else if (Label == "i-instrumentlight_C:") else if( Label == "i-instrumentlight_C:" ) {
{ btInstrumentLight.Load( Parser, DynamicObject->mdKabina, DynamicObject->mdModel );
btInstrumentLight.Load(Parser, DynamicObject->mdKabina, DynamicObject->mdModel);
InstrumentLightType = 2; InstrumentLightType = 2;
} }
else if (Label == "i-vent_trim:")
{
btLampkaWentZaluzje.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-trainheating:")
{
btLampkaOgrzewanieSkladu.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-security_aware:")
{
btLampkaCzuwaka.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-security_cabsignal:")
{
btLampkaSHP.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-door_left:")
{
btLampkaDoorLeft.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-door_right:")
{
btLampkaDoorRight.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-departure_signal:")
{
btLampkaDepartureSignal.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-reserve:")
{
btLampkaRezerwa.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-scnd:")
{
btLampkaBoczniki.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-scnd1:")
{
btLampkaBocznik1.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-scnd2:")
{
btLampkaBocznik2.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-scnd3:")
{
btLampkaBocznik3.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-scnd4:")
{
btLampkaBocznik4.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-braking:")
{
btLampkaHamienie.Load(Parser, DynamicObject->mdKabina);
}
else if( Label == "i-dynamicbrake:" ) {
btLampkaED.Load( Parser, DynamicObject->mdKabina );
}
else if (Label == "i-braking-ezt:")
{
btLampkaHamowanie1zes.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-braking-ezt2:")
{
btLampkaHamowanie2zes.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-compressor:")
{
btLampkaSprezarka.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-compressorb:")
{
btLampkaSprezarkaB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-voltbrake:")
{
btLampkaNapNastHam.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-mainbreakerb:")
{
btLampkaWylSzybkiB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-resistorsb:")
{
btLampkaOporyB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-contactorsb:")
{
btLampkaStycznB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-conv_ovldb:")
{
btLampkaNadmPrzetwB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-converterb:")
{
btLampkaPrzetwB.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-forward:")
{
btLampkaForward.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-backward:")
{
btLampkaBackward.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-cablight:")
{ // hunter-171012
btCabLight.Load(Parser, DynamicObject->mdKabina);
}
else if (Label == "i-doors:") else if (Label == "i-doors:")
{ {
int i = Parser.getToken<int>() - 1; int i = Parser.getToken<int>() - 1;
@@ -7039,15 +6982,10 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
return true; return true;
} }
// initializes a gauge matching provided label. returns: true if the label was found, false // initializes a gauge matching provided label. returns: true if the label was found, false otherwise
// otherwise
// NOTE: this is temporary work-around for compiler else-if limit
// TODO: refactor the cabin controls into some sensible structure // TODO: refactor the cabin controls into some sensible structure
bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex) { bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int const Cabindex) {
/*
TGauge *gg { nullptr }; // roboczy wskaźnik na obiekt animujący gałkę
*/
std::unordered_map<std::string, TGauge &> const gauges = { std::unordered_map<std::string, TGauge &> const gauges = {
{ "mainctrl:", ggMainCtrl }, { "mainctrl:", ggMainCtrl },
{ "scndctrl:", ggScndCtrl }, { "scndctrl:", ggScndCtrl },

13
Train.h
View File

@@ -171,6 +171,8 @@ class TTrain
static void OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command ); static void OnCommand_motoroverloadrelaythresholdtoggle( TTrain *Train, command_data const &Command );
static void OnCommand_motoroverloadrelayreset( TTrain *Train, command_data const &Command ); static void OnCommand_motoroverloadrelayreset( 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_lightspresetactivatenext( TTrain *Train, command_data const &Command );
static void OnCommand_lightspresetactivateprevious( 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 );
static void OnCommand_headlighttoggleright( TTrain *Train, command_data const &Command ); static void OnCommand_headlighttoggleright( TTrain *Train, command_data const &Command );
static void OnCommand_headlighttoggleupper( TTrain *Train, command_data const &Command ); static void OnCommand_headlighttoggleupper( TTrain *Train, command_data const &Command );
@@ -366,6 +368,17 @@ public: // reszta może by?publiczna
TButton btLampkaHamulecReczny; TButton btLampkaHamulecReczny;
TButton btLampkaForward; // Ra: lampki w przód i w ty?dla komputerowych kabin TButton btLampkaForward; // Ra: lampki w przód i w ty?dla komputerowych kabin
TButton btLampkaBackward; TButton btLampkaBackward;
// light indicators
TButton btLampkaUpperLight;
TButton btLampkaLeftLight;
TButton btLampkaRightLight;
TButton btLampkaLeftEndLight;
TButton btLampkaRightEndLight;
TButton btLampkaRearUpperLight;
TButton btLampkaRearLeftLight;
TButton btLampkaRearRightLight;
TButton btLampkaRearLeftEndLight;
TButton btLampkaRearRightEndLight;
TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine
// Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys // Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys

View File

@@ -682,7 +682,7 @@ void TWorld::OnKeyDown(int cKey)
*/ */
if (cKey == Global::Keys[k_Heating]) // Ra: klawisz nie jest najszczęśliwszy if (cKey == Global::Keys[k_Heating]) // Ra: klawisz nie jest najszczęśliwszy
{ // zmiana próżny/ładowny; Ra: zabrane z kabiny { // zmiana próżny/ładowny; Ra: zabrane z kabiny
auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 20, false, false ) ) }; auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 10, false, false ) ) };
if (vehicle) if (vehicle)
{ {
if (Global::shiftState ? vehicle->MoverParameters->IncBrakeMult() : if (Global::shiftState ? vehicle->MoverParameters->IncBrakeMult() :
@@ -695,7 +695,7 @@ void TWorld::OnKeyDown(int cKey)
} }
else if (cKey == Global::Keys[k_EndSign]) else if (cKey == Global::Keys[k_EndSign])
{ // Ra 2014-07: zabrane z kabiny { // Ra 2014-07: zabrane z kabiny
auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 20, false, true ) ) }; auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 10, false, true ) ) };
if (vehicle) if (vehicle)
{ {
int CouplNr = (LengthSquared3(vehicle->HeadPosition() - Camera.Pos) > int CouplNr = (LengthSquared3(vehicle->HeadPosition() - Camera.Pos) >
@@ -724,7 +724,7 @@ void TWorld::OnKeyDown(int cKey)
} }
else if (cKey == Global::Keys[k_IncLocalBrakeLevel]) else if (cKey == Global::Keys[k_IncLocalBrakeLevel])
{ // zahamowanie dowolnego pojazdu { // zahamowanie dowolnego pojazdu
auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 20, false, false ) ) }; auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 10, false, false ) ) };
if (vehicle) if (vehicle)
{ {
if (Global::ctrlState) if (Global::ctrlState)
@@ -743,7 +743,7 @@ void TWorld::OnKeyDown(int cKey)
} }
else if (cKey == Global::Keys[k_DecLocalBrakeLevel]) else if (cKey == Global::Keys[k_DecLocalBrakeLevel])
{ // odhamowanie dowolnego pojazdu { // odhamowanie dowolnego pojazdu
auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 20, false, false ) ) }; auto *vehicle { std::get<TDynamicObject *>( simulation::Region->find_vehicle( Global::pCameraPosition, 10, false, false ) ) };
if (vehicle) if (vehicle)
{ {
if (Global::ctrlState) if (Global::ctrlState)

View File

@@ -105,6 +105,8 @@ const int k_ProgramHelp = 48;
/* /*
// const int k_FreeFlyMode= 59; // const int k_FreeFlyMode= 59;
*/ */
{ "lightspresetactivatenext", command_target::vehicle },
{ "lightspresetactivateprevious", command_target::vehicle },
{ "headlighttoggleleft", command_target::vehicle }, { "headlighttoggleleft", command_target::vehicle },
{ "headlighttoggleright", command_target::vehicle }, { "headlighttoggleright", command_target::vehicle },
{ "headlighttoggleupper", command_target::vehicle }, { "headlighttoggleupper", command_target::vehicle },

View File

@@ -100,6 +100,8 @@ const int k_ProgramHelp = 48;
/* /*
// const int k_FreeFlyMode= 59; // const int k_FreeFlyMode= 59;
*/ */
lightspresetactivatenext,
lightspresetactivateprevious,
headlighttoggleleft, headlighttoggleleft,
headlighttoggleright, headlighttoggleright,
headlighttoggleupper, headlighttoggleupper,
@@ -117,10 +119,6 @@ const int k_ProgramHelp = 48;
interiorlightdimtoggle, interiorlightdimtoggle,
instrumentlighttoggle, instrumentlighttoggle,
/* /*
const int k_Univ1 = 66;
const int k_Univ2 = 67;
const int k_Univ3 = 68;
const int k_Univ4 = 69;
const int k_EndSign = 70; const int k_EndSign = 70;
const int k_Active = 71; const int k_Active = 71;
*/ */

View File

@@ -318,6 +318,10 @@ const int k_ProgramHelp = 48;
/* /*
// const int k_FreeFlyMode= 59; // const int k_FreeFlyMode= 59;
*/ */
// lightspresetactivatenext
{ GLFW_KEY_T | keymodifier::shift },
// lightspresetactivateprevious
{ GLFW_KEY_T },
// headlighttoggleleft // headlighttoggleleft
{ GLFW_KEY_Y }, { GLFW_KEY_Y },
// headlighttoggleright // headlighttoggleright

View File

@@ -304,8 +304,8 @@ mouse_input::default_bindings() {
user_command::redmarkertoggleright, user_command::redmarkertoggleright,
user_command::none } }, user_command::none } },
{ "lights_sw:", { { "lights_sw:", {
user_command::none, user_command::lightspresetactivatenext,
user_command::none } }, // TODO: implement commands for lights controller user_command::lightspresetactivateprevious } },
{ "rearupperlight_sw:", { { "rearupperlight_sw:", {
user_command::headlighttogglerearupper, user_command::headlighttogglerearupper,
user_command::none } }, user_command::none } },

View File

@@ -872,7 +872,12 @@ basic_region::update_traction( TDynamicObject *Vehicle, int const Pantographinde
void void
basic_region::serialize( std::string const &Scenariofile ) const { basic_region::serialize( std::string const &Scenariofile ) const {
auto filename { Global::asCurrentSceneryPath + Scenariofile }; auto filename { Scenariofile };
if( filename[ 0 ] == '$' ) {
// trim leading $ char rainsted utility may add to the base name for modified .scn files
filename.erase( 0, 1 );
}
filename = Global::asCurrentSceneryPath + filename;
if( ( filename.rfind( '.' ) != std::string::npos ) if( ( filename.rfind( '.' ) != std::string::npos )
&& ( filename.rfind( '.' ) != filename.rfind( ".." ) + 1 ) ) { && ( filename.rfind( '.' ) != filename.rfind( ".." ) + 1 ) ) {
// trim extension, it's typically going to be for different file type // trim extension, it's typically going to be for different file type
@@ -910,7 +915,12 @@ basic_region::serialize( std::string const &Scenariofile ) const {
bool bool
basic_region::deserialize( std::string const &Scenariofile ) { basic_region::deserialize( std::string const &Scenariofile ) {
auto filename { Global::asCurrentSceneryPath + Scenariofile }; auto filename { Scenariofile };
if( filename[ 0 ] == '$' ) {
// trim leading $ char rainsted utility may add to the base name for modified .scn files
filename.erase( 0, 1 );
}
filename = Global::asCurrentSceneryPath + filename;
if( ( filename.rfind( '.' ) != std::string::npos ) if( ( filename.rfind( '.' ) != std::string::npos )
&& ( filename.rfind( '.' ) != filename.rfind( ".." ) + 1 ) ) { && ( filename.rfind( '.' ) != filename.rfind( ".." ) + 1 ) ) {
// trim extension, it's typically going to be for different file type // trim extension, it's typically going to be for different file type

View File

@@ -52,7 +52,7 @@ Type_
clamp_circular( Type_ Value, Type_ const Range = static_cast<Type_>(360) ) { clamp_circular( Type_ Value, Type_ const Range = static_cast<Type_>(360) ) {
Value -= Range * (int)( Value / Range ); // clamp the range to 0-360 Value -= Range * (int)( Value / Range ); // clamp the range to 0-360
if( Value < 0.0 ) Value += Range; if( Value < Type_(0) ) Value += Range;
return Value; return Value;
} }

View File

@@ -1,5 +1,5 @@
#pragma once #pragma once
#define VERSION_MAJOR 17 #define VERSION_MAJOR 17
#define VERSION_MINOR 1031 #define VERSION_MINOR 1102
#define VERSION_REVISION 0 #define VERSION_REVISION 0