summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/direction_func.h16
-rw-r--r--src/ship.h2
-rw-r--r--src/ship_cmd.cpp20
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;