From f08fb7293382dbaf240860119d128486ada62221 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Sat, 21 Oct 2017 14:40:20 +0200 Subject: Improve short paths and do some refactoring. --- src/game.cpp | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'src/game.cpp') diff --git a/src/game.cpp b/src/game.cpp index 97aee59..2dab5c6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -18,8 +18,9 @@ public: rectf_t size, render_size; struct { - bool moving; + bool moving = false; v2f_t dst; + float angle = 0.0f; std::list path; } move; @@ -38,19 +39,6 @@ public: bool move_towards(v2f_t point, float *time) { bool partial; - v2f_t delta; - - delta = point - x; - - if (delta.len() >= *time) { - partial = true; - x += delta * *time / delta.len(); - *time = 0.0f; - } else { - partial = false; - x = point; - *time -= delta.len(); - } return partial; } @@ -65,12 +53,23 @@ public: time = 0.15; while (time > 0.0f) { + v2f_t delta, next; + if (!move.path.size()) { move.moving = false; break; } - if (!move_towards(*move.path.begin(), &time)) { + next = *move.path.begin(); + delta = next - x; + move.angle = delta.angle(); + + if (delta.len() >= time) { + x += delta * time / delta.len(); + break; + } else { + x = next; + time -= delta.len(); move.path.pop_front(); } } @@ -103,11 +102,10 @@ class human_t : public unit_t { public: void render_to(render::state_t *render) { - float angle = 0; render->render((move.moving ? &assets::human.legs_walking : - &assets::human.legs_idle), render_bounds, angle); - render->render(&assets::human.body_idle, render_bounds, angle); - render->render(&assets::human.head_idle, render_bounds, angle); + &assets::human.legs_idle), render_bounds, move.angle); + render->render(&assets::human.body_idle, render_bounds, move.angle); + render->render(&assets::human.head_idle, render_bounds, move.angle); if (move.moving) render->debug_path(&move.path); -- cgit