From 659ab3d7606a22c061e7aaaf15b6a4edb387244c Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 3 Jan 2023 16:44:16 -0800 Subject: [PATCH] Added basic prefabs finally --- cmake/targets/CMakeLists.txt | 4 +- .../CMakeLists.txt | 8 ++ src/dawn/CMakeLists.txt | 1 + src/dawn/prefab/CMakeLists.txt | 10 +++ src/dawn/prefab/Prefab.hpp | 24 ++++++ src/dawn/prefab/SceneItemPrefab.hpp | 27 +++++++ src/dawn/prefabs/display/SimpleCubePrefab.hpp | 43 +++++++++++ src/dawn/scene/Prefab.hpp | 74 ------------------- src/dawn/scene/Scene.cpp | 6 +- src/dawn/scene/Scene.hpp | 14 ++++ src/dawn/ui/CMakeLists.txt | 2 +- src/dawn/visualnovel/CMakeLists.txt | 1 + src/dawn/visualnovel/scene/CMakeLists.txt | 10 +++ src/dawn/visualnovel/scene/SimpleVNScene.cpp | 9 +-- src/dawn/visualnovel/scene/SimpleVNScene.hpp | 3 +- src/dawnbarrygame/scenes/TestScene.hpp | 2 +- src/dawnglfw/CMakeLists.txt | 3 +- .../time/CMakeLists.txt | 0 .../time/TimeManager.cpp | 0 .../time/TimeManager.hpp | 0 src/dawnpokergame/CMakeLists.txt | 3 +- src/dawnpokergame/game/DawnGame.cpp | 3 +- src/dawnpokergame/scenes/CMakeLists.txt | 1 - src/dawnpokergame/scenes/PokerVNScene.cpp | 8 +- src/dawnpokergame/scenes/PokerVNScene.hpp | 2 +- .../scenes/PrefabTestingScene.hpp | 32 ++++++++ src/dawnpokergame/scenes/Scene_1_1.hpp | 6 +- src/dawnpokergame/ui/PokerPlayerDisplay.hpp | 2 +- src/dawnwin32/CMakeLists.txt | 3 +- 29 files changed, 193 insertions(+), 108 deletions(-) create mode 100644 cmake/targets/target-barrygame-linux64-glfw/CMakeLists.txt create mode 100644 src/dawn/prefab/CMakeLists.txt create mode 100644 src/dawn/prefab/Prefab.hpp create mode 100644 src/dawn/prefab/SceneItemPrefab.hpp create mode 100644 src/dawn/prefabs/display/SimpleCubePrefab.hpp delete mode 100644 src/dawn/scene/Prefab.hpp create mode 100644 src/dawn/visualnovel/scene/CMakeLists.txt rename src/{dawnwin32 => dawnglfw}/time/CMakeLists.txt (100%) rename src/{dawnwin32 => dawnglfw}/time/TimeManager.cpp (100%) rename src/{dawnwin32 => dawnglfw}/time/TimeManager.hpp (100%) create mode 100644 src/dawnpokergame/scenes/PrefabTestingScene.hpp diff --git a/cmake/targets/CMakeLists.txt b/cmake/targets/CMakeLists.txt index 4431d038..3210e1a8 100644 --- a/cmake/targets/CMakeLists.txt +++ b/cmake/targets/CMakeLists.txt @@ -6,9 +6,9 @@ # Check for build target, or default if(NOT DEFINED DAWN_BUILD_TARGET) if(WIN32) - set(DAWN_BUILD_TARGET "target-barrygame-win32-glfw") + set(DAWN_BUILD_TARGET "target-pokergame-win32-glfw") elseif(UNIX AND NOT APPLE) - set(DAWN_BUILD_TARGET "target-barrygame-linux64-glfw") + set(DAWN_BUILD_TARGET "target-pokergame-linux64-glfw") endif() endif() diff --git a/cmake/targets/target-barrygame-linux64-glfw/CMakeLists.txt b/cmake/targets/target-barrygame-linux64-glfw/CMakeLists.txt new file mode 100644 index 00000000..b3b54649 --- /dev/null +++ b/cmake/targets/target-barrygame-linux64-glfw/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright (c) 2022 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +set(DAWN_BUILDING dawnbarrygame CACHE INTERNAL ${DAWN_CACHE_TARGET}) +set(DAWN_TARGET_LINUX64 true CACHE INTERNAL ${DAWN_CACHE_TARGET}) +set(DAWN_TARGET_GLFW true CACHE INTERNAL ${DAWN_CACHE_TARGET}) \ No newline at end of file diff --git a/src/dawn/CMakeLists.txt b/src/dawn/CMakeLists.txt index 3446c2a2..0ecdd3a0 100644 --- a/src/dawn/CMakeLists.txt +++ b/src/dawn/CMakeLists.txt @@ -23,6 +23,7 @@ add_subdirectory(display) add_subdirectory(input) add_subdirectory(locale) add_subdirectory(poker) +add_subdirectory(prefab) add_subdirectory(save) add_subdirectory(scene) add_subdirectory(time) diff --git a/src/dawn/prefab/CMakeLists.txt b/src/dawn/prefab/CMakeLists.txt new file mode 100644 index 00000000..02635f1f --- /dev/null +++ b/src/dawn/prefab/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Sources +# target_sources(${DAWN_TARGET_NAME} +# PRIVATE +# Prefab.cpp +# ) \ No newline at end of file diff --git a/src/dawn/prefab/Prefab.hpp b/src/dawn/prefab/Prefab.hpp new file mode 100644 index 00000000..f7471150 --- /dev/null +++ b/src/dawn/prefab/Prefab.hpp @@ -0,0 +1,24 @@ +// Copyright (c) 2022 Dominic Masters +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +#pragma once +#include "asset/AssetManager.hpp" +#include "scene/Scene.hpp" + +namespace Dawn { + template + class Prefab { + public: + static std::vector getRequiredAssets() { + return T::prefabAssets(); + } + + static T * create(Scene *scene) { + T *item = scene->createSceneItemOfType(); + item->prefabInit(); + return item; + } + }; +} \ No newline at end of file diff --git a/src/dawn/prefab/SceneItemPrefab.hpp b/src/dawn/prefab/SceneItemPrefab.hpp new file mode 100644 index 00000000..b419ed15 --- /dev/null +++ b/src/dawn/prefab/SceneItemPrefab.hpp @@ -0,0 +1,27 @@ +// Copyright (c) 2022 Dominic Masters +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +#pragma once +#include "Prefab.hpp" +#include "scene/SceneItem.hpp" + +namespace Dawn { + template + class SceneItemPrefab : + public SceneItem, + public Prefab + { + protected: + + public: + SceneItemPrefab(Scene *scene, sceneitemid_t id) : + SceneItem(scene, id) + { + + } + + virtual void prefabInit() = 0; + }; +} \ No newline at end of file diff --git a/src/dawn/prefabs/display/SimpleCubePrefab.hpp b/src/dawn/prefabs/display/SimpleCubePrefab.hpp new file mode 100644 index 00000000..8401c74f --- /dev/null +++ b/src/dawn/prefabs/display/SimpleCubePrefab.hpp @@ -0,0 +1,43 @@ +// Copyright (c) 2022 Dominic Masters +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +#pragma once +#include "prefab/SceneItemPrefab.hpp" +#include "scene/components/Components.hpp" +#include "display/mesh/CubeMesh.hpp" + +namespace Dawn { + class SimpleCubePrefab : public SceneItemPrefab { + public: + MeshRenderer *renderer = nullptr; + MeshHost *host = nullptr; + Material *material = nullptr; + + static std::vector prefabAssets() { + return std::vector(); + } + + SimpleCubePrefab(Scene *scene, sceneitemid_t id) : + SceneItemPrefab(scene, id) + { + + } + + void prefabInit() override { + this->renderer = this->addComponent(); + this->host = this->addComponent(); + this->material = this->addComponent(); + + this->host->mesh.createBuffers(CUBE_VERTICE_COUNT, CUBE_INDICE_COUNT); + CubeMesh::buffer(&this->host->mesh, glm::vec3(-0.5f, -0.5f, -0.5f), glm::vec3(1, 1, 1), 0, 0); + + // auto param = material->getShader()->getParameterByName("u_Text"); + // this->material->textureValues[param] = nullptr; + this->material->colorValues[material->getShader()->getParameterByName("u_Color")] = COLOR_RED; + + std::cout << "Preab Init" << std::endl; + } + }; +} \ No newline at end of file diff --git a/src/dawn/scene/Prefab.hpp b/src/dawn/scene/Prefab.hpp deleted file mode 100644 index 74b8f238..00000000 --- a/src/dawn/scene/Prefab.hpp +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2022 Dominic Masters -// -// This software is released under the MIT License. -// https://opensource.org/licenses/MIT - -#pragma once -#include "SceneItem.hpp" -#include "SceneItemComponent.hpp" -#include "scene/components/Components.hpp" -#include "util/array.hpp" - -namespace Dawn { - class Prefab { - protected: - virtual std::vector prefabAssets(AssetManager *man) = 0; - virtual SceneItem * prefabItem(Scene *scene) = 0; - - public: - /** - * Returns a list of assets that this prefab requires to be loaded for the - * instanciation to work. - * - * @param man Asset Manager to retreive the assets from. - * @return List of required assets, includes sibling/child assets. - */ - template - static std::vector getAssets(AssetManager *man) { - return T::prefabAssets(man); - } - - /** - * Create a scene item from this prefab. - * - * @param scene Scene to add the item to. - * @return The created scene item for this prefab. - */ - template - static SceneItem * create(Scene *scene) { - return T::prefabItem(scene); - } - }; - - class UIPrefab : public Prefab { - protected: - /** @deprecated */ - SceneItem * prefabItem(Scene *scene) override { - assertUnreachable(); - } - - virtual void prefabUIApply(T *existing) = 0; - - public: - /** - * Applies a UI Prefab styling to an existing UI Element. - * - * @param existing Existing item to apply styling to. - */ - static virtual void uiApply(T *existing) { - V::prefabUIApply(existing); - } - - /** - * Creates a UI Item from this prefab. - * - * @param canvas Canvas to create this item on to. - * @return Pointer to the created UI Item. - */ - static virtual T * uiCreate(UICanvas *canvas) { - auto item = canvas->addElement(); - V::uiApply(item); - return item; - } - } -} \ No newline at end of file diff --git a/src/dawn/scene/Scene.cpp b/src/dawn/scene/Scene.cpp index cce1fd30..2d818763 100644 --- a/src/dawn/scene/Scene.cpp +++ b/src/dawn/scene/Scene.cpp @@ -33,11 +33,7 @@ void Scene::update() { } SceneItem * Scene::createSceneItem() { - sceneitemid_t id = this->nextId++; - auto item = new SceneItem(this, id); - assertNotNull(item); - this->itemsNotInitialized[id] = item; - return item; + return this->createSceneItemOfType(); } Scene::~Scene() { diff --git a/src/dawn/scene/Scene.hpp b/src/dawn/scene/Scene.hpp index 271da62a..cbd63022 100644 --- a/src/dawn/scene/Scene.hpp +++ b/src/dawn/scene/Scene.hpp @@ -35,6 +35,20 @@ namespace Dawn { */ void update(); + /** + * Create a Scene Item object and add to the current scene. + * + * @return A shared pointer to the created SceneItem. + */ + template + T * createSceneItemOfType() { + sceneitemid_t id = this->nextId++; + auto item = new T(this, id); + assertNotNull(item); + this->itemsNotInitialized[id] = item; + return item; + } + /** * Create a Scene Item object and add to the current scene. * diff --git a/src/dawn/ui/CMakeLists.txt b/src/dawn/ui/CMakeLists.txt index 3ae4ab2d..017d8056 100644 --- a/src/dawn/ui/CMakeLists.txt +++ b/src/dawn/ui/CMakeLists.txt @@ -11,5 +11,5 @@ target_sources(${DAWN_TARGET_NAME} UILabel.cpp UISprite.cpp UIEmpty.cpp - UIGrid.cpp + # UIGrid.cpp ) \ No newline at end of file diff --git a/src/dawn/visualnovel/CMakeLists.txt b/src/dawn/visualnovel/CMakeLists.txt index 6bbff3d2..556ca785 100644 --- a/src/dawn/visualnovel/CMakeLists.txt +++ b/src/dawn/visualnovel/CMakeLists.txt @@ -12,4 +12,5 @@ target_sources(${DAWN_TARGET_NAME} # Subdirs add_subdirectory(components) add_subdirectory(events) +add_subdirectory(scene) add_subdirectory(ui) \ No newline at end of file diff --git a/src/dawn/visualnovel/scene/CMakeLists.txt b/src/dawn/visualnovel/scene/CMakeLists.txt new file mode 100644 index 00000000..7aa8a484 --- /dev/null +++ b/src/dawn/visualnovel/scene/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Sources +target_sources(${DAWN_TARGET_NAME} + PRIVATE + SimpleVNScene.cpp +) \ No newline at end of file diff --git a/src/dawn/visualnovel/scene/SimpleVNScene.cpp b/src/dawn/visualnovel/scene/SimpleVNScene.cpp index 08dce8bd..68ed2215 100644 --- a/src/dawn/visualnovel/scene/SimpleVNScene.cpp +++ b/src/dawn/visualnovel/scene/SimpleVNScene.cpp @@ -14,7 +14,8 @@ SimpleVNScene::SimpleVNScene(DawnGame *game) : Scene(game) { std::vector SimpleVNScene::getRequiredAssets() { auto assMan = &this->game->assetManager; - return PokerGameTextbox::getAssets(assMan); + // return PokerGameTextbox::getAssets(assMan); + return std::vector(); } void SimpleVNScene::stage() { @@ -29,7 +30,7 @@ void SimpleVNScene::stage() { // UI this->canvas = UICanvas::createCanvas(this); - this->textbox = Prefab::create(this)->getComponent(); + // this->textbox = Prefab::create(this)->getComponent(); this->background = SimpleVisualNovelBackground::create(this); // VN Manager @@ -44,8 +45,4 @@ void SimpleVNScene::stage() { // Begin VN. this->vnManager->setEvent(this->getVNEvent()); -} - -void SimpleVNScene::vnStage() { - } \ No newline at end of file diff --git a/src/dawn/visualnovel/scene/SimpleVNScene.hpp b/src/dawn/visualnovel/scene/SimpleVNScene.hpp index 81faf697..9d69344a 100644 --- a/src/dawn/visualnovel/scene/SimpleVNScene.hpp +++ b/src/dawn/visualnovel/scene/SimpleVNScene.hpp @@ -8,7 +8,6 @@ #include "game/DawnGame.hpp" #include "util/array.hpp" #include "scene/components/Components.hpp" -#include "prefabs/VisualNovelTextboxPrefab.hpp" #include "visualnovel/VisualNovelManager.hpp" #include "visualnovel/events/VisualNovelTextboxEvent.hpp" #include "visualnovel/events/VisualNovelPauseEvent.hpp" @@ -25,7 +24,7 @@ namespace Dawn { VisualNovelFader *vnFader = nullptr; VisualNovelManager *vnManager = nullptr; - virtual void vnStage(); + virtual void vnStage() = 0; virtual IVisualNovelEvent * getVNEvent() = 0; public: diff --git a/src/dawnbarrygame/scenes/TestScene.hpp b/src/dawnbarrygame/scenes/TestScene.hpp index 9535e5bc..5f38b01d 100644 --- a/src/dawnbarrygame/scenes/TestScene.hpp +++ b/src/dawnbarrygame/scenes/TestScene.hpp @@ -28,5 +28,5 @@ namespace Dawn { public: TestScene(DawnGame *game) : SimpleVNScene(game) {} - } + }; } \ No newline at end of file diff --git a/src/dawnglfw/CMakeLists.txt b/src/dawnglfw/CMakeLists.txt index a4474e04..6185b931 100644 --- a/src/dawnglfw/CMakeLists.txt +++ b/src/dawnglfw/CMakeLists.txt @@ -18,4 +18,5 @@ target_include_directories(${DAWN_TARGET_NAME} # Subdirs add_subdirectory(host) -add_subdirectory(input) \ No newline at end of file +add_subdirectory(input) +add_subdirectory(time) \ No newline at end of file diff --git a/src/dawnwin32/time/CMakeLists.txt b/src/dawnglfw/time/CMakeLists.txt similarity index 100% rename from src/dawnwin32/time/CMakeLists.txt rename to src/dawnglfw/time/CMakeLists.txt diff --git a/src/dawnwin32/time/TimeManager.cpp b/src/dawnglfw/time/TimeManager.cpp similarity index 100% rename from src/dawnwin32/time/TimeManager.cpp rename to src/dawnglfw/time/TimeManager.cpp diff --git a/src/dawnwin32/time/TimeManager.hpp b/src/dawnglfw/time/TimeManager.hpp similarity index 100% rename from src/dawnwin32/time/TimeManager.hpp rename to src/dawnglfw/time/TimeManager.hpp diff --git a/src/dawnpokergame/CMakeLists.txt b/src/dawnpokergame/CMakeLists.txt index 4a362245..3b258a40 100644 --- a/src/dawnpokergame/CMakeLists.txt +++ b/src/dawnpokergame/CMakeLists.txt @@ -24,7 +24,8 @@ add_subdirectory(save) add_subdirectory(scenes) # Assets -tool_language(language_en locale/en.csv) +set(DIR_GAME_ASSETS games/pokergame) +tool_language(language_en ${DIR_GAME_ASSETS}/locale/en.csv) tool_texture(texture_test texture_test.png) tool_texture(texture_city_day borrowed/city_day.png) tool_texture(texture_city_night borrowed/city_night.png) diff --git a/src/dawnpokergame/game/DawnGame.cpp b/src/dawnpokergame/game/DawnGame.cpp index 346f2344..f2e17521 100644 --- a/src/dawnpokergame/game/DawnGame.cpp +++ b/src/dawnpokergame/game/DawnGame.cpp @@ -5,6 +5,7 @@ #include "DawnGame.hpp" #include "scenes/Scene_1_1.hpp" +#include "scenes/PrefabTestingScene.hpp" using namespace Dawn; @@ -22,7 +23,7 @@ int32_t DawnGame::init() { this->localeManager.init(); this->renderManager.init(); - this->scene = new Scene_1_1(this); + this->scene = new PrefabTestingScene(this); return DAWN_GAME_INIT_RESULT_SUCCESS; } diff --git a/src/dawnpokergame/scenes/CMakeLists.txt b/src/dawnpokergame/scenes/CMakeLists.txt index 1af2b17d..1928077e 100644 --- a/src/dawnpokergame/scenes/CMakeLists.txt +++ b/src/dawnpokergame/scenes/CMakeLists.txt @@ -6,6 +6,5 @@ # Sources target_sources(${DAWN_TARGET_NAME} PRIVATE - SimpleVNScene.cpp PokerVNScene.cpp ) \ No newline at end of file diff --git a/src/dawnpokergame/scenes/PokerVNScene.cpp b/src/dawnpokergame/scenes/PokerVNScene.cpp index 65219b9e..98269537 100644 --- a/src/dawnpokergame/scenes/PokerVNScene.cpp +++ b/src/dawnpokergame/scenes/PokerVNScene.cpp @@ -13,15 +13,13 @@ PokerVNScene::PokerVNScene(DawnGame *game) : SimpleVNScene(game) { std::vector PokerVNScene::getRequiredAssets() { auto assMan = &this->game->assetManager; - std::vector assets; - vectorAppend(&assets, &SimpleVNScene::getRequiredAssets()); - vectorAppend(&assets, &PokerPlayerDisplay::getAssets(assMan)); + std::vector assets, l; + vectorAppend(&assets, &(l = SimpleVNScene::getRequiredAssets())); + vectorAppend(&assets, &(l = PokerPlayerDisplay::getAssets(assMan))); return assets; } void PokerVNScene::vnStage() { - SimpleVNScene::vnStage(); - auto pokerGameItem = this->createSceneItem(); this->pokerGame = pokerGameItem->addComponent(); diff --git a/src/dawnpokergame/scenes/PokerVNScene.hpp b/src/dawnpokergame/scenes/PokerVNScene.hpp index c414b577..d16ba98e 100644 --- a/src/dawnpokergame/scenes/PokerVNScene.hpp +++ b/src/dawnpokergame/scenes/PokerVNScene.hpp @@ -4,7 +4,7 @@ // https://opensource.org/licenses/MIT #pragma once -#include "SimpleVNScene.hpp" +#include "visualnovel/scene/SimpleVNScene.hpp" #include "poker/PokerGame.hpp" #include "visualnovel/events/PokerBetLoopEvent.hpp" #include "visualnovel/events/PokerInitialEvent.hpp" diff --git a/src/dawnpokergame/scenes/PrefabTestingScene.hpp b/src/dawnpokergame/scenes/PrefabTestingScene.hpp new file mode 100644 index 00000000..690ed1b8 --- /dev/null +++ b/src/dawnpokergame/scenes/PrefabTestingScene.hpp @@ -0,0 +1,32 @@ +// Copyright (c) 2022 Dominic Masters +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +#pragma once +#include "scene/Scene.hpp" +#include "game/DawnGame.hpp" +#include "prefabs/display/SimpleCubePrefab.hpp" + +namespace Dawn { + class PrefabTestingScene : public Scene { + protected: + SimpleCubePrefab *cube = nullptr; + Camera *camera = nullptr; + + public: + PrefabTestingScene(DawnGame *game) : Scene(game) { + + } + + std::vector getRequiredAssets() override { + return std::vector(); + } + + void stage() override { + camera = Camera::create(this); + camera->transform->lookAt(glm::vec3(5, 5, 5), glm::vec3(0, 0, 0)); + cube = SimpleCubePrefab::create(this); + } + }; +} \ No newline at end of file diff --git a/src/dawnpokergame/scenes/Scene_1_1.hpp b/src/dawnpokergame/scenes/Scene_1_1.hpp index f2bc2117..b0d7622c 100644 --- a/src/dawnpokergame/scenes/Scene_1_1.hpp +++ b/src/dawnpokergame/scenes/Scene_1_1.hpp @@ -4,19 +4,17 @@ // https://opensource.org/licenses/MIT #pragma once -#include "SimpleVNScene.hpp" +#include "visualnovel/scene/SimpleVNScene.hpp" namespace Dawn { class Scene_1_1 : public SimpleVNScene { protected: void vnStage() override { - SimpleVNScene::vnStage(); } std::vector getRequiredAssets() override { auto assMan = &this->game->assetManager; - std::vector assets; - vectorAppend(&assets, &SimpleVNScene::getRequiredAssets()); + std::vector assets = SimpleVNScene::getRequiredAssets(); return assets; } diff --git a/src/dawnpokergame/ui/PokerPlayerDisplay.hpp b/src/dawnpokergame/ui/PokerPlayerDisplay.hpp index e98829b5..b68c3bff 100644 --- a/src/dawnpokergame/ui/PokerPlayerDisplay.hpp +++ b/src/dawnpokergame/ui/PokerPlayerDisplay.hpp @@ -34,7 +34,7 @@ namespace Dawn { public: static std::vector getAssets(AssetManager *assMan) { std::vector assets; - vectorAppend(&assets, &PokerGameBorder::getAssets(assMan)); + assets = PokerGameBorder::getAssets(assMan); assets.push_back(assMan->get("truetype_ark")); return assets; } diff --git a/src/dawnwin32/CMakeLists.txt b/src/dawnwin32/CMakeLists.txt index 2b22ec3d..99252d61 100644 --- a/src/dawnwin32/CMakeLists.txt +++ b/src/dawnwin32/CMakeLists.txt @@ -16,5 +16,4 @@ target_compile_definitions(${DAWN_TARGET_NAME} ) # Subdirs -add_subdirectory(host) -add_subdirectory(time) \ No newline at end of file +add_subdirectory(host) \ No newline at end of file