diff options
author | frosch <frosch@openttd.org> | 2010-01-14 22:56:54 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2010-01-14 22:56:54 +0000 |
commit | ed83388faa6936c96cdc389a8f9d8bee30e9ad84 (patch) | |
tree | 10808808941bbd6520e93ee51460075a5d554476 /src/station_cmd.cpp | |
parent | f89d6bea0ef8d198027c7bcaed5c457aaa228330 (diff) | |
download | openttd-ed83388faa6936c96cdc389a8f9d8bee30e9ad84.tar.xz |
(svn r18802) -Codechange: Deduplicate drawing-code for depots and stations/waypoints.
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r-- | src/station_cmd.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index e3cba4b3e..a7e5d662d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2457,12 +2457,26 @@ static void DrawTile_Station(TileInfo *ti) total_offset = 0; } - const DrawTileSeqStruct *dtss; - foreach_draw_tile_seq(dtss, t->seq) { + DrawStationTileSeq(ti, t, TO_BUILDINGS, total_offset, relocation, palette); +} + +/** + * Draws a station, waypoint or depot including all subsprites on a tile. + * @param ti The tile to draw on + * @param dts Sprite and subsprites to draw + * @param to The transparancy bit that toggles drawing of these sprites + * @param total_offset Sprite-Offset between the current railtype and normal rail + * @param relocation Sprite-Offset for NewGRF defined stations + * @param default_palette The default recolour sprite to use (typically company colour) + */ +void DrawStationTileSeq(const TileInfo *ti, const DrawTileSprites *dts, TransparencyOption to, int32 total_offset, uint32 relocation, SpriteID default_palette) +{ + const DrawTileSeqStruct *dtss; + foreach_draw_tile_seq(dtss, dts->seq) { SpriteID image = dtss->image.sprite; /* Stop drawing sprite sequence once we meet a sprite that doesn't have to be opaque */ - if (IsInvisibilitySet(TO_BUILDINGS) && !HasBit(image, SPRITE_MODIFIER_OPAQUE)) return; + if (IsInvisibilitySet(to) && !HasBit(image, SPRITE_MODIFIER_OPAQUE)) return; if (relocation == 0 || HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) { image += total_offset; @@ -2470,7 +2484,7 @@ static void DrawTile_Station(TileInfo *ti) image += relocation; } - SpriteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, palette); + SpriteID pal = SpriteLayoutPaletteTransform(image, dtss->image.pal, default_palette); if ((byte)dtss->delta_z != 0x80) { AddSortableSpriteToDraw( @@ -2478,11 +2492,11 @@ static void DrawTile_Station(TileInfo *ti) ti->x + dtss->delta_x, ti->y + dtss->delta_y, dtss->size_x, dtss->size_y, dtss->size_z, ti->z + dtss->delta_z, - !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS) + !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to) ); } else { /* For stations and original spritelayouts delta_x and delta_y are signed */ - AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS)); + AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, !HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(to)); } } } |