[keel,nostalgia,turbine] Cleanup

This commit is contained in:
2023-11-23 01:46:11 -06:00
parent a84a829769
commit b946e428ad
30 changed files with 120 additions and 122 deletions

View File

@@ -15,20 +15,11 @@
namespace nostalgia::core {
ox::Result<PaletteEditorImGui*> PaletteEditorImGui::make(turbine::Context *ctx, ox::CRStringView path) noexcept {
ox::UniquePtr<PaletteEditorImGui> out;
try {
out = ox::UniquePtr<PaletteEditorImGui>(new PaletteEditorImGui);
} catch (...) {
return OxError(1);
}
out->m_ctx = ctx;
out->m_itemPath = path;
const auto lastSlash = std::find(out->m_itemPath.rbegin(), out->m_itemPath.rend(), '/').offset();
out->m_itemName = out->m_itemPath.substr(lastSlash + 1);
oxRequire(pal, keel::readObj<Palette>(&out->m_ctx->keelCtx, ox::FileAddress(out->m_itemPath.c_str())));
out->m_pal = *pal;
return out.release();
PaletteEditorImGui::PaletteEditorImGui(turbine::Context *ctx, ox::String path):
m_ctx(ctx),
m_itemPath(std::move(path)),
m_itemName(m_itemPath.substr(std::find(m_itemPath.rbegin(), m_itemPath.rend(), '/').offset() + 1)),
m_pal(*keel::readObj<Palette>(&m_ctx->keelCtx, ox::FileAddress(m_itemPath.c_str())).unwrapThrow()) {
}
const ox::String &PaletteEditorImGui::itemName() const noexcept {
@@ -93,21 +84,25 @@ void PaletteEditorImGui::draw(turbine::Context*) noexcept {
ImGui::TableSetupColumn("Blue", ImGuiTableColumnFlags_WidthFixed, 50);
ImGui::TableSetupColumn("Color Preview", ImGuiTableColumnFlags_NoHide);
ImGui::TableHeadersRow();
constexpr auto colVal = [] (unsigned num) {
ox::Array<char, 4> numStr;
ImGui::TableNextColumn();
ox_itoa(num, numStr.data());
ImGui::SetCursorPosX(
ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(numStr.data()).x);
ImGui::Text("%s", numStr.data());
};
for (auto i = 0u; const auto c : m_pal.colors) {
ImGui::PushID(static_cast<int>(i));
ImGui::TableNextRow();
// Color No.
ImGui::TableNextColumn();
ImGui::Text("%d", i);
colVal(i);
// Red
ImGui::TableNextColumn();
ImGui::Text("%d", red16(c));
colVal(red16(c));
// Green
ImGui::TableNextColumn();
ImGui::Text("%d", green16(c));
colVal(green16(c));
// Blue
ImGui::TableNextColumn();
ImGui::Text("%d", blue16(c));
colVal(blue16(c));
// ColorPreview
ImGui::TableNextColumn();
const auto ic = ImGui::GetColorU32(ImVec4(redf(c), greenf(c), bluef(c), 1));

View File

@@ -15,15 +15,15 @@ class PaletteEditorImGui: public studio::Editor {
private:
turbine::Context *m_ctx = nullptr;
ox::String m_itemName;
ox::String m_itemPath;
ox::String m_itemName;
Palette m_pal;
std::size_t m_selectedRow = 0;
PaletteEditorImGui() noexcept = default;
public:
static ox::Result<PaletteEditorImGui*> make(turbine::Context *ctx, ox::CRStringView path) noexcept;
PaletteEditorImGui(turbine::Context *ctx, ox::String path);
/**
* Returns the name of item being edited.

View File

@@ -17,13 +17,13 @@ class StudioModule: public studio::Module {
{
{FileExt_ng},
[ctx](ox::CRStringView path) -> ox::Result<studio::BaseEditor*> {
return ox::makeCatch<TileSheetEditorImGui>(ctx, path);
return ox::makeCatch<TileSheetEditorImGui>(ctx, ox::String(path));
}
},
{
{FileExt_npal},
[ctx](ox::CRStringView path) -> ox::Result<studio::BaseEditor*> {
return PaletteEditorImGui::make(ctx, path);
return ox::makeCatch<PaletteEditorImGui>(ctx, ox::String(path));
}
}
};

View File

@@ -38,9 +38,9 @@ ox::Error toPngFile(const ox::String &path, const TileSheet::SubSheet &s, const
return OxError(static_cast<ox::ErrorCode>(lodepng_encode_file(path.c_str(), outData.data(), width, height, fmt, 8)));
}
TileSheetEditorImGui::TileSheetEditorImGui(turbine::Context *ctx, ox::CRStringView path): m_tileSheetEditor(ctx, path) {
TileSheetEditorImGui::TileSheetEditorImGui(turbine::Context *ctx, ox::String path): m_tileSheetEditor(ctx, path) {
m_ctx = ctx;
m_itemPath = path;
m_itemPath = std::move(path);
const auto lastSlash = ox::find(m_itemPath.rbegin(), m_itemPath.rend(), '/').offset();
m_itemName = m_itemPath.substr(lastSlash + 1);
// init palette idx
@@ -393,7 +393,7 @@ void TileSheetEditorImGui::drawPaletteSelector() noexcept {
}
}
ox::Error TileSheetEditorImGui::updateActiveSubsheet(const ox::String &name, int cols, int rows) noexcept {
ox::Error TileSheetEditorImGui::updateActiveSubsheet(const ox::StringView &name, int cols, int rows) noexcept {
return model()->updateSubsheet(model()->activeSubSheetIdx(), name, cols, rows);
}

View File

@@ -55,7 +55,7 @@ class TileSheetEditorImGui: public studio::BaseEditor {
Tool m_tool = Tool::Draw;
public:
TileSheetEditorImGui(turbine::Context *ctx, ox::CRStringView path);
TileSheetEditorImGui(turbine::Context *ctx, ox::String path);
~TileSheetEditorImGui() override = default;
@@ -116,7 +116,7 @@ class TileSheetEditorImGui: public studio::BaseEditor {
void drawPaletteSelector() noexcept;
ox::Error updateActiveSubsheet(const ox::String &name, int cols, int rows) noexcept;
ox::Error updateActiveSubsheet(const ox::StringView &name, int cols, int rows) noexcept;
// slots
private:

View File

@@ -488,13 +488,13 @@ class UpdateSubSheetCommand: public TileSheetCommand {
UpdateSubSheetCommand(
TileSheet &img,
TileSheet::SubSheetIdx idx,
const ox::String &name,
ox::String name,
int cols,
int rows) noexcept:
m_img(img),
m_idx(std::move(idx)) {
m_sheet = m_img.getSubSheet(m_idx);
m_newName = name;
m_newName = std::move(name);
m_newCols = cols;
m_newRows = rows;
}
@@ -682,8 +682,8 @@ void TileSheetEditorModel::deleteTiles(const TileSheet::SubSheetIdx &idx, std::s
pushCommand(ox::make<DeleteTilesCommand>(m_img, idx, tileIdx, tileCnt));
}
ox::Error TileSheetEditorModel::updateSubsheet(const TileSheet::SubSheetIdx &idx, const ox::String &name, int cols, int rows) noexcept {
pushCommand(ox::make<UpdateSubSheetCommand>(m_img, idx, name, cols, rows));
ox::Error TileSheetEditorModel::updateSubsheet(const TileSheet::SubSheetIdx &idx, const ox::StringView &name, int cols, int rows) noexcept {
pushCommand(ox::make<UpdateSubSheetCommand>(m_img, idx, ox::String(name), cols, rows));
return {};
}

View File

@@ -72,7 +72,7 @@ class TileSheetEditorModel: public ox::SignalHandler {
void deleteTiles(const TileSheet::SubSheetIdx &idx, std::size_t tileIdx, std::size_t tileCnt) noexcept;
ox::Error updateSubsheet(const TileSheet::SubSheetIdx &idx, const ox::String &name, int cols, int rows) noexcept;
ox::Error updateSubsheet(const TileSheet::SubSheetIdx &idx, const ox::StringView &name, int cols, int rows) noexcept;
void setActiveSubsheet(const TileSheet::SubSheetIdx&) noexcept;

View File

@@ -11,8 +11,8 @@
namespace nostalgia::core {
TileSheetEditorView::TileSheetEditorView(turbine::Context *ctx, ox::CRStringView path):
m_model(ctx, path), m_pixelsDrawer(&m_model) {
TileSheetEditorView::TileSheetEditorView(turbine::Context *ctx, ox::String path):
m_model(ctx, std::move(path)), m_pixelsDrawer(&m_model) {
// build shaders
oxThrowError(m_pixelsDrawer.buildShader());
oxThrowError(m_pixelGridDrawer.buildShader());

View File

@@ -50,7 +50,7 @@ class TileSheetEditorView: public ox::SignalHandler {
std::size_t m_palIdx = 0;
public:
TileSheetEditorView(turbine::Context *ctx, ox::CRStringView path);
TileSheetEditorView(turbine::Context *ctx, ox::String path);
~TileSheetEditorView() override = default;

View File

@@ -15,7 +15,7 @@ class Scene {
public:
explicit Scene(const SceneStatic &sceneStatic) noexcept;
ox::Error setupDisplay(core::Context *ctx) const noexcept;
ox::Error setupDisplay(core::Context &ctx) const noexcept;
private:
void setupLayer(core::Context*, const ox::Vector<uint16_t> &layer, unsigned layerNo) const noexcept;

View File

@@ -12,17 +12,17 @@ Scene::Scene(const SceneStatic &sceneStatic) noexcept:
m_sceneStatic(sceneStatic) {
}
ox::Error Scene::setupDisplay(core::Context *ctx) const noexcept {
ox::Error Scene::setupDisplay(core::Context &ctx) const noexcept {
if (m_sceneStatic.palettes.empty()) {
return OxError(1, "Scene has no palettes");
}
const auto &palette = m_sceneStatic.palettes[0];
oxReturnError(core::loadBgTileSheet(
ctx, 0, m_sceneStatic.tilesheet, palette));
&ctx, 0, m_sceneStatic.tilesheet, palette));
// disable all backgrounds
core::setBgStatus(ctx, 0);
core::setBgStatus(&ctx, 0);
for (auto layerNo = 0u; const auto &layer : m_sceneStatic.tileMapIdx) {
setupLayer(ctx, layer, layerNo);
setupLayer(&ctx, layer, layerNo);
++layerNo;
}
return {};

View File

@@ -10,11 +10,11 @@
namespace nostalgia::scene {
SceneEditorImGui::SceneEditorImGui(turbine::Context *ctx, ox::CRStringView path):
m_editor(ctx, path),
m_view(ctx, m_editor.scene()) {
m_ctx = ctx;
m_itemPath = path;
SceneEditorImGui::SceneEditorImGui(turbine::Context &ctx, ox::String path):
m_ctx(ctx),
m_itemPath(std::move(path)),
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);
@@ -48,9 +48,9 @@ void SceneEditorImGui::onActivated() noexcept {
}
ox::Error SceneEditorImGui::saveItem() noexcept {
const auto sctx = applicationData<studio::StudioContext>(*m_ctx);
const auto sctx = applicationData<studio::StudioContext>(m_ctx);
oxReturnError(sctx->project->writeObj(m_itemPath, &m_editor.scene()));
oxReturnError(m_ctx->keelCtx.assetManager.setAsset(m_itemPath, m_editor.scene()));
oxReturnError(m_ctx.keelCtx.assetManager.setAsset(m_itemPath, m_editor.scene()));
return {};
}

View File

@@ -16,14 +16,14 @@ namespace nostalgia::scene {
class SceneEditorImGui: public studio::Editor {
private:
turbine::Context *m_ctx = nullptr;
turbine::Context &m_ctx;
ox::String m_itemName;
ox::String m_itemPath;
SceneEditor m_editor;
SceneEditorView m_view;
public:
SceneEditorImGui(turbine::Context *ctx, ox::CRStringView path);
SceneEditorImGui(turbine::Context &ctx, ox::String path);
/**
* Returns the name of item being edited.

View File

@@ -15,7 +15,7 @@ SceneEditorView::SceneEditorView(turbine::Context *tctx, const SceneStatic &scen
}
ox::Error SceneEditorView::setupScene() noexcept {
return m_scene.setupDisplay(m_cctx.get());
return m_scene.setupDisplay(*m_cctx);
}
void SceneEditorView::draw(int width, int height) noexcept {

View File

@@ -19,7 +19,7 @@ ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) con
{
{"nscn"},
[ctx](ox::CRStringView path) -> ox::Result<studio::BaseEditor*> {
return ox::makeCatch<SceneEditorImGui>(ctx, path);
return ox::makeCatch<SceneEditorImGui>(*ctx, ox::String(path));
}
},
};

View File

@@ -33,7 +33,6 @@ static void keyEventHandler(turbine::Context &tctx, turbine::Key key, bool down)
}
ox::Error run(ox::UniquePtr<ox::FileSystem> &&fs) noexcept {
oxTraceInitHook();
oxRequireM(tctx, turbine::init(std::move(fs), "Nostalgia"));
oxRequireM(cctx, core::init(tctx.get()));
constexpr ox::FileAddress SceneAddr("/Scenes/Chester.nscn");
@@ -41,6 +40,6 @@ ox::Error run(ox::UniquePtr<ox::FileSystem> &&fs) noexcept {
turbine::setUpdateHandler(*tctx, updateHandler);
turbine::setKeyEventHandler(*tctx, keyEventHandler);
s_scene.emplace(*scn);
oxReturnError(s_scene->setupDisplay(cctx.get()));
oxReturnError(s_scene->setupDisplay(*cctx));
return turbine::run(*tctx);
}

View File

@@ -2,6 +2,7 @@
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
*/
#include <ox/logconn/def.hpp>
#include <ox/logconn/logconn.hpp>
#include <keel/media.hpp>
@@ -11,8 +12,7 @@
#include "app.hpp"
static ox::Error run(int argc, const char **argv) noexcept {
ox::trace::init();
#ifdef OX_USE_STDLIB
#ifndef OX_BARE_METAL
// GBA doesn't need the modules and calling this doubles the size of the
// binary.
nostalgia::registerKeelModules();
@@ -33,16 +33,19 @@ int WinMain() {
#else
int main(int argc, const char **argv) {
#endif
#if defined(DEBUG) && !defined(OX_BARE_METAL)
ox::LoggerConn loggerConn;
const auto loggerErr = loggerConn.initConn("Nostalgia Player");
if (loggerErr) {
oxErrf("Could not connect to logger: {} ({}:{})\n", toStr(loggerErr), loggerErr.file, loggerErr.line);
} else {
ox::trace::setLogger(&loggerConn);
OX_INIT_DEBUG_LOGGER(loggerConn, "Nostalgia Player")
ox::Error err;
#ifdef __cpp_exceptions
try {
err = run(argc, argv);
} catch (ox::Exception const&ex) {
err = ex.toError();
} catch (...) {
err = OxError(1, "Non-Ox exception");
}
#else
err = run(argc, argv);
#endif
const auto err = run(argc, argv);
oxAssert(err, "Something went wrong...");
return static_cast<int>(err);
}

View File

@@ -4,7 +4,6 @@ target_link_libraries(
nost-pack
OxClArgs
OxLogConn
Keel
NostalgiaKeelModules
)

View File

@@ -6,6 +6,7 @@
#include <ox/clargs/clargs.hpp>
#include <ox/fs/fs.hpp>
#include <ox/logconn/def.hpp>
#include <ox/logconn/logconn.hpp>
#include <keel/keel.hpp>
@@ -50,7 +51,6 @@ static ox::Error generateTypes(ox::TypeStore *ts) noexcept {
}
static ox::Error run(const ox::ClArgs &args) noexcept {
nostalgia::registerKeelModules();
const auto argSrc = args.getString("src", "");
const auto argRomBin = args.getString("rom-bin", "");
if (argSrc == "") {
@@ -63,7 +63,7 @@ static ox::Error run(const ox::ClArgs &args) noexcept {
}
ox::Buffer dstBuff(32 * ox::units::MB);
oxReturnError(ox::FileSystem32::format(dstBuff.data(), dstBuff.size()));
ox::FileSystem32 dst(ox::FileStore32(dstBuff.data(), dstBuff.size()));
ox::FileSystem32 dst(dstBuff);
oxRequire(ctx, keel::init(ox::make_unique<ox::PassThroughFS>(argSrc), "nost-pack"));
keel::TypeStore ts(ctx->rom.get(), "/.nostalgia/type_descriptors");
oxReturnError(generateTypes(&ts));
@@ -87,16 +87,8 @@ static ox::Error run(const ox::ClArgs &args) noexcept {
}
int main(int argc, const char **args) {
ox::trace::init();
#ifdef DEBUG
ox::LoggerConn loggerConn;
const auto loggerErr = loggerConn.initConn("nost-pack");
if (loggerErr) {
oxErrf("Could not connect to logger: {} ({}:{})\n", toStr(loggerErr), loggerErr.file, loggerErr.line);
} else {
ox::trace::setLogger(&loggerConn);
}
#endif
OX_INIT_DEBUG_LOGGER(loggerConn, "nost-pack")
nostalgia::registerKeelModules();
const auto err = run(ox::ClArgs(argc, args));
oxAssert(err, "pack failed");
return static_cast<int>(err);