mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-01-22 23:26:34 +00:00
(svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
This commit is contained in:
parent
962852b732
commit
3d9c76d8b8
1
Makefile
1
Makefile
@ -612,6 +612,7 @@ SRCS += airport.c
|
||||
SRCS += airport_gui.c
|
||||
SRCS += aystar.c
|
||||
SRCS += bridge_gui.c
|
||||
SRCS += bridge_map.c
|
||||
SRCS += callback_table.c
|
||||
SRCS += clear_cmd.c
|
||||
SRCS += command.c
|
||||
|
@ -2146,7 +2146,6 @@ static bool AiRemoveTileAndGoForward(Player *p)
|
||||
int bit;
|
||||
const byte *ptr;
|
||||
TileIndex tile = p->ai.cur_tile_a;
|
||||
int offs;
|
||||
TileIndex tilenew;
|
||||
|
||||
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
|
||||
@ -2164,13 +2163,9 @@ static bool AiRemoveTileAndGoForward(Player *p)
|
||||
// This is not really needed the first place AiRemoveTileAndGoForward is called.
|
||||
if (DiagDirToAxis(GetBridgeRampDirection(tile)) != (p->ai.cur_dir_a & 1U)) return false;
|
||||
|
||||
// Find other side of bridge.
|
||||
offs = TileOffsByDir(p->ai.cur_dir_a);
|
||||
do {
|
||||
tile = TILE_MASK(tile - offs);
|
||||
} while (_m[tile].m5 & 0x40);
|
||||
tile = GetOtherBridgeEnd(tile);
|
||||
|
||||
tilenew = TILE_MASK(tile - offs);
|
||||
tilenew = TILE_MASK(tile - TileOffsByDir(p->ai.cur_dir_a));
|
||||
// And clear the bridge.
|
||||
if (CmdFailed(DoCommandByTile(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR)))
|
||||
return false;
|
||||
|
17
bridge_map.c
Normal file
17
bridge_map.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* $Id$ */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "openttd.h"
|
||||
#include "bridge_map.h"
|
||||
|
||||
|
||||
TileIndex GetOtherBridgeEnd(TileIndex tile)
|
||||
{
|
||||
TileIndexDiff delta = TileOffsByDir(GetBridgeRampDirection(tile));
|
||||
|
||||
do {
|
||||
tile += delta;
|
||||
} while (!IsBridgeRamp(tile));
|
||||
|
||||
return tile;
|
||||
}
|
12
bridge_map.h
12
bridge_map.h
@ -10,6 +10,12 @@
|
||||
#include "tile.h"
|
||||
|
||||
|
||||
static inline bool IsBridgeRamp(TileIndex t)
|
||||
{
|
||||
return !HASBIT(_m[t].m5, 6);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the direction pointing onto the bridge
|
||||
*/
|
||||
@ -22,6 +28,12 @@ static inline DiagDirection GetBridgeRampDirection(TileIndex t)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Starting at one bridge end finds the other bridge end
|
||||
*/
|
||||
TileIndex GetOtherBridgeEnd(TileIndex);
|
||||
|
||||
|
||||
static inline void SetClearUnderBridge(TileIndex t)
|
||||
{
|
||||
SetTileOwner(t, OWNER_NONE);
|
||||
|
@ -809,7 +809,7 @@ int32 DoConvertTunnelBridgeRail(TileIndex tile, uint totype, bool exec)
|
||||
if (!CheckTileOwnership(tile)) return CMD_ERROR;
|
||||
|
||||
// railway bridge
|
||||
tile = FindEdgesOfBridge(tile, &endtile);
|
||||
tile = GetOtherBridgeEnd(tile);
|
||||
// Make sure there's no vehicle on the bridge
|
||||
v = FindVehicleBetween(tile, endtile, z);
|
||||
if (v != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user