author | celestar |
Mon, 19 Mar 2007 12:38:16 +0000 | |
branch | gamebalance |
changeset 9895 | 7bd07f43b0e3 |
parent 6519 | 367d6f96e23f |
child 9909 | dce9a6923bb7 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
3 |
/** @file engine.h */ |
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
4 |
|
0 | 5 |
#ifndef ENGINE_H |
6 |
#define ENGINE_H |
|
7 |
||
5216
d581e4db95b6
(svn r7331) - Codechange: Rename all memory pool macro's and types to "old pool", so the new pool implementation can be committed alongside it.
matthijs
parents:
5215
diff
changeset
|
8 |
#include "oldpool.h" |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
9 |
#include "rail.h" |
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
10 |
#include "sound.h" |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
11 |
#include "vehicle.h" |
405
6830ae7a0d5d
(svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky)
darkvater
parents:
389
diff
changeset
|
12 |
|
6119
b47985557d1e
(svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents:
6106
diff
changeset
|
13 |
enum RailVehicleTypes { |
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
14 |
RAILVEH_SINGLEHEAD, ///< indicates a "standalone" locomotive |
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
15 |
RAILVEH_MULTIHEAD, ///< indicates a combination of two locomotives |
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
16 |
RAILVEH_WAGON, ///< simple wagon, not motorized |
6119
b47985557d1e
(svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents:
6106
diff
changeset
|
17 |
}; |
b47985557d1e
(svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents:
6106
diff
changeset
|
18 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
19 |
struct RailVehicleInfo { |
0 | 20 |
byte image_index; |
6119
b47985557d1e
(svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
belugas
parents:
6106
diff
changeset
|
21 |
RailVehicleTypes railveh_type; |
0 | 22 |
byte base_cost; |
6074 | 23 |
RailTypeByte railtype; |
0 | 24 |
uint16 max_speed; |
25 |
uint16 power; |
|
2542
fdea27216e48
(svn r3071) -NewGRF: Add support for rail vehicle weight greater than 255 tons.
peter1138
parents:
2530
diff
changeset
|
26 |
uint16 weight; |
0 | 27 |
byte running_cost_base; |
2840
d68a605b2087
(svn r3388) - NewGRF: Allow train running cost class to differ from engine class. Also fix typo in r3384.
peter1138
parents:
2817
diff
changeset
|
28 |
byte running_cost_class; |
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
29 |
byte engclass; ///< 0: steam, 1: diesel, 2: electric |
0 | 30 |
byte capacity; |
3344
d86c852715fa
(svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents:
3113
diff
changeset
|
31 |
CargoID cargo_type; |
3022
236a3e5b3c69
(svn r3602) - Move _railveh_score data to _rail_vehicle_info->ai_rank and remove global variable to return data as we can now access this directly.
peter1138
parents:
3006
diff
changeset
|
32 |
byte ai_rank; |
1908
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
33 |
uint16 pow_wag_power; |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
34 |
byte pow_wag_weight; |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
35 |
byte visual_effect; // NOTE: this is not 100% implemented yet, at the moment it is only used as a 'fallback' value |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
36 |
// for when the 'powered wagon' callback fails. But it should really also determine what |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
37 |
// kind of visual effect to generate for a vehicle (default, steam, diesel, electric). |
bc48a30aba72
(svn r2414) - Feature: [newgrf] Implement powered wagons, and the callback that goes with it.
hackykid
parents:
1895
diff
changeset
|
38 |
// Same goes for the callback result, which atm is only used to check if a wagon is powered. |
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
39 |
byte shorten_factor; ///< length on main map for this type is 8 - shorten_factor |
5588
1bcb6b4c01d8
(svn r7592) -Feature: Add support for tractive effort to 'realistic' acceleration.
peter1138
parents:
5216
diff
changeset
|
40 |
byte tractive_effort; ///< Tractive effort coefficient |
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
41 |
byte user_def_data; ///< Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
42 |
}; |
0 | 43 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
44 |
struct ShipVehicleInfo { |
0 | 45 |
byte image_index; |
46 |
byte base_cost; |
|
47 |
uint16 max_speed; |
|
3344
d86c852715fa
(svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents:
3113
diff
changeset
|
48 |
CargoID cargo_type; |
0 | 49 |
uint16 capacity; |
50 |
byte running_cost; |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
51 |
SoundFxByte sfx; |
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
52 |
bool refittable; |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
53 |
}; |
0 | 54 |
|
6106
0c9b10a8fedf
(svn r8429) -Codechange: Add a name for AircraftVehicleInfo subtype helicopter and remove some magic numbers related to the subtype.
Darkvater
parents:
6105
diff
changeset
|
55 |
/* AircraftVehicleInfo subtypes, bitmask type. |
0c9b10a8fedf
(svn r8429) -Codechange: Add a name for AircraftVehicleInfo subtype helicopter and remove some magic numbers related to the subtype.
Darkvater
parents:
6105
diff
changeset
|
56 |
* If bit 0 is 0 then it is a helicopter, otherwise it is a plane |
0c9b10a8fedf
(svn r8429) -Codechange: Add a name for AircraftVehicleInfo subtype helicopter and remove some magic numbers related to the subtype.
Darkvater
parents:
6105
diff
changeset
|
57 |
* in which case bit 1 tells us whether it's a big(fast) plane or not */ |
4023
b65af90447d2
(svn r5262) Add symbolic names for the aircraft subtypes. not perfect, but better than raw numbers
tron
parents:
3997
diff
changeset
|
58 |
enum { |
6106
0c9b10a8fedf
(svn r8429) -Codechange: Add a name for AircraftVehicleInfo subtype helicopter and remove some magic numbers related to the subtype.
Darkvater
parents:
6105
diff
changeset
|
59 |
AIR_HELI = 0, |
6451
7baba06b4b85
(svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents:
6206
diff
changeset
|
60 |
AIR_CTOL = 1, ///< Conventional Take Off and Landing, i.e. planes |
4023
b65af90447d2
(svn r5262) Add symbolic names for the aircraft subtypes. not perfect, but better than raw numbers
tron
parents:
3997
diff
changeset
|
61 |
AIR_FAST = 2 |
b65af90447d2
(svn r5262) Add symbolic names for the aircraft subtypes. not perfect, but better than raw numbers
tron
parents:
3997
diff
changeset
|
62 |
}; |
b65af90447d2
(svn r5262) Add symbolic names for the aircraft subtypes. not perfect, but better than raw numbers
tron
parents:
3997
diff
changeset
|
63 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
64 |
struct AircraftVehicleInfo { |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
65 |
byte image_index; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
66 |
byte base_cost; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
67 |
byte running_cost; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
68 |
byte subtype; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
69 |
SoundFxByte sfx; |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
70 |
byte acceleration; |
6519
367d6f96e23f
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6500
diff
changeset
|
71 |
uint16 max_speed; |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
72 |
byte mail_capacity; |
922
fc040662bd43
(svn r1410) Replaced all occurences of 'passanger' by 'passenger' in the code
celestar
parents:
842
diff
changeset
|
73 |
uint16 passenger_capacity; |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
74 |
}; |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
75 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
76 |
struct RoadVehicleInfo { |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
77 |
byte image_index; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
78 |
byte base_cost; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
79 |
byte running_cost; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
80 |
SoundFxByte sfx; |
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
81 |
byte max_speed; |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
82 |
byte capacity; |
3344
d86c852715fa
(svn r4128) - CodeChange: Add proper semantics for CargoID for such variables instead of using the general byte-type.
Darkvater
parents:
3113
diff
changeset
|
83 |
CargoID cargo_type; |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
84 |
}; |
0 | 85 |
|
2129
9095824555e6
(svn r2639) -Add: Added the vehicle names in table/engines.h so that you know what line represents what vehicle (I hope I didn't mess that up). Added some comments while I'm at it and include the table/ directory in the Doxygen generation
celestar
parents:
1998
diff
changeset
|
86 |
/** Information about a vehicle |
4549
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4434
diff
changeset
|
87 |
* @see table/engines.h |
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4434
diff
changeset
|
88 |
*/ |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
89 |
struct EngineInfo { |
4289
ff1b2b915cab
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4077
diff
changeset
|
90 |
Date base_intro; |
4326
c2ae4dbc1074
(svn r5999) -Feature: change the original date format to a 32 bits format based at the year 0.
rubidium
parents:
4289
diff
changeset
|
91 |
Year lifelength; |
c2ae4dbc1074
(svn r5999) -Feature: change the original date format to a 32 bits format based at the year 0.
rubidium
parents:
4289
diff
changeset
|
92 |
Year base_life; |
6021 | 93 |
byte unk2; ///< Carriages have the highest bit set in this one |
5211
651c9272ad22
(svn r7326) -Feature: Add support for gradual (un)loading of vehicles (Maedhros)
peter1138
parents:
5187
diff
changeset
|
94 |
byte load_amount; |
6014 | 95 |
byte climates; |
2611
65b5313bc525
(svn r3148) -NewGRF, Feature: Add support for cargo refitting specification by cargo classes.
peter1138
parents:
2602
diff
changeset
|
96 |
uint32 refit_mask; |
3997
29c77eab14a4
(svn r5201) - NewGRF: add loading of default refit costs. This information is not yet used
peter1138
parents:
3956
diff
changeset
|
97 |
byte refit_cost; |
3095
2d4498efac3b
(svn r3684) - NewGRF: Support loading of miscellaneous flags (not used yet)
peter1138
parents:
3022
diff
changeset
|
98 |
byte misc_flags; |
3956
0f43adbc293a
(svn r5105) - NewGRF: Move callbackmask from *VehicleInfo to EngineInfo. This simplifies code that works with more than one vehicle type.
peter1138
parents:
3866
diff
changeset
|
99 |
byte callbackmask; |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
100 |
}; |
0 | 101 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
102 |
struct Engine { |
4289
ff1b2b915cab
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4077
diff
changeset
|
103 |
Date intro_date; |
ff1b2b915cab
(svn r5919) -Cleanup: use the type Date when the variable really is a date
rubidium
parents:
4077
diff
changeset
|
104 |
Date age; |
0 | 105 |
uint16 reliability; |
106 |
uint16 reliability_spd_dec; |
|
107 |
uint16 reliability_start, reliability_max, reliability_final; |
|
108 |
uint16 duration_phase_1, duration_phase_2, duration_phase_3; |
|
109 |
byte lifelength; |
|
110 |
byte flags; |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
111 |
PlayerByte preview_player; |
0 | 112 |
byte preview_wait; |
2331
72a9f9b31e4e
(svn r2857) -Fix: PlayerID is not a valid type for a player-bit-field. Partly reverted r2290
truelight
parents:
2186
diff
changeset
|
113 |
byte player_avail; |
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
114 |
byte type; ///< type, ie VEH_ROAD, VEH_TRAIN, etc. Same as in vehicle.h |
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
115 |
}; |
0 | 116 |
|
3113
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
117 |
/** |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
118 |
* EngineInfo.misc_flags is a bitmask, with the following values |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
119 |
*/ |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
120 |
enum { |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
121 |
EF_RAIL_TILTS = 0, ///< Rail vehicle tilts in curves (unsupported) |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
122 |
EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle (unsup) |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
123 |
EF_USES_2CC = 1, ///< Vehicle uses two company colours |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
124 |
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU) |
c0f312f22238
(svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour.
peter1138
parents:
3095
diff
changeset
|
125 |
}; |
0 | 126 |
|
6500
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
127 |
/** |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
128 |
* Engine.flags is a bitmask, with the following values. |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
129 |
*/ |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
130 |
enum { |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
131 |
ENGINE_AVAILABLE = 1, ///< This vehicle is available to everyone. |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
132 |
ENGINE_EXCLUSIVE_PREVIEW = 2, ///< This vehicle is in the exclusive preview stage, either being used or being offered to a player. |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
133 |
ENGINE_OFFER_WINDOW_OPEN = 4, ///< The exclusive offer window is currently open for a player. |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
134 |
}; |
08ea5741ee39
(svn r8944) -Codechange: Move the enum describing the bitmask of Engine.flags to engine.h and give the enum values better names.
maedhros
parents:
6451
diff
changeset
|
135 |
|
0 | 136 |
enum { |
1802
448f187042d3
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1786
diff
changeset
|
137 |
NUM_VEHICLE_TYPES = 6 |
448f187042d3
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1786
diff
changeset
|
138 |
}; |
0 | 139 |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
140 |
static const EngineID INVALID_ENGINE = 0xFFFF; |
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5726
diff
changeset
|
141 |
|
2848 | 142 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
143 |
void AddTypeToEngines(); |
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
144 |
void StartupEngines(); |
0 | 145 |
|
146 |
||
5919
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
147 |
void DrawTrainEngine(int x, int y, EngineID engine, SpriteID pal); |
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
148 |
void DrawRoadVehEngine(int x, int y, EngineID engine, SpriteID pal); |
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
149 |
void DrawShipEngine(int x, int y, EngineID engine, SpriteID pal); |
2b58160d667d
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5838
diff
changeset
|
150 |
void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal); |
0 | 151 |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
152 |
void LoadCustomEngineNames(); |
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
153 |
void DeleteCustomEngineNames(); |
0 | 154 |
|
5215
439d5ca71311
(svn r7330) -Fix (r7304): Data invalidation doesn't always happen as the local
peter1138
parents:
5211
diff
changeset
|
155 |
bool IsEngineBuildable(EngineID engine, byte type, PlayerID player); |
0 | 156 |
|
157 |
enum { |
|
158 |
NUM_NORMAL_RAIL_ENGINES = 54, |
|
4344
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
159 |
NUM_MONORAIL_ENGINES = 30, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
160 |
NUM_MAGLEV_ENGINES = 32, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
161 |
NUM_TRAIN_ENGINES = NUM_NORMAL_RAIL_ENGINES + NUM_MONORAIL_ENGINES + NUM_MAGLEV_ENGINES, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
162 |
NUM_ROAD_ENGINES = 88, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
163 |
NUM_SHIP_ENGINES = 11, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
164 |
NUM_AIRCRAFT_ENGINES = 41, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
165 |
TOTAL_NUM_ENGINES = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES + NUM_SHIP_ENGINES + NUM_AIRCRAFT_ENGINES, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
166 |
AIRCRAFT_ENGINES_INDEX = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES + NUM_SHIP_ENGINES, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
167 |
SHIP_ENGINES_INDEX = NUM_TRAIN_ENGINES + NUM_ROAD_ENGINES, |
5d0e40cd67b9
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
168 |
ROAD_ENGINES_INDEX = NUM_TRAIN_ENGINES, |
0 | 169 |
}; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
170 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
171 |
static inline EngineID GetFirstEngineOfType(byte type) |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
172 |
{ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
173 |
const EngineID start[] = {0, ROAD_ENGINES_INDEX, SHIP_ENGINES_INDEX, AIRCRAFT_ENGINES_INDEX}; |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
174 |
|
6206
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6195
diff
changeset
|
175 |
return start[type]; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
176 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
177 |
|
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
178 |
static inline EngineID GetLastEngineOfType(byte type) |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
179 |
{ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
180 |
const EngineID end[] = { |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
181 |
NUM_TRAIN_ENGINES, |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
182 |
ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES, |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
183 |
SHIP_ENGINES_INDEX + NUM_SHIP_ENGINES, |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
184 |
AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES}; |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
185 |
|
6206
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6195
diff
changeset
|
186 |
return end[type]; |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
187 |
} |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
188 |
|
0 | 189 |
VARDEF Engine _engines[TOTAL_NUM_ENGINES]; |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
190 |
#define FOR_ALL_ENGINES(e) for (e = _engines; e != endof(_engines); e++) |
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
191 |
#define FOR_ALL_ENGINEIDS_OF_TYPE(e, type) for (e = GetFirstEngineOfType(type); e != GetLastEngineOfType(type); e++) |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
192 |
|
1926
68d60188a22f
(svn r2432) Use GetEngine() instead of DEREF_ENGINE() or even _engines[]
tron
parents:
1922
diff
changeset
|
193 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
194 |
static inline Engine* GetEngine(EngineID i) |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
195 |
{ |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4023
diff
changeset
|
196 |
assert(i < lengthof(_engines)); |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4023
diff
changeset
|
197 |
return &_engines[i]; |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
198 |
} |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
199 |
|
0 | 200 |
VARDEF StringID _engine_name_strings[TOTAL_NUM_ENGINES]; |
201 |
||
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
202 |
static inline bool IsEngineIndex(uint index) |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
203 |
{ |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
204 |
return index < TOTAL_NUM_ENGINES; |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
205 |
} |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1477
diff
changeset
|
206 |
|
376
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
207 |
/* Access Vehicle Data */ |
1a4425a0a953
(svn r565) -newgrf: fixed double work of RoadVehicleInfo[]; added AircraftVehicleInfo[] as well. table/engines.h is now the same as in the _map branch.
darkvater
parents:
374
diff
changeset
|
208 |
//#include "table/engines.h" |
2463
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
209 |
extern const EngineInfo orig_engine_info[TOTAL_NUM_ENGINES]; |
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
210 |
extern const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES]; |
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
211 |
extern const ShipVehicleInfo orig_ship_vehicle_info[NUM_SHIP_ENGINES]; |
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
212 |
extern const AircraftVehicleInfo orig_aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES]; |
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
213 |
extern const RoadVehicleInfo orig_road_vehicle_info[NUM_ROAD_ENGINES]; |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
214 |
|
2763 | 215 |
extern EngineInfo _engine_info[TOTAL_NUM_ENGINES]; |
216 |
extern RailVehicleInfo _rail_vehicle_info[NUM_TRAIN_ENGINES]; |
|
217 |
extern ShipVehicleInfo _ship_vehicle_info[NUM_SHIP_ENGINES]; |
|
218 |
extern AircraftVehicleInfo _aircraft_vehicle_info[NUM_AIRCRAFT_ENGINES]; |
|
219 |
extern RoadVehicleInfo _road_vehicle_info[NUM_ROAD_ENGINES]; |
|
2463
de2605ed3758
(svn r2989) - Make engine/vehicle information tables constant. Duplicate them so NewGRF data can be loaded without wiping out the default data.
peter1138
parents:
2436
diff
changeset
|
220 |
|
3393
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
221 |
static inline const EngineInfo *EngInfo(EngineID e) |
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
222 |
{ |
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
223 |
assert(e < lengthof(_engine_info)); |
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
224 |
return &_engine_info[e]; |
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
225 |
} |
48ce4c723a76
(svn r4201) - Codechange: Do for _engine_info[] what we do for _*_vehicle_info[]; create and use a function to retrieve data, and ensure constness.
peter1138
parents:
3344
diff
changeset
|
226 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
227 |
static inline const RailVehicleInfo* RailVehInfo(EngineID e) |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
228 |
{ |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
229 |
assert(e < lengthof(_rail_vehicle_info)); |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
230 |
return &_rail_vehicle_info[e]; |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
231 |
} |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
232 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
233 |
static inline const ShipVehicleInfo* ShipVehInfo(EngineID e) |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
234 |
{ |
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
235 |
assert(e >= SHIP_ENGINES_INDEX && e < SHIP_ENGINES_INDEX + lengthof(_ship_vehicle_info)); |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
236 |
return &_ship_vehicle_info[e - SHIP_ENGINES_INDEX]; |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
237 |
} |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
238 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
239 |
static inline const AircraftVehicleInfo* AircraftVehInfo(EngineID e) |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
240 |
{ |
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
241 |
assert(e >= AIRCRAFT_ENGINES_INDEX && e < AIRCRAFT_ENGINES_INDEX + lengthof(_aircraft_vehicle_info)); |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
242 |
return &_aircraft_vehicle_info[e - AIRCRAFT_ENGINES_INDEX]; |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
243 |
} |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
244 |
|
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
245 |
static inline const RoadVehicleInfo* RoadVehInfo(EngineID e) |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
246 |
{ |
2477
d454d5152386
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2464
diff
changeset
|
247 |
assert(e >= ROAD_ENGINES_INDEX && e < ROAD_ENGINES_INDEX + lengthof(_road_vehicle_info)); |
538
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
248 |
return &_road_vehicle_info[e - ROAD_ENGINES_INDEX]; |
5dd99f3b7eca
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
445
diff
changeset
|
249 |
} |
405
6830ae7a0d5d
(svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky)
darkvater
parents:
389
diff
changeset
|
250 |
|
2848 | 251 |
/************************************************************************ |
252 |
* Engine Replacement stuff |
|
253 |
************************************************************************/ |
|
254 |
||
255 |
/** |
|
256 |
* Struct to store engine replacements. DO NOT USE outside of engine.c. Is |
|
257 |
* placed here so the only exception to this rule, the saveload code, can use |
|
258 |
* it. |
|
259 |
*/ |
|
260 |
struct EngineRenew { |
|
4348
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
261 |
EngineRenewID index; |
2848 | 262 |
EngineID from; |
263 |
EngineID to; |
|
9895
7bd07f43b0e3
(svn r9321) [gamebalance] -Sync: r9025:9314 from trunk
celestar
parents:
6519
diff
changeset
|
264 |
EngineRenew *next; |
2848 | 265 |
}; |
266 |
||
267 |
/** |
|
268 |
* Memory pool for engine renew elements. DO NOT USE outside of engine.c. Is |
|
269 |
* placed here so the only exception to this rule, the saveload code, can use |
|
270 |
* it. |
|
271 |
*/ |
|
5216
d581e4db95b6
(svn r7331) - Codechange: Rename all memory pool macro's and types to "old pool", so the new pool implementation can be committed alongside it.
matthijs
parents:
5215
diff
changeset
|
272 |
DECLARE_OLD_POOL(EngineRenew, EngineRenew, 3, 8000) |
4348
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
273 |
|
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
274 |
/** |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
275 |
* Check if a EngineRenew really exists. |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
276 |
*/ |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
277 |
static inline bool IsValidEngineRenew(const EngineRenew *er) |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
278 |
{ |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
279 |
return er->from != INVALID_ENGINE; |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
280 |
} |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
281 |
|
4384
293c0d26294c
(svn r6137) -Codechange: some very minor cleanups:
truelight
parents:
4348
diff
changeset
|
282 |
static inline void DeleteEngineRenew(EngineRenew *er) |
293c0d26294c
(svn r6137) -Codechange: some very minor cleanups:
truelight
parents:
4348
diff
changeset
|
283 |
{ |
293c0d26294c
(svn r6137) -Codechange: some very minor cleanups:
truelight
parents:
4348
diff
changeset
|
284 |
er->from = INVALID_ENGINE; |
293c0d26294c
(svn r6137) -Codechange: some very minor cleanups:
truelight
parents:
4348
diff
changeset
|
285 |
} |
293c0d26294c
(svn r6137) -Codechange: some very minor cleanups:
truelight
parents:
4348
diff
changeset
|
286 |
|
4974
c962d0622bc1
(svn r6977) Use the pool macros for the EngineRenew pool
tron
parents:
4549
diff
changeset
|
287 |
#define FOR_ALL_ENGINE_RENEWS_FROM(er, start) for (er = GetEngineRenew(start); er != NULL; er = (er->index + 1U < GetEngineRenewPoolSize()) ? GetEngineRenew(er->index + 1U) : NULL) if (er->from != INVALID_ENGINE) if (IsValidEngineRenew(er)) |
4348
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
288 |
#define FOR_ALL_ENGINE_RENEWS(er) FOR_ALL_ENGINE_RENEWS_FROM(er, 0) |
95ba9ff1612e
(svn r6049) -Codechange: forgot EngineRenew in r6047
truelight
parents:
4344
diff
changeset
|
289 |
|
2848 | 290 |
|
291 |
/** |
|
292 |
* A list to group EngineRenew directives together (such as per-player). |
|
293 |
*/ |
|
294 |
typedef EngineRenew* EngineRenewList; |
|
295 |
||
296 |
/** |
|
297 |
* Remove all engine replacement settings for the player. |
|
298 |
* @param er The renewlist for a given player. |
|
299 |
* @return The new renewlist for the player. |
|
300 |
*/ |
|
301 |
void RemoveAllEngineReplacement(EngineRenewList* erl); |
|
302 |
||
303 |
/** |
|
304 |
* Retrieve the engine replacement in a given renewlist for an original engine type. |
|
305 |
* @param erl The renewlist to search in. |
|
306 |
* @param engine Engine type to be replaced. |
|
307 |
* @return The engine type to replace with, or INVALID_ENGINE if no |
|
308 |
* replacement is in the list. |
|
309 |
*/ |
|
310 |
EngineID EngineReplacement(EngineRenewList erl, EngineID engine); |
|
311 |
||
312 |
/** |
|
313 |
* Add an engine replacement to the given renewlist. |
|
314 |
* @param erl The renewlist to add to. |
|
315 |
* @param old_engine The original engine type. |
|
316 |
* @param new_engine The replacement engine type. |
|
317 |
* @param flags The calling command flags. |
|
318 |
* @return 0 on success, CMD_ERROR on failure. |
|
319 |
*/ |
|
320 |
int32 AddEngineReplacement(EngineRenewList* erl, EngineID old_engine, EngineID new_engine, uint32 flags); |
|
321 |
||
322 |
/** |
|
323 |
* Remove an engine replacement from a given renewlist. |
|
324 |
* @param erl The renewlist from which to remove the replacement |
|
325 |
* @param engine The original engine type. |
|
326 |
* @param flags The calling command flags. |
|
327 |
* @return 0 on success, CMD_ERROR on failure. |
|
328 |
*/ |
|
329 |
int32 RemoveEngineReplacement(EngineRenewList* erl, EngineID engine, uint32 flags); |
|
330 |
||
6195
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
331 |
/** When an engine is made buildable or is removed from being buildable, add/remove it from the build/autoreplace lists |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
332 |
* @param type The type of engine |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
333 |
*/ |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
334 |
void AddRemoveEngineFromAutoreplaceAndBuildWindows(byte type); |
b90cf92697b9
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
6119
diff
changeset
|
335 |
|
5187
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
336 |
/* Engine list manipulators - current implementation is only C wrapper of CBlobT<EngineID> class (helpers.cpp) */ |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
337 |
void EngList_Create(EngineList *el); ///< Creates engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
338 |
void EngList_Destroy(EngineList *el); ///< Deallocate and destroy engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
339 |
uint EngList_Count(const EngineList *el); ///< Returns number of items in the engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
340 |
void EngList_Add(EngineList *el, EngineID eid); ///< Append one item at the end of engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
341 |
EngineID* EngList_Items(EngineList *el); ///< Returns engine list items as C array |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
342 |
void EngList_RemoveAll(EngineList *el); ///< Removes all items from engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
343 |
typedef int CDECL EngList_SortTypeFunction(const void*, const void*); ///< argument type for EngList_Sort() |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
344 |
void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare); ///< qsort of the engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
345 |
void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items); ///< qsort of specified portion of the engine list |
d1f4e447a7eb
(svn r7299) -CodeChange: Train and Aircraft Build window GUI code simplified a bit:
KUDr
parents:
5037
diff
changeset
|
346 |
|
2436
177cb6a8339f
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2331
diff
changeset
|
347 |
#endif /* ENGINE_H */ |