-void Chaser::Update(int dt) {
- glm::vec3 diff(Target().AbsoluteDifference(Controlled()));
- float dist = length(diff);
- glm::vec3 norm_diff(diff / dist);
-
- bool line_of_sight = true;
- // FIXME: this only works if target is in the reference chunk (which is true for the player)
- Ray aim{Target().Position() - diff, norm_diff};
- Chunk *chunk;
- int blkid;
- float distance;
- glm::vec3 normal;
- if (world.Intersection(aim, glm::mat4(1.0f), chunk, blkid, distance, normal)) {
- line_of_sight = distance > dist;
+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;