mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-17 23:39:18 +02:00
Modern dimmer overhaul
Now it supports custom positions
This commit is contained in:
56
DynObj.cpp
56
DynObj.cpp
@@ -7366,42 +7366,36 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
||||
bool tLeft = MoverParameters->iLights[vehicleend] & (light::auxiliary_left | light::headlight_left); // roboczo czy jakiekolwiek swiatlo z lewej jest zapalone
|
||||
bool tRight = MoverParameters->iLights[vehicleend] & (light::auxiliary_right | light::headlight_right); // a tu z prawej
|
||||
if (Controller == Humandriver) {
|
||||
switch (MoverParameters->modernDimmerState)
|
||||
|
||||
int ¤tDimPos = MoverParameters->modernDimmerPosition;
|
||||
auto &dimmerPositions = MoverParameters->dimPositions;
|
||||
TMoverParameters::dimPosition dps = dimmerPositions[currentDimPos];
|
||||
|
||||
// domyślnie
|
||||
HighBeamLights = false;
|
||||
DimHeadlights = false;
|
||||
|
||||
// obsługa OFF
|
||||
if (dps.isOff)
|
||||
{
|
||||
case 0:
|
||||
// wylaczone
|
||||
MoverParameters->iLights[vehicleend] &= 0 | light::rearendsignals; // zostawiamy tylko tabliczki jesli sa
|
||||
HighBeamLights = false;
|
||||
DimHeadlights = false;
|
||||
break;
|
||||
case 1:
|
||||
// przyciemnione normalne
|
||||
DimHeadlights = true; // odpalamy przyciemnienie normalnych reflektorow
|
||||
HighBeamLights = false;
|
||||
break;
|
||||
case 3:
|
||||
// dlugie przyciemnione
|
||||
DimHeadlights = true;
|
||||
HighBeamLights = true;
|
||||
MoverParameters->iLights[vehicleend] &=
|
||||
light::headlight_upper | light::rearendsignals | light::redmarker_left | light::redmarker_right | light::rearendsignals; // nie ruszamy gornych i koncowek
|
||||
MoverParameters->iLights[vehicleend] |= tLeft ? light::highbeamlight_left : 0; // jesli swiatlo z lewej zapalone to odpal dlugie
|
||||
MoverParameters->iLights[vehicleend] |= tRight ? light::highbeamlight_right : 0; // a tu z prawej
|
||||
break;
|
||||
case 4:
|
||||
// zwykle dlugie
|
||||
DimHeadlights = false;
|
||||
HighBeamLights = true;
|
||||
MoverParameters->iLights[vehicleend] &=
|
||||
light::headlight_upper | light::rearendsignals | light::redmarker_left | light::redmarker_right | light::rearendsignals; // nie ruszamy gornych i koncowek
|
||||
MoverParameters->iLights[vehicleend] |= tLeft ? light::highbeamlight_left : 0; // jesli swiatlo z lewej zapalone to odpal dlugie
|
||||
MoverParameters->iLights[vehicleend] |= tRight ? light::highbeamlight_right : 0; // a tu z prawej
|
||||
break;
|
||||
default: // to case 2 - zwykle
|
||||
DimHeadlights = false;
|
||||
HighBeamLights = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// obsługa przyciemnionych
|
||||
DimHeadlights = dps.isDimmed;
|
||||
|
||||
// obsługa długich
|
||||
if (dps.isHighBeam)
|
||||
{
|
||||
HighBeamLights = true;
|
||||
|
||||
MoverParameters->iLights[vehicleend] &=
|
||||
light::headlight_upper | light::rearendsignals | light::redmarker_left | light::redmarker_right | light::rearendsignals; // nie ruszamy gornych i koncowek
|
||||
MoverParameters->iLights[vehicleend] |= tLeft ? light::highbeamlight_left : 0; // jesli swiatlo z lewej zapalone to odpal dlugie
|
||||
MoverParameters->iLights[vehicleend] |= tRight ? light::highbeamlight_right : 0; // a tu z prawej
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1377,6 +1377,7 @@ class TMoverParameters
|
||||
TDESchemeTable DElist;
|
||||
TWiperSchemeTable WiperList;
|
||||
int WiperListSize;
|
||||
int modernWpierListSize;
|
||||
|
||||
double Vadd = 1.0;
|
||||
TMPTRelayTable MPTRelay;
|
||||
@@ -1774,9 +1775,23 @@ class TMoverParameters
|
||||
// 2 - swiatla normalne
|
||||
// 3 - swiatla dlugie przyciemnione
|
||||
// 4 - swiatla dlugie normalne
|
||||
int modernDimmerState{0};
|
||||
bool modernContainOffPos{true};
|
||||
|
||||
struct dimPosition
|
||||
{
|
||||
bool isOff = false;
|
||||
bool isDimmed = false;
|
||||
bool isHighBeam = false;
|
||||
};
|
||||
|
||||
// default positions
|
||||
std::vector<dimPosition> dimPositions = {{false, false, false}, // 0 - Not dimmed
|
||||
{false, true, false}}; // 1 - Dimmed
|
||||
|
||||
int modernDimmerPosition{0};
|
||||
int modernDimmerDefaultPosition{0};
|
||||
//bool modernContainOffPos{true};
|
||||
bool enableModernDimmer {false};
|
||||
bool modernDimmerCanCycle {false};
|
||||
|
||||
// Barwa reflektora
|
||||
int refR{255}; // Czerwony
|
||||
@@ -2067,6 +2082,7 @@ private:
|
||||
void LoadFIZ_FFList( std::string const &Input );
|
||||
void LoadFIZ_WiperList(std::string const &Input);
|
||||
void LoadFIZ_LightsList( std::string const &Input );
|
||||
void LoadFIZ_DimmerList(std::string const &Input);
|
||||
void LoadFIZ_CompressorList(std::string const &Input);
|
||||
void LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparameters, std::string const Prefix, std::string const &Input );
|
||||
TPowerType LoadFIZ_PowerDecode( std::string const &Power );
|
||||
@@ -2088,6 +2104,7 @@ private:
|
||||
bool readFFList( std::string const &line );
|
||||
bool readWWList( std::string const &line );
|
||||
bool readWiperList( std::string const &line );
|
||||
bool readDimmerList(std::string const &line);
|
||||
bool readLightsList( std::string const &Input );
|
||||
bool readCompressorList(std::string const &Input);
|
||||
void BrakeValveDecode( std::string const &s ); //Q 20160719
|
||||
|
||||
@@ -8927,7 +8927,7 @@ bool startBPT;
|
||||
bool startMPT, startMPT0;
|
||||
bool startRLIST, startUCLIST;
|
||||
bool startDIZELMOMENTUMLIST, startDIZELV2NMAXLIST, startHYDROTCLIST, startPMAXLIST;
|
||||
bool startDLIST, startFFLIST, startWWLIST, startWiperList;
|
||||
bool startDLIST, startFFLIST, startWWLIST, startWiperList, startDimmerList;
|
||||
bool startLIGHTSLIST;
|
||||
bool startCOMPRESSORLIST;
|
||||
int LISTLINE;
|
||||
@@ -9298,6 +9298,22 @@ bool TMoverParameters::readWiperList(std::string const& line)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TMoverParameters::readDimmerList(std::string const& line)
|
||||
{
|
||||
cParser parser(line);
|
||||
if (false == parser.getTokens(3, false))
|
||||
{
|
||||
WriteLog("Read DimmerList: arguments missing in line " + std::to_string(LISTLINE + 1));
|
||||
return false;
|
||||
}
|
||||
int idx = LISTLINE++;
|
||||
|
||||
dimPosition dps;
|
||||
parser >> dps.isHighBeam >> dps.isDimmed >> dps.isOff;
|
||||
dimPositions.push_back(dps);
|
||||
return true;
|
||||
}
|
||||
|
||||
// parsowanie WWList
|
||||
bool TMoverParameters::readWWList( std::string const &line ) {
|
||||
|
||||
@@ -9482,6 +9498,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
startFFLIST = false;
|
||||
startWWLIST = false;
|
||||
startWiperList = false;
|
||||
startDimmerList = false;
|
||||
startLIGHTSLIST = false;
|
||||
startCOMPRESSORLIST = false;
|
||||
std::string file = TypeName + ".fiz";
|
||||
@@ -9589,6 +9606,13 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
startWiperList = false;
|
||||
continue;
|
||||
}
|
||||
if (issection("endDimmerList", inputline))
|
||||
{
|
||||
// skonczylismy czytac liste konfiguracji pstryka od przyciemnienia
|
||||
startBPT = false;
|
||||
startDimmerList = false;
|
||||
continue;
|
||||
}
|
||||
if( issection( "END-WWL", inputline ) ) {
|
||||
startBPT = false;
|
||||
startWWLIST = false;
|
||||
@@ -9895,6 +9919,16 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (issection("DimmerList:", inputline))
|
||||
{
|
||||
dimPositions.clear(); // uzywamy customowej listy
|
||||
startBPT = false;
|
||||
startDimmerList = true;
|
||||
fizlines.emplace("DimmerList", inputline);
|
||||
LoadFIZ_DimmerList(inputline);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if( issection( "LightsList:", inputline ) ) {
|
||||
startBPT = false;
|
||||
@@ -9967,6 +10001,10 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
readWiperList(inputline);
|
||||
continue;
|
||||
}
|
||||
if (true == startDimmerList)
|
||||
{
|
||||
readDimmerList(inputline);
|
||||
}
|
||||
if( true == startLIGHTSLIST ) {
|
||||
readLightsList( inputline );
|
||||
continue;
|
||||
@@ -9988,11 +10026,10 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
else
|
||||
result = false;
|
||||
|
||||
if (!modernContainOffPos)
|
||||
modernDimmerState = 2; // jak nie ma opcji wylaczonej to niech sie odpali normalnie
|
||||
// ustawiamy domyslna pozycje dimmera
|
||||
if (!enableModernDimmer)
|
||||
{
|
||||
modernDimmerState = 2;
|
||||
modernDimmerPosition = modernDimmerDefaultPosition;
|
||||
}
|
||||
|
||||
WriteLog("CERROR: " + to_string(ConversionError) + ", SUCCES: " + to_string(result));
|
||||
@@ -11199,7 +11236,6 @@ void TMoverParameters::LoadFIZ_Switches( std::string const &Input ) {
|
||||
extract_value( UniversalResetButtonFlag[ 1 ], "RelayResetButton2", Input, "" );
|
||||
extract_value( UniversalResetButtonFlag[ 2 ], "RelayResetButton3", Input, "" );
|
||||
extract_value(enableModernDimmer, "ModernDimmer", Input, "");
|
||||
extract_value(modernContainOffPos, "ModernDimmerOffPosition", Input, "");
|
||||
// pantograph presets
|
||||
{
|
||||
auto &presets { PantsPreset.first };
|
||||
@@ -11329,6 +11365,12 @@ void TMoverParameters::LoadFIZ_WiperList(std::string const &Input)
|
||||
extract_value(WiperAngle, "Angle", Input, "");
|
||||
}
|
||||
|
||||
void TMoverParameters::LoadFIZ_DimmerList(std::string const &Input)
|
||||
{
|
||||
extract_value(modernWpierListSize, "Size", Input, "");
|
||||
extract_value(modernDimmerCanCycle, "Cycle", Input, "");
|
||||
extract_value(modernDimmerDefaultPosition, "DefaultPos", Input, "");
|
||||
}
|
||||
void TMoverParameters::LoadFIZ_LightsList( std::string const &Input ) {
|
||||
|
||||
extract_value( LightsPosNo, "Size", Input, "" );
|
||||
|
||||
69
Train.cpp
69
Train.cpp
@@ -4890,35 +4890,48 @@ void TTrain::OnCommand_modernlightdimmerincrease(TTrain* Train, command_data con
|
||||
if (Command.action == GLFW_PRESS)
|
||||
{
|
||||
// update modern dimmer state
|
||||
if (Train->mvOccupied->modernDimmerState < 4)
|
||||
Train->mvOccupied->modernDimmerState++;
|
||||
Train->Dynamic()->SetLights();
|
||||
|
||||
auto &dimPos = Train->mvOccupied->modernDimmerPosition;
|
||||
auto dimCount = Train->mvOccupied->dimPositions.size();
|
||||
if (dimPos + 1 < dimCount)
|
||||
dimPos++;
|
||||
else if (Train->mvOccupied->modernDimmerCanCycle)
|
||||
dimPos = 0; // return to 0
|
||||
else
|
||||
return; // już na minimum i nie można cyklicznie
|
||||
// update lightning
|
||||
Train->Dynamic()->SetLights();
|
||||
|
||||
// visual feedback
|
||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||
if (Train->mvOccupied->modernContainOffPos)
|
||||
Train->ggModernLightDimSw.UpdateValue(Train->mvOccupied->modernDimmerState, Train->dsbSwitch);
|
||||
else
|
||||
Train->ggModernLightDimSw.UpdateValue(Train->mvOccupied->modernDimmerState - 1, Train->dsbSwitch);
|
||||
Train->ggModernLightDimSw.UpdateValue(dimPos, Train->dsbSwitch);
|
||||
}
|
||||
}
|
||||
void TTrain::OnCommand_modernlightdimmerdecrease(TTrain *Train, command_data const &Command)
|
||||
{
|
||||
if (!Train->mvOccupied->enableModernDimmer)
|
||||
return; // if modern dimmer is disabled, skip entire command
|
||||
return; // jeśli dimmer jest wyłączony, olewamy
|
||||
|
||||
if (Command.action == GLFW_PRESS)
|
||||
{
|
||||
byte minPos = (Train->mvOccupied->modernContainOffPos) ? 0 : 1; // prevent switching to 0 if its not enabled
|
||||
// update modern dimmer state
|
||||
if (Train->mvOccupied->modernDimmerState > minPos)
|
||||
Train->mvOccupied->modernDimmerState--;
|
||||
Train->Dynamic()->SetLights();
|
||||
// visual feedback
|
||||
auto &dimPos = Train->mvOccupied->modernDimmerPosition;
|
||||
auto dimCount = Train->mvOccupied->dimPositions.size();
|
||||
|
||||
if (dimCount == 0)
|
||||
return;
|
||||
|
||||
if (dimPos > 0)
|
||||
dimPos--;
|
||||
else if (Train->mvOccupied->modernDimmerCanCycle)
|
||||
dimPos = static_cast<int>(dimCount - 1); // ostatnia pozycja
|
||||
else
|
||||
return; // już na minimum i nie można cyklicznie
|
||||
|
||||
Train->Dynamic()->SetLights();
|
||||
|
||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||
if (Train->mvOccupied->modernContainOffPos)
|
||||
Train->ggModernLightDimSw.UpdateValue(Train->mvOccupied->modernDimmerState, Train->dsbSwitch);
|
||||
else
|
||||
Train->ggModernLightDimSw.UpdateValue(Train->mvOccupied->modernDimmerState - 1, Train->dsbSwitch);
|
||||
}
|
||||
Train->ggModernLightDimSw.UpdateValue(dimPos, Train->dsbSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
void TTrain::OnCommand_redmarkertogglerearleft( TTrain *Train, command_data const &Command ) {
|
||||
@@ -5104,7 +5117,7 @@ void TTrain::OnCommand_headlightsdimtoggle( TTrain *Train, command_data const &C
|
||||
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 (Train->DynamicObject->MoverParameters->modernDimmerState == 2)
|
||||
if (Train->DynamicObject->MoverParameters->modernDimmerPosition == 0)
|
||||
{
|
||||
// turn on
|
||||
OnCommand_headlightsdimenable( Train, Command );
|
||||
@@ -5136,8 +5149,7 @@ void TTrain::OnCommand_headlightsdimenable( TTrain *Train, command_data const &C
|
||||
|
||||
Train->DynamicObject->DimHeadlights = true;
|
||||
*/
|
||||
WriteLog("Switch do 1");
|
||||
Train->DynamicObject->MoverParameters->modernDimmerState = 1; // ustawiamy modern dimmer na flage przyciemnienia
|
||||
Train->DynamicObject->MoverParameters->modernDimmerPosition = 1; // ustawiamy modern dimmer na flage przyciemnienia
|
||||
Train->DynamicObject->RaLightsSet(Train->DynamicObject->MoverParameters->iLights[0],
|
||||
Train->DynamicObject->MoverParameters->iLights[1]
|
||||
); // aktualizacja swiatelek
|
||||
@@ -5163,8 +5175,7 @@ void TTrain::OnCommand_headlightsdimdisable( TTrain *Train, command_data const &
|
||||
Train->DynamicObject->DimHeadlights = false;
|
||||
|
||||
*/
|
||||
WriteLog("Switch do 2");
|
||||
Train->DynamicObject->MoverParameters->modernDimmerState = 2; // ustawiamy modern dimmer na flage rozjasnienia
|
||||
Train->DynamicObject->MoverParameters->modernDimmerPosition = 0; // ustawiamy modern dimmer na flage rozjasnienia
|
||||
Train->DynamicObject->RaLightsSet(
|
||||
Train->DynamicObject->MoverParameters->iLights[0],
|
||||
Train->DynamicObject->MoverParameters->iLights[1]
|
||||
@@ -9937,10 +9948,8 @@ void TTrain::set_cab_controls( int const Cab ) {
|
||||
}
|
||||
|
||||
if (ggModernLightDimSw.SubModel != nullptr) {
|
||||
if (mvOccupied->modernContainOffPos)
|
||||
ggModernLightDimSw.PutValue(mvOccupied->modernDimmerState);
|
||||
else
|
||||
ggModernLightDimSw.PutValue(mvOccupied->modernDimmerState - 1);
|
||||
mvOccupied->modernDimmerPosition = mvOccupied->modernDimmerDefaultPosition;
|
||||
ggModernLightDimSw.PutValue(mvOccupied->modernDimmerDefaultPosition);
|
||||
}
|
||||
|
||||
// Init separate buttons
|
||||
@@ -10081,8 +10090,8 @@ void TTrain::set_cab_controls( int const Cab ) {
|
||||
ggRightLightButton.PutValue( -1.f );
|
||||
}
|
||||
}
|
||||
if( 1 == DynamicObject->MoverParameters->modernDimmerState ) {
|
||||
ggDimHeadlightsButton.PutValue( 1.f );
|
||||
if( 1 == DynamicObject->MoverParameters->modernDimmerPosition ) {
|
||||
ggDimHeadlightsButton.PutValue(DynamicObject->MoverParameters->modernDimmerPosition);
|
||||
}
|
||||
// cab lights
|
||||
if( true == Cabine[Cab].bLightDim ) {
|
||||
|
||||
Reference in New Issue
Block a user