From aceb0a84b4abaa4e631d317c6cd0d02b0aa0bdbd Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 8 Feb 2024 22:48:19 +0100 Subject: style issues --- compat/vector-wrapper-fwd.hpp | 16 ++++++++++ compat/vector-wrapper.hpp | 9 +++--- loader/json.cpp | 71 ------------------------------------------- loader/scenery.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++ loader/wall-cell.hpp | 3 ++ src/path-search-result.hpp | 4 +-- 6 files changed, 97 insertions(+), 77 deletions(-) create mode 100644 compat/vector-wrapper-fwd.hpp delete mode 100644 loader/json.cpp create mode 100644 loader/scenery.cpp diff --git a/compat/vector-wrapper-fwd.hpp b/compat/vector-wrapper-fwd.hpp new file mode 100644 index 00000000..4e4ab371 --- /dev/null +++ b/compat/vector-wrapper-fwd.hpp @@ -0,0 +1,16 @@ +#pragma once + +namespace floormat { + +template struct vector_wrapper; + +enum class vector_wrapper_repr : uint8_t // todo! use this +{ + invalid, + lvalue_reference_to_vector, + const_reference_to_vector, + vector, + //rvalue_reference_to_vector, +}; + +} // namespace floormat diff --git a/compat/vector-wrapper.hpp b/compat/vector-wrapper.hpp index 1b6f0617..cb6e7549 100644 --- a/compat/vector-wrapper.hpp +++ b/compat/vector-wrapper.hpp @@ -1,4 +1,5 @@ #pragma once +#include "vector-wrapper-fwd.hpp" // todo! #include namespace floormat { @@ -6,10 +7,10 @@ namespace floormat { template struct vector_wrapper final { - using vector_type = std::conditional_t, - const std::vector>, - std::vector>; - vector_type& vec; + using vector_type = std::conditional_t, const std::vector>, std::vector>; + using qualified_type = std::conditional_t, vector_type, vector_type&>; + + qualified_type vec; }; } // namespace floormat diff --git a/loader/json.cpp b/loader/json.cpp deleted file mode 100644 index d374571c..00000000 --- a/loader/json.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "impl.hpp" -#include "compat/assert.hpp" -#include "compat/exception.hpp" -#include "src/ground-atlas.hpp" -#include "serialize/json-helper.hpp" -#include "serialize/anim.hpp" -#include "serialize/scenery.hpp" -#include "loader/scenery.hpp" -#include "loader/anim-cell.hpp" -#include -#include - -namespace floormat { - -anim_def loader_::deserialize_anim_def(StringView filename) noexcept(false) -{ - return json_helper::from_json(filename); -} - -} // namespace floormat - -namespace floormat::loader_detail { - -void loader_impl::get_scenery_list() -{ - sceneries_array.clear(); - sceneries_array = json_helper::from_json>(Path::join(SCENERY_PATH, "scenery.json")); - - if constexpr(true) // todo! - { - auto proto = scenery_proto{}; - proto.atlas = make_invalid_anim_atlas().atlas; - proto.bbox_size = Vector2ub{20}; - proto.subtype = generic_scenery_proto{false, true}; - sceneries_array.push_back({ .name = INVALID, .proto = proto }); - } - - sceneries_map.clear(); - sceneries_map.reserve(sceneries_array.size() * 2); - - for (const serialized_scenery& s : sceneries_array) - { - if (sceneries_map.contains(s.name)) - fm_abort("duplicate scenery name '%s'", s.name.data()); - sceneries_map[s.name] = &s; - } - - fm_assert(!sceneries_map.empty()); -} - -ArrayView loader_impl::sceneries() -{ - if (sceneries_array.empty()) [[likely]] - get_scenery_list(); - fm_assert(!sceneries_array.empty()); - return sceneries_array; -} - -const scenery_proto& loader_impl::scenery(StringView name) noexcept(false) -{ - fm_soft_assert(check_atlas_name(name)); - if (sceneries_array.empty()) - get_scenery_list(); - fm_assert(!sceneries_array.empty()); - auto it = sceneries_map.find(name); - if (it == sceneries_map.end()) - fm_throw("no such scenery: '{}'"_cf, name); - return it->second->proto; -} - -} // namespace floormat::loader_detail diff --git a/loader/scenery.cpp b/loader/scenery.cpp new file mode 100644 index 00000000..d374571c --- /dev/null +++ b/loader/scenery.cpp @@ -0,0 +1,71 @@ +#include "impl.hpp" +#include "compat/assert.hpp" +#include "compat/exception.hpp" +#include "src/ground-atlas.hpp" +#include "serialize/json-helper.hpp" +#include "serialize/anim.hpp" +#include "serialize/scenery.hpp" +#include "loader/scenery.hpp" +#include "loader/anim-cell.hpp" +#include +#include + +namespace floormat { + +anim_def loader_::deserialize_anim_def(StringView filename) noexcept(false) +{ + return json_helper::from_json(filename); +} + +} // namespace floormat + +namespace floormat::loader_detail { + +void loader_impl::get_scenery_list() +{ + sceneries_array.clear(); + sceneries_array = json_helper::from_json>(Path::join(SCENERY_PATH, "scenery.json")); + + if constexpr(true) // todo! + { + auto proto = scenery_proto{}; + proto.atlas = make_invalid_anim_atlas().atlas; + proto.bbox_size = Vector2ub{20}; + proto.subtype = generic_scenery_proto{false, true}; + sceneries_array.push_back({ .name = INVALID, .proto = proto }); + } + + sceneries_map.clear(); + sceneries_map.reserve(sceneries_array.size() * 2); + + for (const serialized_scenery& s : sceneries_array) + { + if (sceneries_map.contains(s.name)) + fm_abort("duplicate scenery name '%s'", s.name.data()); + sceneries_map[s.name] = &s; + } + + fm_assert(!sceneries_map.empty()); +} + +ArrayView loader_impl::sceneries() +{ + if (sceneries_array.empty()) [[likely]] + get_scenery_list(); + fm_assert(!sceneries_array.empty()); + return sceneries_array; +} + +const scenery_proto& loader_impl::scenery(StringView name) noexcept(false) +{ + fm_soft_assert(check_atlas_name(name)); + if (sceneries_array.empty()) + get_scenery_list(); + fm_assert(!sceneries_array.empty()); + auto it = sceneries_map.find(name); + if (it == sceneries_map.end()) + fm_throw("no such scenery: '{}'"_cf, name); + return it->second->proto; +} + +} // namespace floormat::loader_detail diff --git a/loader/wall-cell.hpp b/loader/wall-cell.hpp index 3dfa698b..507a09c2 100644 --- a/loader/wall-cell.hpp +++ b/loader/wall-cell.hpp @@ -1,4 +1,5 @@ #pragma once +#include "compat/vector-wrapper-fwd.hpp" #include #include @@ -10,6 +11,8 @@ struct wall_cell { String name; std::shared_ptr atlas; + + static vector_wrapper load_atlases_from_json(); }; } // namespace floormat diff --git a/src/path-search-result.hpp b/src/path-search-result.hpp index 8987a041..b12b23d3 100644 --- a/src/path-search-result.hpp +++ b/src/path-search-result.hpp @@ -1,11 +1,11 @@ #pragma once -#include "src/global-coords.hpp" #include "compat/defs.hpp" +#include "compat/vector-wrapper-fwd.hpp" +#include "src/global-coords.hpp" #include namespace floormat { -template struct vector_wrapper; struct point; struct path_search_result final -- cgit v1.2.3