From d13984dddc31f7bca8baf54e3b37c215d867a528 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Thu, 5 Jan 2023 17:19:32 -0800 Subject: [PATCH] Prefab Progress --- src/dawn/prefab/Prefab.hpp | 17 ++++++++++---- src/dawn/prefab/SceneItemPrefab.hpp | 10 ++++++++ src/dawn/prefab/UIPrefab.hpp | 23 +++++++++++++++++++ src/dawn/prefabs/display/SimpleCubePrefab.hpp | 4 ---- 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 src/dawn/prefab/UIPrefab.hpp diff --git a/src/dawn/prefab/Prefab.hpp b/src/dawn/prefab/Prefab.hpp index f7471150..8373b99a 100644 --- a/src/dawn/prefab/Prefab.hpp +++ b/src/dawn/prefab/Prefab.hpp @@ -11,14 +11,23 @@ namespace Dawn { template class Prefab { public: + /** + * Returns the list of assets required for this prefab. + * + * @return List of required assets this prefab. + */ static std::vector getRequiredAssets() { return T::prefabAssets(); } - static T * create(Scene *scene) { - T *item = scene->createSceneItemOfType(); - item->prefabInit(); - return item; + /** + * Creates a new instance of this asset. + * + * @param scene Scene this item belongs to. + * @return The instance of the created prefab. + */ + static T * create(Scene *scene, UICanvas *canvas) { + return T::prefabCreate(scene, canvas); } }; } \ No newline at end of file diff --git a/src/dawn/prefab/SceneItemPrefab.hpp b/src/dawn/prefab/SceneItemPrefab.hpp index b419ed15..377f9adb 100644 --- a/src/dawn/prefab/SceneItemPrefab.hpp +++ b/src/dawn/prefab/SceneItemPrefab.hpp @@ -16,12 +16,22 @@ namespace Dawn { protected: public: + static T * prefabCreate(Scene *scene, UICanvas *canvas) { + T *item = scene->createSceneItemOfType(); + item->prefabInit(); + return item; + } + SceneItemPrefab(Scene *scene, sceneitemid_t id) : SceneItem(scene, id) { } + /** + * Virtual method called by the subclass for initialization after the + * prefab has been created. + */ virtual void prefabInit() = 0; }; } \ No newline at end of file diff --git a/src/dawn/prefab/UIPrefab.hpp b/src/dawn/prefab/UIPrefab.hpp new file mode 100644 index 00000000..7bd81351 --- /dev/null +++ b/src/dawn/prefab/UIPrefab.hpp @@ -0,0 +1,23 @@ +// Copyright (c) 2023 Dominic Masters +// +// This software is released under the MIT License. +// https://opensource.org/licenses/MIT + +#pragma once +#include "Prefab.hpp" + +namespace Dawn { + template + class UIPrefab : + public Prefab + { + public: + static T * prefabCreate(Scene *scene) { + + } + + static void apply(T *item) { + + } + }; +} \ No newline at end of file diff --git a/src/dawn/prefabs/display/SimpleCubePrefab.hpp b/src/dawn/prefabs/display/SimpleCubePrefab.hpp index 8401c74f..6d4207cc 100644 --- a/src/dawn/prefabs/display/SimpleCubePrefab.hpp +++ b/src/dawn/prefabs/display/SimpleCubePrefab.hpp @@ -33,10 +33,6 @@ namespace Dawn { 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; } };