mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r23920) -Fix: Consider only the middle tile of a lock for lock-infrastructure costs. The other two tiles may be owned by other companies. Also do not count the middle tile of a lock as canal, independent of whether it is build on ground or river slope.
This commit is contained in:
parent
5012ea91ef
commit
07f69d8b88
|
@ -173,7 +173,14 @@ void AfterLoadCompanyStats()
|
||||||
case MP_WATER:
|
case MP_WATER:
|
||||||
if (IsShipDepot(tile) || IsLock(tile)) {
|
if (IsShipDepot(tile) || IsLock(tile)) {
|
||||||
c = Company::GetIfValid(GetTileOwner(tile));
|
c = Company::GetIfValid(GetTileOwner(tile));
|
||||||
if (c != NULL) c->infrastructure.water += LOCK_DEPOT_TILE_FACTOR;
|
if (c != NULL) {
|
||||||
|
if (IsShipDepot(tile)) c->infrastructure.water += LOCK_DEPOT_TILE_FACTOR;
|
||||||
|
if (IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE) {
|
||||||
|
/* The middle tile specifies the owner of the lock. */
|
||||||
|
c->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // the middle tile specifies the owner of the
|
||||||
|
break; // do not count the middle tile as canal
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* FALL THROUGH */
|
/* FALL THROUGH */
|
||||||
|
|
||||||
|
|
|
@ -290,7 +290,6 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
|
||||||
Company *c = Company::GetIfValid(_current_company);
|
Company *c = Company::GetIfValid(_current_company);
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
/* Counts for the water. */
|
/* Counts for the water. */
|
||||||
c->infrastructure.water++;
|
|
||||||
if (!IsWaterTile(tile - delta)) c->infrastructure.water++;
|
if (!IsWaterTile(tile - delta)) c->infrastructure.water++;
|
||||||
if (!IsWaterTile(tile + delta)) c->infrastructure.water++;
|
if (!IsWaterTile(tile + delta)) c->infrastructure.water++;
|
||||||
/* Count for the lock itself. */
|
/* Count for the lock itself. */
|
||||||
|
@ -335,7 +334,7 @@ static CommandCost RemoveLock(TileIndex tile, DoCommandFlag flags)
|
||||||
/* Remove middle part from company infrastructure count. */
|
/* Remove middle part from company infrastructure count. */
|
||||||
Company *c = Company::GetIfValid(GetTileOwner(tile));
|
Company *c = Company::GetIfValid(GetTileOwner(tile));
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
c->infrastructure.water -= 1 + 3 * LOCK_DEPOT_TILE_FACTOR; // Middle tile + three parts of the lock.
|
c->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // three parts of the lock.
|
||||||
DirtyCompanyInfrastructureWindows(c->index);
|
DirtyCompanyInfrastructureWindows(c->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1259,13 +1258,15 @@ static void ChangeTileOwner_Water(TileIndex tile, Owner old_owner, Owner new_own
|
||||||
{
|
{
|
||||||
if (!IsTileOwner(tile, old_owner)) return;
|
if (!IsTileOwner(tile, old_owner)) return;
|
||||||
|
|
||||||
|
bool is_lock_middle = IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE;
|
||||||
|
|
||||||
/* No need to dirty company windows here, we'll redraw the whole screen anyway. */
|
/* No need to dirty company windows here, we'll redraw the whole screen anyway. */
|
||||||
if (IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE) Company::Get(old_owner)->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts.
|
if (is_lock_middle) Company::Get(old_owner)->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts.
|
||||||
if (new_owner != INVALID_OWNER) {
|
if (new_owner != INVALID_OWNER) {
|
||||||
if (IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE) Company::Get(new_owner)->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts.
|
if (is_lock_middle) Company::Get(new_owner)->infrastructure.water += 3 * LOCK_DEPOT_TILE_FACTOR; // Lock has three parts.
|
||||||
/* Only subtract from the old owner here if the new owner is valid,
|
/* Only subtract from the old owner here if the new owner is valid,
|
||||||
* otherwise we clear ship depots and canal water below. */
|
* otherwise we clear ship depots and canal water below. */
|
||||||
if (GetWaterClass(tile) == WATER_CLASS_CANAL) {
|
if (GetWaterClass(tile) == WATER_CLASS_CANAL && !is_lock_middle) {
|
||||||
Company::Get(old_owner)->infrastructure.water--;
|
Company::Get(old_owner)->infrastructure.water--;
|
||||||
Company::Get(new_owner)->infrastructure.water++;
|
Company::Get(new_owner)->infrastructure.water++;
|
||||||
}
|
}
|
||||||
|
@ -1284,7 +1285,7 @@ static void ChangeTileOwner_Water(TileIndex tile, Owner old_owner, Owner new_own
|
||||||
/* Set owner of canals and locks ... and also canal under dock there was before.
|
/* Set owner of canals and locks ... and also canal under dock there was before.
|
||||||
* Check if the new owner after removing depot isn't OWNER_WATER. */
|
* Check if the new owner after removing depot isn't OWNER_WATER. */
|
||||||
if (IsTileOwner(tile, old_owner)) {
|
if (IsTileOwner(tile, old_owner)) {
|
||||||
if (GetWaterClass(tile) == WATER_CLASS_CANAL) Company::Get(old_owner)->infrastructure.water--;
|
if (GetWaterClass(tile) == WATER_CLASS_CANAL && !is_lock_middle) Company::Get(old_owner)->infrastructure.water--;
|
||||||
SetTileOwner(tile, OWNER_NONE);
|
SetTileOwner(tile, OWNER_NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue