summaryrefslogtreecommitdiff
path: root/src/game/game.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2017-12-13 16:27:34 +0100
committerPaweł Redman <pawel.redman@gmail.com>2017-12-13 16:30:24 +0100
commitb3b30521e50f1ed0046091b316b19daec646b4ac (patch)
tree94da0045602da71c5c76b692f4ea4e8c510ca4b7 /src/game/game.cpp
parent15f4780dd94a06bec5616155c05810c731d2e4af (diff)
Basic alien AI.
Diffstat (limited to 'src/game/game.cpp')
-rw-r--r--src/game/game.cpp48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp
index 71d24ac..b9a46db 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -16,8 +16,7 @@ void state_t::start(void)
units.insert(human);
alien = new alien_t;
- alien->place(&world, v2f_t(5.5, 5.5));
- units.insert(alien);
+ alien->place(&world, v2f_t(15.5, -2.5));
}
void state_t::stop(void)
@@ -41,6 +40,10 @@ void state_t::select(rectf_t x)
continue;
unit = (unit_t*)ent;
+
+ if (unit->type != unit_t::UNIT_HUMAN)
+ continue;
+
unit->selected = selection_cookie;
selected_units.insert(unit);
}
@@ -62,8 +65,45 @@ void state_t::tick(double now_, double dt_)
now = now_;
dt = dt_;
- for (unit_t *unit : units)
- unit->keep_moving(now, dt);
+ for (unit_t *unit : units) {
+ rectf_t wake_range;
+
+ wake_range[0] = unit->x - v2f_t(10, 10);
+ wake_range[1] = unit->x + v2f_t(10, 10);
+
+ for (world::entity_t *ent : world.get_entities(wake_range, -1)) {
+ unit_t *enemy;
+
+ if (ent->type != ET_UNIT)
+ continue;
+
+ enemy = (unit_t*)ent;
+ enemy->wake_time = now;
+
+ if (enemy->awake)
+ continue;
+
+ if (enemy->type == unit_t::UNIT_HUMAN)
+ continue;
+
+ enemy->awake = true;
+ awake_units.insert(enemy);
+ enemy->wake(now, unit);
+ }
+
+ unit->think(now, dt);
+ }
+
+ for (auto i = std::begin(awake_units); i != std::end(awake_units);) {
+ if (now - (*i)->wake_time >= 5.0) {
+ (*i)->awake = false;
+ (*i)->sleep(now);
+ i = awake_units.erase(i);
+ } else {
+ (*i)->think(now, dt);
+ i++;
+ }
+ }
}
bool load_assets(void)