summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-05-06 20:48:40 +0000
committerpeter1138 <peter1138@openttd.org>2006-05-06 20:48:40 +0000
commitdb77493ac0bf3a66a55683a469dc106641895d19 (patch)
tree4cebbdeb0190e32f9ef2862b27b3eb32fd51267d
parent09bb8ba10c0c808e17d72741b08be0eb4549c2f5 (diff)
downloadopenttd-db77493ac0bf3a66a55683a469dc106641895d19.tar.xz
(svn r4755) - Newstations: add a gui station tile drawing routine and use it in place of the existing one for waypoints.
-rw-r--r--newgrf_station.c59
-rw-r--r--newgrf_station.h3
-rw-r--r--waypoint.c36
3 files changed, 63 insertions, 35 deletions
diff --git a/newgrf_station.c b/newgrf_station.c
index d15af4bf2..6a930ba61 100644
--- a/newgrf_station.c
+++ b/newgrf_station.c
@@ -5,8 +5,10 @@
#include "stdafx.h"
#include "openttd.h"
#include "variables.h"
+#include "functions.h"
#include "debug.h"
#include "sprite.h"
+#include "table/sprites.h"
#include "table/strings.h"
#include "station.h"
#include "station_map.h"
@@ -564,3 +566,60 @@ bool DeallocateSpecFromStation(Station *st, byte specindex)
return freeable;
}
+
+/** Draw representation of a station tile for GUI purposes.
+ * @param x, y Position of image.
+ * @param dir Direction.
+ * @param railtype Rail type.
+ * @param sclass, station Type of station.
+ * @return True if the tile was drawn (allows for fallback to default graphic)
+ */
+bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station)
+{
+ extern uint16 _custom_sprites_base;
+
+ const StationSpec *statspec;
+ const DrawTileSprites *sprites;
+ const DrawTileSeqStruct *seq;
+ const RailtypeInfo *rti = GetRailTypeInfo(railtype);
+ SpriteID relocation;
+ PalSpriteID image;
+ PalSpriteID colourmod = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player));
+ uint tile = 2;
+
+ statspec = GetCustomStationSpec(sclass, station);
+ if (statspec == NULL) return false;
+
+ relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE);
+
+ if (HASBIT(statspec->callbackmask, CBM_CUSTOM_LAYOUT)) {
+ uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0x2110000, 0, statspec, NULL, INVALID_TILE);
+ if (callback != CALLBACK_FAILED) tile = callback;
+ }
+
+ if (statspec->renderdata == NULL) {
+ sprites = GetStationTileLayout(tile + axis);
+ relocation -= 0x42D;
+ } else {
+ sprites = &statspec->renderdata[(tile < statspec->tiles) ? tile + axis : axis];
+ }
+
+ image = sprites->ground_sprite;
+ image += (image < _custom_sprites_base) ? rti->total_offset : rti->custom_ground_offset;
+
+ if (image & PALETTE_MODIFIER_COLOR) image &= SPRITE_MASK;
+ DrawSprite(image, x, y);
+
+ foreach_draw_tile_seq(seq, sprites->seq) {
+ Point pt;
+ image = seq->image + relocation;
+
+ if ((byte)seq->delta_z != 0x80) {
+ pt = RemapCoords(seq->delta_x, seq->delta_y, seq->delta_z);
+ DrawSprite((image & SPRITE_MASK) | colourmod, x + pt.x, y + pt.y);
+ }
+ }
+
+ return true;
+}
+
diff --git a/newgrf_station.h b/newgrf_station.h
index cd3900d73..50b4dc6ea 100644
--- a/newgrf_station.h
+++ b/newgrf_station.h
@@ -107,4 +107,7 @@ int AllocateSpecToStation(const StationSpec *statspec, Station *st, bool exec);
/* Deallocate a StationSpec from a Station. Called when removing a single station tile. */
bool DeallocateSpecFromStation(Station *st, byte specindex);
+/* Draw representation of a station tile for GUI purposes. */
+bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station);
+
#endif /* NEWGRF_STATION_H */
diff --git a/waypoint.c b/waypoint.c
index e4fef4ab7..857c25af1 100644
--- a/waypoint.c
+++ b/waypoint.c
@@ -15,7 +15,6 @@
#include "town.h"
#include "waypoint.h"
#include "variables.h"
-#include "table/sprites.h"
#include "table/strings.h"
#include "vehicle.h"
@@ -379,47 +378,14 @@ Station *ComposeWaypointStation(TileIndex tile)
return &stat;
}
-extern uint16 _custom_sprites_base;
-
-
/* Draw a waypoint */
void DrawWaypointSprite(int x, int y, int stat_id, RailType railtype)
{
- const StationSpec *statspec;
- uint32 relocation;
- const DrawTileSprites *cust;
- DrawTileSeqStruct const *seq;
- const RailtypeInfo *rti = GetRailTypeInfo(railtype);
- uint32 ormod, img;
-
- ormod = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(_local_player));
-
x += 33;
y += 17;
- statspec = GetCustomStationSpec(STAT_CLASS_WAYP, stat_id);
- if (statspec == NULL) {
- // stat is NULL for default waypoints and when waypoint graphics are
- // not loaded.
+ if (!DrawStationTile(x, y, railtype, AXIS_X, STAT_CLASS_WAYP, stat_id)) {
DrawDefaultWaypointSprite(x, y, railtype);
- return;
- }
-
- relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE);
- // emulate station tile - open with building
- // add 1 to get the other direction
- cust = &statspec->renderdata[2];
-
- img = cust->ground_sprite;
- img += (img < _custom_sprites_base) ? rti->total_offset : rti->custom_ground_offset;
-
- if (img & PALETTE_MODIFIER_COLOR) img = (img & SPRITE_MASK);
- DrawSprite(img, x, y);
-
- foreach_draw_tile_seq(seq, cust->seq) {
- Point pt = RemapCoords(seq->delta_x, seq->delta_y, seq->delta_z);
- uint32 image = seq->image + relocation;
- DrawSprite((image & SPRITE_MASK) | ormod, x + pt.x, y + pt.y);
}
}