Fix station and town kdtrees with maps larger than 64k

pull/161/head
Jonathan G Rennison 4 years ago
parent 27b92c3526
commit 15c600d64f

@ -15,8 +15,8 @@
#include "station_base.h" #include "station_base.h"
#include "map_func.h" #include "map_func.h"
inline uint16 Kdtree_StationXYFunc(StationID stid, int dim) { return (dim == 0) ? TileX(BaseStation::Get(stid)->xy) : TileY(BaseStation::Get(stid)->xy); } inline uint32 Kdtree_StationXYFunc(StationID stid, int dim) { return (dim == 0) ? TileX(BaseStation::Get(stid)->xy) : TileY(BaseStation::Get(stid)->xy); }
typedef Kdtree<StationID, decltype(&Kdtree_StationXYFunc), uint16, int> StationKdtree; typedef Kdtree<StationID, decltype(&Kdtree_StationXYFunc), uint32, int> StationKdtree;
extern StationKdtree _station_kdtree; extern StationKdtree _station_kdtree;
/** /**
@ -28,11 +28,11 @@ extern StationKdtree _station_kdtree;
template <typename Func> template <typename Func>
void ForAllStationsRadius(TileIndex center, uint radius, Func func) void ForAllStationsRadius(TileIndex center, uint radius, Func func)
{ {
uint16 x1, y1, x2, y2; uint32 x1, y1, x2, y2;
x1 = (uint16)max<int>(0, TileX(center) - radius); x1 = (uint32)max<int>(0, TileX(center) - radius);
x2 = (uint16)min<int>(TileX(center) + radius + 1, MapSizeX()); x2 = (uint32)min<int>(TileX(center) + radius + 1, MapSizeX());
y1 = (uint16)max<int>(0, TileY(center) - radius); y1 = (uint32)max<int>(0, TileY(center) - radius);
y2 = (uint16)min<int>(TileY(center) + radius + 1, MapSizeY()); y2 = (uint32)min<int>(TileY(center) + radius + 1, MapSizeY());
_station_kdtree.FindContained(x1, y1, x2, y2, [&](StationID id) { _station_kdtree.FindContained(x1, y1, x2, y2, [&](StationID id) {
func(Station::Get(id)); func(Station::Get(id));

@ -13,8 +13,8 @@
#include "core/kdtree.hpp" #include "core/kdtree.hpp"
#include "town.h" #include "town.h"
inline uint16 Kdtree_TownXYFunc(TownID tid, int dim) { return (dim == 0) ? TileX(Town::Get(tid)->xy) : TileY(Town::Get(tid)->xy); } inline uint32 Kdtree_TownXYFunc(TownID tid, int dim) { return (dim == 0) ? TileX(Town::Get(tid)->xy) : TileY(Town::Get(tid)->xy); }
typedef Kdtree<TownID, decltype(&Kdtree_TownXYFunc), uint16, int> TownKdtree; typedef Kdtree<TownID, decltype(&Kdtree_TownXYFunc), uint32, int> TownKdtree;
extern TownKdtree _town_kdtree; extern TownKdtree _town_kdtree;
extern TownKdtree _town_local_authority_kdtree; extern TownKdtree _town_local_authority_kdtree;

Loading…
Cancel
Save