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