From 345f160978ada62ad59cb8f9d34c135a536ccbb1 Mon Sep 17 00:00:00 2001 From: smatz Date: Thu, 24 Apr 2008 13:05:51 +0000 Subject: [PATCH] (svn r12870) -Codechange: remove some magic numbers from u.ship.state handling --- src/direction_func.h | 16 ++++++++++++++++ src/ship.h | 2 +- src/ship_cmd.cpp | 20 ++++++++------------ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/direction_func.h b/src/direction_func.h index 2cfe99534c..8b07904831 100644 --- a/src/direction_func.h +++ b/src/direction_func.h @@ -167,6 +167,22 @@ static inline DiagDirection AxisToDiagDir(Axis a) return (DiagDirection)(2 - a); } +/** + * 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 diff --git a/src/ship.h b/src/ship.h index 7f73536426..f433c065d1 100644 --- a/src/ship.h +++ b/src/ship.h @@ -38,7 +38,7 @@ struct Ship: public Vehicle { 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); diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index a6a4251504..12881d1e0d 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -282,26 +282,22 @@ static const TileIndexDiffC _ship_leave_depot_offs[] = { 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;