X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcontroller.cpp;h=e86551f4c71ff20e8264753b2c5a89b4e8155039;hb=83ed3de28841d1eecfca39ff540e804cf6809b32;hp=b996f9e37a04c80301a5776c288b5af09202b38e;hpb=c3c5045f06327db2a3c97eae77a072bc06677286;p=blank.git diff --git a/src/controller.cpp b/src/controller.cpp index b996f9e..e86551f 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -6,7 +6,7 @@ namespace blank { -FPSController::FPSController(Entity &entity) +FPSController::FPSController(Entity &entity) noexcept : entity(entity) , pitch(0) , yaw(0) { @@ -14,7 +14,7 @@ FPSController::FPSController(Entity &entity) } -void FPSController::Pitch(float p) { +void FPSController::Pitch(float p) noexcept { pitch = p; if (pitch > PI / 2) { pitch = PI / 2; @@ -23,11 +23,11 @@ void FPSController::Pitch(float p) { } } -void FPSController::RotatePitch(float delta) { +void FPSController::RotatePitch(float delta) noexcept { Pitch(pitch + delta); } -void FPSController::Yaw(float y) { +void FPSController::Yaw(float y) noexcept { yaw = y; if (yaw > PI) { yaw -= PI * 2; @@ -36,14 +36,64 @@ void FPSController::Yaw(float y) { } } -void FPSController::RotateYaw(float delta) { +void FPSController::RotateYaw(float delta) noexcept { Yaw(yaw + delta); } -void FPSController::Update(int dt) { +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); +} + }