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 GetProductionAroundTiles(AcceptedCargo produced, TileIndex tile, int w, int h, int rad);
|
||||||
void GetAcceptanceAroundTiles(AcceptedCargo accepts, 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 GetStationPlatforms(const Station *st, TileIndex tile);
|
||||||
|
uint GetPlatformLength(TileIndex tile, DiagDirection dir);
|
||||||
|
|
||||||
|
|
||||||
const DrawTileSprites *GetStationTileLayout(byte gfx);
|
const DrawTileSprites *GetStationTileLayout(byte gfx);
|
||||||
|
|
|
@ -1255,6 +1255,28 @@ uint GetStationPlatforms(const Station *st, TileIndex tile)
|
||||||
return len - 1;
|
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)
|
static int32 RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags)
|
||||||
{
|
{
|
||||||
int w,h;
|
int w,h;
|
||||||
|
|
|
@ -332,15 +332,11 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
|
||||||
|
|
||||||
if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) {
|
if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) {
|
||||||
if (TrainShouldStop(v, v->tile)) {
|
if (TrainShouldStop(v, v->tile)) {
|
||||||
int station_length = 0;
|
uint station_length = GetPlatformLength(v->tile, DirToDiagDir(v->direction));
|
||||||
TileIndex tile = v->tile;
|
|
||||||
int delta_v;
|
int delta_v;
|
||||||
|
DEBUG(misc, 0) ("Length: %d", station_length);
|
||||||
|
|
||||||
max_speed = 120;
|
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);
|
delta_v = v->cur_speed / (station_length + 1);
|
||||||
if (v->max_speed > (v->cur_speed - delta_v))
|
if (v->max_speed > (v->cur_speed - delta_v))
|
||||||
|
|
Loading…
Reference in New Issue