Loading

Paste #phhnp7qo0

  1. /**
  2.  * Is this tile a target for ships to get to a nearby dock?
  3.  * @param tile Tile to query
  4.  * @param diagdir Optional diagonal direction to look for axis compatibility.
  5.  * @return True if the tile is a target for ships to get to a nearby dock.
  6.  * @note If the axis of the provided diagdir is paralel to the axis of a nearby
  7.  *       dock station, this function returns True. If diagdir is not provided,
  8.  *       only tile locations are compared.
  9.  */
  10. static inline bool IsTileDock(TileIndex tile, DiagDirection diagdir = INVALID_DIAGDIR)
  11. {
  12.     Axis axis = diagdir == INVALID_DIAGDIR ? INVALID_AXIS : DiagDirToAxis(diagdir);
  13.  
  14.     for (DiagDirection rot = DIAGDIR_BEGIN; rot < DIAGDIR_END; rot++) {
  15.         TileIndex tc = TileAddByDiagDir(tile, rot);
  16.         if (IsTileType(tc, MP_STATION) && (IsDock(tc) || IsOilRig(tc))) {
  17.             Station *dock = Station::GetByTile(tc);
  18.             TileIndex docking_location = TILE_ADD(dock->dock_tile, ToTileIndexDiff(GetDockOffset(dock->dock_tile)));
  19.             if (axis == INVALID_AXIS) {
  20.                 return tile == docking_location;
  21.             }
  22.             else {
  23.                 if (tile == docking_location) {
  24.                     Axis axis_tc = DiagDirToAxis(rot);
  25.                     return axis != axis_tc;
  26.                 }
  27.             }
  28.         }
  29.         if (rot == DIAGDIR_NE && IsTileType(tc + TileDiffXY(-1, 0), MP_INDUSTRY) && GetIndustryGfx(tc + TileDiffXY(-1, 0)) == GFX_OILRIG_1) return true;
  30.     }
  31.  
  32.     return false;
  33. }

Version history

Revision # Author Created at
pav92t6hl Anonymous 08 Sep 2016, 20:27:22 UTC Diff
pammldfgx Anonymous 08 Sep 2016, 14:13:05 UTC Diff

Comments