equal
deleted
inserted
replaced
7 #include "../../command.h" |
7 #include "../../command.h" |
8 #include "../../vehicle.h" |
8 #include "../../vehicle.h" |
9 #include "../../depot.h" |
9 #include "../../depot.h" |
10 #include "../../engine.h" |
10 #include "../../engine.h" |
11 #include "../../player.h" |
11 #include "../../player.h" |
|
12 #include "../../aircraft.h" |
12 |
13 |
13 /* static */ bool AIVehicle::IsValidEngine(EngineID engine_id) |
14 /* static */ bool AIVehicle::IsValidEngine(EngineID engine_id) |
14 { |
15 { |
15 return ::IsEngineIndex(engine_id); // TODO: implement 'can I build this engine check' |
16 return ::IsEngineIndex(engine_id); // TODO: implement 'can I build this engine check' |
16 } |
17 } |
24 { |
25 { |
25 if (!AICargo::IsValidCargo(cargo) || min_reliability > 100) return INVALID_ENGINE; |
26 if (!AICargo::IsValidCargo(cargo) || min_reliability > 100) return INVALID_ENGINE; |
26 |
27 |
27 EngineID best_engine = INVALID_ENGINE; |
28 EngineID best_engine = INVALID_ENGINE; |
28 EngineID engine_id; |
29 EngineID engine_id; |
|
30 uint best_cargo = 0; |
29 |
31 |
30 FOR_ALL_ENGINEIDS_OF_TYPE(engine_id, veh_type) { |
32 FOR_ALL_ENGINEIDS_OF_TYPE(engine_id, veh_type) { |
31 /* Is the vehicle available for this player */ |
33 /* Is the vehicle available for this player */ |
32 if (IsEngineBuildable(engine_id, veh_type, _current_player) && |
34 if (IsEngineBuildable(engine_id, veh_type, _current_player) && |
33 GetEngine(engine_id)->reliability * 100 >= min_reliability << 16) { |
35 GetEngine(engine_id)->reliability * 100 >= min_reliability << 16) { |
36 case VEH_TRAIN: if (RailVehInfo(engine_id)->cargo_type != cargo && !CanRefitTo(engine_id, cargo)) continue; break; |
38 case VEH_TRAIN: if (RailVehInfo(engine_id)->cargo_type != cargo && !CanRefitTo(engine_id, cargo)) continue; break; |
37 case VEH_SHIP: if (ShipVehInfo(engine_id)->cargo_type != cargo && !CanRefitTo(engine_id, cargo)) continue; break; |
39 case VEH_SHIP: if (ShipVehInfo(engine_id)->cargo_type != cargo && !CanRefitTo(engine_id, cargo)) continue; break; |
38 case VEH_AIRCRAFT: if (cargo != CT_PASSENGERS && !CanRefitTo(engine_id, cargo)) continue; break; |
40 case VEH_AIRCRAFT: if (cargo != CT_PASSENGERS && !CanRefitTo(engine_id, cargo)) continue; break; |
39 default: NOT_REACHED(); |
41 default: NOT_REACHED(); |
40 } |
42 } |
41 best_engine = engine_id; |
43 switch (veh_type) { |
|
44 case VEH_ROAD: |
|
45 case VEH_TRAIN: |
|
46 case VEH_SHIP: |
|
47 best_engine = engine_id; |
|
48 break; |
|
49 case VEH_AIRCRAFT: |
|
50 if (cargo != CT_MAIL && best_cargo < AircraftVehInfo(engine_id)->passenger_capacity) { |
|
51 best_engine = engine_id; |
|
52 best_cargo = AircraftVehInfo(engine_id)->passenger_capacity; |
|
53 } |
|
54 if (cargo == CT_MAIL && best_cargo < AircraftVehInfo(engine_id)->mail_capacity) { |
|
55 best_engine = engine_id; |
|
56 best_cargo = AircraftVehInfo(engine_id)->mail_capacity; |
|
57 } |
|
58 break; |
|
59 default: NOT_REACHED(); |
|
60 } |
42 } |
61 } |
43 } |
62 } |
44 |
63 |
45 return best_engine; |
64 return best_engine; |
46 } |
65 } |