[jasper/world/studio] Make WorldEditor remember animate option
This commit is contained in:
parent
bddb08c201
commit
8a67657473
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user