player.GetEntity().SetController(*this);
}
+PlayerController::~PlayerController() {
+ if (&player.GetEntity().GetController() == this) {
+ player.GetEntity().UnsetController();
+ }
+}
+
void PlayerController::SetMovement(const glm::vec3 &m) noexcept {
if (dot(m, m) > 1.0f) {
move_dir = normalize(m);
Invalidate();
}
-glm::vec3 PlayerController::ControlForce(const EntityState &s) const {
- glm::vec3 target(rotateY(move_dir * player.GetEntity().MaxVelocity(), s.yaw) - s.velocity);
- return target * player.GetEntity().MaxControlForce();
+glm::vec3 PlayerController::ControlForce(const Entity &e, const EntityState &s) const {
+ return TargetVelocity(rotateY(move_dir * e.MaxVelocity(), s.yaw), s, 5.0f);
}
void PlayerController::TurnHead(float dp, float dy) noexcept {