[nostalgia,studio] Make module handling consistent
This commit is contained in:
parent
2874620bc6
commit
ed169eb9b8
@ -1,22 +1,35 @@
|
|||||||
add_library(
|
add_library(
|
||||||
NostalgiaAppModules OBJECT
|
NostalgiaKeelModules OBJECT
|
||||||
appmodules.cpp
|
keelmodules.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT MSVC)
|
|
||||||
target_compile_options(NostalgiaAppModules PRIVATE -Wsign-conversion)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
NostalgiaAppModules PUBLIC
|
NostalgiaKeelModules PUBLIC
|
||||||
Keel
|
Keel
|
||||||
NostalgiaCore
|
NostalgiaCore
|
||||||
NostalgiaScene
|
NostalgiaScene
|
||||||
)
|
)
|
||||||
|
if(NOT MSVC)
|
||||||
|
target_compile_options(NostalgiaKeelModules PRIVATE -Wsign-conversion)
|
||||||
|
endif()
|
||||||
install(
|
install(
|
||||||
FILES
|
FILES
|
||||||
appmodules.hpp
|
keelmodules.hpp
|
||||||
DESTINATION
|
DESTINATION
|
||||||
include/nostalgia/appmodules
|
include/nostalgia/appmodules
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(NOSTALGIA_BUILD_TYPE STREQUAL "Native")
|
||||||
|
add_library(
|
||||||
|
NostalgiaStudioModules
|
||||||
|
studiomodules.cpp
|
||||||
|
)
|
||||||
|
target_link_libraries(
|
||||||
|
NostalgiaStudioModules PUBLIC
|
||||||
|
StudioAppLib
|
||||||
|
NostalgiaCore-Studio
|
||||||
|
NostalgiaScene-Studio
|
||||||
|
)
|
||||||
|
if(NOT MSVC)
|
||||||
|
target_compile_options(NostalgiaStudioModules PRIVATE -Wsign-conversion)
|
||||||
|
endif()
|
||||||
|
endif()
|
@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <keel/module.hpp>
|
|
||||||
|
|
||||||
#include <nostalgia/core/module.hpp>
|
|
||||||
#include <nostalgia/scene/scenemodule.hpp>
|
|
||||||
|
|
||||||
namespace nostalgia {
|
|
||||||
|
|
||||||
static bool modulesLoaded = false;
|
|
||||||
void loadModules() noexcept {
|
|
||||||
if (modulesLoaded) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
keel::registerModule(core::module());
|
|
||||||
keel::registerModule(scene::module());
|
|
||||||
modulesLoaded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
22
src/nostalgia/appmodules/keelmodules.cpp
Normal file
22
src/nostalgia/appmodules/keelmodules.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <keel/module.hpp>
|
||||||
|
|
||||||
|
#include <nostalgia/core/keelmodule.hpp>
|
||||||
|
#include <nostalgia/scene/keelmodule.hpp>
|
||||||
|
|
||||||
|
namespace nostalgia {
|
||||||
|
|
||||||
|
static bool modulesRegistered = false;
|
||||||
|
void registerKeelModules() noexcept {
|
||||||
|
if (modulesRegistered) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
keel::registerModule(core::keelModule());
|
||||||
|
keel::registerModule(scene::keelModule());
|
||||||
|
modulesRegistered = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
namespace nostalgia {
|
namespace nostalgia {
|
||||||
|
|
||||||
void loadModules() noexcept;
|
void registerKeelModules() noexcept;
|
||||||
|
|
||||||
}
|
}
|
24
src/nostalgia/appmodules/studiomodules.cpp
Normal file
24
src/nostalgia/appmodules/studiomodules.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <keel/module.hpp>
|
||||||
|
|
||||||
|
#include <studioapp/studioapp.hpp>
|
||||||
|
|
||||||
|
#include <nostalgia/core/studio/studiomodule.hpp>
|
||||||
|
#include <nostalgia/scene/studio/studiomodule.hpp>
|
||||||
|
|
||||||
|
namespace nostalgia {
|
||||||
|
|
||||||
|
static bool modulesRegistered = false;
|
||||||
|
void registerStudioModules() noexcept {
|
||||||
|
if (modulesRegistered) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
studio::registerModule(core::studioModule());
|
||||||
|
studio::registerModule(scene::studioModule());
|
||||||
|
modulesRegistered = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
11
src/nostalgia/appmodules/studiomodules.hpp
Normal file
11
src/nostalgia/appmodules/studiomodules.hpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace nostalgia {
|
||||||
|
|
||||||
|
void registerStudioModules() noexcept;
|
||||||
|
|
||||||
|
}
|
@ -2,7 +2,7 @@ add_library(
|
|||||||
NostalgiaCore
|
NostalgiaCore
|
||||||
context.cpp
|
context.cpp
|
||||||
gfx.cpp
|
gfx.cpp
|
||||||
module.cpp
|
keelmodule.cpp
|
||||||
tilesheet.cpp
|
tilesheet.cpp
|
||||||
typeconv.cpp
|
typeconv.cpp
|
||||||
)
|
)
|
||||||
|
71
src/nostalgia/core/keelmodule.cpp
Normal file
71
src/nostalgia/core/keelmodule.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ox/model/model.hpp>
|
||||||
|
|
||||||
|
#include <keel/asset.hpp>
|
||||||
|
#include <keel/module.hpp>
|
||||||
|
|
||||||
|
#include "gfx.hpp"
|
||||||
|
#include "typeconv.hpp"
|
||||||
|
|
||||||
|
#include "keelmodule.hpp"
|
||||||
|
|
||||||
|
namespace nostalgia::core {
|
||||||
|
|
||||||
|
class CoreModule: public keel::Module {
|
||||||
|
private:
|
||||||
|
NostalgiaPaletteToPaletteConverter nostalgiaPaletteToPaletteConverter;
|
||||||
|
TileSheetV1ToTileSheetConverter nostalgiaGraphicToTileSheetConverter;
|
||||||
|
TileSheetToCompactTileSheetConverter tileSheetToCompactTileSheetConverter;
|
||||||
|
TileSheetV2ToTileSheetConverter tileSheetV2ToTileSheetConverter;
|
||||||
|
|
||||||
|
public:
|
||||||
|
[[nodiscard]]
|
||||||
|
ox::Vector<keel::TypeDescGenerator> types() const noexcept final {
|
||||||
|
return {
|
||||||
|
keel::generateTypeDesc<TileSheetV1>,
|
||||||
|
keel::generateTypeDesc<TileSheetV2>,
|
||||||
|
keel::generateTypeDesc<TileSheet>,
|
||||||
|
keel::generateTypeDesc<CompactTileSheet>,
|
||||||
|
keel::generateTypeDesc<NostalgiaPalette>,
|
||||||
|
keel::generateTypeDesc<Palette>,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
ox::Vector<const keel::BaseConverter*> converters() const noexcept final {
|
||||||
|
return {
|
||||||
|
&nostalgiaPaletteToPaletteConverter,
|
||||||
|
&nostalgiaGraphicToTileSheetConverter,
|
||||||
|
&tileSheetToCompactTileSheetConverter,
|
||||||
|
&tileSheetV2ToTileSheetConverter,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
ox::Vector<keel::PackTransform> packTransforms() const noexcept final {
|
||||||
|
return {
|
||||||
|
// convert tilesheets to CompactTileSheets
|
||||||
|
[](keel::Context *ctx, ox::Buffer *buff) -> ox::Error {
|
||||||
|
oxRequire(hdr, keel::readAssetHeader(*buff));
|
||||||
|
const auto typeId = ox::buildTypeId(hdr.clawHdr.typeName, hdr.clawHdr.typeVersion, hdr.clawHdr.typeParams);
|
||||||
|
if (typeId == ox::buildTypeId<TileSheetV1>() ||
|
||||||
|
typeId == ox::buildTypeId<TileSheetV2>() ||
|
||||||
|
typeId == ox::buildTypeId<TileSheet>()) {
|
||||||
|
oxReturnError(keel::convertBuffToBuff<core::CompactTileSheet>(
|
||||||
|
ctx, *buff, ox::ClawFormat::Metal).moveTo(buff));
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static CoreModule mod;
|
||||||
|
const keel::Module *keelModule() noexcept {
|
||||||
|
return &mod;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
namespace nostalgia::core {
|
namespace nostalgia::core {
|
||||||
|
|
||||||
const keel::Module *module() noexcept;
|
const keel::Module *keelModule() noexcept;
|
||||||
|
|
||||||
}
|
}
|
@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <ox/model/model.hpp>
|
|
||||||
|
|
||||||
#include <keel/asset.hpp>
|
|
||||||
#include <keel/module.hpp>
|
|
||||||
|
|
||||||
#include "gfx.hpp"
|
|
||||||
#include "typeconv.hpp"
|
|
||||||
|
|
||||||
#include "module.hpp"
|
|
||||||
|
|
||||||
namespace nostalgia::core {
|
|
||||||
|
|
||||||
class CoreModule: public keel::Module {
|
|
||||||
private:
|
|
||||||
NostalgiaPaletteToPaletteConverter nostalgiaPaletteToPaletteConverter;
|
|
||||||
TileSheetV1ToTileSheetConverter nostalgiaGraphicToTileSheetConverter;
|
|
||||||
TileSheetToCompactTileSheetConverter tileSheetToCompactTileSheetConverter;
|
|
||||||
TileSheetV2ToTileSheetConverter tileSheetV2ToTileSheetConverter;
|
|
||||||
|
|
||||||
public:
|
|
||||||
static CoreModule mod;
|
|
||||||
[[nodiscard]]
|
|
||||||
ox::Vector<keel::TypeDescGenerator> types() const noexcept override;
|
|
||||||
[[nodiscard]]
|
|
||||||
ox::Vector<const keel::BaseConverter*> converters() const noexcept override;
|
|
||||||
[[nodiscard]]
|
|
||||||
ox::Vector<keel::PackTransform> packTransforms() const noexcept override;
|
|
||||||
};
|
|
||||||
|
|
||||||
CoreModule CoreModule::mod;
|
|
||||||
|
|
||||||
const keel::Module *module() noexcept {
|
|
||||||
return &CoreModule::mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
ox::Vector<keel::TypeDescGenerator> CoreModule::types() const noexcept {
|
|
||||||
return {
|
|
||||||
keel::generateTypeDesc<TileSheetV1>,
|
|
||||||
keel::generateTypeDesc<TileSheetV2>,
|
|
||||||
keel::generateTypeDesc<TileSheet>,
|
|
||||||
keel::generateTypeDesc<CompactTileSheet>,
|
|
||||||
keel::generateTypeDesc<NostalgiaPalette>,
|
|
||||||
keel::generateTypeDesc<Palette>,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
ox::Vector<const keel::BaseConverter*> CoreModule::converters() const noexcept {
|
|
||||||
return {
|
|
||||||
&nostalgiaPaletteToPaletteConverter,
|
|
||||||
&nostalgiaGraphicToTileSheetConverter,
|
|
||||||
&tileSheetToCompactTileSheetConverter,
|
|
||||||
&tileSheetV2ToTileSheetConverter,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
ox::Vector<keel::PackTransform> CoreModule::packTransforms() const noexcept {
|
|
||||||
return {
|
|
||||||
// convert tilesheets to CompactTileSheets
|
|
||||||
[](keel::Context *ctx, ox::Buffer *buff) -> ox::Error {
|
|
||||||
oxRequire(hdr, keel::readAssetHeader(*buff));
|
|
||||||
const auto typeId = ox::buildTypeId(hdr.clawHdr.typeName, hdr.clawHdr.typeVersion, hdr.clawHdr.typeParams);
|
|
||||||
if (typeId == ox::buildTypeId<TileSheetV1>() ||
|
|
||||||
typeId == ox::buildTypeId<TileSheetV2>() ||
|
|
||||||
typeId == ox::buildTypeId<TileSheet>()) {
|
|
||||||
oxReturnError(keel::convertBuffToBuff<core::CompactTileSheet>(
|
|
||||||
ctx, *buff, ox::ClawFormat::Metal).moveTo(buff));
|
|
||||||
}
|
|
||||||
return {};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
add_library(
|
add_library(
|
||||||
NostalgiaCore-Studio OBJECT
|
NostalgiaCore-Studio OBJECT
|
||||||
module.cpp
|
studiomodule.cpp
|
||||||
paletteeditor.cpp
|
paletteeditor.cpp
|
||||||
paletteeditor-imgui.cpp
|
paletteeditor-imgui.cpp
|
||||||
tilesheeteditor-imgui.cpp
|
tilesheeteditor-imgui.cpp
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <studio/studio.hpp>
|
|
||||||
|
|
||||||
namespace nostalgia::core {
|
|
||||||
|
|
||||||
class StudioModule: public studio::Module {
|
|
||||||
public:
|
|
||||||
ox::Vector<studio::EditorMaker> editors(turbine::Context *ctx) noexcept override;
|
|
||||||
ox::Vector<ox::UniquePtr<studio::ItemMaker>> itemMakers(turbine::Context*) noexcept override;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -7,11 +7,17 @@
|
|||||||
#include "paletteeditor-imgui.hpp"
|
#include "paletteeditor-imgui.hpp"
|
||||||
#include "tilesheeteditor-imgui.hpp"
|
#include "tilesheeteditor-imgui.hpp"
|
||||||
|
|
||||||
#include "module.hpp"
|
#include "studiomodule.hpp"
|
||||||
|
|
||||||
namespace nostalgia::core {
|
namespace nostalgia::core {
|
||||||
|
|
||||||
ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) noexcept {
|
class StudioModule: public studio::Module {
|
||||||
|
public:
|
||||||
|
ox::Vector<studio::EditorMaker> editors(turbine::Context *ctx) const noexcept override;
|
||||||
|
ox::Vector<ox::UniquePtr<studio::ItemMaker>> itemMakers(turbine::Context*) const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) const noexcept {
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
{FileExt_ng},
|
{FileExt_ng},
|
||||||
@ -32,11 +38,16 @@ ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) noe
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Vector<ox::UniquePtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context*) noexcept {
|
ox::Vector<ox::UniquePtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context*) const noexcept {
|
||||||
ox::Vector<ox::UniquePtr<studio::ItemMaker>> out;
|
ox::Vector<ox::UniquePtr<studio::ItemMaker>> out;
|
||||||
out.emplace_back(ox::make<studio::ItemMakerT<core::TileSheet>>("Tile Sheet", "TileSheets", "ng"));
|
out.emplace_back(ox::make<studio::ItemMakerT<core::TileSheet>>("Tile Sheet", "TileSheets", "ng"));
|
||||||
out.emplace_back(ox::make<studio::ItemMakerT<core::Palette>>("Palette", "Palettes", "npal"));
|
out.emplace_back(ox::make<studio::ItemMakerT<core::Palette>>("Palette", "Palettes", "npal"));
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static StudioModule mod;
|
||||||
|
const studio::Module *studioModule() noexcept {
|
||||||
|
return &mod;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
13
src/nostalgia/core/studio/studiomodule.hpp
Normal file
13
src/nostalgia/core/studio/studiomodule.hpp
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <studio/studio.hpp>
|
||||||
|
|
||||||
|
namespace nostalgia::core {
|
||||||
|
|
||||||
|
const studio::Module *studioModule() noexcept;
|
||||||
|
|
||||||
|
}
|
@ -22,7 +22,7 @@ endif()
|
|||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
nostalgia
|
nostalgia
|
||||||
NostalgiaAppModules
|
NostalgiaKeelModules
|
||||||
OxLogConn
|
OxLogConn
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <nostalgia/core/core.hpp>
|
#include <nostalgia/core/core.hpp>
|
||||||
|
|
||||||
#include <nostalgia/appmodules/appmodules.hpp>
|
#include <nostalgia/appmodules/keelmodules.hpp>
|
||||||
|
|
||||||
#include "app.hpp"
|
#include "app.hpp"
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ static ox::Error run(int argc, const char **argv) noexcept {
|
|||||||
#ifdef OX_USE_STDLIB
|
#ifdef OX_USE_STDLIB
|
||||||
// GBA doesn't need the modules and calling this doubles the size of the
|
// GBA doesn't need the modules and calling this doubles the size of the
|
||||||
// binary.
|
// binary.
|
||||||
nostalgia::loadModules();
|
nostalgia::registerKeelModules();
|
||||||
#endif
|
#endif
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
oxErr("Please provide path to project directory or OxFS file.\n");
|
oxErr("Please provide path to project directory or OxFS file.\n");
|
||||||
|
@ -3,7 +3,7 @@ add_library(
|
|||||||
NostalgiaScene
|
NostalgiaScene
|
||||||
scene.cpp
|
scene.cpp
|
||||||
scenestatic.cpp
|
scenestatic.cpp
|
||||||
scenemodule.cpp
|
keelmodule.cpp
|
||||||
typeconv.cpp
|
typeconv.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ target_link_libraries(
|
|||||||
install(
|
install(
|
||||||
FILES
|
FILES
|
||||||
scenestatic.hpp
|
scenestatic.hpp
|
||||||
scenemodule.hpp
|
keelmodule.hpp
|
||||||
typeconv.hpp
|
typeconv.hpp
|
||||||
DESTINATION
|
DESTINATION
|
||||||
include/nostalgia/scene
|
include/nostalgia/scene
|
||||||
|
@ -2,12 +2,10 @@
|
|||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ox/model/model.hpp>
|
|
||||||
|
|
||||||
#include "scenestatic.hpp"
|
#include "scenestatic.hpp"
|
||||||
#include "typeconv.hpp"
|
#include "typeconv.hpp"
|
||||||
|
|
||||||
#include "scenemodule.hpp"
|
#include "keelmodule.hpp"
|
||||||
|
|
||||||
namespace nostalgia::scene {
|
namespace nostalgia::scene {
|
||||||
|
|
||||||
@ -41,7 +39,7 @@ class SceneModule: public keel::Module {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static SceneModule mod;
|
static SceneModule mod;
|
||||||
const keel::Module *module() noexcept {
|
const keel::Module *keelModule() noexcept {
|
||||||
return &mod;
|
return &mod;
|
||||||
}
|
}
|
||||||
|
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
namespace nostalgia::scene {
|
namespace nostalgia::scene {
|
||||||
|
|
||||||
const keel::Module *module() noexcept;
|
const keel::Module *keelModule() noexcept;
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
add_library(
|
add_library(
|
||||||
NostalgiaScene-Studio OBJECT
|
NostalgiaScene-Studio OBJECT
|
||||||
module.cpp
|
studiomodule.cpp
|
||||||
sceneeditor-imgui.cpp
|
sceneeditor-imgui.cpp
|
||||||
sceneeditor.cpp
|
sceneeditor.cpp
|
||||||
sceneeditorview.cpp
|
sceneeditorview.cpp
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <turbine/turbine.hpp>
|
|
||||||
#include <studio/studio.hpp>
|
|
||||||
|
|
||||||
namespace nostalgia::scene {
|
|
||||||
|
|
||||||
class StudioModule: public studio::Module {
|
|
||||||
public:
|
|
||||||
ox::Vector<studio::EditorMaker> editors(turbine::Context *ctx) noexcept override;
|
|
||||||
ox::Vector<ox::UPtr<studio::ItemMaker>> itemMakers(turbine::Context*) noexcept override;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -3,11 +3,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sceneeditor-imgui.hpp"
|
#include "sceneeditor-imgui.hpp"
|
||||||
#include "module.hpp"
|
#include "studiomodule.hpp"
|
||||||
|
|
||||||
namespace nostalgia::scene {
|
namespace nostalgia::scene {
|
||||||
|
|
||||||
ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) noexcept {
|
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> StudioModule::editors(turbine::Context *ctx) const noexcept {
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
{"nscn"},
|
{"nscn"},
|
||||||
@ -18,9 +24,14 @@ ox::Vector<studio::EditorMaker> StudioModule::editors(turbine::Context *ctx) noe
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Vector<ox::UPtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context*) noexcept {
|
ox::Vector<ox::UPtr<studio::ItemMaker>> StudioModule::itemMakers(turbine::Context*) const noexcept {
|
||||||
ox::Vector<ox::UPtr<studio::ItemMaker>> out;
|
ox::Vector<ox::UPtr<studio::ItemMaker>> out;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static StudioModule mod;
|
||||||
|
const studio::Module *studioModule() noexcept {
|
||||||
|
return &mod;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
14
src/nostalgia/scene/studio/studiomodule.hpp
Normal file
14
src/nostalgia/scene/studio/studiomodule.hpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <turbine/turbine.hpp>
|
||||||
|
#include <studio/studio.hpp>
|
||||||
|
|
||||||
|
namespace nostalgia::scene {
|
||||||
|
|
||||||
|
const studio::Module *studioModule() noexcept;
|
||||||
|
|
||||||
|
}
|
@ -7,9 +7,8 @@ add_executable(
|
|||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
nostalgia-studio
|
nostalgia-studio
|
||||||
NostalgiaAppModules
|
NostalgiaStudioModules
|
||||||
NostalgiaCore-Studio
|
NostalgiaKeelModules
|
||||||
NostalgiaScene-Studio
|
|
||||||
StudioAppLib
|
StudioAppLib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,27 +2,13 @@
|
|||||||
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
* Copyright 2016 - 2023 Gary Talent (gary@drinkingtea.net). All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ox/std/memory.hpp>
|
#include <nostalgia/appmodules/keelmodules.hpp>
|
||||||
|
#include <nostalgia/appmodules/studiomodules.hpp>
|
||||||
#include <nostalgia/appmodules/appmodules.hpp>
|
|
||||||
#include <nostalgia/core/studio/module.hpp>
|
|
||||||
#include <nostalgia/scene/studio/module.hpp>
|
|
||||||
|
|
||||||
#include <studioapp/studioapp.hpp>
|
#include <studioapp/studioapp.hpp>
|
||||||
|
|
||||||
using namespace nostalgia;
|
|
||||||
|
|
||||||
[[maybe_unused]] // GCC warns about the existence of this "unused" inline list in a header file...
|
|
||||||
ox::Vector<std::function<ox::UPtr<studio::Module>()>> BuiltinModules = {
|
|
||||||
[]() -> ox::UPtr<studio::Module> {
|
|
||||||
return ox::UPtr<studio::Module>(new core::StudioModule());
|
|
||||||
},
|
|
||||||
[]() -> ox::UPtr<studio::Module> {
|
|
||||||
return ox::UPtr<studio::Module>(new scene::StudioModule());
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(int argc, const char **argv) {
|
int main(int argc, const char **argv) {
|
||||||
nostalgia::loadModules();
|
nostalgia::registerKeelModules();
|
||||||
|
nostalgia::registerStudioModules();
|
||||||
return studio::main("Nostalgia Studio", ".nostalgia", argc, argv);
|
return studio::main("Nostalgia Studio", ".nostalgia", argc, argv);
|
||||||
}
|
}
|
@ -5,7 +5,7 @@ target_link_libraries(
|
|||||||
OxClArgs
|
OxClArgs
|
||||||
OxLogConn
|
OxLogConn
|
||||||
Keel
|
Keel
|
||||||
NostalgiaAppModules
|
NostalgiaKeelModules
|
||||||
)
|
)
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND NOT WIN32)
|
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND NOT WIN32)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <keel/keel.hpp>
|
#include <keel/keel.hpp>
|
||||||
|
|
||||||
#include <nostalgia/appmodules/appmodules.hpp>
|
#include <nostalgia/appmodules/keelmodules.hpp>
|
||||||
|
|
||||||
using namespace nostalgia;
|
using namespace nostalgia;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ static ox::Error generateTypes(ox::TypeStore *ts) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ox::Error run(const ox::ClArgs &args) noexcept {
|
static ox::Error run(const ox::ClArgs &args) noexcept {
|
||||||
loadModules();
|
registerKeelModules();
|
||||||
const auto argSrc = args.getString("src", "");
|
const auto argSrc = args.getString("src", "");
|
||||||
const auto argRomBin = args.getString("rom-bin", "");
|
const auto argRomBin = args.getString("rom-bin", "");
|
||||||
if (argSrc == "") {
|
if (argSrc == "") {
|
||||||
|
@ -6,12 +6,16 @@
|
|||||||
|
|
||||||
#include <ox/std/string.hpp>
|
#include <ox/std/string.hpp>
|
||||||
|
|
||||||
|
#include <studio/module.hpp>
|
||||||
|
|
||||||
namespace studio {
|
namespace studio {
|
||||||
|
|
||||||
|
void registerModule(const studio::Module*) noexcept;
|
||||||
|
|
||||||
int main(
|
int main(
|
||||||
const char *appName,
|
const char *appName,
|
||||||
ox::String projectDataDir,
|
ox::String projectDataDir,
|
||||||
[[maybe_unused]] int argc,
|
int argc,
|
||||||
[[maybe_unused]] const char **argv);
|
const char **argv);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
||||||
|
|
||||||
add_library(
|
add_library(
|
||||||
StudioAppLib
|
StudioAppLib
|
||||||
aboutpopup.cpp
|
aboutpopup.cpp
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
#include <keel/media.hpp>
|
#include <keel/media.hpp>
|
||||||
#include <turbine/turbine.hpp>
|
#include <turbine/turbine.hpp>
|
||||||
|
|
||||||
#include <nostalgia/appmodules/appmodules.hpp>
|
|
||||||
|
|
||||||
#include <studio/context.hpp>
|
#include <studio/context.hpp>
|
||||||
#include "studioapp.hpp"
|
#include "studioapp.hpp"
|
||||||
|
|
||||||
@ -65,8 +63,8 @@ namespace studio {
|
|||||||
int main(
|
int main(
|
||||||
const char *appName,
|
const char *appName,
|
||||||
ox::String projectDataDir,
|
ox::String projectDataDir,
|
||||||
[[maybe_unused]] int argc,
|
int,
|
||||||
[[maybe_unused]] const char **argv) {
|
const char **) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
ox::LoggerConn loggerConn;
|
ox::LoggerConn loggerConn;
|
||||||
const auto loggerErr = loggerConn.initConn(appName);
|
const auto loggerErr = loggerConn.initConn(appName);
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
#include "filedialogmanager.hpp"
|
#include "filedialogmanager.hpp"
|
||||||
#include "studioapp.hpp"
|
#include "studioapp.hpp"
|
||||||
|
|
||||||
|
ox::Vector<const studio::Module*> modules;
|
||||||
|
|
||||||
struct StudioConfig {
|
struct StudioConfig {
|
||||||
static constexpr auto TypeName = "net.drinkingtea.studio.StudioConfig";
|
static constexpr auto TypeName = "net.drinkingtea.studio.StudioConfig";
|
||||||
static constexpr auto TypeVersion = 1;
|
static constexpr auto TypeVersion = 1;
|
||||||
@ -246,7 +248,7 @@ void StudioUI::loadEditorMaker(const studio::EditorMaker &editorMaker) noexcept
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StudioUI::loadModule(studio::Module *mod) noexcept {
|
void StudioUI::loadModule(const studio::Module *mod) noexcept {
|
||||||
for (const auto &editorMaker : mod->editors(m_ctx)) {
|
for (const auto &editorMaker : mod->editors(m_ctx)) {
|
||||||
loadEditorMaker(editorMaker);
|
loadEditorMaker(editorMaker);
|
||||||
}
|
}
|
||||||
@ -256,9 +258,8 @@ void StudioUI::loadModule(studio::Module *mod) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StudioUI::loadModules() noexcept {
|
void StudioUI::loadModules() noexcept {
|
||||||
for (auto &moduleMaker : BuiltinModules) {
|
for (auto &mod : modules) {
|
||||||
const auto mod = moduleMaker();
|
loadModule(mod);
|
||||||
loadModule(mod.get());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,3 +370,11 @@ ox::Error StudioUI::closeFile(const ox::String &path) noexcept {
|
|||||||
});
|
});
|
||||||
return OxError(0);
|
return OxError(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace studio {
|
||||||
|
|
||||||
|
void registerModule(const studio::Module *mod) noexcept {
|
||||||
|
modules.emplace_back(mod);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -65,7 +65,7 @@ class StudioUI: public ox::SignalHandler {
|
|||||||
|
|
||||||
void loadEditorMaker(const studio::EditorMaker &editorMaker) noexcept;
|
void loadEditorMaker(const studio::EditorMaker &editorMaker) noexcept;
|
||||||
|
|
||||||
void loadModule(studio::Module *mod) noexcept;
|
void loadModule(const studio::Module *mod) noexcept;
|
||||||
|
|
||||||
void loadModules() noexcept;
|
void loadModules() noexcept;
|
||||||
|
|
||||||
|
@ -25,9 +25,9 @@ class Module {
|
|||||||
public:
|
public:
|
||||||
virtual ~Module() noexcept = default;
|
virtual ~Module() noexcept = default;
|
||||||
|
|
||||||
virtual ox::Vector<EditorMaker> editors(turbine::Context *ctx);
|
virtual ox::Vector<EditorMaker> editors(turbine::Context *ctx) const;
|
||||||
|
|
||||||
virtual ox::Vector<ox::UniquePtr<ItemMaker>> itemMakers(turbine::Context*);
|
virtual ox::Vector<ox::UniquePtr<ItemMaker>> itemMakers(turbine::Context*) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
namespace studio {
|
namespace studio {
|
||||||
|
|
||||||
ox::Vector<EditorMaker> Module::editors(turbine::Context*) {
|
ox::Vector<EditorMaker> Module::editors(turbine::Context*) const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Vector<ox::UniquePtr<ItemMaker>> Module::itemMakers(turbine::Context*) {
|
ox::Vector<ox::UniquePtr<ItemMaker>> Module::itemMakers(turbine::Context*) const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user