[nostalgia,studio] Cleanup

This commit is contained in:
2023-12-03 19:59:27 -06:00
parent 5717d67462
commit d23b69ce17
24 changed files with 68 additions and 158 deletions

View File

@@ -18,7 +18,7 @@ constexpr unsigned adjustLayerAttachment(unsigned layer, unsigned attachment) no
}
}
constexpr void setLayerAttachments(unsigned layer, const TileDoc &srcTile, SceneStatic::Tile &dstTile) noexcept {
constexpr void setLayerAttachments(unsigned layer, TileDoc const&srcTile, SceneStatic::Tile &dstTile) noexcept {
setTopEdge(
dstTile.layerAttachments,
adjustLayerAttachment(layer, srcTile.layerAttachments[0]));

View File

@@ -10,11 +10,11 @@
namespace nostalgia::scene {
SceneEditorImGui::SceneEditorImGui(turbine::Context &ctx, ox::String path):
SceneEditorImGui::SceneEditorImGui(turbine::Context &ctx, ox::StringView path):
m_ctx(ctx),
m_itemPath(std::move(path)),
m_editor(&m_ctx, m_itemPath),
m_view(&m_ctx, m_editor.scene()) {
m_editor(m_ctx, m_itemPath),
m_view(m_ctx, m_editor.scene()) {
const auto lastSlash = std::find(m_itemPath.rbegin(), m_itemPath.rend(), '/').offset();
m_itemName = m_itemPath.substr(lastSlash + 1);
setRequiresConstantRefresh(false);

View File

@@ -23,7 +23,7 @@ class SceneEditorImGui: public studio::Editor {
SceneEditorView m_view;
public:
SceneEditorImGui(turbine::Context &ctx, ox::String path);
SceneEditorImGui(turbine::Context &ctx, ox::StringView path);
/**
* Returns the name of item being edited.

View File

@@ -8,10 +8,9 @@
namespace nostalgia::scene {
SceneEditor::SceneEditor(turbine::Context *ctx, ox::CRStringView path) {
m_ctx = ctx;
oxRequireT(scn, keel::readObj<SceneStatic>(m_ctx->keelCtx, path));
m_scene = *scn;
SceneEditor::SceneEditor(turbine::Context &ctx, ox::CRStringView path):
m_ctx(ctx),
m_scene(*keel::readObj<SceneStatic>(m_ctx.keelCtx, path).unwrapThrow()) {
}
}

View File

@@ -13,15 +13,16 @@ namespace nostalgia::scene {
class SceneEditor {
private:
turbine::Context *m_ctx = nullptr;
turbine::Context &m_ctx;
ox::String m_itemName;
ox::String m_itemPath;
SceneStatic m_scene;
public:
SceneEditor(turbine::Context *ctx, ox::CRStringView path);
SceneEditor(turbine::Context &ctx, ox::CRStringView path);
const SceneStatic &scene() noexcept {
[[nodiscard]]
SceneStatic const&scene() const noexcept {
return m_scene;
}

View File

@@ -8,10 +8,10 @@
namespace nostalgia::scene {
SceneEditorView::SceneEditorView(turbine::Context *tctx, const SceneStatic &sceneStatic):
SceneEditorView::SceneEditorView(turbine::Context &tctx, SceneStatic const&sceneStatic):
m_sceneStatic(sceneStatic),
m_scene(m_sceneStatic) {
oxThrowError(core::init(*tctx, {.glInstallDrawer = false}).moveTo(&m_cctx));
oxThrowError(core::init(tctx, {.glInstallDrawer = false}).moveTo(&m_cctx));
}
ox::Error SceneEditorView::setupScene() noexcept {
@@ -23,10 +23,10 @@ void SceneEditorView::draw(int width, int height) noexcept {
glutils::resizeInitFrameBuffer(&m_frameBuffer, width, height);
}
const glutils::FrameBufferBind frameBufferBind(m_frameBuffer);
core::gl::drawMainView(*m_cctx, {width, height});
core::gl::draw(*m_cctx, {width, height});
}
const glutils::FrameBuffer &SceneEditorView::framebuffer() const noexcept {
glutils::FrameBuffer const&SceneEditorView::framebuffer() const noexcept {
return m_frameBuffer;
}

View File

@@ -15,19 +15,19 @@ class SceneEditorView {
private:
ox::UPtr<core::Context> m_cctx;
const SceneStatic &m_sceneStatic;
SceneStatic const&m_sceneStatic;
Scene m_scene;
glutils::FrameBuffer m_frameBuffer;
public:
SceneEditorView(turbine::Context *ctx, const SceneStatic &sceneStatic);
SceneEditorView(turbine::Context &ctx, SceneStatic const&sceneStatic);
ox::Error setupScene() noexcept;
void draw(int width, int height) noexcept;
[[nodiscard]]
const glutils::FrameBuffer &framebuffer() const noexcept;
glutils::FrameBuffer const&framebuffer() const noexcept;
};

View File

@@ -10,22 +10,17 @@ namespace nostalgia::scene {
class StudioModule: public studio::Module {
public:
ox::Vector<studio::EditorMaker> editors(turbine::Context *ctx) const noexcept override;
ox::Vector<ox::UPtr<studio::ItemMaker>> itemMakers(turbine::Context*) const noexcept override;
ox::Vector<studio::EditorMaker> editors(turbine::Context &ctx) const noexcept override;
ox::Vector<ox::UPtr<studio::ItemMaker>> itemMakers(turbine::Context&) const noexcept override;
};
ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) const noexcept {
ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context &ctx) const noexcept {
return {
{
{ox::String("nscn")},
[ctx](ox::CRStringView path) -> ox::Result<studio::BaseEditor*> {
return ox::makeCatch<SceneEditorImGui>(*ctx, ox::String(path));
}
},
studio::editorMaker<SceneEditorImGui>(ctx, "nscn"),
};
}
ox::Vector<ox::UPtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context*) const noexcept {
ox::Vector<ox::UPtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context&) const noexcept {
ox::Vector<ox::UPtr<studio::ItemMaker>> out;
return out;
}

View File

@@ -1,68 +0,0 @@
/*
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
*/
#include <nostalgia/core/gfx.hpp>
#include <keel/media.hpp>
#include "typeconv.hpp"
namespace nostalgia::scene {
[[nodiscard]]
constexpr unsigned adjustLayerAttachment(unsigned layer, unsigned attachment) noexcept {
if (attachment == 0) {
return layer;
} else {
return attachment - 1;
}
}
constexpr void setLayerAttachments(unsigned layer, const TileDoc &srcTile, SceneStatic::Tile &dstTile) noexcept {
setTopEdge(
dstTile.layerAttachments,
adjustLayerAttachment(layer, srcTile.layerAttachments[0]));
setBottomEdge(
dstTile.layerAttachments,
adjustLayerAttachment(layer, srcTile.layerAttachments[1]));
setLeftEdge(
dstTile.layerAttachments,
adjustLayerAttachment(layer, srcTile.layerAttachments[2]));
setRightEdge(
dstTile.layerAttachments,
adjustLayerAttachment(layer, srcTile.layerAttachments[3]));
}
ox::Error SceneDocToSceneStaticConverter::convert(
keel::Context *ctx,
SceneDoc *src,
SceneStatic *dst) const noexcept {
oxRequire(ts, keel::readObj<core::TileSheet>(ctx, src->tilesheet));
const auto layerCnt = src->tiles.size();
dst->setLayerCnt(layerCnt);
dst->tilesheet = ox::FileAddress(src->tilesheet);
dst->palettes.reserve(src->palettes.size());
for (const auto &pal : src->palettes) {
dst->palettes.emplace_back(pal);
}
for (auto layerIdx = 0u; const auto &layer : src->tiles) {
const auto layerDim = src->size(layerIdx);
auto dstLayer = dst->layer(layerIdx);
dstLayer.setDimensions(layerDim);
for (auto tileIdx = 0u; const auto &row : layer) {
for (const auto &srcTile : row) {
auto dstTile = dstLayer.tile(tileIdx);
dstTile.tileType = srcTile.type;
oxRequire(path, srcTile.getSubsheetPath(*ts));
oxRequire(mapIdx, ts->getTileOffset(path));
dstTile.tileMapIdx = static_cast<uint16_t>(mapIdx);
setLayerAttachments(layerIdx, srcTile, dstTile);
++tileIdx;
}
}
++layerIdx;
}
return {};
}
}

View File

@@ -1,17 +0,0 @@
/*
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
*/
#pragma once
#include <keel/typeconv.hpp>
#include <nostalgia/scene/scenestatic.hpp>
namespace nostalgia::scene {
class SceneDocToSceneStaticConverter: public keel::Converter<SceneDoc, SceneStatic> {
ox::Error convert(keel::Context*, SceneDoc *src, SceneStatic *dst) const noexcept final;
};
}