: Controller(ctrl)
, world(world)
, tgt(tgt)
-, chase_speed(0.002f)
-, flee_speed(-0.005f)
+, chase_speed(2.0f)
+, flee_speed(-5.0f)
, stop_dist(10)
, flee_dist(5) {
tgt.Ref();
, random(seed)
, start_vel(e.Velocity())
, target_vel(start_vel)
-, start_rot(e.AngularVelocity())
-, target_rot(start_rot)
, switch_time(0)
, lerp_max(1.0f)
, lerp_time(0.0f) {
} else if (lerp_time > 0) {
float a = std::min(lerp_time / lerp_max, 1.0f);
Controlled().TargetVelocity(mix(target_vel, start_vel, a));
- Controlled().AngularVelocity(mix(target_rot, start_rot, a));
} else {
Controlled().TargetVelocity(target_vel);
- Controlled().AngularVelocity(target_rot);
}
}
void RandomWalk::Change() noexcept {
start_vel = target_vel;
- start_rot = target_rot;
- constexpr float base = 0.000001f;
+ constexpr float base = 0.001f;
target_vel.x = base * (random.Next<short>() % 1024);
target_vel.y = base * (random.Next<short>() % 1024);
target_vel.z = base * (random.Next<short>() % 1024);
-
- target_rot.x = base * (random.Next<short>() % 1024);
- target_rot.y = base * (random.Next<short>() % 1024);
- target_rot.z = base * (random.Next<short>() % 1024);
}
}