00001
00002
00005 #ifndef VEHICLE_FUNC_H
00006 #define VEHICLE_FUNC_H
00007
00008 #include "tile_type.h"
00009 #include "strings_type.h"
00010 #include "gfx_type.h"
00011 #include "direction_type.h"
00012 #include "cargo_type.h"
00013 #include "command_type.h"
00014 #include "vehicle_type.h"
00015
00016 #define is_custom_sprite(x) (x >= 0xFD)
00017 #define IS_CUSTOM_FIRSTHEAD_SPRITE(x) (x == 0xFD)
00018 #define IS_CUSTOM_SECONDHEAD_SPRITE(x) (x == 0xFE)
00019
00020 typedef void *VehicleFromPosProc(Vehicle *v, void *data);
00021
00022 void VehicleServiceInDepot(Vehicle *v);
00023 void VehiclePositionChanged(Vehicle *v);
00024 Vehicle *GetLastVehicleInChain(Vehicle *v);
00025 uint CountVehiclesInChain(const Vehicle *v);
00026 bool IsEngineCountable(const Vehicle *v);
00027 void DeleteVehicleChain(Vehicle *v);
00028 void FindVehicleOnPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
00029 void FindVehicleOnPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
00030 bool HasVehicleOnPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
00031 bool HasVehicleOnPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
00032 void CallVehicleTicks();
00033 uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color);
00034
00035 void InitializeTrains();
00036 byte VehicleRandomBits();
00037 void ResetVehiclePosHash();
00038 void ResetVehicleColorMap();
00039
00040 bool CanRefitTo(EngineID engine_type, CargoID cid_to);
00041 CargoID FindFirstRefittableCargo(EngineID engine_type);
00042 CommandCost GetRefitCost(EngineID engine_type);
00043
00044 void ViewportAddVehicles(DrawPixelInfo *dpi);
00045
00046 SpriteID GetRotorImage(const Vehicle *v);
00047
00048 uint32 VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y);
00049
00050 StringID VehicleInTheWayErrMsg(const Vehicle* v);
00051 bool HasVehicleOnTunnelBridge(TileIndex tile, TileIndex endtile);
00052
00053 Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y);
00054
00055 void DecreaseVehicleValue(Vehicle *v);
00056 void CheckVehicleBreakdown(Vehicle *v);
00057 void AgeVehicle(Vehicle *v);
00058 void VehicleEnteredDepotThisTick(Vehicle *v);
00059
00060 void BeginVehicleMove(const Vehicle *v);
00061 void EndVehicleMove(const Vehicle *v);
00062 void MarkSingleVehicleDirty(const Vehicle *v);
00063
00064 UnitID GetFreeUnitNumber(VehicleType type);
00065
00066 void TrainConsistChanged(Vehicle *v, bool same_length);
00067 void TrainPowerChanged(Vehicle *v);
00068 Money GetTrainRunningCost(const Vehicle *v);
00069
00070 uint GenerateVehicleSortList(const Vehicle*** sort_list, uint16 *length_of_array, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
00071 void BuildDepotVehicleList(VehicleType type, TileIndex tile, Vehicle ***engine_list, uint16 *engine_list_length, uint16 *engine_count, Vehicle ***wagon_list, uint16 *wagon_list_length, uint16 *wagon_count);
00072 CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
00073 void VehicleEnterDepot(Vehicle *v);
00074
00075 CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs);
00076 bool CanBuildVehicleInfrastructure(VehicleType type);
00077
00078 void CcCloneVehicle(bool success, TileIndex tile, uint32 p1, uint32 p2);
00079
00080
00081
00082 enum {
00083 DEPOT_SERVICE = (1 << 0),
00084 DEPOT_MASS_SEND = (1 << 1),
00085 DEPOT_DONT_CANCEL = (1 << 2),
00086 DEPOT_LOCATE_HANGAR = (1 << 3),
00087 };
00088
00089 struct GetNewVehiclePosResult {
00090 int x, y;
00091 TileIndex old_tile;
00092 TileIndex new_tile;
00093 };
00094
00095
00096 GetNewVehiclePosResult GetNewVehiclePos(const Vehicle *v);
00097 Direction GetDirectionTowards(const Vehicle *v, int x, int y);
00098
00099 static inline bool IsPlayerBuildableVehicleType(VehicleType type)
00100 {
00101 switch (type) {
00102 case VEH_TRAIN:
00103 case VEH_ROAD:
00104 case VEH_SHIP:
00105 case VEH_AIRCRAFT:
00106 return true;
00107
00108 default: return false;
00109 }
00110 }
00111
00112 static inline bool IsPlayerBuildableVehicleType(const BaseVehicle *v)
00113 {
00114 return IsPlayerBuildableVehicleType(v->type);
00115 }
00116
00117 const struct Livery *GetEngineLivery(EngineID engine_type, PlayerID player, EngineID parent_engine_type, const Vehicle *v);
00118
00125 SpriteID GetEnginePalette(EngineID engine_type, PlayerID player);
00126
00132 SpriteID GetVehiclePalette(const Vehicle *v);
00133
00134 extern const uint32 _veh_build_proc_table[];
00135 extern const uint32 _veh_sell_proc_table[];
00136 extern const uint32 _veh_refit_proc_table[];
00137 extern const uint32 _send_to_depot_proc_table[];
00138
00139
00140 static inline uint32 GetCmdBuildVeh(VehicleType type)
00141 {
00142 return _veh_build_proc_table[type];
00143 }
00144
00145 static inline uint32 GetCmdBuildVeh(const BaseVehicle *v)
00146 {
00147 return GetCmdBuildVeh(v->type);
00148 }
00149
00150 static inline uint32 GetCmdSellVeh(VehicleType type)
00151 {
00152 return _veh_sell_proc_table[type];
00153 }
00154
00155 static inline uint32 GetCmdSellVeh(const BaseVehicle *v)
00156 {
00157 return GetCmdSellVeh(v->type);
00158 }
00159
00160 static inline uint32 GetCmdRefitVeh(VehicleType type)
00161 {
00162 return _veh_refit_proc_table[type];
00163 }
00164
00165 static inline uint32 GetCmdRefitVeh(const BaseVehicle *v)
00166 {
00167 return GetCmdRefitVeh(v->type);
00168 }
00169
00170 static inline uint32 GetCmdSendToDepot(VehicleType type)
00171 {
00172 return _send_to_depot_proc_table[type];
00173 }
00174
00175 static inline uint32 GetCmdSendToDepot(const BaseVehicle *v)
00176 {
00177 return GetCmdSendToDepot(v->type);
00178 }
00179
00180 bool EnsureNoVehicleOnGround(TileIndex tile);
00181 void StopAllVehicles();
00182
00183 Vehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicle type);
00184 Vehicle *CreateEffectVehicleAbove(int x, int y, int z, EffectVehicle type);
00185 Vehicle *CreateEffectVehicleRel(const Vehicle *v, int x, int y, int z, EffectVehicle type);
00186
00187 extern VehicleID _vehicle_id_ctr_day;
00188 extern Vehicle *_place_clicked_vehicle;
00189 extern VehicleID _new_vehicle_id;
00190 extern uint16 _returned_refit_capacity;
00191
00192 #endif