[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 TypeName = "net.drinkingtea.jasper.world.WorldStatic";
|
||||||
static constexpr auto TypeVersion = 1;
|
static constexpr auto TypeVersion = 1;
|
||||||
static constexpr auto Preloadable = true;
|
static constexpr auto Preloadable = true;
|
||||||
ncore::TileSheetSet tilesheetSet;
|
|
||||||
ox::Vector<ObjTileRefSet> objTileRefSets;
|
ox::Vector<ObjTileRefSet> objTileRefSets;
|
||||||
ox::Vector<ox::FileAddress> tilesheets;
|
ox::Vector<ox::FileAddress> tilesheets;
|
||||||
ox::Vector<ox::FileAddress> palettes;
|
ox::Vector<ox::FileAddress> palettes;
|
||||||
@ -129,7 +128,6 @@ struct WorldStatic {
|
|||||||
};
|
};
|
||||||
|
|
||||||
OX_MODEL_BEGIN(WorldStatic)
|
OX_MODEL_BEGIN(WorldStatic)
|
||||||
OX_MODEL_FIELD(tilesheetSet)
|
|
||||||
OX_MODEL_FIELD(objTileRefSets)
|
OX_MODEL_FIELD(objTileRefSets)
|
||||||
OX_MODEL_FIELD(tilesheets)
|
OX_MODEL_FIELD(tilesheets)
|
||||||
OX_MODEL_FIELD(palettes)
|
OX_MODEL_FIELD(palettes)
|
||||||
@ -148,7 +146,7 @@ constexpr bool valid(WorldStatic const&ws) noexcept {
|
|||||||
|
|
||||||
void loadTile(TileStatic &dst, TileDoc const&src) 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]]
|
[[nodiscard]]
|
||||||
constexpr size_t layers(WorldStatic const&ws) noexcept {
|
constexpr size_t layers(WorldStatic const&ws) noexcept {
|
||||||
|
@ -15,8 +15,7 @@ ox::Error WorldDocToWorldStaticConverter::convert(
|
|||||||
keel::Context &kctx,
|
keel::Context &kctx,
|
||||||
WorldDoc &src,
|
WorldDoc &src,
|
||||||
WorldStatic &dst) const noexcept {
|
WorldStatic &dst) const noexcept {
|
||||||
OX_REQUIRE(oc, buildObjCache(kctx, src));
|
return loadWorldStatic(kctx, src).moveTo(dst);
|
||||||
return loadWorldStatic(kctx, oc, src).moveTo(dst);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringParam
|
|||||||
m_sctx(sctx),
|
m_sctx(sctx),
|
||||||
m_doc(makeValid(*readObj<WorldDoc>(keelCtx(m_sctx), itemPath()).unwrapThrow())),
|
m_doc(makeValid(*readObj<WorldDoc>(keelCtx(m_sctx), itemPath()).unwrapThrow())),
|
||||||
m_objCache(buildObjCache(keelCtx(m_sctx), m_doc).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) {
|
m_view(m_sctx, m_worldStatic) {
|
||||||
OX_THROW_ERROR(loadObjectSets());
|
OX_THROW_ERROR(loadObjectSets());
|
||||||
m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet);
|
m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet);
|
||||||
@ -386,7 +386,7 @@ ox::Error WorldEditorImGui::handleDrop(float fbPaneScale) noexcept {
|
|||||||
m_worldStatic,
|
m_worldStatic,
|
||||||
std::move(mods));
|
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 {};
|
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);
|
|| ox::any_of(m_dependencies.pairs().begin(), m_dependencies.pairs().end(), depMatches);
|
||||||
if (depUpdated) {
|
if (depUpdated) {
|
||||||
OX_RETURN_ERROR(buildObjCache(kctx, m_doc).moveTo(m_objCache));
|
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());
|
OX_RETURN_ERROR(loadObjectSets());
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
@ -437,7 +437,7 @@ ox::Error WorldEditorImGui::loadObjectSets() noexcept {
|
|||||||
ox::Error WorldEditorImGui::undoStackChanged(studio::UndoCommand const*cmd) {
|
ox::Error WorldEditorImGui::undoStackChanged(studio::UndoCommand const*cmd) {
|
||||||
OX_RETURN_ERROR(m_view.setupWorld());
|
OX_RETURN_ERROR(m_view.setupWorld());
|
||||||
if (dynamic_cast<EditWorldSizeCommand const*>(cmd)) {
|
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 {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ ox::Error World::setupDisplay() noexcept {
|
|||||||
OX_RETURN_ERROR(ncore::loadBgPalette(m_nctx, i, *pal));
|
OX_RETURN_ERROR(ncore::loadBgPalette(m_nctx, i, *pal));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
OX_RETURN_ERROR(ncore::loadBgTileSheet(m_nctx, 0, m_worldStatic.tilesheetSet));
|
|
||||||
for (auto const&rs : m_worldStatic.objTileRefSets) {
|
for (auto const&rs : m_worldStatic.objTileRefSets) {
|
||||||
OX_RETURN_ERROR(ncore::loadBgTileSheet(
|
OX_RETURN_ERROR(ncore::loadBgTileSheet(
|
||||||
m_nctx,
|
m_nctx,
|
||||||
|
@ -11,6 +11,12 @@
|
|||||||
|
|
||||||
namespace jasper::world {
|
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(
|
void loadTile(
|
||||||
TileStatic &dst,
|
TileStatic &dst,
|
||||||
TileDoc const&src) noexcept {
|
TileDoc const&src) noexcept {
|
||||||
@ -75,23 +81,27 @@ static ox::Result<uint8_t> setupTileResrc(
|
|||||||
|
|
||||||
ox::Result<WorldStatic> loadWorldStatic(
|
ox::Result<WorldStatic> loadWorldStatic(
|
||||||
keel::Context &kctx,
|
keel::Context &kctx,
|
||||||
ObjectCache const&objCache,
|
|
||||||
WorldDoc const&doc) noexcept {
|
WorldDoc const&doc) noexcept {
|
||||||
auto const tilesPerLayer =
|
auto const tilesPerLayer =
|
||||||
static_cast<size_t>(doc.columns) * static_cast<size_t>(doc.rows);
|
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;
|
ox::SmallMap<uint64_t, WorldObjectSet> objSets;
|
||||||
for (auto const&setRef : doc.objSets) {
|
for (auto const&setRef : doc.objSets) {
|
||||||
auto [set, err] =
|
auto const [set, err] =
|
||||||
keel::readObj<WorldObjectSet>(kctx, setRef.path);
|
keel::readObj<WorldObjectSet>(kctx, setRef.path);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
objSets[setRef.id] = *set;
|
objSets[setRef.id] = *set;
|
||||||
|
addToVec(tilesheets, set->tilesheet);
|
||||||
|
for (auto const&pal : set->palettes) {
|
||||||
|
addToVec(palettes, pal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ox::Result<WorldStatic> result = WorldStatic{
|
ox::Result<WorldStatic> result = WorldStatic{
|
||||||
.tilesheetSet = objCache.tilesheetSet(),
|
|
||||||
.objTileRefSets = {},
|
.objTileRefSets = {},
|
||||||
.tilesheets = objCache.tilesheets(),
|
.tilesheets = tilesheets,
|
||||||
.palettes = objCache.palettes(),
|
.palettes = palettes,
|
||||||
.columns = static_cast<int16_t>(doc.columns),
|
.columns = static_cast<int16_t>(doc.columns),
|
||||||
.rows = static_cast<int16_t>(doc.rows),
|
.rows = static_cast<int16_t>(doc.rows),
|
||||||
.map = {
|
.map = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user