From 8a67657473c19847022aa61cdd8c953c8c8c412c Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 1 Jun 2024 20:38:19 -0500 Subject: [PATCH] [jasper/world/studio] Make WorldEditor remember animate option --- .../world/include/jasper/world/worlddoc.hpp | 21 +++++++++++++++ .../studio/worldeditor/worldeditor-imgui.cpp | 26 ++++++++++++++----- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/jasper/modules/world/include/jasper/world/worlddoc.hpp b/src/jasper/modules/world/include/jasper/world/worlddoc.hpp index 7e7e8ea..507ce7b 100644 --- a/src/jasper/modules/world/include/jasper/world/worlddoc.hpp +++ b/src/jasper/modules/world/include/jasper/world/worlddoc.hpp @@ -113,6 +113,27 @@ oxModelBegin(WorldDoc) oxModelField(tiles) oxModelEnd() +[[nodiscard]] +constexpr bool valid(WorldDoc const&doc) noexcept { + for (auto &lyr : doc.tiles) { + if (lyr.size() == static_cast(doc.columns)) { return false; } + for (auto &row : lyr) { + if (row.size() == static_cast(doc.rows)) { return false; } + } + } + return true; +} + +constexpr ox::Error repair(WorldDoc &doc) noexcept { + for (auto &lyr : doc.tiles) { + lyr.resize(static_cast(doc.columns)); + for (auto &row : lyr) { + row.resize(static_cast(doc.rows)); + } + } + return {}; +} + [[nodiscard]] ObjectSetEntry const*objSetEntry(WorldDoc const&doc, size_t id) noexcept; 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 ae322bd..7906dce 100644 --- a/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp +++ b/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp @@ -24,6 +24,16 @@ namespace ig = studio::ig; constexpr auto SqrBtnSize = ImVec2(ig::BtnSz.y, ig::BtnSz.y); +struct WorldEditorConfig { + static constexpr auto TypeName = "net.drinkingtea.jasper.world.studio.WorldEditorConfig"; + static constexpr auto TypeVersion = 1; + bool animateBg{}; +}; + +oxModelBegin(WorldEditorConfig) + oxModelField(animateBg); +oxModelEnd() + struct WorldTileDragDrop { static constexpr auto TypeName = "net.drinkingtea.jasper.world.studio.WorldTileDragDrop"; @@ -39,12 +49,7 @@ oxModelEnd() static WorldDoc makeValid(WorldDoc doc) noexcept { - for (auto &lyr : doc.tiles) { - lyr.resize(static_cast(doc.columns)); - for (auto &row : lyr) { - row.resize(static_cast(doc.rows)); - } - } + std::ignore = repair(doc); return doc; } @@ -84,6 +89,10 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringView p m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet); m_sctx.project->fileUpdated.connect(this, &WorldEditorImGui::handleDepUpdate); studio::Editor::undoStack()->changeTriggered.connect(this, &WorldEditorImGui::undoStackChanged); + studio::openConfig( + keelCtx(m_sctx), itemPath(), [this](WorldEditorConfig const&config) { + m_view.setAnimate(config.animateBg); + }); } void WorldEditorImGui::draw(studio::StudioContext&) noexcept { @@ -263,6 +272,11 @@ void WorldEditorImGui::drawMenu() noexcept { oxLogError(m_view.setupWorld()); } m_view.setAnimate(animate); + studio::editConfig( + keelCtx(m_sctx), itemPath(), + [animate](WorldEditorConfig &config) { + config.animateBg = animate; + }); } }