void AreaStore::cacheMiss(void *data, const v3s16 &mpos, std::vector<Area *> *dest) { AreaStore *as = (AreaStore *)data; u8 r = as->m_cacheblock_radius; // get the points at the edges of the mapblock v3s16 minedge(mpos.X * r, mpos.Y * r, mpos.Z * r); v3s16 maxedge( minedge.X + r - 1, minedge.Y + r - 1, minedge.Z + r - 1); as->getAreasInArea(dest, minedge, maxedge, true); /* infostream << "Cache miss with " << dest->size() << " areas, between (" << minedge.X << ", " << minedge.Y << ", " << minedge.Z << ") and (" << maxedge.X << ", " << maxedge.Y << ", " << maxedge.Z << ")" << std::endl; // */ }
// get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data) int LuaAreaStore::l_get_areas_in_area(lua_State *L) { NO_MAP_LOCK_REQUIRED; LuaAreaStore *o = checkobject(L, 1); AreaStore *ast = o->as; v3s16 minedge = check_v3s16(L, 2); v3s16 maxedge = check_v3s16(L, 3); bool include_borders = true; bool include_data = false; bool accept_overlap = false; if (lua_isboolean(L, 4)) { accept_overlap = lua_toboolean(L, 4); get_data_and_border_flags(L, 5, &include_borders, &include_data); } std::vector<Area *> res; ast->getAreasInArea(&res, minedge, maxedge, accept_overlap); push_areas(L, res, include_borders, include_data); return 1; }