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

voltage relays, additional light cab controls, minor cab control fixes

This commit is contained in:
tmj-fstate
2018-09-12 21:33:40 +02:00
parent 450b60d7bd
commit e881092ca0
11 changed files with 189 additions and 81 deletions

157
Train.cpp
View File

@@ -311,6 +311,8 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::instrumentlighttoggle, &TTrain::OnCommand_instrumentlighttoggle },
{ user_command::instrumentlightenable, &TTrain::OnCommand_instrumentlightenable },
{ user_command::instrumentlightdisable, &TTrain::OnCommand_instrumentlightdisable },
{ user_command::dashboardlighttoggle, &TTrain::OnCommand_dashboardlighttoggle },
{ user_command::timetablelighttoggle, &TTrain::OnCommand_timetablelighttoggle },
{ user_command::doorlocktoggle, &TTrain::OnCommand_doorlocktoggle },
{ user_command::doortoggleleft, &TTrain::OnCommand_doortoggleleft },
{ user_command::doortoggleright, &TTrain::OnCommand_doortoggleright },
@@ -370,7 +372,6 @@ TTrain::TTrain() {
bCabLightDim = false;
//-----
pMechSittingPosition = Math3D::vector3(0, 0, 0); // ABu: 180404
InstrumentLightActive = false; // ABu: 030405
fTachoTimer = 0.0; // włączenie skoków wskazań prędkościomierza
//
@@ -3619,6 +3620,54 @@ void TTrain::OnCommand_instrumentlightdisable( TTrain *Train, command_data const
}
}
void TTrain::OnCommand_dashboardlighttoggle( TTrain *Train, command_data const &Command ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( Command.action != GLFW_PRESS ) { return; }
if( Train->ggDashboardLightButton.SubModel == nullptr ) {
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
WriteLog( "Dashboard Light switch is missing, or wasn't defined" );
return;
}
if( false == Train->DashboardLightActive ) {
// turn on
Train->DashboardLightActive = true;
// visual feedback
Train->ggDashboardLightButton.UpdateValue( 1.0, Train->dsbSwitch );
}
else {
//turn off
Train->DashboardLightActive = false;
// visual feedback
Train->ggDashboardLightButton.UpdateValue( 0.0, Train->dsbSwitch );
}
}
void TTrain::OnCommand_timetablelighttoggle( TTrain *Train, command_data const &Command ) {
// only reacting to press, so the switch doesn't flip back and forth if key is held down
if( Command.action != GLFW_PRESS ) { return; }
if( Train->ggTimetableLightButton.SubModel == nullptr ) {
// TODO: proper control deviced definition for the interiors, that doesn't hinge of presence of 3d submodels
WriteLog( "Timetable Light switch is missing, or wasn't defined" );
return;
}
if( false == Train->TimetableLightActive ) {
// turn on
Train->TimetableLightActive = true;
// visual feedback
Train->ggTimetableLightButton.UpdateValue( 1.0, Train->dsbSwitch );
}
else {
//turn off
Train->TimetableLightActive = false;
// visual feedback
Train->ggTimetableLightButton.UpdateValue( 0.0, Train->dsbSwitch );
}
}
void TTrain::OnCommand_heatingtoggle( TTrain *Train, command_data const &Command ) {
if( Train->ggTrainHeatingButton.SubModel == nullptr ) {
@@ -4830,18 +4879,6 @@ bool TTrain::Update( double const Deltatime )
Console::ValueSet(6, fTachoVelocity);
}
#endif
// hunter-080812: wyrzucanie szybkiego na elektrykach gdy nie ma napiecia przy dowolnym ustawieniu kierunkowego
// Ra: to już jest w T_MoverParameters::TractionForce(), ale zależy od kierunku
if( ( mvControlled->Mains )
&& ( mvControlled->EnginePowerSource.SourceType == TPowerSource::CurrentCollector ) ) {
if( std::max( mvControlled->GetTrainsetVoltage(), std::abs( mvControlled->RunningTraction.TractionVoltage ) ) < 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) {
// TODO: check whether it should affect entire consist for EMU
// TODO: check whether it should happen if there's power supplied alternatively through hvcouplers
// TODO: potentially move this to the mover module, as there isn't much reason to have this dependent on the operator presence
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range_t::unit : range_t::local ) );
}
}
// hunter-091012: swiatlo
if (bCabLight == true)
{
@@ -5290,42 +5327,49 @@ bool TTrain::Update( double const Deltatime )
if (tmp)
if ( mvControlled->Battery || mvControlled->ConverterFlag ) {
btLampkaWylSzybkiB.Turn( tmp->MoverParameters->Mains );
btLampkaWylSzybkiBOff.Turn( false == tmp->MoverParameters->Mains );
auto const *mover { tmp->MoverParameters };
btLampkaOporyB.Turn(tmp->MoverParameters->ResistorsFlagCheck());
btLampkaWylSzybkiB.Turn( mover->Mains );
btLampkaWylSzybkiBOff.Turn( false == mover->Mains );
btLampkaOporyB.Turn(mover->ResistorsFlagCheck());
btLampkaBezoporowaB.Turn(
( true == tmp->MoverParameters->ResistorsFlagCheck() )
|| ( tmp->MoverParameters->MainCtrlActualPos == 0 ) ); // do EU04
( true == mover->ResistorsFlagCheck() )
|| ( mover->MainCtrlActualPos == 0 ) ); // do EU04
if( ( tmp->MoverParameters->StLinFlag )
|| ( tmp->MoverParameters->BrakePress > 2.0 )
|| ( tmp->MoverParameters->PipePress < 0.36 ) ) {
if( ( mover->StLinFlag )
|| ( mover->BrakePress > 2.0 )
|| ( mover->PipePress < 0.36 ) ) {
btLampkaStycznB.Turn( false );
}
else if( tmp->MoverParameters->BrakePress < 1.0 ) {
else if( mover->BrakePress < 1.0 ) {
btLampkaStycznB.Turn( true ); // mozna prowadzic rozruch
}
// hunter-271211: sygnalizacja poslizgu w pierwszym pojezdzie, gdy wystapi w drugim
btLampkaPoslizg.Turn(tmp->MoverParameters->SlippingWheels);
btLampkaPoslizg.Turn(mover->SlippingWheels);
btLampkaSprezarkaB.Turn( tmp->MoverParameters->CompressorFlag ); // mutopsitka dziala
btLampkaSprezarkaBOff.Turn( false == tmp->MoverParameters->CompressorFlag );
btLampkaSprezarkaB.Turn( mover->CompressorFlag ); // mutopsitka dziala
btLampkaSprezarkaBOff.Turn( false == mover->CompressorFlag );
if( mvControlled->Signalling == true ) {
if( tmp->MoverParameters->BrakePress >= 1.45f ) {
if( mover->BrakePress >= 1.45f ) {
btLampkaHamowanie2zes.Turn( true );
}
if( tmp->MoverParameters->BrakePress < 0.75f ) {
if( mover->BrakePress < 0.75f ) {
btLampkaHamowanie2zes.Turn( false );
}
}
else {
btLampkaHamowanie2zes.Turn( false );
}
btLampkaNadmPrzetwB.Turn( tmp->MoverParameters->ConvOvldFlag ); // nadmiarowy przetwornicy?
btLampkaPrzetwB.Turn( tmp->MoverParameters->ConverterFlag ); // zalaczenie przetwornicy
btLampkaPrzetwBOff.Turn( false == tmp->MoverParameters->ConverterFlag );
btLampkaMalfunctionB.Turn( tmp->MoverParameters->dizel_heat.PA );
btLampkaNadmPrzetwB.Turn( mover->ConvOvldFlag ); // nadmiarowy przetwornicy?
btLampkaPrzetwB.Turn( mover->ConverterFlag ); // zalaczenie przetwornicy
btLampkaPrzetwBOff.Turn( false == mover->ConverterFlag );
btLampkaHVoltageB.Turn( mover->NoVoltRelay && mover->OvervoltageRelay );
btLampkaMalfunctionB.Turn( mover->dizel_heat.PA );
// motor fuse indicator turns on if the fuse was blown in any unit under control
if( mover->Mains ) {
btLampkaNadmSil.Turn( btLampkaNadmSil.GetValue() || mover->FuseFlagCheck() );
}
}
else // wylaczone
{
@@ -5340,6 +5384,7 @@ bool TTrain::Update( double const Deltatime )
btLampkaNadmPrzetwB.Turn( false );
btLampkaPrzetwB.Turn( false );
btLampkaPrzetwBOff.Turn( false );
btLampkaHVoltageB.Turn( false );
btLampkaMalfunctionB.Turn( false );
}
}
@@ -5488,25 +5533,15 @@ bool TTrain::Update( double const Deltatime )
//----------
// przelaczniki
// ABu030405 obsluga lampki uniwersalnej:
if( btInstrumentLight.Active() ) // w ogóle jest
if( InstrumentLightActive ) // załączona
switch( InstrumentLightType ) {
case 0:
btInstrumentLight.Turn( mvControlled->Battery || mvControlled->ConverterFlag );
break;
case 1:
btInstrumentLight.Turn( mvControlled->Mains );
break;
case 2:
btInstrumentLight.Turn( mvControlled->ConverterFlag );
break;
default:
btInstrumentLight.Turn( false );
}
else
btInstrumentLight.Turn( false );
// lights
auto const lightpower { (
InstrumentLightType == 0 ? mvControlled->Battery || mvControlled->ConverterFlag :
InstrumentLightType == 1 ? mvControlled->Mains :
InstrumentLightType == 2 ? mvControlled->ConverterFlag :
false ) };
btInstrumentLight.Turn( InstrumentLightActive && lightpower );
btDashboardLight.Turn( DashboardLightActive && lightpower );
btTimetableLight.Turn( TimetableLightActive && lightpower );
// guziki:
ggMainOffButton.Update();
@@ -5566,6 +5601,8 @@ bool TTrain::Update( double const Deltatime )
}
// hunter-091012
ggInstrumentLightButton.Update();
ggDashboardLightButton.Update();
ggTimetableLightButton.Update();
ggCabLightButton.Update();
ggCabLightDimButton.Update();
ggBatteryButton.Update();
@@ -6698,6 +6735,8 @@ void TTrain::clear_cab_controls()
universal.Clear();
}
ggInstrumentLightButton.Clear();
ggDashboardLightButton.Clear();
ggTimetableLightButton.Clear();
// hunter-091012
ggCabLightButton.Clear();
ggCabLightDimButton.Clear();
@@ -6781,6 +6820,8 @@ void TTrain::clear_cab_controls()
btLampkaHamulecReczny.Clear();
btLampkaBlokadaDrzwi.Clear();
btInstrumentLight.Clear();
btDashboardLight.Clear();
btTimetableLight.Clear();
btLampkaWentZaluzje.Clear();
btLampkaDoorLeft.Clear();
btLampkaDoorRight.Clear();
@@ -6794,6 +6835,7 @@ void TTrain::clear_cab_controls()
btLampkaRadiotelefon.Clear();
btLampkaHamienie.Clear();
btLampkaBrakingOff.Clear();
btLampkaED.Clear();
btLampkaBrakeProfileG.Clear();
btLampkaBrakeProfileP.Clear();
btLampkaBrakeProfileR.Clear();
@@ -6803,10 +6845,12 @@ void TTrain::clear_cab_controls()
btLampkaSprezarkaBOff.Clear();
btLampkaFuelPumpOff.Clear();
btLampkaNapNastHam.Clear();
btLampkaOporyB.Clear();
btLampkaStycznB.Clear();
btLampkaHamowanie1zes.Clear();
btLampkaHamowanie2zes.Clear();
btLampkaNadmPrzetwB.Clear();
btLampkaHVoltageB.Clear();
btLampkaForward.Clear();
btLampkaBackward.Clear();
// light indicators
@@ -7001,6 +7045,14 @@ void TTrain::set_cab_controls() {
InstrumentLightActive ?
1.0 :
0.0 ) );
ggDashboardLightButton.PutValue( (
DashboardLightActive ?
1.0 :
0.0 ) );
ggTimetableLightButton.PutValue( (
TimetableLightActive ?
1.0 :
0.0 ) );
// doors
// NOTE: we're relying on the cab models to have switches reversed for the rear cab(?)
ggDoorLeftButton.PutValue( mvOccupied->DoorLeftOpened ? 1.0 : 0.0 );
@@ -7149,6 +7201,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-resistorsb:", btLampkaOporyB },
{ "i-contactorsb:", btLampkaStycznB },
{ "i-conv_ovldb:", btLampkaNadmPrzetwB },
{ "i-hvoltageb:", btLampkaHVoltageB },
{ "i-malfunction:", btLampkaMalfunction },
{ "i-malfunctionb:", btLampkaMalfunctionB },
{ "i-forward:", btLampkaForward },
@@ -7163,6 +7216,8 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
{ "i-rearrightlight:", btLampkaRearRightLight },
{ "i-rearleftend:", btLampkaRearLeftEndLight },
{ "i-rearrightend:", btLampkaRearRightEndLight },
{ "i-dashboardlight:", btDashboardLight },
{ "i-timetablelight:", btTimetableLight },
{ "i-cablight:", btCabLight }
};
auto lookup = lights.find( Label );
@@ -7290,6 +7345,8 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
{ "door_signalling_sw:", ggDoorSignallingButton },
{ "nextcurrent_sw:", ggNextCurrentButton },
{ "instrumentlight_sw:", ggInstrumentLightButton },
{ "dashboardlight_sw:", ggDashboardLightButton },
{ "timetablelight_sw:", ggTimetableLightButton },
{ "cablight_sw:", ggCabLightButton },
{ "cablightdim_sw:", ggCabLightDimButton },
{ "battery_sw:", ggBatteryButton },