]> git.localhorst.tv Git - blank.git/blob - src/app/controller.cpp
some code reorganization
[blank.git] / src / app / controller.cpp
1 #include "FPSController.hpp"
2 #include "RandomWalk.hpp"
3
4 #include <glm/gtx/euler_angles.hpp>
5 #include <glm/gtx/rotate_vector.hpp>
6
7
8 namespace blank {
9
10 FPSController::FPSController(Entity &entity) noexcept
11 : entity(entity)
12 , pitch(0)
13 , yaw(0) {
14
15 }
16
17
18 void FPSController::Pitch(float p) noexcept {
19         pitch = p;
20         if (pitch > PI / 2) {
21                 pitch = PI / 2;
22         } else if (pitch < -PI / 2) {
23                 pitch = -PI / 2;
24         }
25 }
26
27 void FPSController::RotatePitch(float delta) noexcept {
28         Pitch(pitch + delta);
29 }
30
31 void FPSController::Yaw(float y) noexcept {
32         yaw = y;
33         if (yaw > PI) {
34                 yaw -= PI * 2;
35         } else if (yaw < -PI) {
36                 yaw += PI * 2;
37         }
38 }
39
40 void FPSController::RotateYaw(float delta) noexcept {
41         Yaw(yaw + delta);
42 }
43
44
45 void FPSController::Update(int dt) noexcept {
46         entity.Rotation(glm::eulerAngleYX(yaw, pitch));
47         entity.Velocity(glm::rotateY(velocity, yaw));
48 }
49
50
51 RandomWalk::RandomWalk(Entity &e) noexcept
52 : entity(e)
53 , time_left(0) {
54
55 }
56
57
58 void RandomWalk::Update(int dt) noexcept {
59         time_left -= dt;
60         if (time_left > 0) return;
61         time_left += 2500 + (rand() % 5000);
62
63         constexpr float move_vel = 0.0005f;
64
65         glm::vec3 new_vel = entity.Velocity();
66
67         switch (rand() % 9) {
68                 case 0:
69                         new_vel.x = -move_vel;
70                         break;
71                 case 1:
72                         new_vel.x = 0.0f;
73                         break;
74                 case 2:
75                         new_vel.x = move_vel;
76                         break;
77                 case 3:
78                         new_vel.y = -move_vel;
79                         break;
80                 case 4:
81                         new_vel.y = 0.0f;
82                         break;
83                 case 5:
84                         new_vel.y = move_vel;
85                         break;
86                 case 6:
87                         new_vel.z = -move_vel;
88                         break;
89                 case 7:
90                         new_vel.z = 0.0f;
91                         break;
92                 case 8:
93                         new_vel.z = move_vel;
94                         break;
95         }
96
97         entity.Velocity(new_vel);
98 }
99
100 }