(svn r17898) -Fix: [NoAI] Improve behaviour of (AIEngine|AIEventEnginePreview)::GetCargoType() and AIEngine::CanRefitCargo() wrt. articulated vehicles.

This commit is contained in:
frosch
2009-10-28 20:15:46 +00:00
parent 83894809d0
commit d01f5e9e7e
4 changed files with 34 additions and 16 deletions

View File

@@ -42,10 +42,18 @@
{
if (!IsValidEngine(engine_id)) return CT_INVALID;
const Engine *e = ::Engine::Get(engine_id);
if (!e->CanCarryCargo()) return CT_INVALID;
CargoArray cap = ::GetCapacityOfArticulatedParts(engine_id);
return e->GetDefaultCargoType();
CargoID most_cargo = CT_INVALID;
uint amount = 0;
for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
if (cap[cid] > amount) {
amount = cap[cid];
most_cargo = cid;
}
}
return most_cargo;
}
/* static */ bool AIEngine::CanRefitCargo(EngineID engine_id, CargoID cargo_id)
@@ -53,8 +61,7 @@
if (!IsValidEngine(engine_id)) return false;
if (!AICargo::IsValidCargo(cargo_id)) return false;
if (GetCargoType(engine_id) == cargo_id) return true;
return ::CanRefitTo(engine_id, cargo_id);
return HasBit(::GetUnionOfArticulatedRefitMasks(engine_id, true), cargo_id);
}
/* static */ bool AIEngine::CanPullCargo(EngineID engine_id, CargoID cargo_id)