summaryrefslogtreecommitdiff
path: root/src/train_cmd.cpp
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2008-04-21 20:50:58 +0000
committerpeter1138 <peter1138@openttd.org>2008-04-21 20:50:58 +0000
commit5dcd689f5662d93ade95e3fd04332b8456605add (patch)
treeb307e9b6916fb53727cd6a80f2c5478a0b4ab819 /src/train_cmd.cpp
parent173ac52da5c933f35e5cae799679bed8c580078f (diff)
downloadopenttd-5dcd689f5662d93ade95e3fd04332b8456605add.tar.xz
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r--src/train_cmd.cpp78
1 files changed, 40 insertions, 38 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index a1a378602..84ad087c9 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -467,59 +467,61 @@ void UpdateTrainAcceleration(Vehicle *v)
v->acceleration = Clamp(power / weight * 4, 1, 255);
}
-int Train::GetImage(Direction direction) const
+SpriteID Train::GetImage(Direction direction) const
{
- int img = this->spritenum;
- int base;
+ uint8 spritenum = this->spritenum;
+ SpriteID sprite;
if (HasBit(this->u.rail.flags, VRF_REVERSE_DIRECTION)) direction = ReverseDir(direction);
- if (is_custom_sprite(img)) {
- base = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(img)));
- if (base != 0) return base;
- img = _orig_rail_vehicle_info[this->engine_type].image_index;
+ if (is_custom_sprite(spritenum)) {
+ sprite = GetCustomVehicleSprite(this, (Direction)(direction + 4 * IS_CUSTOM_SECONDHEAD_SPRITE(spritenum)));
+ if (sprite != 0) return sprite;
+
+ spritenum = _orig_rail_vehicle_info[this->engine_type].image_index;
}
- base = _engine_sprite_base[img] + ((direction + _engine_sprite_add[img]) & _engine_sprite_and[img]);
+ sprite = _engine_sprite_base[spritenum] + ((direction + _engine_sprite_add[spritenum]) & _engine_sprite_and[spritenum]);
+
+ if (this->cargo.Count() >= this->cargo_cap / 2U) sprite += _wagon_full_adder[spritenum];
- if (this->cargo.Count() >= this->cargo_cap / 2U) base += _wagon_full_adder[img];
- return base;
+ return sprite;
}
-void DrawTrainEngine(int x, int y, EngineID engine, SpriteID pal)
+static SpriteID GetRailIcon(EngineID engine, bool rear_head, int &y)
{
- const RailVehicleInfo *rvi = RailVehInfo(engine);
-
- int img = rvi->image_index;
- SpriteID image = 0;
+ Direction dir = rear_head ? DIR_E : DIR_W;
+ uint8 spritenum = RailVehInfo(engine)->image_index;
- if (is_custom_sprite(img)) {
- image = GetCustomVehicleIcon(engine, DIR_W);
- if (image == 0) {
- img = _orig_rail_vehicle_info[engine].image_index;
- } else {
- y += _traininfo_vehicle_pitch;
+ if (is_custom_sprite(spritenum)) {
+ SpriteID sprite = GetCustomVehicleIcon(engine, dir);
+ if (sprite != 0) {
+ y += _traininfo_vehicle_pitch; // TODO Make this per-GRF
+ return sprite;
}
- }
- if (image == 0) {
- image = (6 & _engine_sprite_and[img]) + _engine_sprite_base[img];
+
+ spritenum = _orig_rail_vehicle_info[engine].image_index;
}
- if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
- DrawSprite(image, pal, x - 14, y);
- x += 15;
- image = 0;
- if (is_custom_sprite(img)) {
- image = GetCustomVehicleIcon(engine, DIR_E);
- if (image == 0) img = _orig_rail_vehicle_info[engine].image_index;
- }
- if (image == 0) {
- image =
- ((6 + _engine_sprite_add[img + 1]) & _engine_sprite_and[img + 1]) +
- _engine_sprite_base[img + 1];
- }
+ if (rear_head) spritenum++;
+
+ return ((6 + _engine_sprite_add[spritenum]) & _engine_sprite_and[spritenum]) + _engine_sprite_base[spritenum];
+}
+
+void DrawTrainEngine(int x, int y, EngineID engine, SpriteID pal)
+{
+ if (RailVehInfo(engine)->railveh_type == RAILVEH_MULTIHEAD) {
+ int yf = y;
+ int yr = y;
+
+ SpriteID spritef = GetRailIcon(engine, false, yf);
+ SpriteID spriter = GetRailIcon(engine, true, yr);
+ DrawSprite(spritef, pal, x - 14, yf);
+ DrawSprite(spriter, pal, x + 15, yr);
+ } else {
+ SpriteID sprite = GetRailIcon(engine, false, y);
+ DrawSprite(sprite, pal, x, y);
}
- DrawSprite(image, pal, x, y);
}
static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)