Changeset - r18654:6cc3b8bf4071
[Not reviewed]
master
0 2 0
planetmaker - 12 years ago 2011-12-13 23:01:36
planetmaker@openttd.org
(svn r23512) -Change [FS#4872]: Allow to place locks also on river rapids and restore rivers, if locks are deleted
2 files changed with 13 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/water_cmd.cpp
Show inline comments
 
@@ -246,6 +246,7 @@ static CommandCost DoBuildLock(TileIndex
 
	if (ret.Failed()) return ret;
 

	
 
	/* middle tile */
 
	WaterClass wc_middle = IsWaterTile(tile) ? GetWaterClass(tile) : WATER_CLASS_CANAL;
 
	ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
	if (ret.Failed()) return ret;
 
	cost.AddCost(ret);
 
@@ -295,7 +296,7 @@ static CommandCost DoBuildLock(TileIndex
 
			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 - delta);
 
		MarkTileDirtyByTile(tile + delta);
 
@@ -336,9 +337,14 @@ static CommandCost RemoveLock(TileIndex 
 
			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));
 
		MarkCanalsAndRiversAroundDirty(tile);
 
		MarkCanalsAndRiversAroundDirty(tile - delta);
 
		MarkCanalsAndRiversAroundDirty(tile + delta);
 
	}
 
@@ -360,9 +366,6 @@ CommandCost CmdBuildLock(TileIndex tile,
 
	DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile));
 
	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);
 
}
 

	
src/water_map.h
Show inline comments
 
@@ -466,14 +466,15 @@ static inline void MakeLockTile(TileInde
 
 * @param d Direction of the water lock.
 
 * @param wc_lower Original water class of the lower 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);
 

	
 
	MakeLockTile(t, o, LOCK_PART_MIDDLE, d, WATER_CLASS_CANAL);
 
	/* Keep the current owner for the upper and lower part if it is a
 
	 * water tile so we can restore the owner after deleting the lock. */
 
	/* Keep the current waterclass and owner for the tiles.
 
	 * It allows to restore them after the lock is deleted */
 
	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_UPPER, d, wc_upper);
 
}
0 comments (0 inline, 0 general)