Chunnel patch 28393: Codechange: Rework GetOtherTunnelEnd proc.
https://www.tt-forums.net/viewtopic.php?p=1183416#p1183416
This commit is contained in:

committed by
Jonathan G Rennison

parent
ad070b91ea
commit
67e7d12eb7
@@ -13,6 +13,7 @@
|
|||||||
#include "../void_map.h"
|
#include "../void_map.h"
|
||||||
#include "../signs_base.h"
|
#include "../signs_base.h"
|
||||||
#include "../depot_base.h"
|
#include "../depot_base.h"
|
||||||
|
#include "../tunnel_base.h"
|
||||||
#include "../fios.h"
|
#include "../fios.h"
|
||||||
#include "../gamelog_internal.h"
|
#include "../gamelog_internal.h"
|
||||||
#include "../network/network.h"
|
#include "../network/network.h"
|
||||||
@@ -563,6 +564,25 @@ static inline bool MayHaveBridgeAbove(TileIndex t)
|
|||||||
IsTileType(t, MP_WATER) || IsTileType(t, MP_TUNNELBRIDGE) || IsTileType(t, MP_OBJECT);
|
IsTileType(t, MP_WATER) || IsTileType(t, MP_TUNNELBRIDGE) || IsTileType(t, MP_OBJECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TileIndex GetOtherTunnelBridgeEndOLd(TileIndex tile)
|
||||||
|
{
|
||||||
|
DiagDirection dir = GetTunnelBridgeDirection(tile);
|
||||||
|
TileIndexDiff delta = TileOffsByDiagDir(dir);
|
||||||
|
int z = GetTileZ(tile);
|
||||||
|
|
||||||
|
dir = ReverseDiagDir(dir);
|
||||||
|
do {
|
||||||
|
tile += delta;
|
||||||
|
} while (
|
||||||
|
!IsTunnelTile(tile) ||
|
||||||
|
GetTunnelBridgeDirection(tile) != dir ||
|
||||||
|
GetTileZ(tile) != z
|
||||||
|
);
|
||||||
|
|
||||||
|
return tile;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a (large) amount of savegame conversion *magic* in order to
|
* Perform a (large) amount of savegame conversion *magic* in order to
|
||||||
* load older savegames and to fill the caches for various purposes.
|
* load older savegames and to fill the caches for various purposes.
|
||||||
@@ -2009,6 +2029,29 @@ bool AfterLoadGame()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tunnel pool has to be initiated before reservations. */
|
||||||
|
for (TileIndex t = 0; t < map_size; t++) {
|
||||||
|
if (IsTunnelTile(t)) {
|
||||||
|
DiagDirection dir = GetTunnelBridgeDirection(t);
|
||||||
|
if (dir == DIAGDIR_SE || dir == DIAGDIR_SW) {
|
||||||
|
TileIndex start_tile = t;
|
||||||
|
TileIndex end_tile = GetOtherTunnelBridgeEndOLd(start_tile);
|
||||||
|
|
||||||
|
if (!Tunnel::CanAllocateItem()) return false;
|
||||||
|
|
||||||
|
Tunnel *t = new Tunnel(start_tile);
|
||||||
|
t->tile_s = end_tile;
|
||||||
|
|
||||||
|
DEBUG(misc, 0, "Tun start %#x, index=%#x", t->tile_n, t->index);
|
||||||
|
DEBUG(misc, 0, "Tun end %#x, index=%#x", t->tile_s, t->index);
|
||||||
|
|
||||||
|
_m[start_tile].m2 = t->index;
|
||||||
|
_m[end_tile].m2 = t->index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Move the signal variant back up one bit for PBS. We don't convert the old PBS
|
/* Move the signal variant back up one bit for PBS. We don't convert the old PBS
|
||||||
* format here, as an old layout wouldn't work properly anyway. To be safe, we
|
* format here, as an old layout wouldn't work properly anyway. To be safe, we
|
||||||
* clear any possible PBS reservations as well. */
|
* clear any possible PBS reservations as well. */
|
||||||
@@ -2643,7 +2686,7 @@ bool AfterLoadGame()
|
|||||||
} else if (dir == ReverseDiagDir(vdir)) { // Leaving tunnel
|
} else if (dir == ReverseDiagDir(vdir)) { // Leaving tunnel
|
||||||
hidden = frame < TILE_SIZE - _tunnel_visibility_frame[dir];
|
hidden = frame < TILE_SIZE - _tunnel_visibility_frame[dir];
|
||||||
/* v->tile changes at the moment when the vehicle leaves the tunnel. */
|
/* v->tile changes at the moment when the vehicle leaves the tunnel. */
|
||||||
v->tile = hidden ? GetOtherTunnelBridgeEnd(vtile) : vtile;
|
v->tile = hidden ? GetOtherTunnelBridgeEndOLd(vtile) : vtile;
|
||||||
} else {
|
} else {
|
||||||
/* We could get here in two cases:
|
/* We could get here in two cases:
|
||||||
* - for road vehicles, it is reversing at the end of the tunnel
|
* - for road vehicles, it is reversing at the end of the tunnel
|
||||||
|
@@ -36,20 +36,8 @@ Tunnel::~Tunnel()
|
|||||||
*/
|
*/
|
||||||
TileIndex GetOtherTunnelEnd(TileIndex tile)
|
TileIndex GetOtherTunnelEnd(TileIndex tile)
|
||||||
{
|
{
|
||||||
DiagDirection dir = GetTunnelBridgeDirection(tile);
|
Tunnel *t = Tunnel::GetByTile(tile);
|
||||||
TileIndexDiff delta = TileOffsByDiagDir(dir);
|
return t->tile_n == tile ? t->tile_s : t->tile_n;
|
||||||
int z = GetTileZ(tile);
|
|
||||||
|
|
||||||
dir = ReverseDiagDir(dir);
|
|
||||||
do {
|
|
||||||
tile += delta;
|
|
||||||
} while (
|
|
||||||
!IsTunnelTile(tile) ||
|
|
||||||
GetTunnelBridgeDirection(tile) != dir ||
|
|
||||||
GetTileZ(tile) != z
|
|
||||||
);
|
|
||||||
|
|
||||||
return tile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user