mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 22:09:19 +02:00
compressor logic tweaks, battery cab controls, pump sounds
This commit is contained in:
52
DynObj.cpp
52
DynObj.cpp
@@ -3782,7 +3782,8 @@ void TDynamicObject::TurnOff()
|
|||||||
// przeliczanie dźwięków, bo będzie słychać bez wyświetlania sektora z pojazdem
|
// przeliczanie dźwięków, bo będzie słychać bez wyświetlania sektora z pojazdem
|
||||||
void TDynamicObject::RenderSounds() {
|
void TDynamicObject::RenderSounds() {
|
||||||
|
|
||||||
if( Global.iPause != 0 ) { return; }
|
if( false == simulation::is_ready ) { return; }
|
||||||
|
if( Global.iPause != 0 ) { return; }
|
||||||
|
|
||||||
if( ( m_startjoltplayed )
|
if( ( m_startjoltplayed )
|
||||||
&& ( ( std::abs( MoverParameters->AccSVBased ) < 0.01 )
|
&& ( ( std::abs( MoverParameters->AccSVBased ) < 0.01 )
|
||||||
@@ -5094,11 +5095,25 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if( token == "oilpump:" ) {
|
else if( token == "oilpump:" ) {
|
||||||
// plik z dzwiekiem wentylatora, mnozniki i ofsety amp. i czest.
|
|
||||||
m_powertrainsounds.oil_pump.deserialize( parser, sound_type::single );
|
m_powertrainsounds.oil_pump.deserialize( parser, sound_type::single );
|
||||||
m_powertrainsounds.oil_pump.owner( this );
|
m_powertrainsounds.oil_pump.owner( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if( token == "fuelpump:" ) {
|
||||||
|
m_powertrainsounds.fuel_pump.deserialize( parser, sound_type::single );
|
||||||
|
m_powertrainsounds.fuel_pump.owner( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if( token == "waterpump:" ) {
|
||||||
|
m_powertrainsounds.water_pump.deserialize( parser, sound_type::single );
|
||||||
|
m_powertrainsounds.water_pump.owner( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if( token == "waterheater:" ) {
|
||||||
|
m_powertrainsounds.water_heater.deserialize( parser, sound_type::single );
|
||||||
|
m_powertrainsounds.water_heater.owner( this );
|
||||||
|
}
|
||||||
|
|
||||||
else if( ( token == "tractionmotor:" )
|
else if( ( token == "tractionmotor:" )
|
||||||
&& ( MoverParameters->Power > 0 ) ) {
|
&& ( MoverParameters->Power > 0 ) ) {
|
||||||
// plik z dzwiekiem silnika, mnozniki i ofsety amp. i czest.
|
// plik z dzwiekiem silnika, mnozniki i ofsety amp. i czest.
|
||||||
@@ -6611,7 +6626,7 @@ TDynamicObject::powertrain_sounds::position( glm::vec3 const Location ) {
|
|||||||
std::vector<sound_source *> enginesounds = {
|
std::vector<sound_source *> enginesounds = {
|
||||||
&inverter,
|
&inverter,
|
||||||
&motor_relay, &dsbWejscie_na_bezoporow, &motor_parallel, &motor_shuntfield, &rsWentylator,
|
&motor_relay, &dsbWejscie_na_bezoporow, &motor_parallel, &motor_shuntfield, &rsWentylator,
|
||||||
&engine, &engine_ignition, &engine_shutdown, &engine_revving, &engine_turbo, &oil_pump, &radiator_fan, &radiator_fan_aux,
|
&engine, &engine_ignition, &engine_shutdown, &engine_revving, &engine_turbo, &oil_pump, &fuel_pump, &water_pump, &water_heater, &radiator_fan, &radiator_fan_aux,
|
||||||
&transmission, &rsEngageSlippery
|
&transmission, &rsEngageSlippery
|
||||||
};
|
};
|
||||||
for( auto sound : enginesounds ) {
|
for( auto sound : enginesounds ) {
|
||||||
@@ -6639,7 +6654,36 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
else {
|
else {
|
||||||
oil_pump.stop();
|
oil_pump.stop();
|
||||||
}
|
}
|
||||||
|
// fuel pump
|
||||||
|
if( true == Vehicle.FuelPump.is_active ) {
|
||||||
|
fuel_pump
|
||||||
|
.pitch( fuel_pump.m_frequencyoffset + fuel_pump.m_frequencyfactor * 1.f )
|
||||||
|
.gain( fuel_pump.m_amplitudeoffset + fuel_pump.m_amplitudefactor * 1.f )
|
||||||
|
.play( sound_flags::exclusive | sound_flags::looping );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fuel_pump.stop();
|
||||||
|
}
|
||||||
|
// water pump
|
||||||
|
if( true == Vehicle.WaterPump.is_active ) {
|
||||||
|
water_pump
|
||||||
|
.pitch( water_pump.m_frequencyoffset + water_pump.m_frequencyfactor * 1.f )
|
||||||
|
.gain( water_pump.m_amplitudeoffset + water_pump.m_amplitudefactor * 1.f )
|
||||||
|
.play( sound_flags::exclusive | sound_flags::looping );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
water_pump.stop();
|
||||||
|
}
|
||||||
|
// water heater
|
||||||
|
if( true == Vehicle.WaterHeater.is_active ) {
|
||||||
|
water_heater
|
||||||
|
.pitch( water_heater.m_frequencyoffset + water_heater.m_frequencyfactor * 1.f )
|
||||||
|
.gain( water_heater.m_amplitudeoffset + water_heater.m_amplitudefactor * 1.f )
|
||||||
|
.play( sound_flags::exclusive | sound_flags::looping );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
water_heater.stop();
|
||||||
|
}
|
||||||
// engine sounds
|
// engine sounds
|
||||||
// ignition
|
// ignition
|
||||||
if( engine_state_last != Vehicle.Mains ) {
|
if( engine_state_last != Vehicle.Mains ) {
|
||||||
|
|||||||
3
DynObj.h
3
DynObj.h
@@ -369,6 +369,9 @@ private:
|
|||||||
sound_source engine_turbo { sound_placement::engine };
|
sound_source engine_turbo { sound_placement::engine };
|
||||||
double engine_turbo_pitch { 1.0 };
|
double engine_turbo_pitch { 1.0 };
|
||||||
sound_source oil_pump { sound_placement::engine };
|
sound_source oil_pump { sound_placement::engine };
|
||||||
|
sound_source fuel_pump { sound_placement::engine };
|
||||||
|
sound_source water_pump { sound_placement::engine };
|
||||||
|
sound_source water_heater { sound_placement::engine };
|
||||||
sound_source radiator_fan { sound_placement::engine };
|
sound_source radiator_fan { sound_placement::engine };
|
||||||
sound_source radiator_fan_aux { sound_placement::engine };
|
sound_source radiator_fan_aux { sound_placement::engine };
|
||||||
sound_source transmission { sound_placement::engine };
|
sound_source transmission { sound_placement::engine };
|
||||||
|
|||||||
@@ -1281,6 +1281,7 @@ public:
|
|||||||
bool CompressorAllow = false; /*! zezwolenie na uruchomienie sprezarki NBMX*/
|
bool CompressorAllow = false; /*! zezwolenie na uruchomienie sprezarki NBMX*/
|
||||||
bool CompressorAllowLocal{ true }; // local device state override (most units don't have this fitted so it's set to true not to intefere)
|
bool CompressorAllowLocal{ true }; // local device state override (most units don't have this fitted so it's set to true not to intefere)
|
||||||
bool CompressorGovernorLock{ false }; // indicates whether compressor pressure switch was activated due to reaching cut-out pressure
|
bool CompressorGovernorLock{ false }; // indicates whether compressor pressure switch was activated due to reaching cut-out pressure
|
||||||
|
bool CompressorTankValve{ false }; // indicates excessive pressure is vented from compressor tank directly and instantly
|
||||||
start_t CompressorStart{ start_t::manual }; // whether the compressor is started manually, or another way
|
start_t CompressorStart{ start_t::manual }; // whether the compressor is started manually, or another way
|
||||||
start_t PantographCompressorStart{ start_t::manual };
|
start_t PantographCompressorStart{ start_t::manual };
|
||||||
// TODO converter parameters, for when we start cleaning up mover parameters
|
// TODO converter parameters, for when we start cleaning up mover parameters
|
||||||
|
|||||||
@@ -3707,6 +3707,8 @@ void TMoverParameters::CompressorCheck(double dt) {
|
|||||||
|
|
||||||
CompressedVolume = std::max( 0.0, CompressedVolume - dt * AirLeakRate * 0.1 ); // nieszczelności: 0.001=1l/s
|
CompressedVolume = std::max( 0.0, CompressedVolume - dt * AirLeakRate * 0.1 ); // nieszczelności: 0.001=1l/s
|
||||||
|
|
||||||
|
Compressor = CompressedVolume / VeselVolume;
|
||||||
|
|
||||||
// assorted operational logic
|
// assorted operational logic
|
||||||
auto const MaxCompressorF { CompressorList[ TCompressorList::cl_MaxFactor ][ CompressorListPos ] * MaxCompressor };
|
auto const MaxCompressorF { CompressorList[ TCompressorList::cl_MaxFactor ][ CompressorListPos ] * MaxCompressor };
|
||||||
auto const MinCompressorF { CompressorList[ TCompressorList::cl_MinFactor ][ CompressorListPos ] * MinCompressor };
|
auto const MinCompressorF { CompressorList[ TCompressorList::cl_MinFactor ][ CompressorListPos ] * MinCompressor };
|
||||||
@@ -3792,7 +3794,8 @@ void TMoverParameters::CompressorCheck(double dt) {
|
|||||||
CompressorSpeedF
|
CompressorSpeedF
|
||||||
* ( 2.0 * MaxCompressorF - Compressor ) / MaxCompressorF
|
* ( 2.0 * MaxCompressorF - Compressor ) / MaxCompressorF
|
||||||
* enginefactor
|
* enginefactor
|
||||||
* dt;
|
* dt
|
||||||
|
* ( CompressorGovernorLock ? 0.0 : 1.0 ); // with the lock active air is vented out
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
@@ -3806,10 +3809,16 @@ void TMoverParameters::CompressorCheck(double dt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( pressureistoohigh )
|
if( ( pressureistoohigh )
|
||||||
&& ( false == governorlockispresent ) ) {
|
&& ( ( false == governorlockispresent ) || ( CompressorPower == 3 ) ) ) {
|
||||||
// vent some air out if there's no governor lock to stop the compressor from exceeding acceptable pressure level
|
// vent some air out if there's no governor lock to stop the compressor from exceeding acceptable pressure level
|
||||||
SetFlag( SoundFlag, sound::relay | sound::loud );
|
SetFlag( SoundFlag, sound::relay | sound::loud );
|
||||||
CompressedVolume *= 0.8;
|
CompressedVolume *= (
|
||||||
|
false == governorlockispresent ? 0.80 : // arbitrary amount
|
||||||
|
CompressorTankValve ? MinCompressorF / MaxCompressorF : // drop to mincompressor level
|
||||||
|
0.999 ); // HACK: drop a tiny bit so the sound doesn't trigger repeatedly
|
||||||
|
if( ( false == governorlockispresent ) || ( CompressorTankValve ) ) {
|
||||||
|
CompressorGovernorLock = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę
|
// tymczasowo tylko obciążenie sprężarki, tak z 5A na sprężarkę
|
||||||
@@ -9221,6 +9230,7 @@ void TMoverParameters::LoadFIZ_Brake( std::string const &line ) {
|
|||||||
*/
|
*/
|
||||||
extract_value( MinCompressor, "MinCP", line, "" );
|
extract_value( MinCompressor, "MinCP", line, "" );
|
||||||
extract_value( MaxCompressor, "MaxCP", line, "" );
|
extract_value( MaxCompressor, "MaxCP", line, "" );
|
||||||
|
extract_value( CompressorTankValve, "CompressorTankValve", line, "" );
|
||||||
extract_value( CompressorSpeed, "CompressorSpeed", line, "" );
|
extract_value( CompressorSpeed, "CompressorSpeed", line, "" );
|
||||||
extract_value( EmergencyValveOff, "MinEVP", line, "" );
|
extract_value( EmergencyValveOff, "MinEVP", line, "" );
|
||||||
extract_value( EmergencyValveOn, "MaxEVP", line, "" );
|
extract_value( EmergencyValveOn, "MaxEVP", line, "" );
|
||||||
|
|||||||
29
Train.cpp
29
Train.cpp
@@ -1932,7 +1932,8 @@ void TTrain::OnCommand_batteryenable( TTrain *Train, command_data const &Command
|
|||||||
|
|
||||||
if( Command.action == GLFW_PRESS ) {
|
if( Command.action == GLFW_PRESS ) {
|
||||||
// visual feedback
|
// visual feedback
|
||||||
Train->ggBatteryButton.UpdateValue( 1.0, Train->dsbSwitch );
|
Train->ggBatteryButton.UpdateValue( 1.0f, Train->dsbSwitch );
|
||||||
|
Train->ggBatteryOnButton.UpdateValue( 1.0f, Train->dsbSwitch );
|
||||||
|
|
||||||
if( true == Train->mvOccupied->Battery ) { return; } // already on
|
if( true == Train->mvOccupied->Battery ) { return; } // already on
|
||||||
|
|
||||||
@@ -1953,6 +1954,7 @@ void TTrain::OnCommand_batteryenable( TTrain *Train, command_data const &Command
|
|||||||
// return the switch to neutral position
|
// return the switch to neutral position
|
||||||
Train->ggBatteryButton.UpdateValue( 0.5f );
|
Train->ggBatteryButton.UpdateValue( 0.5f );
|
||||||
}
|
}
|
||||||
|
Train->ggBatteryOnButton.UpdateValue( 0.0f, Train->dsbSwitch );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1960,7 +1962,8 @@ void TTrain::OnCommand_batterydisable( TTrain *Train, command_data const &Comman
|
|||||||
// TBD, TODO: ewentualnie zablokować z FIZ, np. w samochodach się nie odłącza akumulatora
|
// TBD, TODO: ewentualnie zablokować z FIZ, np. w samochodach się nie odłącza akumulatora
|
||||||
if( Command.action == GLFW_PRESS ) {
|
if( Command.action == GLFW_PRESS ) {
|
||||||
// visual feedback
|
// visual feedback
|
||||||
Train->ggBatteryButton.UpdateValue( 0.0, Train->dsbSwitch );
|
Train->ggBatteryButton.UpdateValue( 0.0f, Train->dsbSwitch );
|
||||||
|
Train->ggBatteryOffButton.UpdateValue( 1.0f, Train->dsbSwitch );
|
||||||
|
|
||||||
if( false == Train->mvOccupied->Battery ) { return; } // already off
|
if( false == Train->mvOccupied->Battery ) { return; } // already off
|
||||||
|
|
||||||
@@ -1978,6 +1981,7 @@ void TTrain::OnCommand_batterydisable( TTrain *Train, command_data const &Comman
|
|||||||
// return the switch to neutral position
|
// return the switch to neutral position
|
||||||
Train->ggBatteryButton.UpdateValue( 0.5f );
|
Train->ggBatteryButton.UpdateValue( 0.5f );
|
||||||
}
|
}
|
||||||
|
Train->ggBatteryOffButton.UpdateValue( 0.0f, Train->dsbSwitch );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2279,10 +2283,11 @@ void TTrain::OnCommand_pantographlowerall( TTrain *Train, command_data const &Co
|
|||||||
|
|
||||||
void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_data const &Command ) {
|
void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_data const &Command ) {
|
||||||
|
|
||||||
if( ( Train->mvControlled->TrainType == dt_EZT ?
|
if( ( Train->ggPantCompressorValve.SubModel == nullptr )
|
||||||
( Train->mvControlled != Train->mvOccupied ) :
|
&& ( Train->mvControlled->TrainType == dt_EZT ?
|
||||||
( Train->iCabn != 0 ) ) ) {
|
( Train->mvControlled != Train->mvOccupied ) :
|
||||||
// tylko w maszynowym
|
( Train->iCabn != 0 ) ) ) {
|
||||||
|
// tylko w maszynowym, unless actual device is present
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2305,7 +2310,8 @@ void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_d
|
|||||||
|
|
||||||
void TTrain::OnCommand_pantographcompressoractivate( TTrain *Train, command_data const &Command ) {
|
void TTrain::OnCommand_pantographcompressoractivate( TTrain *Train, command_data const &Command ) {
|
||||||
|
|
||||||
if( ( Train->mvControlled->TrainType == dt_EZT ?
|
if( ( Train->ggPantCompressorValve.SubModel == nullptr )
|
||||||
|
&& ( Train->mvControlled->TrainType == dt_EZT ?
|
||||||
( Train->mvControlled != Train->mvOccupied ) :
|
( Train->mvControlled != Train->mvOccupied ) :
|
||||||
( Train->iCabn != 0 ) ) ) {
|
( Train->iCabn != 0 ) ) ) {
|
||||||
// tylko w maszynowym
|
// tylko w maszynowym
|
||||||
@@ -6737,6 +6743,8 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
ggCabLightButton.Update();
|
ggCabLightButton.Update();
|
||||||
ggCabLightDimButton.Update();
|
ggCabLightDimButton.Update();
|
||||||
ggBatteryButton.Update();
|
ggBatteryButton.Update();
|
||||||
|
ggBatteryOnButton.Update();
|
||||||
|
ggBatteryOffButton.Update();
|
||||||
|
|
||||||
ggWaterPumpBreakerButton.Update();
|
ggWaterPumpBreakerButton.Update();
|
||||||
ggWaterPumpButton.Update();
|
ggWaterPumpButton.Update();
|
||||||
@@ -7942,6 +7950,8 @@ void TTrain::clear_cab_controls()
|
|||||||
ggCabLightButton.Clear();
|
ggCabLightButton.Clear();
|
||||||
ggCabLightDimButton.Clear();
|
ggCabLightDimButton.Clear();
|
||||||
ggBatteryButton.Clear();
|
ggBatteryButton.Clear();
|
||||||
|
ggBatteryOnButton.Clear();
|
||||||
|
ggBatteryOffButton.Clear();
|
||||||
//-------
|
//-------
|
||||||
ggFuseButton.Clear();
|
ggFuseButton.Clear();
|
||||||
ggConverterFuseButton.Clear();
|
ggConverterFuseButton.Clear();
|
||||||
@@ -8529,7 +8539,8 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co
|
|||||||
std::unordered_map<std::string, bool const *> const autolights = {
|
std::unordered_map<std::string, bool const *> const autolights = {
|
||||||
{ "i-doorpermit_left:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::left : side::right ) ].open_permit },
|
{ "i-doorpermit_left:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::left : side::right ) ].open_permit },
|
||||||
{ "i-doorpermit_right:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::right : side::left ) ].open_permit },
|
{ "i-doorpermit_right:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::right : side::left ) ].open_permit },
|
||||||
{ "i-doorstep:", &mvOccupied->Doors.step_enabled }
|
{ "i-doorstep:", &mvOccupied->Doors.step_enabled },
|
||||||
|
{ "i-mainpipelock:", &mvOccupied->LockPipe }
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
auto lookup = autolights.find( Label );
|
auto lookup = autolights.find( Label );
|
||||||
@@ -8688,6 +8699,8 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
|
|||||||
{ "cablight_sw:", ggCabLightButton },
|
{ "cablight_sw:", ggCabLightButton },
|
||||||
{ "cablightdim_sw:", ggCabLightDimButton },
|
{ "cablightdim_sw:", ggCabLightDimButton },
|
||||||
{ "battery_sw:", ggBatteryButton },
|
{ "battery_sw:", ggBatteryButton },
|
||||||
|
{ "batteryon_sw:", ggBatteryOnButton },
|
||||||
|
{ "batteryoff_sw:", ggBatteryOffButton },
|
||||||
{ "distancecounter_sw:", ggDistanceCounterButton },
|
{ "distancecounter_sw:", ggDistanceCounterButton },
|
||||||
{ "universal0:", ggUniversals[ 0 ] },
|
{ "universal0:", ggUniversals[ 0 ] },
|
||||||
{ "universal1:", ggUniversals[ 1 ] },
|
{ "universal1:", ggUniversals[ 1 ] },
|
||||||
|
|||||||
2
Train.h
2
Train.h
@@ -512,6 +512,8 @@ public: // reszta może by?publiczna
|
|||||||
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
|
TGauge ggCabLightButton; // hunter-091012: przelacznik oswietlania kabiny
|
||||||
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
|
TGauge ggCabLightDimButton; // hunter-091012: przelacznik przyciemnienia
|
||||||
TGauge ggBatteryButton; // Stele 161228 hebelek baterii
|
TGauge ggBatteryButton; // Stele 161228 hebelek baterii
|
||||||
|
TGauge ggBatteryOnButton;
|
||||||
|
TGauge ggBatteryOffButton;
|
||||||
// oswietlenia kabiny
|
// oswietlenia kabiny
|
||||||
|
|
||||||
// NBMX wrzesien 2003 - obsluga drzwi
|
// NBMX wrzesien 2003 - obsluga drzwi
|
||||||
|
|||||||
@@ -821,6 +821,12 @@ drivermouse_input::default_bindings() {
|
|||||||
{ "battery_sw:", {
|
{ "battery_sw:", {
|
||||||
user_command::batterytoggle,
|
user_command::batterytoggle,
|
||||||
user_command::none } },
|
user_command::none } },
|
||||||
|
{ "batteryon_sw:", {
|
||||||
|
user_command::batteryenable,
|
||||||
|
user_command::none } },
|
||||||
|
{ "batteryoff_sw:", {
|
||||||
|
user_command::batterydisable,
|
||||||
|
user_command::none } },
|
||||||
{ "universal0:", {
|
{ "universal0:", {
|
||||||
user_command::generictoggle0,
|
user_command::generictoggle0,
|
||||||
user_command::none } },
|
user_command::none } },
|
||||||
|
|||||||
@@ -178,6 +178,8 @@ init() {
|
|||||||
"interior light",
|
"interior light",
|
||||||
"interior light dimmer",
|
"interior light dimmer",
|
||||||
"battery",
|
"battery",
|
||||||
|
"battery",
|
||||||
|
"battery",
|
||||||
"interactive part",
|
"interactive part",
|
||||||
"interactive part",
|
"interactive part",
|
||||||
"interactive part",
|
"interactive part",
|
||||||
@@ -346,6 +348,8 @@ init() {
|
|||||||
"oswietlenie kabiny",
|
"oswietlenie kabiny",
|
||||||
"przyciemnienie oswietlenia kabiny",
|
"przyciemnienie oswietlenia kabiny",
|
||||||
"bateria",
|
"bateria",
|
||||||
|
"bateria",
|
||||||
|
"bateria",
|
||||||
"element ruchomy",
|
"element ruchomy",
|
||||||
"element ruchomy",
|
"element ruchomy",
|
||||||
"element ruchomy",
|
"element ruchomy",
|
||||||
@@ -467,6 +471,8 @@ init() {
|
|||||||
"cablight_sw:",
|
"cablight_sw:",
|
||||||
"cablightdim_sw:",
|
"cablightdim_sw:",
|
||||||
"battery_sw:",
|
"battery_sw:",
|
||||||
|
"batteryon_sw:",
|
||||||
|
"batteryoff_sw:",
|
||||||
"universal0:",
|
"universal0:",
|
||||||
"universal1:",
|
"universal1:",
|
||||||
"universal2:",
|
"universal2:",
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ enum string {
|
|||||||
cab_cablight_sw,
|
cab_cablight_sw,
|
||||||
cab_cablightdim_sw,
|
cab_cablightdim_sw,
|
||||||
cab_battery_sw,
|
cab_battery_sw,
|
||||||
|
cab_batteryon_sw,
|
||||||
|
cab_batteryoff_sw,
|
||||||
cab_universal0,
|
cab_universal0,
|
||||||
cab_universal1,
|
cab_universal1,
|
||||||
cab_universal2,
|
cab_universal2,
|
||||||
|
|||||||
Reference in New Issue
Block a user