From 84a648723674934ef46e1799404d778474a74aeb Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Fri, 13 Apr 2018 11:30:01 +0200 Subject: Explosions, better AI and misc refactoring. --- src/game/units.cpp | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/game/units.cpp') diff --git a/src/game/units.cpp b/src/game/units.cpp index fb0ce3c..6bce474 100644 --- a/src/game/units.cpp +++ b/src/game/units.cpp @@ -209,8 +209,10 @@ void unit_t::damage(int points, unit_t *attacker) health -= points; if (health <= 0) die(attacker); - else + else { wake(); + on_damage(attacker); + } } void unit_t::die(unit_t *killer) @@ -273,4 +275,36 @@ void unit_t::random_walk(void) move.random_walk_time = game->time; } +void hivemind_attack(unit_t *source, v2f_t target) +{ + rectf_t search; + std::list ents; + + search[0] = source->x - v2f_t(5, 5); + search[1] = source->x + v2f_t(5, 5); + + ents = source->game->world.get_entities(search, CF_BODY_SMALL); + + for (world::entity_t *ent : ents) { + unit_t *unit; + + if (ent->type != ET_UNIT) + continue; + + unit = dynamic_cast(ent); + + if (unit->type != unit_t::UNIT_SPIDER) + continue; + + if ((unit->x - target).len() > 25.0f) + continue; + + if (unit->have_target) + continue; + + unit->wake(); + unit->start_moving(target); + } +} + } // namespace game -- cgit