summaryrefslogtreecommitdiffstats
path: root/game/shared
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-09-11 16:00:57 +0500
committeruntodesu <kirill@untode.su>2025-09-11 16:00:57 +0500
commitcfa27fd8eed42599195fdff6d7d0e25586e8f18c (patch)
tree2cc0c50b5b94f38cbbd548ab47dd7ae75d64a54c /game/shared
parentd0fbd68055e3f4a796330cc8acc6c0954b5327ff (diff)
downloadvoxelius-cfa27fd8eed42599195fdff6d7d0e25586e8f18c.tar.bz2
voxelius-cfa27fd8eed42599195fdff6d7d0e25586e8f18c.zip
Graft header-only math::AABB<T> from qfengine
Diffstat (limited to 'game/shared')
-rw-r--r--game/shared/entity/collision.cc6
-rw-r--r--game/shared/entity/collision.hh2
-rw-r--r--game/shared/world/CMakeLists.txt3
-rw-r--r--game/shared/world/chunk_aabb.cc54
-rw-r--r--game/shared/world/chunk_aabb.hh25
5 files changed, 8 insertions, 82 deletions
diff --git a/game/shared/entity/collision.cc b/game/shared/entity/collision.cc
index dbe7d30..24f5d49 100644
--- a/game/shared/entity/collision.cc
+++ b/game/shared/entity/collision.cc
@@ -24,7 +24,7 @@ static int vgrid_collide(const world::Dimension* dimension, int d, entity::Colli
const auto& ref_aabb = collision.aabb;
const auto current_aabb = ref_aabb.push(transform.local);
- auto next_aabb = math::AABB(current_aabb);
+ auto next_aabb = math::AABBf(current_aabb);
next_aabb.min[d] += move;
next_aabb.max[d] += move;
@@ -60,7 +60,7 @@ static int vgrid_collide(const world::Dimension* dimension, int d, entity::Colli
world::voxel_touch latch_touch = world::voxel_touch::NOTHING;
glm::fvec3 latch_values = glm::fvec3(0.0f, 0.0f, 0.0f);
world::voxel_surface latch_surface = world::voxel_surface::UNKNOWN;
- math::AABB latch_vbox;
+ math::AABBf latch_vbox;
for(auto i = dmin; i != dmax; i += ddir) {
for(auto j = lpos_min[u]; j < lpos_max[u]; ++j)
@@ -79,7 +79,7 @@ static int vgrid_collide(const world::Dimension* dimension, int d, entity::Colli
continue;
}
- math::AABB vbox;
+ math::AABBf vbox;
vbox.min = glm::fvec3(lpos);
vbox.max = glm::fvec3(lpos) + 1.0f;
diff --git a/game/shared/entity/collision.hh b/game/shared/entity/collision.hh
index ca94665..95a9b86 100644
--- a/game/shared/entity/collision.hh
+++ b/game/shared/entity/collision.hh
@@ -10,7 +10,7 @@ class Dimension;
namespace entity
{
struct Collision final {
- math::AABB aabb;
+ math::AABBf aabb;
public:
// NOTE: entity::Collision::fixed_update must be called
diff --git a/game/shared/world/CMakeLists.txt b/game/shared/world/CMakeLists.txt
index 6b9c281..15d5b59 100644
--- a/game/shared/world/CMakeLists.txt
+++ b/game/shared/world/CMakeLists.txt
@@ -1,8 +1,7 @@
target_sources(shared PRIVATE
+ "${CMAKE_CURRENT_LIST_DIR}/chunk_aabb.hh"
"${CMAKE_CURRENT_LIST_DIR}/chunk.cc"
"${CMAKE_CURRENT_LIST_DIR}/chunk.hh"
- "${CMAKE_CURRENT_LIST_DIR}/chunk_aabb.cc"
- "${CMAKE_CURRENT_LIST_DIR}/chunk_aabb.hh"
"${CMAKE_CURRENT_LIST_DIR}/dimension.cc"
"${CMAKE_CURRENT_LIST_DIR}/dimension.hh"
"${CMAKE_CURRENT_LIST_DIR}/feature.cc"
diff --git a/game/shared/world/chunk_aabb.cc b/game/shared/world/chunk_aabb.cc
deleted file mode 100644
index 634b230..0000000
--- a/game/shared/world/chunk_aabb.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "shared/pch.hh"
-
-#include "shared/world/chunk_aabb.hh"
-
-void world::ChunkAABB::set_bounds(const chunk_pos& min, const chunk_pos& max)
-{
- this->min = min;
- this->max = max;
-}
-
-void world::ChunkAABB::set_offset(const chunk_pos& base, const chunk_pos& size)
-{
- this->min = base;
- this->max = base + size;
-}
-
-bool world::ChunkAABB::contains(const chunk_pos& point) const
-{
- auto result = true;
- result = result && (point.x >= min.x) && (point.x <= max.x);
- result = result && (point.y >= min.y) && (point.y <= max.y);
- result = result && (point.z >= min.z) && (point.z <= max.z);
- return result;
-}
-
-bool world::ChunkAABB::intersect(const ChunkAABB& other_box) const
-{
- auto result = true;
- result = result && (min.x < other_box.max.x) && (max.x > other_box.min.x);
- result = result && (min.y < other_box.max.y) && (max.y > other_box.min.y);
- result = result && (min.z < other_box.max.z) && (max.z > other_box.min.z);
- return result;
-}
-
-world::ChunkAABB world::ChunkAABB::combine_with(const ChunkAABB& other_box) const
-{
- ChunkAABB result;
- result.set_bounds(min, other_box.max);
- return result;
-}
-
-world::ChunkAABB world::ChunkAABB::multiply_with(const ChunkAABB& other_box) const
-{
- ChunkAABB result;
- result.set_bounds(other_box.min, max);
- return result;
-}
-
-world::ChunkAABB world::ChunkAABB::push(const chunk_pos& vector) const
-{
- ChunkAABB result;
- result.set_bounds(min + vector, max + vector);
- return result;
-}
diff --git a/game/shared/world/chunk_aabb.hh b/game/shared/world/chunk_aabb.hh
index a9e0205..3a2d26f 100644
--- a/game/shared/world/chunk_aabb.hh
+++ b/game/shared/world/chunk_aabb.hh
@@ -2,32 +2,13 @@
#define SHARED_CHUNK_AABB 1
#pragma once
+#include "core/math/aabb.hh"
+
#include "shared/types.hh"
namespace world
{
-class ChunkAABB final {
-public:
- ChunkAABB(void) = default;
- virtual ~ChunkAABB(void) = default;
-
- void set_bounds(const chunk_pos& min, const chunk_pos& max);
- void set_offset(const chunk_pos& base, const chunk_pos& size);
-
- const chunk_pos& get_min(void) const;
- const chunk_pos& get_max(void) const;
-
- bool contains(const chunk_pos& point) const;
- bool intersect(const ChunkAABB& other_box) const;
-
- ChunkAABB combine_with(const ChunkAABB& other_box) const;
- ChunkAABB multiply_with(const ChunkAABB& other_box) const;
- ChunkAABB push(const chunk_pos& vector) const;
-
-public:
- chunk_pos min;
- chunk_pos max;
-};
+using ChunkAABB = math::AABB<chunk_pos::value_type>;
} // namespace world
#endif // SHARED_CHUNK_AABB