Change: Store station blocked/wires/pylons flags in map. (#11337)
This stores three flags in unused map bits, and avoids having to look up station graphics and custom station specs to determine blocked/wires/pylons status. This potentially affects rail pathfinding performance. Savegame version is not bumped, as the flags can just be updated every time.
This commit is contained in:
@@ -1466,7 +1466,18 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp
|
||||
SetStationTileRandomBits(tile, GB(Random(), 0, 4));
|
||||
SetAnimationFrame(tile, 0);
|
||||
|
||||
if (!IsStationTileBlocked(tile)) c->infrastructure.rail[rt]++;
|
||||
/* Should be the same as layout but axis component could be wrong... */
|
||||
StationGfx gfx = GetStationGfx(tile);
|
||||
bool blocked = statspec != nullptr && HasBit(statspec->blocked, gfx);
|
||||
/* Default stations do not draw pylons under roofs (gfx >= 4) */
|
||||
bool pylons = statspec != nullptr ? HasBit(statspec->pylons, gfx) : gfx < 4;
|
||||
bool wires = statspec == nullptr || !HasBit(statspec->wires, gfx);
|
||||
|
||||
SetStationTileBlocked(tile, blocked);
|
||||
SetStationTileHavePylons(tile, pylons);
|
||||
SetStationTileHaveWires(tile, wires);
|
||||
|
||||
if (!blocked) c->infrastructure.rail[rt]++;
|
||||
c->infrastructure.station++;
|
||||
|
||||
if (statspec != nullptr) {
|
||||
|
Reference in New Issue
Block a user