Prepared for buildings spawning

This commit is contained in:
Segey Lapin
2021-10-16 04:26:41 +03:00
parent 45a67ac8bd
commit da73a164a0
4 changed files with 84 additions and 2 deletions

View File

@@ -272,5 +272,62 @@ public:
{
return map_sites[site].pos;
}
HashMap<int, PoolVector<Vector2> > polygon_cache_2d;
inline PoolVector<Vector2> get_site_polygon_2d(int site)
{
if (polygon_cache_2d.has(site))
return polygon_cache_2d[site];
int count = 0, i;
int psize = map_sites[site].polygon_ind.size();
PoolVector<Vector2> polygon;
polygon.resize(psize);
int prev = -1;
for (i = 0; i < psize; i++) {
int idx = map_sites[site].polygon_ind[i];
if (idx == prev)
continue;
polygon.write()[count++] = diagram_vertices[idx];
prev = idx;
}
polygon.resize(count);
polygon_cache_2d[site] = polygon;
return polygon;
}
HashMap<int, PoolVector<Vector3> > polygon_cache_3d;
inline PoolVector<Vector3> get_site_polygon_3d(int site)
{
if (polygon_cache_3d.has(site))
return polygon_cache_3d[site];
int count = 0, i;
int psize = map_sites[site].polygon_ind.size();
PoolVector<Vector3> polygon;
polygon.resize(psize);
int prev = -1;
for (i = 0; i < psize; i++) {
int idx = map_sites[site].polygon_ind[i];
if (idx == prev)
continue;
polygon.write()[count++] = vertices[idx];
prev = idx;
}
polygon.resize(count);
polygon_cache_3d[site] = polygon;
return polygon;
}
inline PoolVector<int> get_here_sites(const Vector3 &position)
{
PoolVector<int> ret;
int i;
Rect2i xpos;
xpos.position = Vector2i((int)position.x, (int)position.z);
xpos.grow(300);
for (i = 0; i < map_sites.size(); i++) {
if (xpos.intersects(map_sites[i].rect))
ret.push_back(i);
if (xpos.encloses(map_sites[i].rect))
ret.push_back(i);
}
return ret;
}
};
#endif