src/engine_func.h
author rubidium
Mon, 31 Mar 2008 07:50:27 +0000
branchnoai
changeset 9837 c9ec4f82e0d0
child 10274 b3c58f3df92b
permissions -rw-r--r--
(svn r12503) [NoAI] -Sync: with trunk r12461:12501.
9837
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     1
/* $Id$ */
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     2
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     3
/** @file engine.h */
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     4
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     5
#ifndef ENGINE_H
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     6
#define ENGINE_H
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     7
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     8
#include "engine_type.h"
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
     9
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    10
void SetupEngines();
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    11
void StartupEngines();
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    12
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    13
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    14
void DrawTrainEngine(int x, int y, EngineID engine, SpriteID pal);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    15
void DrawRoadVehEngine(int x, int y, EngineID engine, SpriteID pal);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    16
void DrawShipEngine(int x, int y, EngineID engine, SpriteID pal);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    17
void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    18
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    19
void LoadCustomEngineNames();
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    20
void DeleteCustomEngineNames();
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    21
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    22
bool IsEngineBuildable(EngineID engine, VehicleType type, PlayerID player);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    23
CargoID GetEngineCargoType(EngineID engine);
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    24
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    25
static inline EngineID GetFirstEngineOfType(VehicleType type)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    26
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    27
	const EngineID start[] = {0, ROAD_ENGINES_INDEX, SHIP_ENGINES_INDEX, AIRCRAFT_ENGINES_INDEX};
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    28
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    29
	return start[type];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    30
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    31
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    32
static inline EngineID GetLastEngineOfType(VehicleType type)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    33
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    34
	const EngineID end[] = {
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    35
		NUM_TRAIN_ENGINES,
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    36
		ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES,
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    37
		SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES,
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    38
		AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES};
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    39
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    40
	return end[type];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    41
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    42
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    43
extern Engine _engines[TOTAL_NUM_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    44
#define FOR_ALL_ENGINES(e) for (e = _engines; e != endof(_engines); e++)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    45
#define FOR_ALL_ENGINEIDS_OF_TYPE(e, type) for (e = GetFirstEngineOfType(type); e != GetLastEngineOfType(type); e++)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    46
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    47
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    48
static inline Engine* GetEngine(EngineID i)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    49
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    50
	assert(i < lengthof(_engines));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    51
	return &_engines[i];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    52
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    53
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    54
static inline bool IsEngineIndex(uint index)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    55
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    56
	return index < TOTAL_NUM_ENGINES;
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    57
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    58
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    59
/* Access Vehicle Data */
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    60
extern const EngineInfo _orig_engine_info[TOTAL_NUM_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    61
extern const RailVehicleInfo _orig_rail_vehicle_info[NUM_TRAIN_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    62
extern const ShipVehicleInfo _orig_ship_vehicle_info[NUM_SHIP_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    63
extern const AircraftVehicleInfo _orig_aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    64
extern const RoadVehicleInfo _orig_road_vehicle_info[NUM_ROAD_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    65
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    66
extern EngineInfo _engine_info[TOTAL_NUM_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    67
extern RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    68
extern ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    69
extern AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    70
extern RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    71
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    72
static inline const EngineInfo *EngInfo(EngineID e)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    73
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    74
	assert(e < lengthof(_engine_info));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    75
	return &_engine_info[e];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    76
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    77
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    78
static inline const RailVehicleInfo* RailVehInfo(EngineID e)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    79
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    80
	assert(e < lengthof(_rail_vehicle_info));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    81
	return &_rail_vehicle_info[e];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    82
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    83
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    84
static inline const ShipVehicleInfo* ShipVehInfo(EngineID e)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    85
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    86
	assert(e >= SHIP_ENGINES_INDEX && e < SHIP_ENGINES_INDEX + lengthof(_ship_vehicle_info));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    87
	return &_ship_vehicle_info[e - SHIP_ENGINES_INDEX];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    88
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    89
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    90
static inline const AircraftVehicleInfo* AircraftVehInfo(EngineID e)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    91
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    92
	assert(e >= AIRCRAFT_ENGINES_INDEX && e < AIRCRAFT_ENGINES_INDEX + lengthof(_aircraft_vehicle_info));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    93
	return &_aircraft_vehicle_info[e - AIRCRAFT_ENGINES_INDEX];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    94
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    95
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    96
static inline const RoadVehicleInfo* RoadVehInfo(EngineID e)
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    97
{
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    98
	assert(e >= ROAD_ENGINES_INDEX && e < ROAD_ENGINES_INDEX + lengthof(_road_vehicle_info));
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
    99
	return &_road_vehicle_info[e - ROAD_ENGINES_INDEX];
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   100
}
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   101
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   102
/* Engine list manipulators - current implementation is only C wrapper of CBlobT<EngineID> class (helpers.cpp) */
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   103
void EngList_Create(EngineList *el);            ///< Creates engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   104
void EngList_Destroy(EngineList *el);           ///< Deallocate and destroy engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   105
uint EngList_Count(const EngineList *el);       ///< Returns number of items in the engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   106
void EngList_Add(EngineList *el, EngineID eid); ///< Append one item at the end of engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   107
EngineID* EngList_Items(EngineList *el);        ///< Returns engine list items as C array
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   108
void EngList_RemoveAll(EngineList *el);         ///< Removes all items from engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   109
typedef int CDECL EngList_SortTypeFunction(const void*, const void*); ///< argument type for EngList_Sort()
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   110
void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare); ///< qsort of the engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   111
void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items); ///< qsort of specified portion of the engine list
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   112
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents:
diff changeset
   113
#endif /* ENGINE_H */