From d18e1251274fc0b408b3ae2aee0459840c15915a Mon Sep 17 00:00:00 2001 From: Askou Date: Sun, 20 Jun 2021 10:27:08 +0200 Subject: [PATCH 1/3] fix berserk camera --- sources/System/Renderer/CameraSystem.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/sources/System/Renderer/CameraSystem.cpp b/sources/System/Renderer/CameraSystem.cpp index 6722d48f..e56fe3a4 100644 --- a/sources/System/Renderer/CameraSystem.cpp +++ b/sources/System/Renderer/CameraSystem.cpp @@ -49,8 +49,7 @@ namespace BBM } void CameraSystem::onUpdate(WAL::ViewEntity &entity, - std::chrono::nanoseconds dtime) - { + std::chrono::nanoseconds dtime) { if (Runner::gameState.currentScene != GameState::GameScene || !introAnimation(entity)) return; auto &pos = entity.get(); @@ -60,14 +59,19 @@ namespace BBM float maxDist = 0; float lowerXDist = 0; float lowerZDist = 0; - for (auto &[player, position, _] : this->_wal.getScene()->view>()) { playerPos.emplace_back(position.position); } + if (pos.position.x > Runner::mapWidth || pos.position.z > Runner::mapHeight) { + pos.position.x = Runner::mapWidth / 2; + pos.position.y = (Runner::mapHeight / 2) - 1; + } if (playerPos.size() == 1) newCameraPos = playerPos[0]; for (size_t i = 0; i < playerPos.size(); i++) for (size_t j = 0; j < playerPos.size(); j++) { + if (i == j) + continue; if (maxDist < playerPos[i].distance(playerPos[j])) { maxDist = playerPos[i].distance(playerPos[j]); newCameraPos = (playerPos[i] + playerPos[j]) / 2; @@ -78,19 +82,25 @@ namespace BBM lowerZDist = std::abs((playerPos[i].z - playerPos[j].z)); } maxDist += (lowerXDist + lowerZDist) / 2; + if (maxDist < 1) + return; if (maxDist < 14) maxDist = 14; if (maxDist > 23) maxDist = 23; - Vector3f pos2d(pos.position.abs().x,0, pos.position.abs().z); - Vector3f newPos2d(newCameraPos.abs().x, 0, pos.position.abs().z); for (auto &[other, backPos, _] : this->_wal.getScene()->view>()) { backPos.position = cam.target; } newCameraPos.y = 0; + if (lowerXDist < 0.5) + newCameraPos.x = pos.position.x; + if (lowerZDist < 0.5) + newCameraPos.z = pos.position.z; cam.target += (newCameraPos.abs() - cam.target.abs()) / 10; + cam.target = cam.target.abs(); newCameraPos.y = maxDist; - newCameraPos.z -= newCameraPos.z > 1 ? 1 : 0; + if (lowerZDist > 0.5 || cam.target.z >= pos.position.z) + newCameraPos.z = cam.target.z > 1 ? newCameraPos.z - 1 : 0; pos.position += (newCameraPos.abs() - pos.position.abs()) / 10; } } \ No newline at end of file From 162b5be30b125a2f36e1aa4cc58e66240688b69e Mon Sep 17 00:00:00 2001 From: Askou Date: Sun, 20 Jun 2021 11:38:26 +0200 Subject: [PATCH 2/3] remove useless stuff --- sources/System/Renderer/CameraSystem.cpp | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/sources/System/Renderer/CameraSystem.cpp b/sources/System/Renderer/CameraSystem.cpp index e56fe3a4..bcb2f538 100644 --- a/sources/System/Renderer/CameraSystem.cpp +++ b/sources/System/Renderer/CameraSystem.cpp @@ -62,10 +62,6 @@ namespace BBM for (auto &[player, position, _] : this->_wal.getScene()->view>()) { playerPos.emplace_back(position.position); } - if (pos.position.x > Runner::mapWidth || pos.position.z > Runner::mapHeight) { - pos.position.x = Runner::mapWidth / 2; - pos.position.y = (Runner::mapHeight / 2) - 1; - } if (playerPos.size() == 1) newCameraPos = playerPos[0]; for (size_t i = 0; i < playerPos.size(); i++) @@ -82,8 +78,6 @@ namespace BBM lowerZDist = std::abs((playerPos[i].z - playerPos[j].z)); } maxDist += (lowerXDist + lowerZDist) / 2; - if (maxDist < 1) - return; if (maxDist < 14) maxDist = 14; if (maxDist > 23) @@ -92,15 +86,7 @@ namespace BBM backPos.position = cam.target; } newCameraPos.y = 0; - if (lowerXDist < 0.5) - newCameraPos.x = pos.position.x; - if (lowerZDist < 0.5) - newCameraPos.z = pos.position.z; cam.target += (newCameraPos.abs() - cam.target.abs()) / 10; - cam.target = cam.target.abs(); - newCameraPos.y = maxDist; - if (lowerZDist > 0.5 || cam.target.z >= pos.position.z) - newCameraPos.z = cam.target.z > 1 ? newCameraPos.z - 1 : 0; - pos.position += (newCameraPos.abs() - pos.position.abs()) / 10; + pos.position = Vector3f(cam.target.x, maxDist, cam.target.z - 1); } } \ No newline at end of file From 25c2d4774f9a4618a606d1fd363817b2e9e8b191 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 20 Jun 2021 11:49:43 +0200 Subject: [PATCH 3/3] Fixingn a bug --- sources/Runner/GameScene.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sources/Runner/GameScene.cpp b/sources/Runner/GameScene.cpp index d8a72f98..46f4e76b 100644 --- a/sources/Runner/GameScene.cpp +++ b/sources/Runner/GameScene.cpp @@ -126,6 +126,8 @@ namespace BBM return; entity.getComponent().disabled = true; entity.addComponent(1s, [](WAL::Entity &ent, WAL::Wal &) { + if (!ent.hasComponent()) + return; ent.removeComponent(); ent.removeComponent(); ent.removeComponent();