summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/station_map.h192
1 files changed, 185 insertions, 7 deletions
diff --git a/src/station_map.h b/src/station_map.h
index 55d5c4139..35b5c55c8 100644
--- a/src/station_map.h
+++ b/src/station_map.h
@@ -18,12 +18,14 @@
#include "station_func.h"
#include "rail.h"
-typedef byte StationGfx;
+typedef byte StationGfx; ///< Index of station graphics. @see _station_display_datas
-/** Get Station ID from a tile
- * @pre Tile \t must be part of the station
+/**
+ * Get StationID from a tile
* @param t Tile to query station ID from
- * @return Station ID of the station at \a t */
+ * @pre IsTileType(t, MP_STATION)
+ * @return Station ID of the station at \a t
+ */
static inline StationID GetStationIndex(TileIndex t)
{
assert(IsTileType(t, MP_STATION));
@@ -277,54 +279,116 @@ static inline DiagDirection GetRoadStopDir(TileIndex t)
}
}
+/**
+ * Is tile \a t part of an oilrig?
+ * @param t Tile to check
+ * @pre IsTileType(t, MP_STATION)
+ * @return \c true if the tile is an oilrig tile
+ */
static inline bool IsOilRig(TileIndex t)
{
return GetStationType(t) == STATION_OILRIG;
}
+/**
+ * Is tile \a t a dock tile?
+ * @param t Tile to check
+ * @pre IsTileType(t, MP_STATION)
+ * @return \c true if the tile is a dock
+ */
static inline bool IsDock(TileIndex t)
{
return GetStationType(t) == STATION_DOCK;
}
+/**
+ * Is tile \a t a dock tile?
+ * @param t Tile to check
+ * @return \c true if the tile is a dock
+ */
static inline bool IsDockTile(TileIndex t)
{
return IsTileType(t, MP_STATION) && GetStationType(t) == STATION_DOCK;
}
+/**
+ * Is tile \a t a buoy tile?
+ * @param t Tile to check
+ * @pre IsTileType(t, MP_STATION)
+ * @return \c true if the tile is a buoy
+ */
static inline bool IsBuoy(TileIndex t)
{
return GetStationType(t) == STATION_BUOY;
}
+/**
+ * Is tile \a t a buoy tile?
+ * @param t Tile to check
+ * @return \c true if the tile is a buoy
+ */
static inline bool IsBuoyTile(TileIndex t)
{
return IsTileType(t, MP_STATION) && IsBuoy(t);
}
+/**
+ * Is tile \a t an hangar tile?
+ * @param t Tile to check
+ * @return \c true if the tile is an hangar
+ */
static inline bool IsHangarTile(TileIndex t)
{
return IsTileType(t, MP_STATION) && IsHangar(t);
}
-
+/**
+ * Get the rail direction of a rail station.
+ * @param t Tile to query
+ * @pre HasStationRail(t)
+ * @return The direction of the rails on tile \a t.
+ */
static inline Axis GetRailStationAxis(TileIndex t)
{
assert(HasStationRail(t));
return HasBit(GetStationGfx(t), 0) ? AXIS_Y : AXIS_X;
}
-
+/**
+ * Get the rail track of a rail station tile.
+ * @param t Tile to query
+ * @pre HasStationRail(t)
+ * @return The rail track of the rails on tile \a t.
+ */
static inline Track GetRailStationTrack(TileIndex t)
{
return AxisToTrack(GetRailStationAxis(t));
}
+/**
+ * Get the trackbits of a rail station tile.
+ * @param t Tile to query
+ * @pre HasStationRail(t)
+ * @return The trackbits of the rails on tile \a t.
+ */
static inline TrackBits GetRailStationTrackBits(TileIndex t)
{
return AxisToTrackBits(GetRailStationAxis(t));
}
+/**
+ * Check if tile is compatible with a railstation tile. The two tiles
+ * are compatible if all of the following are true:
+ * \li both tiles are rail station tiles
+ * \li the railtype of \a t1 is compatible with the railtype of \a t2
+ * \li the tracks on \a t1 and \a t2 are in the same direction
+ * \li both tiles belong to the same station
+ * \li \a t1 is not blocked (@see IsStationTileBlocked)
+ * @param t1 First tile to compare
+ * @param t2 Second tile to compare
+ * @pre IsRailStationTile(t2)
+ * @return true if the two tiles are compatible
+ */
static inline bool IsCompatibleTrainStationTile(TileIndex t1, TileIndex t2)
{
assert(IsRailStationTile(t2));
@@ -371,7 +435,13 @@ static inline TrackBits GetStationReservationTrackBits(TileIndex t)
return HasStationReservation(t) ? GetRailStationTrackBits(t) : TRACK_BIT_NONE;
}
-
+/**
+ * Get the direction of a dock.
+ * @param t Tile to query
+ * @pre IsDock(t)
+ * @pre \a t is the land part of the dock
+ * @return The direction of the dock on tile \a t.
+ */
static inline DiagDirection GetDockDirection(TileIndex t)
{
StationGfx gfx = GetStationGfx(t);
@@ -379,6 +449,13 @@ static inline DiagDirection GetDockDirection(TileIndex t)
return (DiagDirection)(gfx);
}
+/**
+ * Get the tileoffset from this tile a ship should target to get to this dock.
+ * @param t Tile to query
+ * @pre IsTileType(t, MP_STATION)
+ * @pre IsBuoy(t) || IsOilRig(t) || IsDock(t)
+ * @return The offset from this tile that should be used as destination for ships.
+ */
static inline TileIndexDiffC GetDockOffset(TileIndex t)
{
static const TileIndexDiffC buoy_offset = {0, 0};
@@ -399,36 +476,72 @@ static inline TileIndexDiffC GetDockOffset(TileIndex t)
return dock_offset[GetDockDirection(t)];
}
+/**
+ * Is there a custom rail station spec on this tile?
+ * @param t Tile to query
+ * @pre HasStationTileRail(t)
+ * @return True if this station is part of a newgrf station.
+ */
static inline bool IsCustomStationSpecIndex(TileIndex t)
{
assert(HasStationTileRail(t));
return _m[t].m4 != 0;
}
+/**
+ * Set the custom station spec for this tile.
+ * @param t Tile to set the stationspec of.
+ * @pre HasStationTileRail(t)
+ */
static inline void SetCustomStationSpecIndex(TileIndex t, byte specindex)
{
assert(HasStationTileRail(t));
_m[t].m4 = specindex;
}
+/**
+ * Get the custom station spec for this tile.
+ * @param t Tile to query
+ * @pre HasStationTileRail(t)
+ * @return The custom station spec of this tile.
+ */
static inline uint GetCustomStationSpecIndex(TileIndex t)
{
assert(HasStationTileRail(t));
return _m[t].m4;
}
+/**
+ * Set the random bits for a station tile.
+ * @param t Tile to set random bits for
+ * @pre IsTileType(t, MP_STATION)
+ */
static inline void SetStationTileRandomBits(TileIndex t, byte random_bits)
{
assert(IsTileType(t, MP_STATION));
SB(_m[t].m3, 4, 4, random_bits);
}
+/**
+ * Get the random bits of a station tile.
+ * @param t Tile to query
+ * @pre IsTileType(t, MP_STATION)
+ * @return The random bits for this station tile.
+ */
static inline byte GetStationTileRandomBits(TileIndex t)
{
assert(IsTileType(t, MP_STATION));
return GB(_m[t].m3, 4, 4);
}
+/**
+ * Make the given tile a station tile.
+ * @param t the tile to make a station tile
+ * @param o the owner of the station
+ * @param sid the station to which this tile belongs
+ * @param st the type this station tile
+ * @param section the StationGfx to be used for this tile
+ */
static inline void MakeStation(TileIndex t, Owner o, StationID sid, StationType st, byte section)
{
SetTileType(t, MP_STATION);
@@ -442,6 +555,15 @@ static inline void MakeStation(TileIndex t, Owner o, StationID sid, StationType
_me[t].m7 = 0;
}
+/**
+ * Make the given tile a rail station tile.
+ * @param t the tile to make a rail station tile
+ * @param o the owner of the station
+ * @param sid the station to which this tile belongs
+ * @param a the axis of this tile
+ * @param section the StationGfx to be used for this tile
+ * @param rt the railtype of this tile
+ */
static inline void MakeRailStation(TileIndex t, Owner o, StationID sid, Axis a, byte section, RailType rt)
{
MakeStation(t, o, sid, STATION_RAIL, section + a);
@@ -449,6 +571,15 @@ static inline void MakeRailStation(TileIndex t, Owner o, StationID sid, Axis a,
SetRailStationReservation(t, false);
}
+/**
+ * Make the given tile a rail waypoint tile.
+ * @param t the tile to make a rail waypoint
+ * @param o the owner of the waypoint
+ * @param sid the waypoint to which this tile belongs
+ * @param a the axis of this tile
+ * @param section the StationGfx to be used for this tile
+ * @param rt the railtype of this tile
+ */
static inline void MakeRailWaypoint(TileIndex t, Owner o, StationID sid, Axis a, byte section, RailType rt)
{
MakeStation(t, o, sid, STATION_WAYPOINT, section + a);
@@ -456,6 +587,15 @@ static inline void MakeRailWaypoint(TileIndex t, Owner o, StationID sid, Axis a,
SetRailStationReservation(t, false);
}
+/**
+ * Make the given tile a roadstop tile.
+ * @param t the tile to make a roadstop
+ * @param o the owner of the roadstop
+ * @param sid the station to which this tile belongs
+ * @param rst the type of roadstop to make this tile
+ * @param rt the roadtypes on this tile
+ * @param d the direction of the roadstop
+ */
static inline void MakeRoadStop(TileIndex t, Owner o, StationID sid, RoadStopType rst, RoadTypes rt, DiagDirection d)
{
MakeStation(t, o, sid, (rst == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK), d);
@@ -464,6 +604,17 @@ static inline void MakeRoadStop(TileIndex t, Owner o, StationID sid, RoadStopTyp
SetRoadOwner(t, ROADTYPE_TRAM, o);
}
+/**
+ * Make the given tile a drivethrough roadstop tile.
+ * @param t the tile to make a roadstop
+ * @param station the owner of the roadstop
+ * @param road the owner of the road
+ * @param tram the owner of the tram
+ * @param sid the station to which this tile belongs
+ * @param rst the type of roadstop to make this tile
+ * @param rt the roadtypes on this tile
+ * @param d the direction of the roadstop
+ */
static inline void MakeDriveThroughRoadStop(TileIndex t, Owner station, Owner road, Owner tram, StationID sid, RoadStopType rst, RoadTypes rt, Axis a)
{
MakeStation(t, station, sid, (rst == ROADSTOP_BUS ? STATION_BUS : STATION_TRUCK), GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET + a);
@@ -472,11 +623,24 @@ static inline void MakeDriveThroughRoadStop(TileIndex t, Owner station, Owner ro
SetRoadOwner(t, ROADTYPE_TRAM, tram);
}
+/**
+ * Make the given tile an airport tile.
+ * @param t the tile to make a airport
+ * @param o the owner of the airport
+ * @param sid the station to which this tile belongs
+ * @param section the StationGfx to be used for this tile
+ */
static inline void MakeAirport(TileIndex t, Owner o, StationID sid, byte section)
{
MakeStation(t, o, sid, STATION_AIRPORT, section);
}
+/**
+ * Make the given tile a buoy tile.
+ * @param t the tile to make a buoy
+ * @param sid the station to which this tile belongs
+ * @param wc the type of water on this tile
+ */
static inline void MakeBuoy(TileIndex t, StationID sid, WaterClass wc)
{
/* Make the owner of the buoy tile the same as the current owner of the
@@ -486,6 +650,14 @@ static inline void MakeBuoy(TileIndex t, StationID sid, WaterClass wc)
SetWaterClass(t, wc);
}
+/**
+ * Make the given tile a dock tile.
+ * @param t the tile to make a dock
+ * @param o the owner of the dock
+ * @param sid the station to which this tile belongs
+ * @param d the direction of the dock
+ * @param wc the type of water on this tile
+ */
static inline void MakeDock(TileIndex t, Owner o, StationID sid, DiagDirection d, WaterClass wc)
{
MakeStation(t, o, sid, STATION_DOCK, d);
@@ -493,6 +665,12 @@ static inline void MakeDock(TileIndex t, Owner o, StationID sid, DiagDirection d
SetWaterClass(t + TileOffsByDiagDir(d), wc);
}
+/**
+ * Make the given tile an oilrig tile.
+ * @param t the tile to make an oilrig
+ * @param sid the station to which this tile belongs
+ * @param wc the type of water on this tile
+ */
static inline void MakeOilrig(TileIndex t, StationID sid, WaterClass wc)
{
MakeStation(t, OWNER_NONE, sid, STATION_OILRIG, 0);