1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-16 18:01:40 +00:00

Add AreaStore custom ID API

This commit is contained in:
ShadowNinja 2015-10-30 20:38:22 -04:00
parent 821551a266
commit 3ce6642a26
5 changed files with 14 additions and 7 deletions

View file

@ -164,7 +164,7 @@ int LuaAreaStore::l_get_areas_in_area(lua_State *L)
return 1;
}
// insert_area(edge1, edge2, data)
// insert_area(edge1, edge2, data, id)
int LuaAreaStore::l_insert_area(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@ -179,6 +179,9 @@ int LuaAreaStore::l_insert_area(lua_State *L)
a.data = std::string(data, d_len);
if (lua_isnumber(L, 5))
a.id = lua_tonumber(L, 5);
if (!ast->insertArea(&a))
return 0;

View file

@ -160,7 +160,8 @@ void AreaStore::getAreasForPos(std::vector<Area *> *result, v3s16 pos)
bool VectorAreaStore::insertArea(Area *a)
{
a->id = getNextId();
if (a->id == U32_MAX)
a->id = getNextId();
std::pair<AreaMap::iterator, bool> res =
areas_map.insert(std::make_pair(a->id, *a));
if (!res.second)
@ -232,7 +233,8 @@ static inline SpatialIndex::Point get_spatial_point(const v3s16 pos)
bool SpatialAreaStore::insertArea(Area *a)
{
a->id = getNextId();
if (a->id == U32_MAX)
a->id = getNextId();
if (!areas_map.insert(std::make_pair(a->id, *a)).second)
// ID is not unique
return false;

View file

@ -38,9 +38,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
struct Area {
Area() {}
Area() : id(U32_MAX) {}
Area(const v3s16 &mine, const v3s16 &maxe) :
minedge(mine), maxedge(maxe)
id(U32_MAX), minedge(mine), maxedge(maxe)
{
sortBoxVerticies(minedge, maxedge);
}
@ -68,7 +68,8 @@ public:
size_t size() const { return areas_map.size(); }
/// Add an area to the store.
/// Updates the area's ID.
/// Updates the area's ID if it hasn't already been set.
/// @return Whether the area insertion was successful.
virtual bool insertArea(Area *a) = 0;
/// Removes an area from the store by ID.