17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-05 18:02:32 +01:00

Merge pull request #168 from pwarszawski/whois-owner-fallback

whois: fall back to the consist owner in the +0/+7 mode too
This commit is contained in:
2026-09-05 21:08:29 +02:00
committed by GitHub

View File

@@ -1014,6 +1014,13 @@ whois_event::deserialize_( cParser &Input, scene::scratch_data &Scratchpad ) {
void void
whois_event::run_() { whois_event::run_() {
if( m_activator == nullptr ) {
// no triggering vehicle to report on - most likely whois was launched from a
// scenery event chain rather than a track/isolation crossing
WriteLog( "Type: WhoIs (" + std::to_string( m_input.flags ) + ") - no activator, event ignored" );
return;
}
for( auto &target : m_targets ) { for( auto &target : m_targets ) {
auto *targetcell { static_cast<TMemCell *>( std::get<scene::basic_node *>( target ) ) }; auto *targetcell { static_cast<TMemCell *>( std::get<scene::basic_node *>( target ) ) };
if( targetcell == nullptr ) { continue; } if( targetcell == nullptr ) { continue; }
@@ -1129,20 +1136,28 @@ whois_event::run_() {
+ "[engine power: " + to_string( m_activator->MoverParameters->Power, 2 ) + "]" ); + "[engine power: " + to_string( m_activator->MoverParameters->Power, 2 ) + "]" );
} }
// +0 // +0
else if( m_activator->Mechanik ) { else {
if( m_activator->Mechanik->primary() ) { // tylko jeśli ktoś tam siedzi - nie powinno dotyczyć pasażera! // same owner selection as the +8/+16/+24/+32/+40/+48 branches above: fall back to
// the consist's controlling vehicle if the activator itself isn't one (e.g. a wagon
// triggered the event ahead of its locomotive) - +0 used to require the activator's
// own Mechanik and silently produce nothing for a wagon-triggered whois
auto const *owner { (
m_activator->Mechanik != nullptr && m_activator->Mechanik->primary() ?
m_activator->Mechanik :
m_activator->ctOwner ) };
if( owner != nullptr ) {
targetcell->UpdateValues( targetcell->UpdateValues(
m_activator->Mechanik->TrainName(), owner->TrainName(),
m_activator->Mechanik->StationCount() - m_activator->Mechanik->StationIndex(), // ile przystanków do końca owner->StationCount() - owner->StationIndex(), // ile przystanków do końca
m_activator->Mechanik->IsStop() ? owner->IsStop() ?
1 : 1 :
0, // 1, gdy ma tu zatrzymanie 0, // 1, gdy ma tu zatrzymanie
m_input.flags & ( flags::text | flags::value1 | flags::value2 ) ); m_input.flags & ( flags::text | flags::value1 | flags::value2 ) );
WriteLog( WriteLog(
"Type: WhoIs (" + std::to_string( m_input.flags ) + ") - " "Type: WhoIs (" + std::to_string( m_input.flags ) + ") - "
+ "[train: " + m_activator->Mechanik->TrainName() + "], " + "[train: " + owner->TrainName() + "], "
+ "[stations left: " + std::to_string( m_activator->Mechanik->StationCount() - m_activator->Mechanik->StationIndex() ) + "], " + "[stations left: " + std::to_string( owner->StationCount() - owner->StationIndex() ) + "], "
+ "[stop at next station: " + ( m_activator->Mechanik->IsStop() ? "yes" : "no") + "]" ); + "[stop at next station: " + ( owner->IsStop() ? "yes" : "no") + "]" );
} }
} }
} }