Design

System to Component Dependency Matrix (Ideal)

Component

Systems

.

Graphics

Input

Gamepad

Camera

Action

Audio

Event

Messaging

Persistence

Physics

Renderable

Read

.

.

.

DebugDraw

Read

.

.

.

Camera

Read

.

.

Write

InputMap

.

Write

Write

.

Tempest Engine Structure

stuff

@startuml
set namespaceSeparator ::
!include Structure/Engine/Core-ClassDiagram.iuml
!include Structure/Engine/SystemManagement-ClassDiagram.iuml
!include Structure/Engine/External-ClassDiagram.iuml
!include Structure/Engine/GameObjectFiltering-ClassDiagram.iuml
!include Structure/Engine/SceneManagement-ClassDiagram.iuml
!include Structure/Engine/Input-ClassDiagram.iuml
!include Structure/Engine/Serialization-ClassDiagram.iuml
!include Structure/Engine/Animation-ClassDiagram.iuml
!include Structure/Engine/Communications-ClassDiagram.iuml
!include Structure/Engine/Scripting-ClassDiagram.iuml
!include Structure/Graphics.OpenGL4/Rendering-ClassDiagram.iuml
!include Structure/Graphics.OpenGL4/Camera-ClassDiagram.iuml
!include Structure/Graphics.OpenGL4/UI-ClassDiagram.iuml
!include Structure/Graphics.OpenGL4/Particles-ClassDiagram.iuml
!include Structure/Physics.Bullet/System-ClassDiagram.iuml

class ComponentFactory {
    {static} +GetComponentTypeDetails()
    {static} +GetScriptTypeDetails()
    {static} +SerializeComponents()
    {static} +AddComponentByType()
    {static} +RemoveComponentByType()
}
ComponentFactory --> SceneManagement::GameObject

class PlatformWindowing {
    {static} +GetName()
    +Name()
    +PresentFrame()
    #OnInitialize()
    #OnStartFrame()
    #OnEndFrame()
}
PlatformWindowing --|> SystemManagement::SystemBase
PlatformWindowing o-> External::ExternalWindowInterface : m_window_ptr
PlatformWindowing o-> External::RenderContextInterface : m_render_context_ptr

@enduml

GameObject Management Diagram

@startuml
set namespaceSeparator ::
!include Structure/GameObjectManagement-ClassDiagram.iuml

@enduml

ToyBox Editor Structure

Editor Core

@startuml
set namespaceSeparator ::

namespace Editor::Core {
    class Main {
        +WinMain()
    }
    class ExternalWindowInterfaceAdapter
    class RenderContextInterfaceAdapter
    class InputSourceInterfaceAdapter
    class EditorLogger {
        +Clear()
        +AddLog()
        +Draw()
    }
    class EditorWindow {
        +GetEngineController()
        +GetSceneWindow()
        +Render()
        +GetHierarchyWindow()
        +GetGizmoRenderer()
        +GetSelectionKeeper()
        +GetStyleKeeper()
        +IsRunning()
        +GetEditorState()
        +RequestShutdown()
        +GetIsProjectFolderSet()
        +SetIsProjectFolderSet()
        +GetLogger()
        +GetDarkMode()
        +SetDarkMode()
        +Shutdown()
    }
    class ToolbarRenderer {
        +Render()
    }
    class EditorState
    class HierarchySelectionKeeper {
        +GetSelectionType()
        +GetSelectionID()
        +GetSelectionName()
        +ClearSelection()
        +IsNoneSelected()
        +IsSceneSelected()
        +IsSpaceSelected()
        +IsGameObjectSelected()
        +IsSelected()
        +SetSelected()
    }
    class HierarchyRenderer {
        #onRender()
    }
    class GizmoRenderer {
        +PullData()
        +PushData()
        +RenderInWindow()
        +RenderProperties()
        +GetUsingGizmo()
        +SetDimensions()
        +SetOperation()
        +GetOperation()
        +SetMode()
        +GetMode()
        +GetOperationRef()
        +GetModeRef()
        -OnRender()
    }
    class EngineController {
        +SetEngine()
        +GetEngine()
        +ReleaseEngine()
        +ProcessEvents()
        +Start()
        +Stop()
        +IsPlaying()
    }
    class HierarchyWindow {
        #OnRender()
    }
    class SceneWindow {
        +SetImageSize()
        +SetTextureID()
        #OnRender()
    }
    class DataSelect {
        +Reset()
        +Refresh()
        #OnRender()
    }
    class InspectorWindow {
        #OnRender()
    }
    class NavMeshWindow {
        #OnRender()
    }
    class WindowBase {
    }
    class ToggleButton {
        {static} +NOOP()
        +IsEnabled()
        +Reset()
        +GetWidthRatio()
        +SetWidthRatio()
        +GetOnColor()
        +SetOnColor()
        +GetOffColor()
        +SetOffColor()
        +GetOnColorHighlight()
        +SetOnColorHighlight()
        +GetOffColorHighlight()
        +SetOffColorHighlight()
        +Render()
    }
    class StyleKeeper {
        +GetStyle()
        +GetStyles()
        +SetStyle()
        +ClearStyle()
    }
    class InspectorRenderer {
        +SetFilterOption()
        +SetRemoveHandler()
        +RenderGameObject()
    }
    class RenderableBase {
        +Render()
        +IsRunning()
        +GetLogger()
        #OnRender()
        #GetTopWindow()
        #GetSelectionKeeper()
        #GetStyleKeeper()
        #GetEditorState()
    }
    class ComponentRenderer {
        +Render()
        +OverridesMember()
        +OnRender()
    }
    class ButtonRenderer {
        #OnRender()
    }
    class RigidBodyRenderer {
        #OnRender()
    }
    class RendererRenderer {
        #OnRender()
    }
    class InputRenderer {
        #OnRender()
    }
    class SampleRenderer {
        #OnRender()
    }
    Main *-right-> ExternalWindowInterfaceAdapter
    Main *-right-> RenderContextInterfaceAdapter
    Main *-right-> InputSourceInterfaceAdapter
    Main *-down-> EditorLogger
    Main *-down-> EditorWindow
    ExternalWindowInterfaceAdapter -up-|> External::ExternalWindowInterface
    RenderContextInterfaceAdapter -up-|> External::RenderContextInterface
    InputSourceInterfaceAdapter -up-|> External::InputSourceInterface
    EditorWindow *-> ToolbarRenderer : m_toolbar_renderer
    EditorWindow *-down-> EditorState : m_current_state
    EditorWindow *-down-> HierarchySelectionKeeper : m_hierarchy_selection
    EditorWindow *-down-> GizmoRenderer : m_gizmo_renderer
    EditorWindow *-down-> EngineController : m_engine_controller
    EditorWindow *-down-> StyleKeeper : m_styles
    EditorWindow *-> HierarchyWindow : m_hierarchy_window
    EditorWindow *-> SceneWindow : m_scene_window
    EditorWindow *-> DataSelect : m_data_select
    EditorWindow *-> InspectorWindow : m_inspector_window
    EditorWindow *-> NavMeshWindow : m_nav_mesh_window
    HierarchySelectionKeeper *-> EditorLogger : m_logger
    HierarchyRenderer -up-|> RenderableBase
    GizmoRenderer -up-|> RenderableBase
    EngineController o-> Core::Engine : m_engine
    HierarchyWindow -up-|> WindowBase
    HierarchyWindow *-> HierarchyRenderer : m_renderer
    SceneWindow -up-|> WindowBase
    SceneWindow *-> ToggleButton : m_play_button
    DataSelect -up-|> WindowBase
    InspectorWindow -up-|> WindowBase
    InspectorWindow *-> InspectorRenderer : m_renderer
    NavMeshWindow -up-|> WindowBase
    WindowBase -up-|> RenderableBase
    InspectorRenderer -up-|> RenderableBase
    InspectorRenderer *-down-> "*" ComponentRenderer : m_component_renderers
    RenderableBase o-up-> EditorWindow : m_top_window
    ComponentRenderer -up-|> RenderableBase
    ButtonRenderer -up-|> ComponentRenderer
    RigidBodyRenderer -up-|> ComponentRenderer
    RendererRenderer -up-|> ComponentRenderer
    InputRenderer -up-|> ComponentRenderer
    SampleRenderer -up-|> ComponentRenderer
    AnimatorRenderer -up-|> ComponentRenderer
}
@enduml

Editor Manipulators

@startuml
set namespaceSeparator ::
namespace External::Manipulators {
    interface AssetManipulatorInterface {
        +AssetList()
        +StringFromWide()
    }
    interface BundleManipulatorInterface {
        +EnableBundle()
        +SuspendBundle()
        +DisableBundle()
        +GetAllBundles()
        +GetActiveBundles()
    }
    interface CameraManipulatorInterface {
        +ReadCameraMatrices()
        +EnableEditorCamera()
        +DisableEditorCamera()
        +PanCameraPosition()
        +RotateCmaera2DCoords()
        +TransCameraXZCoords()
    }
    interface EngineMetadataManipulatorInterface {
        +GetComponentTypes()
        +GetComponentType()
        +HasComponentType()
    }
    interface SceneManipulatorInterface {
        +GetSceneIDs()
        +GetSceneName()
        +GetSpaceIDsForScene()
        +GetSpaceName()
        +GetObjectIDsForSpace()
        +GetTopObjectIDsForSpace()
        +GetChildObjectIDsForObject()
        +GetObjectName()
        +GetTypeRT()
        +ApplyTypeRT()
        +AddEmptyScene()
        +AddEmptySpace()
        +AddEmptyGameObject()
        +AddRenderGameObject()
        +AddGameObjectComponent()
        +RemovegameObjectComponent()
        +ReadObjectTransform()
        +WriteObjectTransform()
        +CreateEditorCamera()
        +RemoveEditorCamera()
        +SetButtonNeighbor()
        +RemoveButtonNeighbor()
        +GetObjectID()
        +SetCollisionLayer()
        +RemoveGameObject()
        +AddParentToGameObject()
        +RemoveParent()
        +SetGameObjectName()
        +SetSceneName()
        +SetSpaceName()
        +DeleteSpace()
        +SetButtonMaterial()
        +MoveObjectToSpace()
    }
    interface PersistenceManipulatorInterface {
        +SaveCurrentScene()
        +SaveCurrentSceneAs()
        +Load()
        +New_Scene()
        +QuickStoreTo()
        +QuickRestoreFrom()
    }
}
namespace Core {
    class Engine {
        +GetSceneManipulator()
        +GetBundleManipulator()
        +GetPersistenceManipulator()
        +GetEngineMetadataManipulator()
        +GetCameraManipulator()
        +GetAssetManipulator()
    }
    Engine --> External::Manipulators::SceneManipulatorInterface
    Engine --> External::Manipulators::BundleManipulatorInterface
    Engine --> External::Manipulators::PersistenceManipulatorInterface
    Engine --> External::Manipulators::EngineMetadataManipulatorInterface
    Engine --> External::Manipulators::CameraManipulatorInterface
    Engine --> External::Manipulators::AssetManipulatorInterface
}
@enduml

Module Structure

@startuml
package "Deliverables" {
    [AudioTool]
    [Bootstrap]
    [Editor]
    [UnitTests]
}
[AudioEngine]
[ComponentCore]
[EngineInterfaces]
[Graphics.OpenGL4]
[Logger]
[Physics.Bullet]
[SerializationCore]
[TempestEngine]
[Utility]
package "Third Party" {
    [BulletInternal]
    [CLI]
    [FBX]
    [FreetypeInternal]
    [GLAD]
    [GLEWInternal]
    [GLFW]
    [GLM]
    [gtest]
    [gtest_main]
    [ImGui]
    [ImGui_OpenGL3_GLFW_GLEW]
    [ImGui_Stdlib]
    [ImGuizmo]
    [PortAudio]
    [RapidJSON]
    [STB]
    [XInput]
}
[AudioTool] -down-> [GLAD]
[AudioTool] -down-> [GLFW]
[AudioTool] -down-> [AudioEngine]
[Bootstrap] -down-> [Graphics.OpenGL4]
[Bootstrap] -down-> [TempestEngine]
[Bootstrap] -down-> [GLFW]
[Bootstrap] -down-> [EngineInterfaces]
[Bootstrap] -down-> [CLI]
[Editor] -down-> [TempestEngine]
[Editor] -down-> [ImGui]
[Editor] -down-> [Logger]
[Editor] -down-> [EngineInterfaces]
[Editor] -down-> [ComponentCore]
[Editor] -down-> [SerializationCore]
[Editor] -down-> [ImGuizmo]
[Editor] -down-> [ImGui_Stdlib]
[Editor] -down-> [ImGui_OpenGL3_GLFW_GLEW]
[UnitTests] -down-> [gtest]
[UnitTests] -down-> [gtest_main]
[UnitTests] -down-> [GLM]
[UnitTests] -down-> [TempestEngine]

[AudioEngine] -down-> [PortAudio]
[ComponentCore] -down-> [SerializationCore]
[Graphics.OpenGL4] -down-> [GLEWInternal]
[Graphics.OpenGL4] -down-> [GLFW]
[Graphics.OpenGL4] -down-> [TempestEngine]
[Graphics.OpenGL4] -down-> [EngineInterfaces]
[Physics.Bullet] -down-> [BulletInternal]
[Physics.Bullet] -down-> [TempestEngine]
[Physics.Bullet] -down-> [Logger]
[Physics.Bullet] -down-> [ComponentCore]
[Physics.Bullet] -down-> [SerializationCore]
[TempestEngine] -down-> [GLM]
[TempestEngine] -down-> [RapidJSON]
[TempestEngine] -down-> [STB]
[TempestEngine] -down-> [Graphics.OpenGL4]
[TempestEngine] -down-> [Physics.Bullet]
[TempestEngine] -down-> [AudioEngine]
[TempestEngine] -down-> [GLEWInternal]
[TempestEngine] -down-> [BulletInternal]
[TempestEngine] -down-> [FBX]
[TempestEngine] -down-> [FreetypeInternal]
[TempestEngine] -down-> [GLFW]
[TempestEngine] -down-> [Logger]
[TempestEngine] -down-> [EngineInterfaces]
[TempestEngine] -down-> [SerializationCore]
[TempestEngine] -down-> [ComponentCore]
[SerializationCore] -down-> [Logger]
[SerializationCore] -down-> [Utility]
@enduml

By System Structure

Engine Core

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Core-ClassDiagram.iuml
@enduml

Engine External

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/External-ClassDiagram.iuml
@enduml

Engine SystemManagement

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/SystemManagement-ClassDiagram.iuml
@enduml

Engine SceneManagement

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/SceneManagement-ClassDiagram.iuml
@enduml

Engine GameObjectFiltering

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/GameObjectFiltering-ClassDiagram.iuml
@enduml

Engine Serialization

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Serialization-ClassDiagram.iuml
@enduml

Graphics.OpenGL4 Rendering

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Graphics.OpenGL4/Rendering-ClassDiagram.iuml
@enduml

Graphics.OpenGL4 Camera

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Graphics.OpenGL4/Camera-ClassDiagram.iuml
@enduml

Graphics.OpenGL4 UI

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Graphics.OpenGL4/UI-ClassDiagram.iuml
@enduml

Graphics.OpenGL4 Particles

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Graphics.OpenGL4/Particles-ClassDiagram.iuml
@enduml

Engine Input

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Input-ClassDiagram.iuml
@enduml

Engine Communications

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Communications-ClassDiagram.iuml
@enduml

Engine Animation

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Animation-ClassDiagram.iuml
@enduml

Engine Scripting

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Engine/Scripting-ClassDiagram.iuml
@enduml

Physics Bullet

@startuml
skinparam linetype ortho
set namespaceSeparator ::
!include Structure/Physics.Bullet/System-ClassDiagram.iuml
@enduml