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); }