From deac8ecd0d2138129ebe8fa4eb0d6ca12d20fac2 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 9 Jan 2025 00:57:38 -0600 Subject: [PATCH] [jasper/world] Cleanup --- .../include/jasper/world/worldstatic.hpp | 4 +--- .../modules/world/src/keel/typeconv.cpp | 3 +-- .../studio/worldeditor/worldeditor-imgui.cpp | 8 ++++---- src/jasper/modules/world/src/world.cpp | 1 - src/jasper/modules/world/src/worldstatic.cpp | 20 ++++++++++++++----- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/jasper/modules/world/include/jasper/world/worldstatic.hpp b/src/jasper/modules/world/include/jasper/world/worldstatic.hpp index 8b4f28f..8eed617 100644 --- a/src/jasper/modules/world/include/jasper/world/worldstatic.hpp +++ b/src/jasper/modules/world/include/jasper/world/worldstatic.hpp @@ -119,7 +119,6 @@ struct WorldStatic { static constexpr auto TypeName = "net.drinkingtea.jasper.world.WorldStatic"; static constexpr auto TypeVersion = 1; static constexpr auto Preloadable = true; - ncore::TileSheetSet tilesheetSet; ox::Vector objTileRefSets; ox::Vector tilesheets; ox::Vector palettes; @@ -129,7 +128,6 @@ struct WorldStatic { }; OX_MODEL_BEGIN(WorldStatic) - OX_MODEL_FIELD(tilesheetSet) OX_MODEL_FIELD(objTileRefSets) OX_MODEL_FIELD(tilesheets) OX_MODEL_FIELD(palettes) @@ -148,7 +146,7 @@ constexpr bool valid(WorldStatic const&ws) noexcept { void loadTile(TileStatic &dst, TileDoc const&src) noexcept; -ox::Result loadWorldStatic(keel::Context &kctx, ObjectCache const&objCache, WorldDoc const&doc) noexcept; +ox::Result loadWorldStatic(keel::Context &kctx, WorldDoc const&doc) noexcept; [[nodiscard]] constexpr size_t layers(WorldStatic const&ws) noexcept { diff --git a/src/jasper/modules/world/src/keel/typeconv.cpp b/src/jasper/modules/world/src/keel/typeconv.cpp index 0dd5c57..eb3d63f 100644 --- a/src/jasper/modules/world/src/keel/typeconv.cpp +++ b/src/jasper/modules/world/src/keel/typeconv.cpp @@ -15,8 +15,7 @@ ox::Error WorldDocToWorldStaticConverter::convert( keel::Context &kctx, WorldDoc &src, WorldStatic &dst) const noexcept { - OX_REQUIRE(oc, buildObjCache(kctx, src)); - return loadWorldStatic(kctx, oc, src).moveTo(dst); + return loadWorldStatic(kctx, src).moveTo(dst); } } diff --git a/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp b/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp index e041b00..e80e70c 100644 --- a/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp +++ b/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp @@ -82,7 +82,7 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringParam m_sctx(sctx), m_doc(makeValid(*readObj(keelCtx(m_sctx), itemPath()).unwrapThrow())), m_objCache(buildObjCache(keelCtx(m_sctx), m_doc).unwrapThrow()), - m_worldStatic(loadWorldStatic(keelCtx(m_sctx), m_objCache, m_doc)), + m_worldStatic(loadWorldStatic(keelCtx(m_sctx), m_doc)), m_view(m_sctx, m_worldStatic) { OX_THROW_ERROR(loadObjectSets()); m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet); @@ -386,7 +386,7 @@ ox::Error WorldEditorImGui::handleDrop(float fbPaneScale) noexcept { m_worldStatic, std::move(mods)); } - OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_objCache, m_doc).moveTo(m_worldStatic)); + OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_doc).moveTo(m_worldStatic)); return {}; } @@ -413,7 +413,7 @@ ox::Error WorldEditorImGui::handleDepUpdate(ox::StringView, ox::UUID const&uuid) || ox::any_of(m_dependencies.pairs().begin(), m_dependencies.pairs().end(), depMatches); if (depUpdated) { OX_RETURN_ERROR(buildObjCache(kctx, m_doc).moveTo(m_objCache)); - OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_objCache, m_doc).moveTo(m_worldStatic)); + OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_doc).moveTo(m_worldStatic)); OX_RETURN_ERROR(loadObjectSets()); } return {}; @@ -437,7 +437,7 @@ ox::Error WorldEditorImGui::loadObjectSets() noexcept { ox::Error WorldEditorImGui::undoStackChanged(studio::UndoCommand const*cmd) { OX_RETURN_ERROR(m_view.setupWorld()); if (dynamic_cast(cmd)) { - OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_objCache, m_doc).moveTo(m_worldStatic)); + OX_RETURN_ERROR(loadWorldStatic(keelCtx(m_sctx), m_doc).moveTo(m_worldStatic)); } return {}; } diff --git a/src/jasper/modules/world/src/world.cpp b/src/jasper/modules/world/src/world.cpp index 8886cc5..e2f9abe 100644 --- a/src/jasper/modules/world/src/world.cpp +++ b/src/jasper/modules/world/src/world.cpp @@ -30,7 +30,6 @@ ox::Error World::setupDisplay() noexcept { OX_RETURN_ERROR(ncore::loadBgPalette(m_nctx, i, *pal)); ++i; } - OX_RETURN_ERROR(ncore::loadBgTileSheet(m_nctx, 0, m_worldStatic.tilesheetSet)); for (auto const&rs : m_worldStatic.objTileRefSets) { OX_RETURN_ERROR(ncore::loadBgTileSheet( m_nctx, diff --git a/src/jasper/modules/world/src/worldstatic.cpp b/src/jasper/modules/world/src/worldstatic.cpp index 2866668..2d7b4f4 100644 --- a/src/jasper/modules/world/src/worldstatic.cpp +++ b/src/jasper/modules/world/src/worldstatic.cpp @@ -11,6 +11,12 @@ namespace jasper::world { +static void addToVec(ox::Vector &vec, ox::FileAddress const&val) { + if (!vec.contains(val)) { + vec.emplace_back(val); + } +} + void loadTile( TileStatic &dst, TileDoc const&src) noexcept { @@ -75,23 +81,27 @@ static ox::Result setupTileResrc( ox::Result loadWorldStatic( keel::Context &kctx, - ObjectCache const&objCache, WorldDoc const&doc) noexcept { auto const tilesPerLayer = static_cast(doc.columns) * static_cast(doc.rows); + ox::Vector tilesheets; + ox::Vector palettes; ox::SmallMap objSets; for (auto const&setRef : doc.objSets) { - auto [set, err] = + auto const [set, err] = keel::readObj(kctx, setRef.path); if (!err) { objSets[setRef.id] = *set; + addToVec(tilesheets, set->tilesheet); + for (auto const&pal : set->palettes) { + addToVec(palettes, pal); + } } } ox::Result result = WorldStatic{ - .tilesheetSet = objCache.tilesheetSet(), .objTileRefSets = {}, - .tilesheets = objCache.tilesheets(), - .palettes = objCache.palettes(), + .tilesheets = tilesheets, + .palettes = palettes, .columns = static_cast(doc.columns), .rows = static_cast(doc.rows), .map = {