mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-12 02:19:41 +00:00
(svn r23512) -Change [FS#4872]: Allow to place locks also on river rapids and restore rivers, if locks are deleted
This commit is contained in:
parent
86c1947579
commit
8c48fd1fe5
@ -246,6 +246,7 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
|
|||||||
if (ret.Failed()) return ret;
|
if (ret.Failed()) return ret;
|
||||||
|
|
||||||
/* middle tile */
|
/* middle tile */
|
||||||
|
WaterClass wc_middle = IsWaterTile(tile) ? GetWaterClass(tile) : WATER_CLASS_CANAL;
|
||||||
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
|
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
|
||||||
if (ret.Failed()) return ret;
|
if (ret.Failed()) return ret;
|
||||||
cost.AddCost(ret);
|
cost.AddCost(ret);
|
||||||
@ -295,7 +296,7 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
|
|||||||
DirtyCompanyInfrastructureWindows(_current_company);
|
DirtyCompanyInfrastructureWindows(_current_company);
|
||||||
}
|
}
|
||||||
|
|
||||||
MakeLock(tile, _current_company, dir, wc_lower, wc_upper);
|
MakeLock(tile, _current_company, dir, wc_lower, wc_upper, wc_middle);
|
||||||
MarkTileDirtyByTile(tile);
|
MarkTileDirtyByTile(tile);
|
||||||
MarkTileDirtyByTile(tile - delta);
|
MarkTileDirtyByTile(tile - delta);
|
||||||
MarkTileDirtyByTile(tile + delta);
|
MarkTileDirtyByTile(tile + delta);
|
||||||
@ -336,9 +337,14 @@ static CommandCost RemoveLock(TileIndex tile, DoCommandFlag flags)
|
|||||||
DirtyCompanyInfrastructureWindows(c->index);
|
DirtyCompanyInfrastructureWindows(c->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
DoClearSquare(tile);
|
if (GetWaterClass(tile) == WATER_CLASS_RIVER) {
|
||||||
|
MakeRiver(tile, Random());
|
||||||
|
} else {
|
||||||
|
DoClearSquare(tile);
|
||||||
|
}
|
||||||
MakeWaterKeepingClass(tile + delta, GetTileOwner(tile + delta));
|
MakeWaterKeepingClass(tile + delta, GetTileOwner(tile + delta));
|
||||||
MakeWaterKeepingClass(tile - delta, GetTileOwner(tile - delta));
|
MakeWaterKeepingClass(tile - delta, GetTileOwner(tile - delta));
|
||||||
|
MarkCanalsAndRiversAroundDirty(tile);
|
||||||
MarkCanalsAndRiversAroundDirty(tile - delta);
|
MarkCanalsAndRiversAroundDirty(tile - delta);
|
||||||
MarkCanalsAndRiversAroundDirty(tile + delta);
|
MarkCanalsAndRiversAroundDirty(tile + delta);
|
||||||
}
|
}
|
||||||
@ -360,9 +366,6 @@ CommandCost CmdBuildLock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
|||||||
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
|
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
|
||||||
if (dir == INVALID_DIAGDIR) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
|
if (dir == INVALID_DIAGDIR) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
|
||||||
|
|
||||||
/* Disallow building of locks on river rapids */
|
|
||||||
if (IsWaterTile(tile)) return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
|
|
||||||
|
|
||||||
return DoBuildLock(tile, dir, flags);
|
return DoBuildLock(tile, dir, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,14 +466,15 @@ static inline void MakeLockTile(TileIndex t, Owner o, LockPart part, DiagDirecti
|
|||||||
* @param d Direction of the water lock.
|
* @param d Direction of the water lock.
|
||||||
* @param wc_lower Original water class of the lower part.
|
* @param wc_lower Original water class of the lower part.
|
||||||
* @param wc_upper Original water class of the upper part.
|
* @param wc_upper Original water class of the upper part.
|
||||||
|
* @param wc_middle Original water class of the middle part.
|
||||||
*/
|
*/
|
||||||
static inline void MakeLock(TileIndex t, Owner o, DiagDirection d, WaterClass wc_lower, WaterClass wc_upper)
|
static inline void MakeLock(TileIndex t, Owner o, DiagDirection d, WaterClass wc_lower, WaterClass wc_upper, WaterClass wc_middle)
|
||||||
{
|
{
|
||||||
TileIndexDiff delta = TileOffsByDiagDir(d);
|
TileIndexDiff delta = TileOffsByDiagDir(d);
|
||||||
|
|
||||||
MakeLockTile(t, o, LOCK_PART_MIDDLE, d, WATER_CLASS_CANAL);
|
/* Keep the current waterclass and owner for the tiles.
|
||||||
/* Keep the current owner for the upper and lower part if it is a
|
* It allows to restore them after the lock is deleted */
|
||||||
* water tile so we can restore the owner after deleting the lock. */
|
MakeLockTile(t, o, LOCK_PART_MIDDLE, d, wc_middle);
|
||||||
MakeLockTile(t - delta, IsWaterTile(t - delta) ? GetTileOwner(t - delta) : o, LOCK_PART_LOWER, d, wc_lower);
|
MakeLockTile(t - delta, IsWaterTile(t - delta) ? GetTileOwner(t - delta) : o, LOCK_PART_LOWER, d, wc_lower);
|
||||||
MakeLockTile(t + delta, IsWaterTile(t + delta) ? GetTileOwner(t + delta) : o, LOCK_PART_UPPER, d, wc_upper);
|
MakeLockTile(t + delta, IsWaterTile(t + delta) ? GetTileOwner(t + delta) : o, LOCK_PART_UPPER, d, wc_upper);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user