From d17d51e8fb2e73027afc4440a89424e37826a834 Mon Sep 17 00:00:00 2001 From: Hirek Date: Mon, 20 Oct 2025 21:25:32 +0200 Subject: [PATCH] Direction relay sounds --- DynObj.cpp | 17 +++++++++++++++++ DynObj.h | 3 +++ Train.cpp | 33 +++++++++++++++++++++++++++++++++ Train.h | 4 ++++ 4 files changed, 57 insertions(+) diff --git a/DynObj.cpp b/DynObj.cpp index d259b0c9..e5f046d5 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -6790,6 +6790,23 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co m_powertrainsounds.dsbWejscie_na_bezoporow.deserialize( parser, sound_type::single ); m_powertrainsounds.dsbWejscie_na_bezoporow.owner( this ); } + // przekazniki od kierunku jazdy + else if (token == "directionrelay_d:") { + // przekaznik od kierunku jazdy do przodu + sDirectionRelayD.deserialize(parser, sound_type::single); + sDirectionRelayD.owner(this); + } + else if (token == "directionrelay_r:") { + // przekaznik od kierunku jazdy do tylu + sDirectionRelayR.deserialize(parser, sound_type::single); + sDirectionRelayR.owner(this); + } + else if (token == "directionrelay_n:") + { + // przekaznik od kierunku jazdy do tylu + sDirectionRelayN.deserialize(parser, sound_type::single); + sDirectionRelayN.owner(this); + } else if( token == "wejscie_na_drugi_uklad:" ) { m_powertrainsounds.motor_parallel.deserialize( parser, sound_type::single ); m_powertrainsounds.motor_parallel.owner( this ); diff --git a/DynObj.h b/DynObj.h index c24b942f..1f6c8c75 100644 --- a/DynObj.h +++ b/DynObj.h @@ -516,6 +516,9 @@ private: std::vector m_axlesounds; // engine sounds powertrain_sounds m_powertrainsounds; + sound_source sDirectionRelayD { sound_placement::engine }; // przekaznik kierunkowy do przodu + sound_source sDirectionRelayN { sound_placement::engine }; // przekaznik kierunkowy neutral + sound_source sDirectionRelayR { sound_placement::engine }; // przekaznik kierunkowy wstecz sound_source sConverter { sound_placement::engine }; sound_source sBRVent {sound_placement::engine}; sound_source sCompressor { sound_placement::engine }; // NBMX wrzesien 2003 diff --git a/Train.cpp b/Train.cpp index c656f630..1fdaec8f 100644 --- a/Train.cpp +++ b/Train.cpp @@ -8476,12 +8476,45 @@ bool TTrain::Update( double const Deltatime ) if (!FreeFlyModeFlag && simulation::Train == this) // don't bother if we're outside update_screens(Deltatime); + // update direction relay + if (prevBatState != mvOccupied->Power24vIsAvailable) + SetupDirectionRelays(); + if (prevDirection != mvOccupied->DirActive) + UpdateDirectionRelays(); + + prevBatState = mvOccupied->Power24vIsAvailable; + prevDirection = mvOccupied->DirActive; + + + + // sounds update_sounds( Deltatime ); return true; //(DynamicObject->Update(dt)); } // koniec update +void TTrain::UpdateDirectionRelays() { + if (mvOccupied->DirActive < 0 && mvOccupied->Power24vIsAvailable) // wstecz + Dynamic()->sDirectionRelayR.play(); + if (mvOccupied->DirActive == 0 && mvOccupied->Power24vIsAvailable) // neutral + Dynamic()->sDirectionRelayN.play(); + if (mvOccupied->DirActive > 0 && mvOccupied->Power24vIsAvailable) // przod + Dynamic()->sDirectionRelayD.play(); +} + +void TTrain::SetupDirectionRelays() { + if (mvOccupied->Power24vIsAvailable) + { + if (mvOccupied->DirActive < 0 && mvOccupied->Power24vIsAvailable) // wstecz + Dynamic()->sDirectionRelayR.play(); + if (mvOccupied->DirActive > 0 && mvOccupied->Power24vIsAvailable) // przod + Dynamic()->sDirectionRelayD.play(); + } + else if (mvOccupied->DirActive != 0) // neutral + Dynamic()->sDirectionRelayN.play(); +} + void TTrain::update_sounds( double const Deltatime ) { diff --git a/Train.h b/Train.h index 47c21866..7ea49776 100644 --- a/Train.h +++ b/Train.h @@ -164,6 +164,10 @@ class TTrain { return m_controlmapper.find( Control ); } void UpdateCab(); bool Update( double const Deltatime ); + void UpdateDirectionRelays(); + void SetupDirectionRelays(); + bool prevBatState = false; + int prevDirection = 0; void add_distance( double const Distance ); // McZapkie-310302: ladowanie parametrow z pliku bool LoadMMediaFile(std::string const &asFileName);