summaryrefslogtreecommitdiffhomepage
path: root/loader
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-11 18:15:00 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-11 18:15:00 +0100
commitc93b3616adbf26673fc928fdfbbec814fec41c75 (patch)
tree517ee19f32a2ae7d098141335b04e92bffcdc564 /loader
parent98416d95331c63affabf331afba0e1dcb307c430 (diff)
w
Diffstat (limited to 'loader')
-rw-r--r--loader/ground-atlas.cpp14
-rw-r--r--loader/impl.cpp2
-rw-r--r--loader/impl.hpp2
-rw-r--r--loader/loader.hpp2
-rw-r--r--loader/texture.cpp2
-rw-r--r--loader/vobj.cpp6
6 files changed, 15 insertions, 13 deletions
diff --git a/loader/ground-atlas.cpp b/loader/ground-atlas.cpp
index c4e4a516..2835db2d 100644
--- a/loader/ground-atlas.cpp
+++ b/loader/ground-atlas.cpp
@@ -1,5 +1,4 @@
#include "impl.hpp"
-#include "ground-info.hpp"
#include "src/ground-atlas.hpp"
#include "compat/exception.hpp"
#include "serialize/json-helper.hpp"
@@ -17,15 +16,16 @@ using loader_detail::loader_impl;
namespace floormat::loader_detail {
-std::shared_ptr<ground_atlas> loader_impl::get_ground_atlas(StringView name, StringView dir, Vector2ub size, pass_mode pass)
+std::shared_ptr<ground_atlas> loader_impl::get_ground_atlas(StringView name, Vector2ub size, pass_mode pass)
{
fm_assert(name != "<invalid>"_s);
char buf[FILENAME_MAX];
- auto filename = make_atlas_path(buf, dir, name);
+ auto filename = make_atlas_path(buf, loader.GROUND_TILESET_PATH, name);
auto tex = texture(""_s, filename);
- auto atlas = std::make_shared<class ground_atlas>(filename, name, tex, size, pass);
+ auto info = ground_info{name, {}, size, pass};
+ auto atlas = std::make_shared<class ground_atlas>(info, filename, tex);
return atlas;
}
@@ -45,7 +45,7 @@ std::shared_ptr<class ground_atlas> loader_impl::ground_atlas(StringView name, b
goto error;
}
else if (!it->second->atlas)
- return it->second->atlas = get_ground_atlas(name, loader.GROUND_TILESET_PATH, it->second->size, it->second->pass);
+ return it->second->atlas = get_ground_atlas(name, it->second->size, it->second->pass);
else
return it->second->atlas;
}
@@ -110,8 +110,8 @@ const ground_info& loader_impl::make_invalid_ground_atlas()
return *invalid_ground_atlas;
auto atlas = std::make_shared<class ground_atlas>(
- ""_s, loader.INVALID, make_error_texture(Vector2ui(iTILE_SIZE2)),
- Vector2ub{1,1}, pass_mode::pass);
+ ground_info{loader.INVALID, {}, Vector2ub{1,1}, pass_mode::pass},
+ ""_s, make_error_texture(Vector2ui(iTILE_SIZE2)));
invalid_ground_atlas = Pointer<ground_info>{
InPlaceInit, atlas->name(),
atlas, atlas->num_tiles2(), atlas->pass_mode()};
diff --git a/loader/impl.cpp b/loader/impl.cpp
index 1ea7b7b6..0f15e74c 100644
--- a/loader/impl.cpp
+++ b/loader/impl.cpp
@@ -2,8 +2,8 @@
#include "compat/assert.hpp"
#include "loader/scenery.hpp"
#include "loader/vobj-info.hpp"
-#include "loader/ground-info.hpp"
#include "loader/wall-info.hpp"
+#include "src/ground-atlas.hpp"
#include <Corrade/Containers/Pair.h>
#include <Magnum/Trade/ImageData.h>
diff --git a/loader/impl.hpp b/loader/impl.hpp
index 0b718527..5f1a8ff0 100644
--- a/loader/impl.hpp
+++ b/loader/impl.hpp
@@ -65,7 +65,7 @@ struct loader_impl final : loader_
ArrayView<const ground_info> ground_atlas_list() noexcept(false) override;
void get_ground_atlas_list();
const ground_info& make_invalid_ground_atlas();
- std::shared_ptr<class ground_atlas> get_ground_atlas(StringView name, StringView path, Vector2ub size, pass_mode pass) noexcept(false) override;
+ std::shared_ptr<class ground_atlas> get_ground_atlas(StringView name, Vector2ub size, pass_mode pass) noexcept(false) override;
// >-----> anim >----->
tsl::robin_map<StringView, std::shared_ptr<class anim_atlas>> anim_atlas_map;
diff --git a/loader/loader.hpp b/loader/loader.hpp
index b62988ca..cc519765 100644
--- a/loader/loader.hpp
+++ b/loader/loader.hpp
@@ -25,7 +25,7 @@ struct loader_
{
virtual StringView shader(StringView filename) noexcept = 0;
virtual Trade::ImageData2D texture(StringView prefix, StringView filename) noexcept(false) = 0;
- virtual std::shared_ptr<class ground_atlas> get_ground_atlas(StringView name, StringView path, Vector2ub size, pass_mode pass) noexcept(false) = 0;
+ virtual std::shared_ptr<class ground_atlas> get_ground_atlas(StringView name, Vector2ub size, pass_mode pass) noexcept(false) = 0;
virtual std::shared_ptr<class ground_atlas> ground_atlas(StringView filename, bool fail_ok = false) noexcept(false) = 0;
virtual ArrayView<const String> anim_atlas_list() = 0;
virtual std::shared_ptr<class anim_atlas> anim_atlas(StringView name, StringView dir = ANIM_PATH) noexcept(false) = 0;
diff --git a/loader/texture.cpp b/loader/texture.cpp
index 59e8f25a..a68a6337 100644
--- a/loader/texture.cpp
+++ b/loader/texture.cpp
@@ -18,7 +18,7 @@ Trade::ImageData2D loader_impl::texture(StringView prefix, StringView filename_)
constexpr size_t max_extension_length = 16;
const auto N = prefix.size();
- if (N > 0)
+ if (N > 0) [[likely]]
fm_assert(prefix[N-1] == '/');
fm_soft_assert(filename_.size() + prefix.size() + max_extension_length + 1 < FILENAME_MAX);
fm_soft_assert(check_atlas_name(filename_));
diff --git a/loader/vobj.cpp b/loader/vobj.cpp
index a309fd6a..66aef1cd 100644
--- a/loader/vobj.cpp
+++ b/loader/vobj.cpp
@@ -46,7 +46,7 @@ namespace floormat::loader_detail {
std::shared_ptr<class anim_atlas> loader_impl::make_vobj_anim_atlas(StringView name, StringView image_filename)
{
- auto tex = texture(VOBJ_PATH, image_filename, false);
+ auto tex = texture(VOBJ_PATH, image_filename);
anim_def def;
def.object_name = name;
const auto size = tex.pixels().size();
@@ -67,10 +67,12 @@ std::shared_ptr<class anim_atlas> loader_impl::make_vobj_anim_atlas(StringView n
void loader_impl::get_vobj_list()
{
+ fm_assert(vobjs.empty());
+
vobjs.clear();
vobj_atlas_map.clear();
-
auto vec = json_helper::from_json<std::vector<struct vobj>>(Path::join(VOBJ_PATH, "vobj.json"));
+ vec.shrink_to_fit();
vobjs.reserve(vec.size());
vobj_atlas_map.reserve(2*vec.size());