From 0eba793d634fb8fa59545b4bfc68b3dc7ff27552 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 24 May 2024 01:58:34 +0300 Subject: [PATCH] added player camera rotation z axis --- src/logic/PlayerController.cpp | 10 ++++++---- src/logic/scripting/lua/libplayer.cpp | 17 ++++++++++++----- src/objects/Player.cpp | 4 ++++ src/objects/Player.hpp | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index fe5cfe75..44e73512 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -47,14 +47,16 @@ void CameraControl::refresh() { } void CameraControl::updateMouse(PlayerInput& input) { - glm::vec2& cam = player->cam; + glm::vec3& cam = player->cam; float sensitivity = (input.zoom ? settings.sensitivity.get() / 4.f : settings.sensitivity.get()); - cam -= glm::degrees(Events::delta / (float)Window::height * sensitivity); - + auto d = glm::degrees(Events::delta / (float)Window::height * sensitivity); + cam.x -= d.x; + cam.y -= d.y; + if (cam.y < -89.9f) { cam.y = -89.9f; } @@ -69,7 +71,7 @@ void CameraControl::updateMouse(PlayerInput& input) { } camera->rotation = glm::mat4(1.0f); - camera->rotate(glm::radians(cam.y), glm::radians(cam.x), 0); + camera->rotate(glm::radians(cam.y), glm::radians(cam.x), glm::radians(cam.z)); } glm::vec3 CameraControl::updateCameraShaking(float delta) { diff --git a/src/logic/scripting/lua/libplayer.cpp b/src/logic/scripting/lua/libplayer.cpp index 5c27d954..3ce71759 100644 --- a/src/logic/scripting/lua/libplayer.cpp +++ b/src/logic/scripting/lua/libplayer.cpp @@ -66,10 +66,11 @@ static int l_player_get_rot(lua_State* L) { if (!player) { return 0; } - glm::vec2 rot = player->cam; + const glm::vec3& rot = player->cam; lua_pushnumber(L, rot.x); lua_pushnumber(L, rot.y); - return 2; + lua_pushnumber(L, rot.z); + return 3; } static int l_player_set_rot(lua_State* L) { @@ -77,11 +78,17 @@ static int l_player_set_rot(lua_State* L) { if (!player) { return 0; } - auto x = lua_tonumber(L, 2); - auto y = lua_tonumber(L, 3); - glm::vec2& cam = player->cam; + glm::vec3& cam = player->cam; + + lua_Number x = lua_tonumber(L, 2); + lua_Number y = lua_tonumber(L, 3); + lua_Number z = cam.z; + if (lua_isnumber(L, 4)) { + z = lua_tonumber(L, 4); + } cam.x = x; cam.y = y; + cam.z = z; return 0; } diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 331c1f60..c441eff0 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -206,6 +206,7 @@ std::unique_ptr Player::serialize() const { auto& rotarr = root->putList("rotation"); rotarr.put(cam.x); rotarr.put(cam.y); + rotarr.put(cam.z); auto& sparr = root->putList("spawnpoint"); sparr.put(spawnpoint.x); @@ -230,6 +231,9 @@ void Player::deserialize(dynamic::Map *src) { auto rotarr = src->list("rotation"); cam.x = rotarr->num(0); cam.y = rotarr->num(1); + if (rotarr->size() > 2) { + cam.z = rotarr->num(2); + } if (src->has("spawnpoint")) { auto sparr = src->list("spawnpoint"); diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index 24825e4a..3dd9e4be 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -45,7 +45,7 @@ public: std::unique_ptr hitbox; bool debug = false; voxel selectedVoxel {0, 0}; - glm::vec2 cam {}; + glm::vec3 cam {}; Player(glm::vec3 position, float speed, std::shared_ptr inv); ~Player();