1 #ifndef BLANK_UI_PLAYERCONTROLLER_HPP_
2 #define BLANK_UI_PLAYERCONTROLLER_HPP_
6 #include "../world/EntityCollision.hpp"
7 #include "../world/EntityController.hpp"
8 #include "../world/WorldCollision.hpp"
16 class PlayerController
17 : public EntityController {
20 PlayerController(World &, Player &);
22 World &GetWorld() noexcept { return world; }
23 const World &GetWorld() const noexcept { return world; }
24 Player &GetPlayer() noexcept { return player; }
25 const Player &GetPlayer() const noexcept { return player; }
27 WorldCollision &BlockFocus() noexcept { return aim_world; }
28 const WorldCollision &BlockFocus() const noexcept { return aim_world; }
29 EntityCollision &EntityFocus() noexcept { return aim_entity; }
30 const EntityCollision &EntityFocus() const noexcept { return aim_entity; }
32 /// set desired direction of movement
33 /// the magnitude (clamped to [0..1]) can be used to attenuate target velocity
34 void SetMovement(const glm::vec3 &) noexcept;
35 const glm::vec3 &GetMovement() const noexcept { return move_dir; }
37 glm::vec3 ControlForce(const EntityState &) const override;
39 /// turn the controlled entity's head by given pitch and yaw deltas
40 void TurnHead(float pitch, float yaw) noexcept;
42 /// get player pitch in radians, normalized to [-PI/2,PI/2]
43 float GetPitch() const noexcept;
44 /// get player yaw in radians, normalized to [-PI,PI]
45 float GetYaw() const noexcept;
47 /// start doing primary action
48 /// what exactly this means depends on the active item
49 virtual void StartPrimaryAction() = 0;
50 /// stop doing primary action
51 virtual void StopPrimaryAction() = 0;
53 virtual void StartSecondaryAction() = 0;
54 virtual void StopSecondaryAction() = 0;
55 virtual void StartTertiaryAction() = 0;
56 virtual void StopTertiaryAction() = 0;
58 /// set the item at given inventory slot as active
59 void SelectInventory(int) noexcept;
60 int InventorySlot() const noexcept;
63 void Invalidate() noexcept;
64 void UpdatePlayer() noexcept;
72 WorldCollision aim_world;
73 EntityCollision aim_entity;