From d15624cd4730e7d34af50b60d3ba064d7ed601d5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 5 Nov 2024 03:15:11 +0300 Subject: [PATCH] fix rotated aabb blocking check & refactor PlayerController --- src/content/ContentBuilder.cpp | 1 + src/logic/PlayerController.cpp | 10 ++++------ src/maths/aabb.hpp | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 895b28f9..f7ab3b1a 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -41,6 +41,7 @@ std::unique_ptr ContentBuilder::build() { def.rt.hitboxes[i].reserve(def.hitboxes.size()); for (AABB aabb : def.hitboxes) { def.rotations.variants[i].transform(aabb); + aabb.fix(); def.rt.hitboxes[i].push_back(aabb); } } diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 5b315d34..ed916aac 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -429,7 +429,7 @@ void PlayerController::processRightClick(const Block& def, const Block& target) return; } } - auto coord = selection.actualPosition; + glm::ivec3 coord = selection.actualPosition; if (!target.replaceable) { coord += selection.normal; } else if (def.rotations.name == BlockRotProfile::PIPE_NAME) { @@ -437,12 +437,10 @@ void PlayerController::processRightClick(const Block& def, const Block& target) } blockid_t chosenBlock = def.rt.id; - if (def.obstacle) { - std::vector hitboxes = def.rotatable ? def.rt.hitboxes[state.rotation] : def.hitboxes; - for (AABB blockAABB : hitboxes) { - bool blocked = level->entities->hasBlockingInside(blockAABB.move(coord)); - if (blocked) { + const auto& hitboxes = def.rt.hitboxes[state.rotation]; + for (const AABB& blockAABB : hitboxes) { + if (level->entities->hasBlockingInside(blockAABB.translated(coord))) { return; } } diff --git a/src/maths/aabb.hpp b/src/maths/aabb.hpp index a56f32a5..47144195 100644 --- a/src/maths/aabb.hpp +++ b/src/maths/aabb.hpp @@ -34,7 +34,7 @@ struct AABB { return (a + b) * 0.5f; } - inline AABB move(glm::vec3 pos) const { + inline AABB translated(const glm::vec3& pos) const { return AABB(a + pos, b + pos); }