diff options
author | frosch <frosch@openttd.org> | 2009-10-28 20:15:46 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2009-10-28 20:15:46 +0000 |
commit | d01f5e9e7e78ceb22e36d5378f74b6ef4a842756 (patch) | |
tree | db5464970614a4d93fc735f9e5448d95ccf69603 /src/ai/api/ai_engine.cpp | |
parent | 83894809d0bf63f5375cf546f3d353f5299a6442 (diff) | |
download | openttd-d01f5e9e7e78ceb22e36d5378f74b6ef4a842756.tar.xz |
(svn r17898) -Fix: [NoAI] Improve behaviour of (AIEngine|AIEventEnginePreview)::GetCargoType() and AIEngine::CanRefitCargo() wrt. articulated vehicles.
Diffstat (limited to 'src/ai/api/ai_engine.cpp')
-rw-r--r-- | src/ai/api/ai_engine.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/ai/api/ai_engine.cpp b/src/ai/api/ai_engine.cpp index 0be62af1f..00394444f 100644 --- a/src/ai/api/ai_engine.cpp +++ b/src/ai/api/ai_engine.cpp @@ -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); + + 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 e->GetDefaultCargoType(); + 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) |