Feature: Contextual actions for vehicles grouped by shared orders (#8425)

This commit is contained in:
Bernard Teo
2022-11-27 01:03:21 +08:00
committed by GitHub
parent 5e14a20b3b
commit 8a78fa7121
9 changed files with 200 additions and 19 deletions

View File

@@ -3013,3 +3013,39 @@ uint32 Vehicle::GetDisplayMinPowerToWeight() const
if (max_weight == 0) return 0;
return GetGroundVehicleCache()->cached_power * 10u / max_weight;
}
/**
* Checks if two vehicle chains have the same list of engines.
* @param v1 First vehicle chain.
* @param v1 Second vehicle chain.
* @return True if same, false if different.
*/
bool VehiclesHaveSameEngineList(const Vehicle *v1, const Vehicle *v2)
{
while (true) {
if (v1 == nullptr && v2 == nullptr) return true;
if (v1 == nullptr || v2 == nullptr) return false;
if (v1->GetEngine() != v2->GetEngine()) return false;
v1 = v1->GetNextVehicle();
v2 = v2->GetNextVehicle();
}
}
/**
* Checks if two vehicles have the same list of orders.
* @param v1 First vehicles.
* @param v1 Second vehicles.
* @return True if same, false if different.
*/
bool VehiclesHaveSameOrderList(const Vehicle *v1, const Vehicle *v2)
{
const Order *o1 = v1->GetFirstOrder();
const Order *o2 = v2->GetFirstOrder();
while (true) {
if (o1 == nullptr && o2 == nullptr) return true;
if (o1 == nullptr || o2 == nullptr) return false;
if (!o1->Equals(*o2)) return false;
o1 = o1->next;
o2 = o2->next;
}
}