[jasper/world/studio] Make WorldEditor remember animate option

This commit is contained in:
Gary Talent 2024-06-01 20:38:19 -05:00
parent bddb08c201
commit 8a67657473
2 changed files with 41 additions and 6 deletions

View File

@ -113,6 +113,27 @@ oxModelBegin(WorldDoc)
oxModelField(tiles) oxModelField(tiles)
oxModelEnd() oxModelEnd()
[[nodiscard]]
constexpr bool valid(WorldDoc const&doc) noexcept {
for (auto &lyr : doc.tiles) {
if (lyr.size() == static_cast<size_t>(doc.columns)) { return false; }
for (auto &row : lyr) {
if (row.size() == static_cast<size_t>(doc.rows)) { return false; }
}
}
return true;
}
constexpr ox::Error repair(WorldDoc &doc) noexcept {
for (auto &lyr : doc.tiles) {
lyr.resize(static_cast<size_t>(doc.columns));
for (auto &row : lyr) {
row.resize(static_cast<size_t>(doc.rows));
}
}
return {};
}
[[nodiscard]] [[nodiscard]]
ObjectSetEntry const*objSetEntry(WorldDoc const&doc, size_t id) noexcept; ObjectSetEntry const*objSetEntry(WorldDoc const&doc, size_t id) noexcept;

View File

@ -24,6 +24,16 @@ namespace ig = studio::ig;
constexpr auto SqrBtnSize = ImVec2(ig::BtnSz.y, ig::BtnSz.y); 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 { struct WorldTileDragDrop {
static constexpr auto TypeName = "net.drinkingtea.jasper.world.studio.WorldTileDragDrop"; static constexpr auto TypeName = "net.drinkingtea.jasper.world.studio.WorldTileDragDrop";
@ -39,12 +49,7 @@ oxModelEnd()
static WorldDoc makeValid(WorldDoc doc) noexcept { static WorldDoc makeValid(WorldDoc doc) noexcept {
for (auto &lyr : doc.tiles) { std::ignore = repair(doc);
lyr.resize(static_cast<size_t>(doc.columns));
for (auto &row : lyr) {
row.resize(static_cast<size_t>(doc.rows));
}
}
return doc; return doc;
} }
@ -84,6 +89,10 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringView p
m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet); m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet);
m_sctx.project->fileUpdated.connect(this, &WorldEditorImGui::handleDepUpdate); m_sctx.project->fileUpdated.connect(this, &WorldEditorImGui::handleDepUpdate);
studio::Editor::undoStack()->changeTriggered.connect(this, &WorldEditorImGui::undoStackChanged); studio::Editor::undoStack()->changeTriggered.connect(this, &WorldEditorImGui::undoStackChanged);
studio::openConfig<WorldEditorConfig>(
keelCtx(m_sctx), itemPath(), [this](WorldEditorConfig const&config) {
m_view.setAnimate(config.animateBg);
});
} }
void WorldEditorImGui::draw(studio::StudioContext&) noexcept { void WorldEditorImGui::draw(studio::StudioContext&) noexcept {
@ -263,6 +272,11 @@ void WorldEditorImGui::drawMenu() noexcept {
oxLogError(m_view.setupWorld()); oxLogError(m_view.setupWorld());
} }
m_view.setAnimate(animate); m_view.setAnimate(animate);
studio::editConfig<WorldEditorConfig>(
keelCtx(m_sctx), itemPath(),
[animate](WorldEditorConfig &config) {
config.animateBg = animate;
});
} }
} }