-void Chaser::Update(int dt) {
- glm::vec3 diff(Target().AbsoluteDifference(Controlled()));
- float dist = dot (diff, diff);
- // TODO: line of sight test
- if (dist > stop_dist) {
- Controlled().Velocity(normalize(diff) * speed);
- } else if (dist < flee_dist) {
- Controlled().Velocity(normalize(diff) * -speed);
- } else {
- Controlled().Velocity(glm::vec3(0.0f));
+void AIController::Update(Entity &e, float dt) {
+ // movement: for now, wander only
+ glm::vec3 displacement(
+ random.SNorm() * wander_disp,
+ random.SNorm() * wander_disp,
+ random.SNorm() * wander_disp
+ );
+ if (dot(displacement, displacement) > std::numeric_limits<float>::epsilon()) {
+ wander_pos = normalize(wander_pos + displacement * dt) * wander_radius;