mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r5063) -Codechange: Add a function to determine the length of a platform (request by KUDr)
This commit is contained in:
parent
f8982917ea
commit
65a6286345
|
@ -200,6 +200,7 @@ void AfterLoadStations(void);
|
|||
void GetProductionAroundTiles(AcceptedCargo produced, TileIndex tile, int w, int h, int rad);
|
||||
void GetAcceptanceAroundTiles(AcceptedCargo accepts, TileIndex tile, int w, int h, int rad);
|
||||
uint GetStationPlatforms(const Station *st, TileIndex tile);
|
||||
uint GetPlatformLength(TileIndex tile, DiagDirection dir);
|
||||
|
||||
|
||||
const DrawTileSprites *GetStationTileLayout(byte gfx);
|
||||
|
|
|
@ -1255,6 +1255,28 @@ uint GetStationPlatforms(const Station *st, TileIndex tile)
|
|||
return len - 1;
|
||||
}
|
||||
|
||||
/** Determines the REMAINING length of a platform, starting at (and including)
|
||||
* the given tile.
|
||||
* @param tile the tile from which to start searching. Must be a railway station tile
|
||||
* @param dir The direction in which to search.
|
||||
* @return The platform length
|
||||
*/
|
||||
uint GetPlatformLength(TileIndex tile, DiagDirection dir)
|
||||
{
|
||||
TileIndex start_tile = tile;
|
||||
uint length = 0;
|
||||
assert(IsRailwayStationTile(tile));
|
||||
assert(dir < DIAGDIR_END);
|
||||
|
||||
do {
|
||||
length ++;
|
||||
tile += TileOffsByDir(dir);
|
||||
} while (IsCompatibleTrainStationTile(tile, start_tile));
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
|
||||
{
|
||||
int w,h;
|
||||
|
|
|
@ -332,15 +332,11 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
|
|||
|
||||
if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) {
|
||||
if (TrainShouldStop(v, v->tile)) {
|
||||
int station_length = 0;
|
||||
TileIndex tile = v->tile;
|
||||
uint station_length = GetPlatformLength(v->tile, DirToDiagDir(v->direction));
|
||||
int delta_v;
|
||||
DEBUG(misc, 0) ("Length: %d", station_length);
|
||||
|
||||
max_speed = 120;
|
||||
do {
|
||||
station_length++;
|
||||
tile = TILE_ADD(tile, TileOffsByDir(v->direction / 2));
|
||||
} while (IsCompatibleTrainStationTile(tile, v->tile));
|
||||
|
||||
delta_v = v->cur_speed / (station_length + 1);
|
||||
if (v->max_speed > (v->cur_speed - delta_v))
|
||||
|
|
Loading…
Reference in New Issue