diff --git a/res/content/base/resources.json b/res/content/base/resources.json index e1628cc3..93922266 100644 --- a/res/content/base/resources.json +++ b/res/content/base/resources.json @@ -2,6 +2,7 @@ "camera": [ "first-person", "third-person-front", - "third-person-back" + "third-person-back", + "cinematic" ] } diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 0b24eaef..eda4a9d9 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -173,7 +173,11 @@ void CameraControl::update(const PlayerInput& input, float delta, Chunks* chunks tpCamera->dir = camera->dir; tpCamera->front = camera->front; } - player->currentCamera->setFov(glm::radians(settings.fov.get())); + if (player->currentCamera == spCamera || + player->currentCamera == tpCamera || + player->currentCamera == camera) { + player->currentCamera->setFov(glm::radians(settings.fov.get())); + } } PlayerController::PlayerController( diff --git a/src/logic/scripting/lua/libcamera.cpp b/src/logic/scripting/lua/libcamera.cpp index cedff991..69f681d1 100644 --- a/src/logic/scripting/lua/libcamera.cpp +++ b/src/logic/scripting/lua/libcamera.cpp @@ -4,6 +4,8 @@ #include "../../../world/Level.hpp" #include "../../../window/Camera.hpp" +#include + using namespace scripting; template @@ -86,6 +88,15 @@ static int getter_up(lua::State* L, const Camera& camera) { return lua::pushvec3_arr(L, camera.up); } +static int l_look_at(lua::State* L) { + size_t index = static_cast(lua::tointeger(L, 1)); + auto& camera = *level->cameras.at(index); + auto center = lua::tovec<3>(L, 2); + camera.rotation = glm::inverse(glm::lookAt(glm::vec3(), center-camera.position, glm::vec3(0, 1, 0))); + camera.updateVectors(); + return 0; +} + const luaL_Reg cameralib [] = { {"index", lua::wrap}, {"name", lua::wrap}, @@ -104,5 +115,6 @@ const luaL_Reg cameralib [] = { {"get_front", lua::wrap>}, {"get_right", lua::wrap>}, {"get_up", lua::wrap>}, + {"look_at", lua::wrap}, {NULL, NULL} }; diff --git a/src/logic/scripting/lua/libplayer.cpp b/src/logic/scripting/lua/libplayer.cpp index dd004215..13629b35 100644 --- a/src/logic/scripting/lua/libplayer.cpp +++ b/src/logic/scripting/lua/libplayer.cpp @@ -181,6 +181,16 @@ static int l_player_set_entity(lua::State* L) { return 0; } +static int l_player_set_camera(lua::State* L) { + auto player = get_player(L, 1); + if (player == nullptr) { + return 0; + } + size_t index = lua::tointeger(L, 2); + player->currentCamera = level->cameras.at(index); + return 0; +} + const luaL_Reg playerlib [] = { {"get_pos", lua::wrap}, {"set_pos", lua::wrap}, @@ -199,5 +209,6 @@ const luaL_Reg playerlib [] = { {"get_spawnpoint", lua::wrap}, {"get_entity", lua::wrap}, {"set_entity", lua::wrap}, + {"set_camera", lua::wrap}, {NULL, NULL} };