mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 03:09:18 +02:00
controlled vehicle lookup enhancement
This commit is contained in:
46
DynObj.cpp
46
DynObj.cpp
@@ -6120,30 +6120,32 @@ TDynamicObject * TDynamicObject::ControlledFind()
|
||||
// problematyczna może być kwestia wybranej kabiny (w silnikowym...)
|
||||
// jeśli silnikowy będzie zapięty odwrotnie (tzn. -1), to i tak powinno jeździć dobrze
|
||||
// również hamowanie wykonuje się zaworem w członie, a nie w silnikowym...
|
||||
TDynamicObject *d = this; // zaczynamy od aktualnego
|
||||
if( ( d->MoverParameters->TrainType == dt_EZT )
|
||||
|| ( d->MoverParameters->TrainType == dt_DMU ) ) {
|
||||
// na razie dotyczy to EZT
|
||||
if( ( d->NextConnected() != nullptr )
|
||||
&& ( true == TestFlag( d->MoverParameters->Couplers[ end::rear ].AllowedFlag, coupling::permanent ) ) ) {
|
||||
// gdy jest człon od sprzęgu 1, a sprzęg łączony warsztatowo (powiedzmy)
|
||||
if( ( d->MoverParameters->Power < 1.0 )
|
||||
&& ( d->NextConnected()->MoverParameters->Power > 1.0 ) ) {
|
||||
// my nie mamy mocy, ale ten drugi ma
|
||||
d = d->NextConnected(); // będziemy sterować tym z mocą
|
||||
}
|
||||
}
|
||||
else if( ( d->PrevConnected() != nullptr )
|
||||
&& ( true == TestFlag( d->MoverParameters->Couplers[ end::front ].AllowedFlag, coupling::permanent ) ) ) {
|
||||
// gdy jest człon od sprzęgu 0, a sprzęg łączony warsztatowo (powiedzmy)
|
||||
if( ( d->MoverParameters->Power < 1.0 )
|
||||
&& ( d->PrevConnected()->MoverParameters->Power > 1.0 ) ) {
|
||||
// my nie mamy mocy, ale ten drugi ma
|
||||
d = d->PrevConnected(); // będziemy sterować tym z mocą
|
||||
}
|
||||
if( MoverParameters->Power > 1.0 ) { return this; }
|
||||
|
||||
auto const couplingtype { (
|
||||
( MoverParameters->TrainType == dt_EZT )
|
||||
|| ( MoverParameters->TrainType == dt_DMU ) ) ?
|
||||
coupling::permanent :
|
||||
coupling::control
|
||||
};
|
||||
// try first to look towards the rear
|
||||
auto *d = this; // zaczynamy od aktualnego
|
||||
|
||||
while( ( d = d->NextC( couplingtype ) ) != nullptr ) {
|
||||
if( d->MoverParameters->Power > 1.0 ) {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
return d;
|
||||
// if we didn't yet find a suitable vehicle try in the other direction
|
||||
d = this; // zaczynamy od aktualnego
|
||||
|
||||
while( ( d = d->PrevC( couplingtype ) ) != nullptr ) {
|
||||
if( d->MoverParameters->Power > 1.0 ) {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
// if we still don't have a match give up
|
||||
return this;
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
25
Train.cpp
25
Train.cpp
@@ -7128,28 +7128,11 @@ void TTrain::DynamicSet(TDynamicObject *d)
|
||||
// jeździć dobrze
|
||||
// również hamowanie wykonuje się zaworem w członie, a nie w silnikowym...
|
||||
DynamicObject = d; // jedyne miejsce zmiany
|
||||
mvOccupied = mvControlled = d ? DynamicObject->MoverParameters : NULL; // albo silnikowy w EZT
|
||||
if (!DynamicObject)
|
||||
return;
|
||||
// TODO: leverage code already present in TDynamicObject::ControlledFind()
|
||||
if( ( d->MoverParameters->TrainType == dt_EZT )
|
||||
|| ( d->MoverParameters->TrainType == dt_DMU ) ) {
|
||||
mvOccupied = mvControlled = ( d ? DynamicObject->MoverParameters : nullptr ); // albo silnikowy w EZT
|
||||
|
||||
if( ( d->NextConnected() != nullptr )
|
||||
&& ( true == TestFlag( d->MoverParameters->Couplers[ end::rear ].AllowedFlag, coupling::permanent ) ) ) {
|
||||
if( ( mvControlled->Power < 1.0 ) && ( mvControlled->Couplers[ 1 ].Connected->Power > 1.0 ) ) {
|
||||
// my nie mamy mocy, ale ten drugi ma
|
||||
mvControlled = DynamicObject->NextConnected()->MoverParameters; // będziemy sterować tym z mocą
|
||||
}
|
||||
}
|
||||
else if( ( d->PrevConnected() != nullptr )
|
||||
&& ( true == TestFlag( d->MoverParameters->Couplers[ end::front ].AllowedFlag, coupling::permanent ) ) ) {
|
||||
if( ( mvControlled->Power < 1.0 ) && ( mvControlled->Couplers[ 0 ].Connected->Power > 1.0 ) ) {
|
||||
// my nie mamy mocy, ale ten drugi ma
|
||||
mvControlled = DynamicObject->PrevConnected()->MoverParameters; // będziemy sterować tym z mocą
|
||||
}
|
||||
}
|
||||
}
|
||||
if( DynamicObject == nullptr ) { return; }
|
||||
|
||||
mvControlled = DynamicObject->ControlledFind()->MoverParameters;
|
||||
mvSecond = NULL; // gdyby się nic nie znalazło
|
||||
if (mvOccupied->Power > 1.0) // dwuczłonowe lub ukrotnienia, żeby nie szukać każdorazowo
|
||||
if (mvOccupied->Couplers[1].Connected ?
|
||||
|
||||
Reference in New Issue
Block a user