#include <glm/glm.hpp>
#include "../world/EntityCollision.hpp"
+#include "../world/EntityController.hpp"
#include "../world/WorldCollision.hpp"
class Player;
class World;
-class PlayerController {
+class PlayerController
+: public EntityController {
public:
PlayerController(World &, Player &);
+ ~PlayerController();
+ World &GetWorld() noexcept { return world; }
+ const World &GetWorld() const noexcept { return world; }
Player &GetPlayer() noexcept { return player; }
const Player &GetPlayer() const noexcept { return player; }
/// the magnitude (clamped to [0..1]) can be used to attenuate target velocity
void SetMovement(const glm::vec3 &) noexcept;
const glm::vec3 &GetMovement() const noexcept { return move_dir; }
+
+ glm::vec3 ControlForce(const Entity &, const EntityState &) const override;
+
/// turn the controlled entity's head by given pitch and yaw deltas
void TurnHead(float pitch, float yaw) noexcept;
/// get player pitch in radians, normalized to [-PI/2,PI/2]
- float GetPitch() const noexcept { return pitch; }
+ float GetPitch() const noexcept;
/// get player yaw in radians, normalized to [-PI,PI]
- float GetYaw() const noexcept { return yaw; }
+ float GetYaw() const noexcept;
/// start doing primary action
/// what exactly this means depends on the active item
World &world;
Player &player;
glm::vec3 move_dir;
- float pitch;
- float yaw;
bool dirty;
WorldCollision aim_world;