X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2Fcontroller.cpp;fp=src%2Fapp%2Fcontroller.cpp;h=9cf2d6cd0687adaf345c1ac18c155a5867ae406a;hb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;hp=0000000000000000000000000000000000000000;hpb=e53a0e2e711a7d8bd9b0ddacd1360aa14370643f;p=blank.git diff --git a/src/app/controller.cpp b/src/app/controller.cpp new file mode 100644 index 0000000..9cf2d6c --- /dev/null +++ b/src/app/controller.cpp @@ -0,0 +1,100 @@ +#include "FPSController.hpp" +#include "RandomWalk.hpp" + +#include +#include + + +namespace blank { + +FPSController::FPSController(Entity &entity) noexcept +: entity(entity) +, pitch(0) +, yaw(0) { + +} + + +void FPSController::Pitch(float p) noexcept { + pitch = p; + if (pitch > PI / 2) { + pitch = PI / 2; + } else if (pitch < -PI / 2) { + pitch = -PI / 2; + } +} + +void FPSController::RotatePitch(float delta) noexcept { + Pitch(pitch + delta); +} + +void FPSController::Yaw(float y) noexcept { + yaw = y; + if (yaw > PI) { + yaw -= PI * 2; + } else if (yaw < -PI) { + yaw += PI * 2; + } +} + +void FPSController::RotateYaw(float delta) noexcept { + Yaw(yaw + delta); +} + + +void FPSController::Update(int dt) noexcept { + entity.Rotation(glm::eulerAngleYX(yaw, pitch)); + entity.Velocity(glm::rotateY(velocity, yaw)); +} + + +RandomWalk::RandomWalk(Entity &e) noexcept +: entity(e) +, time_left(0) { + +} + + +void RandomWalk::Update(int dt) noexcept { + time_left -= dt; + if (time_left > 0) return; + time_left += 2500 + (rand() % 5000); + + constexpr float move_vel = 0.0005f; + + glm::vec3 new_vel = entity.Velocity(); + + switch (rand() % 9) { + case 0: + new_vel.x = -move_vel; + break; + case 1: + new_vel.x = 0.0f; + break; + case 2: + new_vel.x = move_vel; + break; + case 3: + new_vel.y = -move_vel; + break; + case 4: + new_vel.y = 0.0f; + break; + case 5: + new_vel.y = move_vel; + break; + case 6: + new_vel.z = -move_vel; + break; + case 7: + new_vel.z = 0.0f; + break; + case 8: + new_vel.z = move_vel; + break; + } + + entity.Velocity(new_vel); +} + +}