X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FFPSController.hpp;fp=src%2Fapp%2FFPSController.hpp;h=88dca64e01d8bbf8872c0f68d2c128a12550b0e7;hb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;hp=0000000000000000000000000000000000000000;hpb=e53a0e2e711a7d8bd9b0ddacd1360aa14370643f;p=blank.git diff --git a/src/app/FPSController.hpp b/src/app/FPSController.hpp new file mode 100644 index 0000000..88dca64 --- /dev/null +++ b/src/app/FPSController.hpp @@ -0,0 +1,44 @@ +#ifndef BLANK_APP_FPSCONTROLLER_HPP_ +#define BLANK_APP_FPSCONTROLLER_HPP_ + +#include "../model/geometry.hpp" +#include "../world/Entity.hpp" + +#include + + +namespace blank { + +class FPSController { + +public: + explicit FPSController(Entity &) noexcept; + + Ray Aim() const noexcept { return entity.Aim(entity.ChunkCoords()); } + + const glm::vec3 &Velocity() const noexcept { return velocity; } + void Velocity(const glm::vec3 &vel) noexcept { velocity = vel; } + + // all angles in radians (full circle = 2π) + float Pitch() const noexcept { return pitch; } + void Pitch(float p) noexcept; + void RotatePitch(float delta) noexcept; + float Yaw() const noexcept { return yaw; } + void Yaw(float y) noexcept; + void RotateYaw(float delta) noexcept; + + void Update(int dt) noexcept; + +private: + Entity &entity; + + glm::vec3 velocity; + + float pitch; + float yaw; + +}; + +} + +#endif