-
-RandomWalk::RandomWalk(Entity &e, std::uint64_t seed) noexcept
-: Controller(e)
-, random(seed)
-, start_vel(e.Velocity())
-, target_vel(start_vel)
-, switch_time(0)
-, lerp_max(1.0f)
-, lerp_time(0.0f) {
-
-}
-
-RandomWalk::~RandomWalk() {
-
-}
-
-void RandomWalk::Update(int dt) {
- switch_time -= dt;
- lerp_time -= dt;
- if (switch_time < 0) {
- switch_time += 2500 + (random.Next<unsigned short>() % 5000);
- lerp_max = 1500 + (random.Next<unsigned short>() % 1000);
- lerp_time = lerp_max;
- Change();
- } else if (lerp_time > 0) {
- float a = std::min(lerp_time / lerp_max, 1.0f);
- Controlled().TargetVelocity(mix(target_vel, start_vel, a));
+glm::vec3 AIController::Heading(const EntityState &state) noexcept {
+ if (dot(state.velocity, state.velocity) > std::numeric_limits<float>::epsilon()) {
+ return normalize(state.velocity);