[jasper/world] Cleanup

This commit is contained in:
Gary Talent 2025-01-09 00:57:38 -06:00
parent e323cb4ef6
commit deac8ecd0d
5 changed files with 21 additions and 15 deletions

View File

@ -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<ObjTileRefSet> objTileRefSets;
ox::Vector<ox::FileAddress> tilesheets;
ox::Vector<ox::FileAddress> 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<WorldStatic> loadWorldStatic(keel::Context &kctx, ObjectCache const&objCache, WorldDoc const&doc) noexcept;
ox::Result<WorldStatic> loadWorldStatic(keel::Context &kctx, WorldDoc const&doc) noexcept;
[[nodiscard]]
constexpr size_t layers(WorldStatic const&ws) noexcept {

View File

@ -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);
}
}

View File

@ -82,7 +82,7 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringParam
m_sctx(sctx),
m_doc(makeValid(*readObj<WorldDoc>(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<EditWorldSizeCommand const*>(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 {};
}

View File

@ -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,

View File

@ -11,6 +11,12 @@
namespace jasper::world {
static void addToVec(ox::Vector<ox::FileAddress> &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<uint8_t> setupTileResrc(
ox::Result<WorldStatic> loadWorldStatic(
keel::Context &kctx,
ObjectCache const&objCache,
WorldDoc const&doc) noexcept {
auto const tilesPerLayer =
static_cast<size_t>(doc.columns) * static_cast<size_t>(doc.rows);
ox::Vector<ox::FileAddress> tilesheets;
ox::Vector<ox::FileAddress> palettes;
ox::SmallMap<uint64_t, WorldObjectSet> objSets;
for (auto const&setRef : doc.objSets) {
auto [set, err] =
auto const [set, err] =
keel::readObj<WorldObjectSet>(kctx, setRef.path);
if (!err) {
objSets[setRef.id] = *set;
addToVec(tilesheets, set->tilesheet);
for (auto const&pal : set->palettes) {
addToVec(palettes, pal);
}
}
}
ox::Result<WorldStatic> result = WorldStatic{
.tilesheetSet = objCache.tilesheetSet(),
.objTileRefSets = {},
.tilesheets = objCache.tilesheets(),
.palettes = objCache.palettes(),
.tilesheets = tilesheets,
.palettes = palettes,
.columns = static_cast<int16_t>(doc.columns),
.rows = static_cast<int16_t>(doc.rows),
.map = {