From a86574128d97fe1a526db91981d14a79cfc29143 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 18 Oct 2022 22:35:47 -0700 Subject: [PATCH] Begin the documentation --- src/dawn/display/RenderManager.hpp | 19 ++++++++++++-- src/dawn/display/mesh/TriangleMesh.hpp | 5 ++++ src/dawn/game/DawnGame.hpp | 29 ++++++++++++++++++++++ src/dawn/scene/Scene.cpp | 4 --- src/dawn/scene/Scene.hpp | 27 ++++++++++++++++++-- src/dawn/scene/SceneItem.hpp | 34 +++++++++++++++++++++++++- 6 files changed, 109 insertions(+), 9 deletions(-) diff --git a/src/dawn/display/RenderManager.hpp b/src/dawn/display/RenderManager.hpp index 14bf82e0..1a9a85dc 100644 --- a/src/dawn/display/RenderManager.hpp +++ b/src/dawn/display/RenderManager.hpp @@ -12,12 +12,27 @@ namespace Dawn { class RenderManager { public: std::weak_ptr game; - - RenderManager(std::weak_ptr); + /** + * Construct a new RenderManager for a game instance. + * + * @param game Game instance this render manager belongs to. + */ + RenderManager(std::weak_ptr game); + + /** + * Initialize this render manager. + */ void init(); + + /** + * Perform a synchronous frame update on the render manager. + */ void update(); + /** + * Destroy a previously initialized RenderManager. + */ ~RenderManager(); }; } \ No newline at end of file diff --git a/src/dawn/display/mesh/TriangleMesh.hpp b/src/dawn/display/mesh/TriangleMesh.hpp index 6b15c5a6..dc94703c 100644 --- a/src/dawn/display/mesh/TriangleMesh.hpp +++ b/src/dawn/display/mesh/TriangleMesh.hpp @@ -9,6 +9,11 @@ namespace Dawn { class TriangleMesh { public: + /** + * Initializes a mesh to hold a single triangle. + * + * @param mesh Mesh to initialize as a triangle. + */ static void createTriangleMesh(std::shared_ptr mesh); }; } \ No newline at end of file diff --git a/src/dawn/game/DawnGame.hpp b/src/dawn/game/DawnGame.hpp index 7dea6f34..e19145a6 100644 --- a/src/dawn/game/DawnGame.hpp +++ b/src/dawn/game/DawnGame.hpp @@ -25,11 +25,40 @@ namespace Dawn { public: RenderManager renderManager; + /** + * Construct a new instance of the DawnGame. + * + * @param host Weak pointer to the host that is running this game. + */ DawnGame(std::weak_ptr host); + /** + * Initialize the game. This is performed by the host at a time that is + * deemed to have the host ready for the game's initialization. This will + * return an initialize result, where DAWN_GAME_INIT_RESULT_SUCCESS is + * the only "successful" result, anything else is deemed a failure state. + * + * @return The game initialize result. + */ int32_t init(); + + /** + * Performs a game update operation. This operation should occur exactly + * once per frame, synchronously on the main thread. Updates can only + * have two valid exit results, either DAWN_GAME_UPDATE_RESULT_SUCCESS for + * a successful update, and request that we continue to update, or + * DAWN_GAME_UPDATE_RESULT_EXIT for a successful update but to request + * that no more update operations occur. Any other result is considered a + * failure state. + * + * @param delta Time delta to tick the game by. + * @return The game update result. + */ int32_t update(float_t delta); + /** + * Cleanup the memory of the DawnGame instance. + */ ~DawnGame(); }; } \ No newline at end of file diff --git a/src/dawn/scene/Scene.cpp b/src/dawn/scene/Scene.cpp index 5d0d998d..3ceaeaf4 100644 --- a/src/dawn/scene/Scene.cpp +++ b/src/dawn/scene/Scene.cpp @@ -35,10 +35,6 @@ std::shared_ptr Scene::createSceneItem() { return item; } -void Scene::removeSceneItem(SceneItem *item) { - -} - Scene::~Scene() { } \ No newline at end of file diff --git a/src/dawn/scene/Scene.hpp b/src/dawn/scene/Scene.hpp index 1ee5dfec..44a05344 100644 --- a/src/dawn/scene/Scene.hpp +++ b/src/dawn/scene/Scene.hpp @@ -20,14 +20,34 @@ namespace Dawn { public: std::weak_ptr game; + /** + * Construct a new Scene instance. + * + * @param game Weak pointer to the game that this scene belongs to. + */ Scene(std::weak_ptr game); + /** + * Perform a one frame synchronous tick on the current scene. This may + * change in future to be more event-like. + */ void update(); + /** + * Create a Scene Item object and add to the current scene. + * + * @return A shared pointer to the created SceneItem. + */ std::shared_ptr createSceneItem(); - - void removeSceneItem(SceneItem *item); + /** + * Finds an existing component on the scene (Root Level Only) that has a + * component matching the given component type. Returns nullptr if no item + * with the specified component could be found. + * + * @tparam Component type to look for. + * @return Pointer to the found component (and by extension the item). + */ template std::shared_ptr findComponent() { auto it = this->items.begin(); @@ -39,6 +59,9 @@ namespace Dawn { return nullptr; } + /** + * Destroys a previously initialized Scene. + */ ~Scene(); }; } \ No newline at end of file diff --git a/src/dawn/scene/SceneItem.hpp b/src/dawn/scene/SceneItem.hpp index 2df0fb2d..199eb56e 100644 --- a/src/dawn/scene/SceneItem.hpp +++ b/src/dawn/scene/SceneItem.hpp @@ -21,10 +21,31 @@ namespace Dawn { std::weak_ptr scene; sceneitemid_t id; + /** + * Constructor for a SceneItem. Scene Items should only be called and + * initialized by the scene itself. + * + * @param scene Weak pointer to the Scene that this SceneItem belongs to. + * @param id Scene Item ID that the Scene assigned this SceneItem. + */ SceneItem(std::weak_ptr scene, sceneitemid_t id); - + + /** + * Called by the Scene the frame after we were constructed so we can begin + * existing. + */ void init(); + /** + * Adds a component to this scene item. Components will only have their + * init methods invoked on the first frame we enter the scene. If you add + * a component to this item after this time you will either need to try + * manually invoking its' init method, or ensure the component is aware of + * the entire SceneItem lifecycle and listen for added callbacks. + * + * @tparam T Type of component being added to this scene item. + * @return A shared pointer to the newly added component. + */ template std::shared_ptr addComponent() { auto component = std::make_shared(weak_from_this()); @@ -32,6 +53,14 @@ namespace Dawn { return component; } + /** + * Returns a component attached to this SceneItem. This method will return + * either a shared pointer to the component, or nullptr if the item does + * not have the queried component. + * + * @tparam T Type of component to be fetched. + * @return A shared pointer to the component, or nullptr if not found. + */ template std::shared_ptr getComponent() { auto it = this->components.begin(); @@ -43,6 +72,9 @@ namespace Dawn { return nullptr; } + /** + * Destroy this SceneItem. + */ ~SceneItem(); }; } \ No newline at end of file