From f8acaf65514b37e0437d0b41a69331c4f05e716c Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 1 Jun 2024 01:21:43 -0500 Subject: [PATCH] [studio,turbine] Fix Turbine sleep logic, tweak Studio default sleep values --- .../world/src/studio/worldeditor/worldeditor-imgui.cpp | 2 +- .../world/src/studio/worldeditor/worldeditorview.cpp | 9 +++++++-- .../world/src/studio/worldeditor/worldeditorview.hpp | 5 +++-- src/jasper/modules/world/src/world.cpp | 4 +++- 4 files changed, 14 insertions(+), 6 deletions(-) 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 c11bf81..afe3851 100644 --- a/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp +++ b/src/jasper/modules/world/src/studio/worldeditor/worldeditor-imgui.cpp @@ -78,7 +78,7 @@ WorldEditorImGui::WorldEditorImGui(studio::StudioContext &sctx, ox::StringView p m_doc(makeValid(*readObj(keelCtx(m_sctx), path).unwrapThrow())), m_objCache(buildObjCache(keelCtx(m_sctx), m_doc).unwrapThrow()), m_worldStatic(loadWorldStatic(m_objCache, m_doc)), - m_view(m_sctx.tctx, m_worldStatic) { + m_view(m_sctx, m_worldStatic) { oxThrowError(loadObjectSets()); setRequiresConstantRefresh(false); m_objSetPicker.filePicked.connect(this, &WorldEditorImGui::addObjSet); diff --git a/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.cpp b/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.cpp index 8155e85..2147fb0 100644 --- a/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.cpp +++ b/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.cpp @@ -8,8 +8,9 @@ namespace jasper::world { -WorldEditorView::WorldEditorView(turbine::Context &tctx, WorldStatic const&worldStatic): - m_cctx(ncore::init(tctx, {.glInstallDrawer = false}).unwrapThrow()), +WorldEditorView::WorldEditorView(studio::StudioContext &sctx, WorldStatic const&worldStatic): + m_sctx(sctx), + m_cctx(ncore::init(m_sctx.tctx, {.glInstallDrawer = false}).unwrapThrow()), m_worldStatic(worldStatic), m_world(*m_cctx, m_worldStatic) { } @@ -33,6 +34,10 @@ void WorldEditorView::draw(ox::Size const&targetSz) noexcept { glutils::resizeInitFrameBuffer(m_frameBuffer, ncore::gl::drawSize(m_scale)); } glutils::FrameBufferBind const frameBufferBind(m_frameBuffer); + auto const wakeUp = m_world.update(); + if (wakeUp.ok()) { + turbine::setRefreshWithin(m_sctx.tctx, wakeUp.value); + } ncore::gl::draw(*m_cctx, m_scale); m_highlighter.draw(); } diff --git a/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.hpp b/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.hpp index 1f95db0..bc1f122 100644 --- a/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.hpp +++ b/src/jasper/modules/world/src/studio/worldeditor/worldeditorview.hpp @@ -22,6 +22,7 @@ namespace ncore = nostalgia::core; class WorldEditorView { private: + studio::StudioContext &m_sctx; ncore::ContextUPtr m_cctx; WorldStatic const&m_worldStatic; int m_columns{}, m_rows{}; @@ -33,7 +34,7 @@ class WorldEditorView { MapTileHighlighter m_highlighter; public: - WorldEditorView(turbine::Context &ctx, WorldStatic const&worldStatic); + WorldEditorView(studio::StudioContext &ctx, WorldStatic const&worldStatic); ox::Error setupWorld() noexcept; @@ -56,7 +57,7 @@ class WorldEditorView { void setPixelBufferObject( unsigned vertexRow, float x, float y, - bool const selected, + bool selected, float *vbo, GLuint *ebo) const noexcept; diff --git a/src/jasper/modules/world/src/world.cpp b/src/jasper/modules/world/src/world.cpp index 8a6a326..fde93a7 100644 --- a/src/jasper/modules/world/src/world.cpp +++ b/src/jasper/modules/world/src/world.cpp @@ -70,13 +70,15 @@ void World::setupLayer( ox::Result World::update() const noexcept { auto const time = ticksMs(turbineCtx(m_nctx)); + int expiresIn = 30 * 1000; for (size_t i = 0; auto const&pal : m_palettes) { auto const interval = m_worldStatic.palettes[i].intervalMs; auto const page = (time / interval) % pal->pages.size(); + expiresIn = ox::min(expiresIn, static_cast(time % interval)); oxReturnError(ncore::loadBgPalette(m_nctx, i, *pal, static_cast(page))); ++i; } - return -1; + return expiresIn; } }