(svn r12870) -Codechange: remove some magic numbers from u.ship.state handling
authorsmatz
Thu, 24 Apr 2008 13:05:51 +0000
changeset 10329 69e49f381f7f
parent 10322 02d72ef5a6a7
child 10331 591ed295da2b
(svn r12870) -Codechange: remove some magic numbers from u.ship.state handling
src/direction_func.h
src/ship.h
src/ship_cmd.cpp
--- a/src/direction_func.h	Thu Apr 24 11:11:50 2008 +0000
+++ b/src/direction_func.h	Thu Apr 24 13:05:51 2008 +0000
@@ -168,6 +168,22 @@
 }
 
 /**
+ * Converts an Axis to a Direction
+ *
+ * This function returns the Direction which
+ * belongs to the axis. As 2 directions are mapped to an axis
+ * this function returns the one which points to south,
+ * either south-west (on X axis) or south-east (on Y axis)
+ *
+ * @param a The axis
+ * @return The direction pointed to south
+ */
+static inline Direction AxisToDirection(Axis a)
+{
+	return (Direction)(5 - 2 * a);
+}
+
+/**
  * Convert an axis and a flag for north/south into a DiagDirection
  * @param xy axis to convert
  * @param ns north -> 0, south -> 1
--- a/src/ship.h	Thu Apr 24 11:11:50 2008 +0000
+++ b/src/ship.h	Thu Apr 24 13:05:51 2008 +0000
@@ -38,7 +38,7 @@
 	int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
 	int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
 	Money GetRunningCost() const { return ShipVehInfo(this->engine_type)->running_cost * _price.ship_running; }
-	bool IsInDepot() const { return this->u.ship.state == 0x80; }
+	bool IsInDepot() const { return this->u.ship.state == TRACK_BIT_DEPOT; }
 	void Tick();
 	void OnNewDay();
 	TileIndex GetOrderStationLocation(StationID station);
--- a/src/ship_cmd.cpp	Thu Apr 24 11:11:50 2008 +0000
+++ b/src/ship_cmd.cpp	Thu Apr 24 13:05:51 2008 +0000
@@ -282,26 +282,22 @@
 
 static void CheckShipLeaveDepot(Vehicle *v)
 {
-	TileIndex tile;
-	Axis axis;
-	uint m;
-
 	if (!v->IsInDepot()) return;
 
-	tile = v->tile;
-	axis = GetShipDepotAxis(tile);
+	TileIndex tile = v->tile;
+	Axis axis = GetShipDepotAxis(tile);
 
-	/* Check first side */
+	/* Check first (north) side */
 	if (_ship_sometracks[axis] & GetTileShipTrackStatus(TILE_ADD(tile, ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
-		m = (axis == AXIS_X) ? 0x101 : 0x207;
-	/* Check second side */
+		v->direction = ReverseDir(AxisToDirection(axis));
+	/* Check second (south) side */
 	} else if (_ship_sometracks[axis + 2] & GetTileShipTrackStatus(TILE_ADD(tile, -2 * ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
-		m = (axis == AXIS_X) ? 0x105 : 0x203;
+		v->direction = AxisToDirection(axis);
 	} else {
 		return;
 	}
-	v->direction    = (Direction)GB(m, 0, 8);
-	v->u.ship.state = (TrackBits)GB(m, 8, 8);
+
+	v->u.ship.state = AxisToTrackBits(axis);
 	v->vehstatus &= ~VS_HIDDEN;
 
 	v->cur_speed = 0;