Change: Store station blocked/wires/pylons flags in map.
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. (cherry picked from commit cb658e6cc6e1c114c1eaafaaa5b14849f04ca083)
This commit is contained in:

committed by
Jonathan G Rennison

parent
e162e7a331
commit
b2a1ec96f1
@@ -49,6 +49,7 @@
|
||||
#include "../subsidy_base.h"
|
||||
#include "../subsidy_func.h"
|
||||
#include "../newgrf.h"
|
||||
#include "../newgrf_station.h"
|
||||
#include "../engine_func.h"
|
||||
#include "../rail_gui.h"
|
||||
#include "../road_gui.h"
|
||||
@@ -3337,6 +3338,26 @@ bool AfterLoadGame()
|
||||
_settings_game.script.settings_profile = IsInsideMM(_old_diff_level, SP_BEGIN, SP_END) ? _old_diff_level : (uint)SP_MEDIUM;
|
||||
}
|
||||
|
||||
{
|
||||
/* Station blocked, wires and pylon flags need to be stored in the map. This is effectively cached data, so no
|
||||
* version check is necessary. This is done here as the SLV_182 check below needs the blocked status. */
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (HasStationTileRail(t)) {
|
||||
StationGfx gfx = GetStationGfx(t);
|
||||
const StationSpec *statspec = GetStationSpec(t);
|
||||
|
||||
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(t, blocked);
|
||||
SetStationTileHavePylons(t, pylons);
|
||||
SetStationTileHaveWires(t, wires);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSavegameVersionBefore(SLV_182)) {
|
||||
/* Aircraft acceleration variable was bonkers */
|
||||
for (Aircraft *v : Aircraft::Iterate()) {
|
||||
|
Reference in New Issue
Block a user