diff --git a/src/frontend/LevelFrontend.cpp b/src/frontend/LevelFrontend.cpp index 68f308c8..6c54a83d 100644 --- a/src/frontend/LevelFrontend.cpp +++ b/src/frontend/LevelFrontend.cpp @@ -37,10 +37,10 @@ LevelFrontend::LevelFrontend( auto soundsCamera = currentPlayer->currentCamera.get(); if (soundsCamera == currentPlayer->spCamera.get() || soundsCamera == currentPlayer->tpCamera.get()) { - soundsCamera = currentPlayer->camera.get(); + soundsCamera = currentPlayer->fpCamera.get(); } bool relative = player == currentPlayer && - soundsCamera == currentPlayer->camera.get(); + soundsCamera == currentPlayer->fpCamera.get(); if (!relative) { pos = player->getPosition(); } diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index a0d93487..8824d640 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -48,7 +48,7 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr level) worldRenderer->clear(); })); keepAlive(settings.camera.fov.observe([=](double value) { - controller->getPlayer()->camera->setFov(glm::radians(value)); + controller->getPlayer()->fpCamera->setFov(glm::radians(value)); })); keepAlive(Events::getBinding(BIND_CHUNKS_RELOAD).onactived.add([=](){ controller->getLevel()->chunks->saveAndClear(); @@ -93,7 +93,7 @@ void LevelScreen::saveWorldPreview() { int previewSize = settings.ui.worldPreviewSize.get(); // camera special copy for world preview - Camera camera = *player->camera; + Camera camera = *player->fpCamera; camera.setFov(glm::radians(70.0f)); DrawContext pctx(nullptr, {Window::width, Window::height}, batch.get()); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index f36c7a24..2929eaf0 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -284,7 +284,7 @@ void WorldRenderer::renderDebugLines( if (showChunkBorders) { linesShader->uniformMatrix("u_projview", camera.getProjView()); - glm::vec3 coord = player->camera->position; + glm::vec3 coord = player->fpCamera->position; if (coord.x < 0) coord.x--; if (coord.z < 0) coord.z--; int cx = floordiv(static_cast(coord.x), CHUNK_W); @@ -432,7 +432,9 @@ void WorldRenderer::draw( // Debug lines if (hudVisible) { renderLines(camera, linesShader, ctx); - renderHands(camera, assets); + if (player->currentCamera == player->fpCamera) { + renderHands(camera, assets); + } } } if (hudVisible && player->debug) { @@ -450,9 +452,9 @@ void WorldRenderer::draw( } void WorldRenderer::renderBlockOverlay(const DrawContext& wctx, const Assets& assets) { - int x = std::floor(player->camera->position.x); - int y = std::floor(player->camera->position.y); - int z = std::floor(player->camera->position.z); + int x = std::floor(player->currentCamera->position.x); + int y = std::floor(player->currentCamera->position.y); + int z = std::floor(player->currentCamera->position.z); auto block = level->chunks->get(x, y, z); if (block && block->id) { const auto& def = diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 35d92b95..64e2a40c 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -41,7 +41,7 @@ CameraControl::CameraControl( const std::shared_ptr& player, const CameraSettings& settings ) : player(player), - camera(player->camera), + camera(player->fpCamera), settings(settings), offset(0.0f, 0.7f, 0.0f) { } @@ -353,7 +353,7 @@ static void pick_block( voxel* PlayerController::updateSelection(float maxDistance) { auto indices = level->content->getIndices(); auto chunks = level->chunks.get(); - auto camera = player->camera.get(); + auto camera = player->fpCamera.get(); auto& selection = player->selection; glm::vec3 end; @@ -416,7 +416,7 @@ voxel* PlayerController::updateSelection(float maxDistance) { void PlayerController::processRightClick(const Block& def, const Block& target) { const auto& selection = player->selection; auto chunks = level->chunks.get(); - auto camera = player->camera.get(); + auto camera = player->fpCamera.get(); blockstate state {}; state.rotation = determine_rotation(&def, selection.normal, camera->dir); diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index fb4c9f0f..0d0a7223 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -85,7 +85,7 @@ static int l_set_rot(lua::State* L) { static int l_get_dir(lua::State* L) { if (auto player = get_player(L, 1)) { - return lua::pushvec3(L, player->camera->front); + return lua::pushvec3(L, player->fpCamera->front); } return 0; } diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index ec2516c2..5b925f58 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -40,11 +40,11 @@ Player::Player( position(position), inventory(std::move(inv)), eid(eid), - camera(level->getCamera("core:first-person")), + fpCamera(level->getCamera("core:first-person")), spCamera(level->getCamera("core:third-person-front")), tpCamera(level->getCamera("core:third-person-back")), - currentCamera(camera) { - camera->setFov(glm::radians(90.0f)); + currentCamera(fpCamera) { + fpCamera->setFov(glm::radians(90.0f)); spCamera->setFov(glm::radians(90.0f)); tpCamera->setFov(glm::radians(90.0f)); } @@ -93,16 +93,16 @@ void Player::updateInput(PlayerInput& input, float delta) { glm::vec3 dir(0, 0, 0); if (input.moveForward) { - dir += camera->dir; + dir += fpCamera->dir; } if (input.moveBack) { - dir -= camera->dir; + dir -= fpCamera->dir; } if (input.moveRight) { - dir += camera->right; + dir += fpCamera->right; } if (input.moveLeft) { - dir -= camera->right; + dir -= fpCamera->right; } if (glm::length(dir) > 0.0f) { dir = glm::normalize(dir); @@ -166,7 +166,7 @@ void Player::postUpdate() { auto& skeleton = entity->getSkeleton(); - skeleton.visible = currentCamera != camera; + skeleton.visible = currentCamera != fpCamera; auto body = skeleton.config->find("body"); auto head = skeleton.config->find("head"); @@ -289,7 +289,7 @@ void Player::deserialize(const dv::value& src) { const auto& posarr = src["position"]; dv::get_vec(posarr, position); - camera->position = position; + fpCamera->position = position; const auto& rotarr = src["rotation"]; dv::get_vec(rotarr, cam); diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index b676551c..985aba55 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -52,7 +52,7 @@ class Player : public Object, public Serializable { entityid_t eid; entityid_t selectedEid; public: - std::shared_ptr camera, spCamera, tpCamera; + std::shared_ptr fpCamera, spCamera, tpCamera; std::shared_ptr currentCamera; bool debug = false; glm::vec3 cam {};