Loading

Paste #pntsd7s9a

  1. Index: src/station_cmd.cpp
  2. ===================================================================
  3. --- src/station_cmd.cpp (revision 27632)
  4. +++ src/station_cmd.cpp (working copy)
  5. @@ -2504,6 +2504,21 @@
  6.         return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
  7.     }
  8.  
  9. +   TileIndex tc = tile_cur;
  10. +   DiagDirection dir_rotate = ReverseDiagDir(direction);
  11. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  12. +   if (ret.Failed()) return ret;
  13. +
  14. +   tc = dir_rotate == DIAGDIR_NE ? tc + TileDiffXY(-1, -1) : dir_rotate == DIAGDIR_NW ? tc + TileDiffXY(1, -1) : dir_rotate == DIAGDIR_SW ? tc + TileDiffXY(1, 1) : tc + TileDiffXY(-1, 1);
  15. +   dir_rotate = ChangeDiagDir(dir_rotate, DIAGDIRDIFF_90RIGHT);
  16. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  17. +   if (ret.Failed()) return ret;
  18. +
  19. +   tc = dir_rotate == DIAGDIR_NE ? tc + TileDiffXY(-2, 0) : dir_rotate == DIAGDIR_NW ? tc + TileDiffXY(0, -2) : dir_rotate == DIAGDIR_SW ? tc + TileDiffXY(2, 0) : tc + TileDiffXY(0, 2);
  20. +   dir_rotate = ReverseDiagDir(dir_rotate);
  21. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  22. +   if (ret.Failed()) return ret;
  23. +
  24.     TileArea dock_area = TileArea(tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]),
  25.             _dock_w_chk[direction], _dock_h_chk[direction]);
  26.  
  27. Index: src/vehicle.cpp
  28. ===================================================================
  29. --- src/vehicle.cpp (revision 27632)
  30. +++ src/vehicle.cpp (working copy)
  31. @@ -484,6 +484,24 @@
  32.     return CommandCost();
  33.  }
  34.  
  35. +/**
  36. +* Ensure there is no ship on the water at the given diagonal direction.
  37. +* @param tile Position to examine.
  38. +* @param diag_dir Diagonal direction
  39. +* @return Succeeded command (water is free) or failed command (a ship is found).
  40. +*/
  41. +CommandCost EnsureNoShipOnDiagDir(TileIndex tile, DiagDirection diag_dir)
  42. +{
  43. +   if (HasTileWaterClass(tile)) {
  44. +       TrackBits tb = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0));
  45. +       if (((diag_dir == DIAGDIR_NE && (tb & TRACK_BIT_3WAY_NE) != 0) || (diag_dir == DIAGDIR_SE && (tb & TRACK_BIT_3WAY_SE) != 0) || (diag_dir == DIAGDIR_NW && (tb & TRACK_BIT_3WAY_NW) != 0) || (diag_dir == DIAGDIR_SW && (tb & TRACK_BIT_3WAY_SW) != 0) && !IsShipDepotTile(tile) && IsTileType(tile, MP_WATER) && !IsLock(tile))) {
  46. +           CommandCost ret = EnsureNoVehicleOnGround(tile);
  47. +           if (ret.Failed()) return ret;
  48. +       }
  49. +   }
  50. +   return CommandCost();
  51. +}
  52. +
  53.  /** Procedure called for every vehicle found in tunnel/bridge in the hash map */
  54.  static Vehicle *GetVehicleTunnelBridgeProc(Vehicle *v, void *data)
  55.  {
  56. Index: src/vehicle_func.h
  57. ===================================================================
  58. --- src/vehicle_func.h  (revision 27632)
  59. +++ src/vehicle_func.h  (working copy)
  60. @@ -165,6 +165,7 @@
  61.  
  62.  CommandCost EnsureNoVehicleOnGround(TileIndex tile);
  63.  CommandCost EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits);
  64. +CommandCost EnsureNoShipOnDiagDir(TileIndex tile, DiagDirection diag_dir);
  65.  
  66.  extern VehicleID _new_vehicle_id;
  67.  extern uint16 _returned_refit_capacity;
  68. Index: src/water_cmd.cpp
  69. ===================================================================
  70. --- src/water_cmd.cpp   (revision 27632)
  71. +++ src/water_cmd.cpp   (working copy)
  72. @@ -135,6 +135,24 @@
  73.         cost.AddCost(ret);
  74.     }
  75.  
  76. +   DiagDirection dir_rotate = axis == AXIS_X ? DIAGDIR_SE : DIAGDIR_NE;
  77. +   TileIndex tc = tile + (axis == AXIS_X ? TileDiffXY(0, -1) : TileDiffXY(1, 0));
  78. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  79. +   if (ret.Failed()) return ret;
  80. +
  81. +   tc = tile2 + (axis == AXIS_X ? TileDiffXY(0, -1) : TileDiffXY(1, 0));
  82. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  83. +   if (ret.Failed()) return ret;
  84. +
  85. +   dir_rotate = ReverseDiagDir(dir_rotate);
  86. +   tc = tile + (axis == AXIS_X ? TileDiffXY(0, 1) : TileDiffXY(-1, 0));
  87. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  88. +   if (ret.Failed()) return ret;
  89. +
  90. +   tc = tile2 + (axis == AXIS_X ? TileDiffXY(0, 1) : TileDiffXY(-1, 0));
  91. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  92. +   if (ret.Failed()) return ret;
  93. +
  94.     if (flags & DC_EXEC) {
  95.         Depot *depot = new Depot(tile);
  96.         depot->build_date = _date;
  97. @@ -372,6 +390,25 @@
  98.     DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
  99.     if (dir == INVALID_DIAGDIR) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
  100.  
  101. +   Axis axis = DiagDirToAxis(dir);
  102. +   DiagDirection dir_rotate = (dir == DIAGDIR_NE || dir == DIAGDIR_NW) ? ChangeDiagDir(dir, DIAGDIRDIFF_90RIGHT) : ChangeDiagDir(dir, DIAGDIRDIFF_90LEFT);
  103. +   TileIndex tc = tile + (axis == AXIS_X ? TileDiffXY(-1, -1) : TileDiffXY(1, -1));
  104. +   CommandCost ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  105. +   if (ret.Failed()) return ret;
  106. +
  107. +   tc = tile + (axis == AXIS_X ? TileDiffXY(1, -1) : TileDiffXY(1, 1));
  108. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  109. +   if (ret.Failed()) return ret;
  110. +
  111. +   dir_rotate = ReverseDiagDir(dir_rotate);
  112. +   tc = tile + (axis == AXIS_X ? TileDiffXY(-1, 1) : TileDiffXY(-1, -1));
  113. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  114. +   if (ret.Failed()) return ret;
  115. +
  116. +   tc = tile + (axis == AXIS_X ? TileDiffXY(1, 1) : TileDiffXY(-1, 1));
  117. +   ret = EnsureNoShipOnDiagDir(tc, dir_rotate);
  118. +   if (ret.Failed()) return ret;
  119. +
  120.     return DoBuildLock(tile, dir, flags);
  121.  }

Version history

Revision # Author Created at
pfrpc7gor Anonymous 26 Aug 2016, 16:00:05 UTC Diff
pxgtxqlwk Anonymous 26 Aug 2016, 13:19:20 UTC Diff
pwaldxdg9 Anonymous 26 Aug 2016, 11:43:35 UTC Diff

Comments