[jasper/world] Cleanup
This commit is contained in:
parent
e323cb4ef6
commit
deac8ecd0d
@ -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 {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 {};
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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 = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user