diff options
author | peter1138 <peter1138@openttd.org> | 2006-11-05 21:50:08 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-11-05 21:50:08 +0000 |
commit | 6aa0c247c8c923081684dacf7a4eecebc26a06f7 (patch) | |
tree | b5907c51ec768ae9e190925cbdfd9f54ebc304e0 /ai/trolly/build.c | |
parent | d7a56088a59d99a7aa2ea50467f7b8f265e8ebf0 (diff) | |
download | openttd-6aa0c247c8c923081684dacf7a4eecebc26a06f7.tar.xz |
(svn r7070) -Codechange: Make the AI choose road vehicles based on a rating (currently max speed * capacity) instead of either the cost or the index of the vheicle.
Diffstat (limited to 'ai/trolly/build.c')
-rw-r--r-- | ai/trolly/build.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/ai/trolly/build.c b/ai/trolly/build.c index 059500dc4..1259d4c9a 100644 --- a/ai/trolly/build.c +++ b/ai/trolly/build.c @@ -232,27 +232,39 @@ EngineID AiNew_PickVehicle(Player *p) // Not supported yet return INVALID_ENGINE; } else { + EngineID best_veh_index = INVALID_ENGINE; + int32 best_veh_rating = 0; EngineID start = ROAD_ENGINES_INDEX; EngineID end = ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; EngineID i; // Let's check it backwards.. we simply want to best engine available.. - for (i = end - 1; i >= start; i--) { + for (i = start; i != end; i--) { + const RoadVehicleInfo *rvi = RoadVehInfo(i); const Engine* e = GetEngine(i); + int32 rating; int32 ret; /* Skip vehicles which can't take our cargo type */ - if (RoadVehInfo(i)->cargo_type != p->ainew.cargo) continue; + if (rvi->cargo_type != p->ainew.cargo) continue; // Is it availiable? // Also, check if the reliability of the vehicle is above the AI_VEHICLE_MIN_RELIABILTY if (!HASBIT(e->player_avail, _current_player) || e->reliability * 100 < AI_VEHICLE_MIN_RELIABILTY << 16) continue; + + /* Rate and compare the engine by speed & capacity */ + rating = rvi->max_speed * rvi->capacity; + if (rating <= best_veh_rating) continue; + // Can we build it? ret = AI_DoCommand(0, i, 0, DC_QUERY_COST, CMD_BUILD_ROAD_VEH); - if (!CmdFailed(ret)) return i; + if (CmdFailed(ret)) continue; + + best_veh_rating = rating; + best_veh_index = i; } - // We did not find a vehicle :( - return INVALID_ENGINE; + + return best_veh_index; } } |