mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
Improve lights dimming so it wont affect iLights
This commit is contained in:
133
DynObj.cpp
133
DynObj.cpp
@@ -1206,7 +1206,9 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
{ // sygnały czoła pociagu //Ra: wyświetlamy bez
|
||||
// ograniczeń odległości, by były widoczne z
|
||||
// daleka
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_left))
|
||||
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_left)
|
||||
&& !HeadlightsAoff && !HighBeamLights)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp13.TurnxOnWithOnAsFallback();
|
||||
@@ -1216,7 +1218,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_upper))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_upper)
|
||||
&& !HeadlightsAoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp11.TurnxOnWithOnAsFallback();
|
||||
@@ -1226,7 +1229,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_right)
|
||||
&& !HeadlightsAoff && !HighBeamLights)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp12.TurnxOnWithOnAsFallback();
|
||||
@@ -1237,7 +1241,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
btnOn = true;
|
||||
}
|
||||
// else btHeadSignals13.TurnOff();
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_left))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_left)
|
||||
&& !HeadlightsBoff && !HighBeamLights)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp23.TurnxOnWithOnAsFallback();
|
||||
@@ -1247,7 +1252,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_upper))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_upper)
|
||||
&& !HeadlightsBoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp21.TurnxOnWithOnAsFallback();
|
||||
@@ -1257,7 +1263,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_right)
|
||||
&& !HeadlightsBoff && !HighBeamLights)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headlamp22.TurnxOnWithOnAsFallback();
|
||||
@@ -1268,7 +1275,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
btnOn = true;
|
||||
}
|
||||
// auxiliary lights
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_left))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_left) && !HeadlightsAoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headsignal13.TurnxOnWithOnAsFallback();
|
||||
@@ -1278,7 +1285,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_right) && !HeadlightsAoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headsignal12.TurnxOnWithOnAsFallback();
|
||||
@@ -1288,7 +1295,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_left))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_left) && !HeadlightsBoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headsignal23.TurnxOnWithOnAsFallback();
|
||||
@@ -1298,7 +1305,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
btnOn = true;
|
||||
}
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_right) && !HeadlightsBoff)
|
||||
{
|
||||
if( DimHeadlights ) {
|
||||
m_headsignal22.TurnxOnWithOnAsFallback();
|
||||
@@ -1310,23 +1317,27 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
||||
}
|
||||
|
||||
// logika dlugich
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::highbeamlight_left))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_left)
|
||||
&& !HeadlightsAoff && HighBeamLights)
|
||||
m_highbeam13.TurnxOnWithOnAsFallback();
|
||||
else
|
||||
m_highbeam13.TurnOff();
|
||||
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::highbeamlight_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_right)
|
||||
&& !HeadlightsAoff && HighBeamLights)
|
||||
m_highbeam12.TurnxOnWithOnAsFallback();
|
||||
else
|
||||
m_highbeam12.TurnOff();
|
||||
|
||||
// i to samo od dupy strony
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::highbeamlight_left))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_left)
|
||||
&& !HeadlightsBoff && HighBeamLights)
|
||||
m_highbeam23.TurnxOnWithOnAsFallback();
|
||||
else
|
||||
m_highbeam23.TurnOff();
|
||||
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::highbeamlight_right))
|
||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_right)
|
||||
&& !HeadlightsBoff && HighBeamLights)
|
||||
m_highbeam22.TurnxOnWithOnAsFallback();
|
||||
else
|
||||
m_highbeam22.TurnOff();
|
||||
@@ -7378,10 +7389,35 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
||||
// obsługa OFF
|
||||
if (dps.isOff)
|
||||
{
|
||||
MoverParameters->iLights[vehicleend] &= 0 | light::rearendsignals; // zostawiamy tylko tabliczki jesli sa
|
||||
//MoverParameters->iLights[vehicleend] &= 0 | light::rearendsignals; // zostawiamy tylko tabliczki jesli sa
|
||||
HighBeamLights = false;
|
||||
DimHeadlights = false;
|
||||
switch (vehicleend)
|
||||
{
|
||||
case end::front:
|
||||
HeadlightsAoff = true;
|
||||
break;
|
||||
case end::rear:
|
||||
HeadlightsAoff = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (vehicleend)
|
||||
{
|
||||
case end::front:
|
||||
HeadlightsAoff = false;
|
||||
break;
|
||||
case end::rear:
|
||||
HeadlightsAoff = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// obsługa przyciemnionych
|
||||
DimHeadlights = dps.isDimmed;
|
||||
@@ -7390,11 +7426,6 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7405,6 +7436,68 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
||||
}
|
||||
};
|
||||
|
||||
void TDynamicObject::SetLightDimmings()
|
||||
{
|
||||
auto const vehicleend{iDirection > 0 ? end::front : end::rear};
|
||||
if (Controller == Humandriver)
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
// MoverParameters->iLights[vehicleend] &= 0 | light::rearendsignals; // zostawiamy tylko tabliczki jesli sa
|
||||
HighBeamLights = false;
|
||||
DimHeadlights = false;
|
||||
switch (vehicleend)
|
||||
{
|
||||
case end::front:
|
||||
HeadlightsAoff = true;
|
||||
break;
|
||||
case end::rear:
|
||||
HeadlightsAoff = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (vehicleend)
|
||||
{
|
||||
case end::front:
|
||||
HeadlightsAoff = false;
|
||||
break;
|
||||
case end::rear:
|
||||
HeadlightsAoff = false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// obsługa przyciemnionych
|
||||
DimHeadlights = dps.isDimmed;
|
||||
|
||||
// obsługa długich
|
||||
if (dps.isHighBeam)
|
||||
{
|
||||
// obsługa długich
|
||||
if (dps.isHighBeam)
|
||||
{
|
||||
HighBeamLights = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TDynamicObject::has_signal_pc1_on() const {
|
||||
|
||||
auto const vehicleend { iDirection > 0 ? end::front : end::rear };
|
||||
|
||||
3
DynObj.h
3
DynObj.h
@@ -608,6 +608,8 @@ private:
|
||||
public:
|
||||
bool DimHeadlights{ false }; // status of the headlight dimming toggle. NOTE: single toggle for all lights is a simplification. TODO: separate per-light switches
|
||||
bool HighBeamLights { false }; // status of the highbeam toggle
|
||||
bool HeadlightsAoff{false}; // wygaszone swiatelki A
|
||||
bool HeadlightsBoff{false}; // wygaszone swiatelki B
|
||||
// checks whether there's unbroken connection of specified type to specified vehicle
|
||||
bool is_connected( TDynamicObject const *Vehicle, coupling const Coupling = coupling::coupler ) const;
|
||||
TDynamicObject * PrevAny() const;
|
||||
@@ -768,6 +770,7 @@ private:
|
||||
void Damage(char flag);
|
||||
void pants_up();
|
||||
void SetLights();
|
||||
void SetLightDimmings();
|
||||
void RaLightsSet(int head, int rear);
|
||||
int LightList( end const Side ) const { return iInventory[ Side ]; }
|
||||
bool has_signal_pc1_on() const;
|
||||
|
||||
@@ -4938,7 +4938,9 @@ void TTrain::OnCommand_modernlightdimmerincrease(TTrain* Train, command_data con
|
||||
else
|
||||
return; // już na minimum i nie można cyklicznie
|
||||
// update lightning
|
||||
Train->Dynamic()->SetLights();
|
||||
//Train->Dynamic()->SetLights();
|
||||
Train->Dynamic()->SetLightDimmings();
|
||||
|
||||
|
||||
// visual feedback
|
||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||
@@ -4965,7 +4967,8 @@ void TTrain::OnCommand_modernlightdimmerdecrease(TTrain *Train, command_data con
|
||||
else
|
||||
return; // już na minimum i nie można cyklicznie
|
||||
|
||||
Train->Dynamic()->SetLights();
|
||||
//Train->Dynamic()->SetLights();
|
||||
Train->Dynamic()->SetLightDimmings();
|
||||
|
||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||
Train->ggModernLightDimSw.UpdateValue(dimPos, Train->dsbSwitch);
|
||||
|
||||
@@ -69,16 +69,23 @@ light_array::update() {
|
||||
+ ( ( lights & light::highbeamlight_left ) ? 1: 0)
|
||||
+ ( ( lights & light::highbeamlight_right ) ? 1 : 0);
|
||||
|
||||
// set intensity
|
||||
if( light.count > 0 ) {
|
||||
bool isEnabled = light.index == end::front ? !light.owner->HeadlightsAoff : !light.owner->HeadlightsBoff;
|
||||
|
||||
light.intensity = std::max(0.0f, std::log((float)light.count + 1.0f));
|
||||
if (light.owner->DimHeadlights && !light.owner->HighBeamLights) // tylko przyciemnione
|
||||
if (light.owner->DimHeadlights && !light.owner->HighBeamLights && isEnabled) // tylko przyciemnione
|
||||
light.intensity *= light.owner->MoverParameters->dimMultiplier;
|
||||
else if (!light.owner->DimHeadlights && !light.owner->HighBeamLights) // normalne
|
||||
else if (!light.owner->DimHeadlights && !light.owner->HighBeamLights && isEnabled) // normalne
|
||||
light.intensity *= light.owner->MoverParameters->normMultiplier;
|
||||
else if (light.owner->DimHeadlights && light.owner->HighBeamLights) // przyciemnione dlugie
|
||||
else if (light.owner->DimHeadlights && light.owner->HighBeamLights && isEnabled) // przyciemnione dlugie
|
||||
light.intensity *= light.owner->MoverParameters->highDimMultiplier;
|
||||
else if (!light.owner->DimHeadlights && light.owner->HighBeamLights) // dlugie zwykle
|
||||
else if (!light.owner->DimHeadlights && light.owner->HighBeamLights && isEnabled) // dlugie zwykle
|
||||
light.intensity *= light.owner->MoverParameters->highMultiplier;
|
||||
else if (!isEnabled)
|
||||
{
|
||||
light.intensity = 0.0f;
|
||||
}
|
||||
|
||||
// TBD, TODO: intensity can be affected further by other factors
|
||||
light.state = {
|
||||
@@ -94,13 +101,16 @@ light_array::update() {
|
||||
|
||||
if (light.owner->DimHeadlights && !light.owner->HighBeamLights) // tylko przyciemnione
|
||||
light.state *= light.owner->MoverParameters->dimMultiplier;
|
||||
else if (!light.owner->DimHeadlights && !light.owner->HighBeamLights)
|
||||
else if (!light.owner->DimHeadlights && !light.owner->HighBeamLights) // normalne
|
||||
light.state *= light.owner->MoverParameters->normMultiplier;
|
||||
else if (light.owner->DimHeadlights && light.owner->HighBeamLights) // przyciemnione dlugie
|
||||
light.state *= light.owner->MoverParameters->highDimMultiplier;
|
||||
else if (!light.owner->DimHeadlights && light.owner->HighBeamLights) // dlugie zwykle
|
||||
light.state *= light.owner->MoverParameters->highMultiplier;
|
||||
|
||||
else if (!isEnabled)
|
||||
{
|
||||
light.state = glm::vec3{0.f};
|
||||
}
|
||||
}
|
||||
else {
|
||||
light.intensity = 0.0f;
|
||||
|
||||
Reference in New Issue
Block a user