: 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();
glm::vec3 diff(Target().AbsoluteDifference(Controlled()));
float dist = length(diff);
if (dist < std::numeric_limits<float>::epsilon()) {
- Controlled().Velocity(glm::vec3(0.0f));
+ Controlled().TargetVelocity(glm::vec3(0.0f));
return;
}
glm::vec3 norm_diff(diff / dist);
}
if (!line_of_sight) {
- Controlled().Velocity(glm::vec3(0.0f));
+ Controlled().TargetVelocity(glm::vec3(0.0f));
} else if (dist > stop_dist) {
- Controlled().Velocity(norm_diff * chase_speed);
+ Controlled().TargetVelocity(norm_diff * chase_speed);
} else if (dist < flee_dist) {
- Controlled().Velocity(norm_diff * flee_speed);
+ Controlled().TargetVelocity(norm_diff * flee_speed);
} else {
- Controlled().Velocity(glm::vec3(0.0f));
+ Controlled().TargetVelocity(glm::vec3(0.0f));
}
}
, 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) {
Change();
} else if (lerp_time > 0) {
float a = std::min(lerp_time / lerp_max, 1.0f);
- Controlled().Velocity(mix(target_vel, start_vel, a));
- Controlled().AngularVelocity(mix(target_rot, start_rot, a));
+ Controlled().TargetVelocity(mix(target_vel, start_vel, a));
} else {
- Controlled().Velocity(target_vel);
- Controlled().AngularVelocity(target_rot);
+ Controlled().TargetVelocity(target_vel);
}
}
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);
}
}