diff --git a/src/Engine.h b/src/Engine.h index 02fb93c..91fed1c 100755 --- a/src/Engine.h +++ b/src/Engine.h @@ -2,6 +2,7 @@ #include #include "EventBroker.h" +#include "GUI/Frame.h" #include "Renderer.h" #include "GameWorld.h" @@ -15,6 +16,8 @@ public: m_Renderer = std::make_shared(); m_Renderer->Initialize(); + m_UIParent = std::make_shared(0, 0, m_Renderer->Width(), m_Renderer->Height()); + m_World = std::make_shared(m_EventBroker, m_Renderer); m_World->Initialize(); @@ -38,6 +41,7 @@ public: private: std::shared_ptr m_EventBroker; std::shared_ptr m_Renderer; + std::shared_ptr m_UIParent; // TODO: This should ultimately live in GameFrame std::shared_ptr m_World; diff --git a/src/GUI/Frame.h b/src/GUI/Frame.h index f77d29f..19f534a 100644 --- a/src/GUI/Frame.h +++ b/src/GUI/Frame.h @@ -4,6 +4,7 @@ #include #include "Util/Rectangle.h" +#include "EventBroker.h" namespace GUI { @@ -19,13 +20,28 @@ public: Bottom }; - Frame() { } - - Frame(const Frame &parent) - : Rectangle(static_cast(parent)) - , Parent(std::shared_ptr(&parent)) { } + // Set up a base frame with an event broker + Frame(std::shared_ptr<::EventBroker> eventBroker) + : EventBroker(eventBroker) + , Rectangle() + { Initialize(); } + // Create a frame as a child + Frame(std::shared_ptr parent) + : Rectangle(static_cast(*parent)) // Clone parent rectangle using copy constructor + { SetParent(parent); Initialize(); } - std::shared_ptr Parent; + virtual void Initialize() { } + std::shared_ptr Parent() const { return m_Parent; } + void SetParent(std::shared_ptr parent) + { + m_Parent = parent; + EventBroker = parent->EventBroker; + } + virtual void Update(double dt) { } + +protected: + std::shared_ptr<::EventBroker> EventBroker; + std::shared_ptr m_Parent; }; }