summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2017-11-06 20:17:58 +0000
committerPaweł Redman <pawel.redman@gmail.com>2017-11-06 20:18:31 +0000
commit6ab51bfb002af08da74a693f386c4154d2c4108a (patch)
treeee1954051f88f2cacd6470ab4418bef468b91735
parentbdd1b10cb8d6c405de58031e1de57c7f2b24225f (diff)
More support for cflags.
-rw-r--r--src/common.hpp6
-rw-r--r--src/path_finder.cpp9
-rw-r--r--src/world.cpp13
3 files changed, 15 insertions, 13 deletions
diff --git a/src/common.hpp b/src/common.hpp
index 0785a79..b7ce218 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -110,9 +110,11 @@ namespace world {
// FIXME: iterators instead of returning std::lists
std::list<sector_t*> get_sectors(rectf_t rect);
- std::list<entity_t*> get_entities(rectf_t rect);
+ std::list<entity_t*> get_entities(rectf_t rect, cflags_t cflags);
std::list<entity_t*> get_render_entities(rectf_t rect);
+ bool test_rect(rectf_t rect, cflags_t cflags);
+
void debug_point(sf::Vector2f point);
};
@@ -154,7 +156,7 @@ namespace world {
~path_finder_t();
void setup_nodes(v2f_t src_, v2f_t dst_, cflags_t cflags_);
- void eliminate_nodes(cmodel_t cmodel);
+ void eliminate_nodes(rectf_t rect);
void find_r(tile_index_t index, float dist, float limit);
bool find(void);
void export_path(std::list<v2f_t> *list);
diff --git a/src/path_finder.cpp b/src/path_finder.cpp
index 3d97df7..aeded09 100644
--- a/src/path_finder.cpp
+++ b/src/path_finder.cpp
@@ -42,16 +42,13 @@ void path_finder_t::setup_nodes(v2f_t src_, v2f_t dst_, cflags_t cflags_)
nodes[i].dist = INFINITY;
}
-void path_finder_t::eliminate_nodes(cmodel_t cmodel)
+void path_finder_t::eliminate_nodes(rectf_t bounds)
{
rect_t<coord_t, 2> index_bounds;
tile_index_t index;
- if (!(cmodel.cflags & cflags))
- return;
-
- index_bounds[0] = tile_index_t(cmodel.bounds[0].floor()) - base;
- index_bounds[1] = tile_index_t(cmodel.bounds[1].ceil()) - base;
+ index_bounds[0] = tile_index_t(bounds[0].floor()) - base;
+ index_bounds[1] = tile_index_t(bounds[1].ceil()) - base;
for (index[1] = index_bounds[0][1]; index[1] <= index_bounds[1][1]; index[1]++)
for (index[0] = index_bounds[0][0]; index[0] <= index_bounds[1][0]; index[0]++) {
diff --git a/src/world.cpp b/src/world.cpp
index d9789ad..ab3ef92 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -99,9 +99,9 @@ bool world_t::find_path(v2f_t src, v2f_t dst, cmodel_t *cmodel, entity_t *ignore
bounds = rectf_t(src, dst).norm();
- for (entity_t *ent : get_entities(bounds))
+ for (entity_t *ent : get_entities(bounds, cmodel->cflags))
if (ent != ignore)
- finder.eliminate_nodes(ent->cmodel);
+ finder.eliminate_nodes(ent->cmodel.bounds);
if (!finder.find())
return false;
@@ -169,7 +169,7 @@ std::list<sector_t*> world_t::get_sectors(rectf_t rect)
return list;
}
-std::list<entity_t*> world_t::get_entities(rectf_t rect)
+std::list<entity_t*> world_t::get_entities(rectf_t rect, cflags_t cflags)
{
static size_t cookie = 0;
std::list<entity_t*> list;
@@ -181,10 +181,13 @@ std::list<entity_t*> world_t::get_entities(rectf_t rect)
if (ent->cookie == cookie)
continue;
- if (!(rect && ent->cmodel.bounds))
+ ent->cookie = cookie;
+
+ if (!(ent->cmodel.cflags & cflags))
continue;
- ent->cookie = cookie;
+ if (!(rect && ent->cmodel.bounds))
+ continue;
list.push_back(ent);
}