changeset 3472:34f02a91f219 draft

(svn r4317) -Codechange: More map accessors for ship_cmd. it is now map-access free, but still requires a huge cleanup
author celestar <celestar@openttd.org>
date Fri, 07 Apr 2006 15:57:03 +0000
parents 05eabc9fb366
children d7511478b000
files ship_cmd.c station_map.h
diffstat 2 files changed, 20 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/ship_cmd.c
+++ b/ship_cmd.c
@@ -190,17 +190,6 @@
 	SndPlayVehicleFx(ShipVehInfo(v->engine_type)->sfx, v);
 }
 
-static const TileIndexDiffC _dock_offs[] = {
-	{ 2,  0},
-	{-2,  0},
-	{ 0,  2},
-	{ 2,  0},
-	{ 0, -2},
-	{ 0,  0},
-	{ 0,  0},
-	{ 0,  0}
-};
-
 static void ProcessShipOrder(Vehicle *v)
 {
 	const Order *order;
@@ -245,7 +234,7 @@
 
 		st = GetStation(order->station);
 		if (st->dock_tile != 0) {
-			v->dest_tile = TILE_ADD(st->dock_tile, ToTileIndexDiff(_dock_offs[_m[st->dock_tile].m5-0x4B]));
+			v->dest_tile = TILE_ADD(st->dock_tile, ToTileIndexDiff(GetDockOffset(st->dock_tile)));
 		}
 	} else if (order->type == OT_GOTO_DEPOT) {
 		v->dest_tile = GetDepot(order->station)->xy;
--- a/station_map.h
+++ b/station_map.h
@@ -184,6 +184,25 @@
 	return (DiagDirection)(_m[t].m5 - DOCK_BASE);
 }
 
+static inline TileIndexDiffC GetDockOffset(TileIndex t)
+{
+	static const TileIndexDiffC buoy_offset = {0, 0};
+	static const TileIndexDiffC oilrig_offset = {2, 0};
+	static const TileIndexDiffC dock_offset[DIAGDIR_END] = {
+		{-2,  0},
+		{ 0,  2},
+		{ 2,  0},
+		{ 0, -2},
+	};
+	assert(IsTileType(t, MP_STATION));
+
+	if (IsBuoy_(t)) return buoy_offset;
+	if (IsOilRig(t)) return oilrig_offset;
+
+	assert(IsDock(t));
+
+	return dock_offset[GetDockDirection(t)];
+}
 
 static inline bool IsCustomStationSprite(TileIndex t)
 {