Loading

Paste #pqejnxxvj

  1. /**
  2.  * Ensure this tile is not a target for ships to get to a nearby dock.
  3.  * @note Also takes into account Oil Rigs, even those under construction.
  4.  * @param tile Tile to query
  5.  * @param diagdir Optional diagonal direction to look for axis compatibility.
  6.  * @return Succeeded if the tile is not a ship docking area of a nearby dock,
  7.  *         or an error message if the tile is a ship docking area of a nearby
  8.            dock.
  9.  * @note If the axis of a provided diagdir is equal to the axis of a nearby
  10.  *       docking area, it returns Succeeded. If diagdir is not provided, only
  11.  *       the docking area location is ensured.
  12.  */
  13. static CommandCost EnsureNoDockingTile(TileIndex tile, DiagDirection diagdir = INVALID_DIAGDIR)
  14. {
  15.     Axis axis = diagdir == INVALID_DIAGDIR ? INVALID_AXIS : DiagDirToAxis(diagdir);
  16.  
  17.     for (DiagDirection rot = DIAGDIR_BEGIN; rot < DIAGDIR_END; rot++) {
  18.         TileIndex tc = TileAddByDiagDir(tile, rot);
  19.         if (IsTileType(tc, MP_STATION) && (IsDock(tc) || IsOilRig(tc))) {
  20.             Station *dock = Station::GetByTile(tc);
  21.             TileIndex docking_location = TILE_ADD(dock->dock_tile, ToTileIndexDiff(GetDockOffset(dock->dock_tile)));
  22.             if (axis == INVALID_AXIS) {
  23.                 return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK);
  24.             } else {
  25.                 if (tile == docking_location) {
  26.                     Axis axis_tc = DiagDirToAxis(rot);
  27.                     if (axis != axis_tc) {
  28.                         return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK);
  29.                     }
  30.                 }
  31.             }
  32.         }
  33.         if (axis != AXIS_X && DiagDirToAxis(rot) == AXIS_X) {
  34.             if (IsTileType(tc + TileDiffXY(-1, 0), MP_INDUSTRY) && GetIndustryGfx(tc + TileDiffXY(-1, 0)) == GFX_OILRIG_1) {
  35.                 return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
  36.             }
  37.         }
  38.     }
  39.  
  40.     return CommandCost();
  41. }

Version history

Revision # Author Created at
pixetasle Anonymous 08 Sep 2016, 22:50:16 UTC Diff
phhnp7qo0 Anonymous 08 Sep 2016, 21:06:53 UTC Diff
pav92t6hl Anonymous 08 Sep 2016, 20:27:22 UTC Diff
pammldfgx Anonymous 08 Sep 2016, 14:13:05 UTC Diff

Comments