Mostly working spatical map with 2 level collision/space structure. Not the best implementation but this is the idea.

This commit is contained in:
Zed A. Shaw 2025-07-29 03:12:44 -04:00
parent fd53f92fe6
commit d6326c9e41
7 changed files with 60 additions and 31 deletions

View file

@ -5,25 +5,43 @@ using namespace fmt;
using DinkyECS::Entity;
void SpatialMap::insert(Point pos, Entity ent) {
yes_collision.insert_or_assign(pos, ent);
void SpatialMap::insert(Point pos, Entity ent, bool has_collision) {
if(has_collision) {
yes_collision.insert_or_assign(pos, ent);
} else {
no_collision.insert_or_assign(pos, ent);
}
}
void SpatialMap::remove(Point pos) {
yes_collision.erase(pos);
bool SpatialMap::remove(Point pos) {
if(yes_collision.contains(pos)) {
yes_collision.erase(pos);
return true;
} else {
no_collision.erase(pos);
return false;
}
}
void SpatialMap::move(Point from, Point to, Entity ent) {
remove(from);
insert(to, ent);
bool has_collision = remove(from);
insert(to, ent, has_collision);
}
bool SpatialMap::occupied(Point at) const {
return yes_collision.contains(at);
}
bool SpatialMap::something_there(Point at) const {
return yes_collision.contains(at) || no_collision.contains(at);
}
Entity SpatialMap::get(Point at) const {
return yes_collision.at(at);
if(yes_collision.contains(at)) {
return yes_collision.at(at);
} else {
return no_collision.at(at);
}
}
/*
@ -81,6 +99,7 @@ SortedEntities SpatialMap::distance_sorted(Point from, int max_dist) {
SortedEntities sprite_distance;
update_sorted(sprite_distance, yes_collision, from, max_dist);
update_sorted(sprite_distance, no_collision, from, max_dist);
std::sort(sprite_distance.begin(), sprite_distance.end(), std::greater<>());