summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_engine.cpp
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2009-10-28 20:15:46 +0000
committerfrosch <frosch@openttd.org>2009-10-28 20:15:46 +0000
commitd01f5e9e7e78ceb22e36d5378f74b6ef4a842756 (patch)
treedb5464970614a4d93fc735f9e5448d95ccf69603 /src/ai/api/ai_engine.cpp
parent83894809d0bf63f5375cf546f3d353f5299a6442 (diff)
downloadopenttd-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.cpp17
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)