From 20b189455545db5688ed4f14d2966380137ee2db Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Sat, 21 Oct 2017 11:20:34 +0200 Subject: Start working on path finding. --- src/game.cpp | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) (limited to 'src/game.cpp') diff --git a/src/game.cpp b/src/game.cpp index d805c83..ffee87d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4,8 +4,9 @@ namespace game { class unit_t : public world::entity_t { world::world_t *world; + v2f_t x; - void compute_bounds(v2f_t x) + void compute_bounds() { bounds[0] = x + size[0]; bounds[1] = x + size[1]; @@ -17,19 +18,19 @@ public: rectf_t size, render_size; struct { - world::tile_index_t pos; - bool moving; - std::list path; - world::tile_index_t dest; + std::list path; + v2f_t dst; } move; - void place(world::world_t *world, world::tile_index_t pos) + void place(world::world_t *world_, v2f_t x_) { - move.pos = pos; + world = world_; + x = x_; move.moving = false; + unlink(); - compute_bounds((v2f_t)pos + v2f_t(0.5f, 0.5f)); + compute_bounds(); link(world); } @@ -39,9 +40,22 @@ public: return; } - bool start_moving(world::tile_index_t dest) + bool start_moving(v2f_t dst_) { - return false; + if (!world) { + printf("unit_t::start_moving: entity is not linked\n"); + return false; + } + + move.dst = dst_; + move.path.clear(); + + if (world->find_path(x, move.dst, size, &move.path)) + move.moving = true; + else + move.moving = false; + + return move.moving; } }; @@ -65,7 +79,12 @@ void state_t::start(void) human.size[1] = v2f_t(+0.4f, +0.4f); human.render_size[0] = v2f_t(-0.5f, -1.0f); human.render_size[1] = v2f_t(+0.5f, +0.5f); - human.place(&world, world::tile_index_t(0, 0)); + human.place(&world, v2f_t(0.5f, 0.5f)); +} + +void state_t::debug_click(v2f_t x) +{ + human.start_moving(x); } void state_t::tick(void) -- cgit