src/ai/api/ai_vehicle.cpp
branchnoai
changeset 9662 67a558a1aeb8
parent 9654 b836eb5c521f
child 9672 18c71ca987e4
equal deleted inserted replaced
9661:32ce5530b9e3 9662:67a558a1aeb8
     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 }