From 726ee8ad703bc57530b881450b8839aaec6b97c9 Mon Sep 17 00:00:00 2001 From: Sergwest585 Date: Tue, 5 Nov 2024 02:42:48 +0300 Subject: [PATCH] fix colision check on block place --- src/logic/PlayerController.cpp | 12 ++++++++---- src/maths/aabb.hpp | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 00e4d1a7..5b315d34 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -437,11 +437,15 @@ void PlayerController::processRightClick(const Block& def, const Block& target) } blockid_t chosenBlock = def.rt.id; - AABB blockAABB(coord, coord + 1); - bool blocked = level->entities->hasBlockingInside(blockAABB); - if (def.obstacle && blocked) { - return; + 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) { + return; + } + } } auto vox = chunks->get(coord); if (vox == nullptr) { diff --git a/src/maths/aabb.hpp b/src/maths/aabb.hpp index 6354d7a8..a56f32a5 100644 --- a/src/maths/aabb.hpp +++ b/src/maths/aabb.hpp @@ -34,6 +34,10 @@ struct AABB { return (a + b) * 0.5f; } + inline AABB move(glm::vec3 pos) const { + return AABB(a + pos, b + pos); + } + /// @brief Multiply AABB size from center inline void scale(const glm::vec3 mul) { glm::vec3 center = (a + b) * 0.5f;