Mercurial > hg > openttd
changeset 9045:bd6941096b6a draft
(svn r12870) -Codechange: remove some magic numbers from u.ship.state handling
author | smatz <smatz@openttd.org> |
---|---|
date | Thu, 24 Apr 2008 13:05:51 +0000 |
parents | a684adb26c57 |
children | 28b3e515c82a |
files | src/direction_func.h src/ship.h src/ship_cmd.cpp |
diffstat | 3 files changed, 25 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/direction_func.h +++ b/src/direction_func.h @@ -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 +++ b/src/ship.h @@ -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 +++ b/src/ship_cmd.cpp @@ -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;