00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef AI_VEHICLE_HPP
00013 #define AI_VEHICLE_HPP
00014
00015 #include "ai_object.hpp"
00016 #include "ai_error.hpp"
00017 #include "ai_road.hpp"
00018 #include "ai_order.hpp"
00019
00023 class AIVehicle : public AIObject {
00024 public:
00025 static const char *GetClassName() { return "AIVehicle"; }
00026
00030 enum ErrorMessages {
00032 ERR_VEHICLE_BASE = AIError::ERR_CAT_VEHICLE << AIError::ERR_CAT_BIT_SIZE,
00033
00035 ERR_VEHICLE_TOO_MANY,
00036
00038 ERR_VEHICLE_NOT_AVAILABLE,
00039
00041 ERR_VEHICLE_BUILD_DISABLED,
00042
00044 ERR_VEHICLE_WRONG_DEPOT,
00045
00047 ERR_VEHICLE_CANNOT_SEND_TO_DEPOT,
00048
00050 ERR_VEHICLE_CANNOT_START_STOP,
00051
00053 ERR_VEHICLE_CANNOT_TURN,
00054
00056 ERR_VEHICLE_CANNOT_REFIT,
00057
00059 ERR_VEHICLE_IS_DESTROYED,
00060
00062 ERR_VEHICLE_NOT_IN_DEPOT,
00063
00065 ERR_VEHICLE_IN_FLIGHT,
00066
00068 ERR_VEHICLE_NO_POWER,
00069
00070 };
00071
00076 enum VehicleType {
00077
00078 VT_RAIL,
00079 VT_ROAD,
00080 VT_WATER,
00081 VT_AIR,
00082 VT_INVALID = 0xFF,
00083 };
00084
00088 enum VehicleState {
00089 VS_RUNNING,
00090 VS_STOPPED,
00091 VS_IN_DEPOT,
00092 VS_AT_STATION,
00093 VS_BROKEN,
00094 VS_CRASHED,
00095
00096 VS_INVALID = 0xFF,
00097 };
00098
00099 static const int VEHICLE_INVALID = -1;
00100
00106 static bool IsValidVehicle(VehicleID vehicle_id);
00107
00114 static int32 GetNumWagons(VehicleID vehicle_id);
00115
00126 static bool SetName(VehicleID vehicle_id, const char *name);
00127
00134 static char *GetName(VehicleID vehicle_id);
00135
00142 static TileIndex GetLocation(VehicleID vehicle_id);
00143
00150 static EngineID GetEngineType(VehicleID vehicle_id);
00151
00160 static EngineID GetWagonEngineType(VehicleID vehicle_id, int wagon);
00161
00168 static int32 GetUnitNumber(VehicleID vehicle_id);
00169
00177 static int32 GetAge(VehicleID vehicle_id);
00178
00188 static int32 GetWagonAge(VehicleID vehicle_id, int wagon);
00189
00197 static int32 GetMaxAge(VehicleID vehicle_id);
00198
00206 static int32 GetAgeLeft(VehicleID vehicle_id);
00207
00217 static int32 GetCurrentSpeed(VehicleID vehicle_id);
00218
00225 static VehicleState GetState(VehicleID vehicle_id);
00226
00236 static Money GetRunningCost(VehicleID vehicle_id);
00237
00244 static Money GetProfitThisYear(VehicleID vehicle_id);
00245
00252 static Money GetProfitLastYear(VehicleID vehicle_id);
00253
00254
00262 static Money GetCurrentValue(VehicleID vehicle_id);
00263
00270 static AIVehicle::VehicleType GetVehicleType(VehicleID vehicle_id);
00271
00279 static AIRoad::RoadType GetRoadType(VehicleID vehicle_id);
00280
00287 static bool IsInDepot(VehicleID vehicle_id);
00288
00295 static bool IsStoppedInDepot(VehicleID vehicle_id);
00296
00314 static VehicleID BuildVehicle(TileIndex depot, EngineID engine_id);
00315
00330 static VehicleID CloneVehicle(TileIndex depot, VehicleID vehicle_id, bool share_orders);
00331
00345 static bool MoveWagon(VehicleID source_vehicle_id, int source_wagon, int dest_vehicle_id, int dest_wagon);
00346
00360 static bool MoveWagonChain(VehicleID source_vehicle_id, int source_wagon, int dest_vehicle_id, int dest_wagon);
00361
00372 static int GetRefitCapacity(VehicleID vehicle_id, CargoID cargo);
00373
00387 static bool RefitVehicle(VehicleID vehicle_id, CargoID cargo);
00388
00399 static bool SellVehicle(VehicleID vehicle_id);
00400
00413 static bool SellWagon(VehicleID vehicle_id, int wagon);
00414
00427 static bool SellWagonChain(VehicleID vehicle_id, int wagon);
00428
00437 static bool SendVehicleToDepot(VehicleID vehicle_id);
00438
00447 static bool SendVehicleToDepotForServicing(VehicleID vehicle_id);
00448
00458 static bool StartStopVehicle(VehicleID vehicle_id);
00459
00469 static bool ReverseVehicle(VehicleID vehicle_id);
00470
00479 static int32 GetCapacity(VehicleID vehicle_id, CargoID cargo);
00480
00488 static int GetLength(VehicleID vehicle_id);
00489
00498 static int32 GetCargoLoad(VehicleID vehicle_id, CargoID cargo);
00499
00505 static GroupID GetGroupID(VehicleID vehicle_id);
00506
00514 static bool IsArticulated(VehicleID vehicle_id);
00515
00522 static bool HasSharedOrders(VehicleID vehicle_id);
00523
00530 static int GetReliability(VehicleID vehicle_id);
00531
00532 private:
00536 static bool _SellWagonInternal(VehicleID vehicle_id, int wagon, bool sell_attached_wagons);
00537
00541 static bool _MoveWagonInternal(VehicleID source_vehicle_id, int source_wagon, bool move_attached_wagons, int dest_vehicle_id, int dest_wagon);
00542 };
00543
00544 #endif