changeset 3528:b55a94c93b99 draft

(svn r4384) -Codechange: rail drawing code -Added a function to obtain the axis of a waypoint -Moved the waypoint layout tables from the depot layout tables into an own one -Use GetRailTileSubtype
author celestar <celestar@openttd.org>
date Wed, 12 Apr 2006 12:50:40 +0000
parents 78187ecf345e
children 1f30f60f6a67
files rail_cmd.c rail_map.h table/track_land.h
diffstat 3 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/rail_cmd.c
+++ b/rail_cmd.c
@@ -1304,7 +1304,7 @@
 	} else {
 		/* draw depots / waypoints */
 		const DrawTrackSeqStruct *drss;
-		byte type = ti->map5 & 0x3F; // 0-3: depots, 4-5: waypoints
+		bool is_depot = GetRailTileSubtype(ti->tile) == RAIL_SUBTYPE_DEPOT;
 
 		if (ti->tileh != 0) DrawFoundation(ti, ti->tileh);
 
@@ -1316,7 +1316,7 @@
 			if (stat != NULL) {
 				DrawTileSeqStruct const *seq;
 				// emulate station tile - open with building
-				const DrawTileSprites *cust = &stat->renderdata[2 + (ti->map5 & 0x1)];
+				const DrawTileSprites *cust = &stat->renderdata[2 + GetWaypointAxis(ti->tile)];
 				uint32 relocation = GetCustomStationRelocation(stat, ComposeWaypointStation(ti->tile), 0);
 
 				/* We don't touch the 0x8000 bit. In all this
@@ -1346,7 +1346,7 @@
 			}
 		}
 
-		drss = _track_depot_layout_table[type];
+		drss = is_depot ? _track_depot_layout_table[GetRailDepotDirection(ti->tile)] : _track_waypoint_layout_table[GetWaypointAxis(ti->tile)];
 
 		image = drss++->image;
 		/* @note This is kind of an ugly hack, as the PALETTE_MODIFIER_COLOR indicates
@@ -1356,7 +1356,7 @@
 		// adjust ground tile for desert
 		// (don't adjust for arctic depots, because snow in depots looks weird)
 		// type >= 4 means waypoints
-		if (IsSnowRailGround(ti->tile) && (_opt.landscape == LT_DESERT || type >= 4)) {
+		if (IsSnowRailGround(ti->tile) && (_opt.landscape == LT_DESERT || !is_depot)) {
 			if (image != SPR_FLAT_GRASS_TILE) {
 				image += rti->snow_offset; // tile with tracks
 			} else {
@@ -1370,7 +1370,7 @@
 
 		for (; drss->image != 0; drss++) {
 			DrawSpecialBuilding(
-				drss->image, type < 4 ? rti->total_offset : 0, ti,
+				drss->image, is_depot ? rti->total_offset : 0, ti,
 				drss->subcoord_x, drss->subcoord_y, 0,
 				drss->width, drss->height, 0x17
 			);
--- a/rail_map.h
+++ b/rail_map.h
@@ -144,6 +144,11 @@
 	CLRBIT(_m[t].m3, 4);
 }
 
+static inline Axis GetWaypointAxis(TileIndex t)
+{
+	return HASBIT(_m[t].m5, 0) ? AXIS_Y : AXIS_X;
+}
+
 
 typedef enum SignalType {
 	SIGTYPE_NORMAL  = 0, // normal signal
--- a/table/track_land.h
+++ b/table/track_land.h
@@ -58,7 +58,9 @@
 	_track_depot_layout_table_1,
 	_track_depot_layout_table_2,
 	_track_depot_layout_table_3,
+};
 
+static const DrawTrackSeqStruct* const _track_waypoint_layout_table[] = {
 	_track_waypoint_table_0,
 	_track_waypoint_table_1,
 };