Mostly working spatical map with 2 level collision/space structure. Not the best implementation but this is the idea.
This commit is contained in:
parent
fd53f92fe6
commit
d6326c9e41
7 changed files with 60 additions and 31 deletions
|
@ -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<>());
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue