From 4251d32844db32330942ed49b38b28aad5dcc34e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 24 Feb 2023 21:25:51 +0100 Subject: collision bbox WIP --- src/chunk-bbox.cpp | 8 -------- src/chunk.hpp | 10 ---------- src/collision.cpp | 8 -------- src/collision.hpp | 10 ---------- src/scenery.cpp | 2 -- src/scenery.hpp | 10 +++++++--- 6 files changed, 7 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/chunk-bbox.cpp b/src/chunk-bbox.cpp index b951da10..291056a8 100644 --- a/src/chunk-bbox.cpp +++ b/src/chunk-bbox.cpp @@ -47,10 +47,8 @@ void chunk::ensure_passability() noexcept _lqt_view->Clear(); std::vector bboxes; -#ifndef FLOORMAT_64 _bboxes.clear(); bboxes.reserve(TILE_COUNT*4); -#endif constexpr auto whole_tile = [](std::size_t k, pass_mode p) constexpr -> collision_bbox { auto start = tile_start(k); @@ -84,18 +82,12 @@ void chunk::ensure_passability() noexcept bboxes.push_back(wall_west(i, p)); } -#ifndef FLOORMAT_64 _bboxes.reserve(bboxes.size()); -#endif for (const collision_bbox& bbox : bboxes) { -#ifdef FLOORMAT_64 - auto* ptr = std::bit_cast(collision_bbox::BB(bbox)); -#else _bboxes.push_back(bbox); auto* ptr = &_bboxes.back(); -#endif switch (bbox.pass_mode) { diff --git a/src/chunk.hpp b/src/chunk.hpp index 78412220..09af9bdb 100644 --- a/src/chunk.hpp +++ b/src/chunk.hpp @@ -23,11 +23,6 @@ template struct collision_iterator; template struct collision_query; struct collision_bbox; -#ifdef FLOORMAT_64 -struct compact_bb; -struct compact_bb_extractor; -#endif - enum class collision : std::uint8_t { view, shoot, move, }; @@ -93,13 +88,8 @@ struct chunk final void ensure_passability() noexcept; -#ifdef FLOORMAT_64 - using BB = compact_bb; - using BBE = compact_bb_extractor; -#else using BB = loose_quadtree::BoundingBox; using BBE = loose_quadtree::TrivialBBExtractor; -#endif using lqt = loose_quadtree::LooseQuadtree; using Query = collision_query; diff --git a/src/collision.cpp b/src/collision.cpp index 42ed2344..e2e4974d 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -3,12 +3,4 @@ namespace floormat { -#ifdef FLOORMAT_64 -void compact_bb_extractor::ExtractBoundingBox(compact_bb* object, BB* bbox) -{ - if constexpr(sizeof(void*) >= 8) - *bbox = std::bit_cast>((void*)object); -} -#endif - } // namespace floormat diff --git a/src/collision.hpp b/src/collision.hpp index 20ebedb8..086369fb 100644 --- a/src/collision.hpp +++ b/src/collision.hpp @@ -5,16 +5,6 @@ namespace floormat { -#ifdef FLOORMAT_64 -struct compact_bb; - -struct compact_bb_extractor final -{ - using BB = loose_quadtree::BoundingBox; - [[maybe_unused]] static void ExtractBoundingBox(compact_bb* object, BB* bbox); -}; -#endif - template struct collision_iterator final { diff --git a/src/scenery.cpp b/src/scenery.cpp index 848029da..1a6be03e 100644 --- a/src/scenery.cpp +++ b/src/scenery.cpp @@ -28,8 +28,6 @@ scenery_ref& scenery_ref::operator=(const scenery_proto& proto) noexcept scenery_ref::operator scenery_proto() const noexcept { return { atlas, frame }; } scenery_ref::operator bool() const noexcept { return atlas != nullptr; } -scenery::scenery() noexcept : scenery{none_tag_t{}} {} -scenery::scenery(none_tag_t) noexcept {} scenery::scenery(generic_tag_t, const anim_atlas& atlas, rotation r, frame_t frame, pass_mode pass, bool active, bool interactive) : frame{frame}, r{r}, type{scenery_type::generic}, diff --git a/src/scenery.hpp b/src/scenery.hpp index ca577bc6..9186f9cf 100644 --- a/src/scenery.hpp +++ b/src/scenery.hpp @@ -1,5 +1,6 @@ #pragma once #include "pass-mode.hpp" +#include "tile-defs.hpp" #include #include #include @@ -36,7 +37,7 @@ struct scenery final std::uint16_t delta = 0; frame_t frame = 0; - Vector2b offset; + Vector2b offset, bbox_size{iTILE_SIZE2/2}, bbox_offset; rotation r : 3 = rotation::N; scenery_type type : 3 = scenery_type::none; pass_mode passability : 2 = pass_mode::shoot_through; @@ -44,8 +45,8 @@ struct scenery final std::uint8_t closing : 1 = false; std::uint8_t interactive : 1 = false; - scenery() noexcept; - scenery(none_tag_t) noexcept; + constexpr scenery() noexcept; + constexpr scenery(none_tag_t) noexcept; scenery(generic_tag_t, const anim_atlas& atlas, rotation r, frame_t frame = 0, pass_mode passability = pass_mode::shoot_through, bool active = false, bool interactive = false); scenery(door_tag_t, const anim_atlas& atlas, rotation r, bool is_open = false); @@ -57,6 +58,9 @@ struct scenery final void update(float dt, const anim_atlas& anim); }; +constexpr scenery::scenery() noexcept : scenery{scenery::none_tag_t{}} {} +constexpr scenery::scenery(none_tag_t) noexcept {} + struct scenery_proto final { std::shared_ptr atlas; -- cgit v1.2.3