diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/direction_func.h | 16 | ||||
-rw-r--r-- | src/ship.h | 2 | ||||
-rw-r--r-- | 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 2cfe99534..8b0790483 100644 --- a/src/direction_func.h +++ b/src/direction_func.h @@ -168,6 +168,22 @@ static inline DiagDirection AxisToDiagDir(Axis 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 * @param ns north -> 0, south -> 1 diff --git a/src/ship.h b/src/ship.h index 7f7353642..f433c065d 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 a6a425150..12881d1e0 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; |