mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 00:49:19 +02: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
|
{ // sygnały czoła pociagu //Ra: wyświetlamy bez
|
||||||
// ograniczeń odległości, by były widoczne z
|
// ograniczeń odległości, by były widoczne z
|
||||||
// daleka
|
// daleka
|
||||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_left))
|
|
||||||
|
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_left)
|
||||||
|
&& !HeadlightsAoff && !HighBeamLights)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp13.TurnxOnWithOnAsFallback();
|
m_headlamp13.TurnxOnWithOnAsFallback();
|
||||||
@@ -1216,7 +1218,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_upper))
|
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_upper)
|
||||||
|
&& !HeadlightsAoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp11.TurnxOnWithOnAsFallback();
|
m_headlamp11.TurnxOnWithOnAsFallback();
|
||||||
@@ -1226,7 +1229,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_right))
|
if (TestFlag(MoverParameters->iLights[end::front], light::headlight_right)
|
||||||
|
&& !HeadlightsAoff && !HighBeamLights)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp12.TurnxOnWithOnAsFallback();
|
m_headlamp12.TurnxOnWithOnAsFallback();
|
||||||
@@ -1237,7 +1241,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
// else btHeadSignals13.TurnOff();
|
// 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 ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp23.TurnxOnWithOnAsFallback();
|
m_headlamp23.TurnxOnWithOnAsFallback();
|
||||||
@@ -1247,7 +1252,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_upper))
|
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_upper)
|
||||||
|
&& !HeadlightsBoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp21.TurnxOnWithOnAsFallback();
|
m_headlamp21.TurnxOnWithOnAsFallback();
|
||||||
@@ -1257,7 +1263,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_right))
|
if (TestFlag(MoverParameters->iLights[end::rear], light::headlight_right)
|
||||||
|
&& !HeadlightsBoff && !HighBeamLights)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headlamp22.TurnxOnWithOnAsFallback();
|
m_headlamp22.TurnxOnWithOnAsFallback();
|
||||||
@@ -1268,7 +1275,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
// auxiliary lights
|
// auxiliary lights
|
||||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_left))
|
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_left) && !HeadlightsAoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headsignal13.TurnxOnWithOnAsFallback();
|
m_headsignal13.TurnxOnWithOnAsFallback();
|
||||||
@@ -1278,7 +1285,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_right))
|
if (TestFlag(MoverParameters->iLights[end::front], light::auxiliary_right) && !HeadlightsAoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headsignal12.TurnxOnWithOnAsFallback();
|
m_headsignal12.TurnxOnWithOnAsFallback();
|
||||||
@@ -1288,7 +1295,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_left))
|
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_left) && !HeadlightsBoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headsignal23.TurnxOnWithOnAsFallback();
|
m_headsignal23.TurnxOnWithOnAsFallback();
|
||||||
@@ -1298,7 +1305,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
btnOn = true;
|
btnOn = true;
|
||||||
}
|
}
|
||||||
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_right))
|
if (TestFlag(MoverParameters->iLights[end::rear], light::auxiliary_right) && !HeadlightsBoff)
|
||||||
{
|
{
|
||||||
if( DimHeadlights ) {
|
if( DimHeadlights ) {
|
||||||
m_headsignal22.TurnxOnWithOnAsFallback();
|
m_headsignal22.TurnxOnWithOnAsFallback();
|
||||||
@@ -1310,23 +1317,27 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// logika dlugich
|
// 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();
|
m_highbeam13.TurnxOnWithOnAsFallback();
|
||||||
else
|
else
|
||||||
m_highbeam13.TurnOff();
|
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();
|
m_highbeam12.TurnxOnWithOnAsFallback();
|
||||||
else
|
else
|
||||||
m_highbeam12.TurnOff();
|
m_highbeam12.TurnOff();
|
||||||
|
|
||||||
// i to samo od dupy strony
|
// 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();
|
m_highbeam23.TurnxOnWithOnAsFallback();
|
||||||
else
|
else
|
||||||
m_highbeam23.TurnOff();
|
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();
|
m_highbeam22.TurnxOnWithOnAsFallback();
|
||||||
else
|
else
|
||||||
m_highbeam22.TurnOff();
|
m_highbeam22.TurnOff();
|
||||||
@@ -7378,9 +7389,34 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
|||||||
// obsługa OFF
|
// obsługa OFF
|
||||||
if (dps.isOff)
|
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;
|
HighBeamLights = false;
|
||||||
DimHeadlights = 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
|
// obsługa przyciemnionych
|
||||||
@@ -7390,11 +7426,6 @@ void TDynamicObject::RaLightsSet(int head, int rear)
|
|||||||
if (dps.isHighBeam)
|
if (dps.isHighBeam)
|
||||||
{
|
{
|
||||||
HighBeamLights = 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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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 {
|
bool TDynamicObject::has_signal_pc1_on() const {
|
||||||
|
|
||||||
auto const vehicleend { iDirection > 0 ? end::front : end::rear };
|
auto const vehicleend { iDirection > 0 ? end::front : end::rear };
|
||||||
|
|||||||
3
DynObj.h
3
DynObj.h
@@ -608,6 +608,8 @@ private:
|
|||||||
public:
|
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 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 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
|
// checks whether there's unbroken connection of specified type to specified vehicle
|
||||||
bool is_connected( TDynamicObject const *Vehicle, coupling const Coupling = coupling::coupler ) const;
|
bool is_connected( TDynamicObject const *Vehicle, coupling const Coupling = coupling::coupler ) const;
|
||||||
TDynamicObject * PrevAny() const;
|
TDynamicObject * PrevAny() const;
|
||||||
@@ -768,6 +770,7 @@ private:
|
|||||||
void Damage(char flag);
|
void Damage(char flag);
|
||||||
void pants_up();
|
void pants_up();
|
||||||
void SetLights();
|
void SetLights();
|
||||||
|
void SetLightDimmings();
|
||||||
void RaLightsSet(int head, int rear);
|
void RaLightsSet(int head, int rear);
|
||||||
int LightList( end const Side ) const { return iInventory[ Side ]; }
|
int LightList( end const Side ) const { return iInventory[ Side ]; }
|
||||||
bool has_signal_pc1_on() const;
|
bool has_signal_pc1_on() const;
|
||||||
|
|||||||
@@ -4938,7 +4938,9 @@ void TTrain::OnCommand_modernlightdimmerincrease(TTrain* Train, command_data con
|
|||||||
else
|
else
|
||||||
return; // już na minimum i nie można cyklicznie
|
return; // już na minimum i nie można cyklicznie
|
||||||
// update lightning
|
// update lightning
|
||||||
Train->Dynamic()->SetLights();
|
//Train->Dynamic()->SetLights();
|
||||||
|
Train->Dynamic()->SetLightDimmings();
|
||||||
|
|
||||||
|
|
||||||
// visual feedback
|
// visual feedback
|
||||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||||
@@ -4965,7 +4967,8 @@ void TTrain::OnCommand_modernlightdimmerdecrease(TTrain *Train, command_data con
|
|||||||
else
|
else
|
||||||
return; // już na minimum i nie można cyklicznie
|
return; // już na minimum i nie można cyklicznie
|
||||||
|
|
||||||
Train->Dynamic()->SetLights();
|
//Train->Dynamic()->SetLights();
|
||||||
|
Train->Dynamic()->SetLightDimmings();
|
||||||
|
|
||||||
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
if (Train->ggModernLightDimSw.SubModel != nullptr)
|
||||||
Train->ggModernLightDimSw.UpdateValue(dimPos, Train->dsbSwitch);
|
Train->ggModernLightDimSw.UpdateValue(dimPos, Train->dsbSwitch);
|
||||||
|
|||||||
@@ -69,16 +69,23 @@ light_array::update() {
|
|||||||
+ ( ( lights & light::highbeamlight_left ) ? 1: 0)
|
+ ( ( lights & light::highbeamlight_left ) ? 1: 0)
|
||||||
+ ( ( lights & light::highbeamlight_right ) ? 1 : 0);
|
+ ( ( lights & light::highbeamlight_right ) ? 1 : 0);
|
||||||
|
|
||||||
|
// set intensity
|
||||||
if( light.count > 0 ) {
|
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));
|
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;
|
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;
|
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;
|
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;
|
light.intensity *= light.owner->MoverParameters->highMultiplier;
|
||||||
|
else if (!isEnabled)
|
||||||
|
{
|
||||||
|
light.intensity = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
// TBD, TODO: intensity can be affected further by other factors
|
// TBD, TODO: intensity can be affected further by other factors
|
||||||
light.state = {
|
light.state = {
|
||||||
@@ -94,13 +101,16 @@ light_array::update() {
|
|||||||
|
|
||||||
if (light.owner->DimHeadlights && !light.owner->HighBeamLights) // tylko przyciemnione
|
if (light.owner->DimHeadlights && !light.owner->HighBeamLights) // tylko przyciemnione
|
||||||
light.state *= light.owner->MoverParameters->dimMultiplier;
|
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;
|
light.state *= light.owner->MoverParameters->normMultiplier;
|
||||||
else if (light.owner->DimHeadlights && light.owner->HighBeamLights) // przyciemnione dlugie
|
else if (light.owner->DimHeadlights && light.owner->HighBeamLights) // przyciemnione dlugie
|
||||||
light.state *= light.owner->MoverParameters->highDimMultiplier;
|
light.state *= light.owner->MoverParameters->highDimMultiplier;
|
||||||
else if (!light.owner->DimHeadlights && light.owner->HighBeamLights) // dlugie zwykle
|
else if (!light.owner->DimHeadlights && light.owner->HighBeamLights) // dlugie zwykle
|
||||||
light.state *= light.owner->MoverParameters->highMultiplier;
|
light.state *= light.owner->MoverParameters->highMultiplier;
|
||||||
|
else if (!isEnabled)
|
||||||
|
{
|
||||||
|
light.state = glm::vec3{0.f};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
light.intensity = 0.0f;
|
light.intensity = 0.0f;
|
||||||
|
|||||||
Reference in New Issue
Block a user