diff --git a/src/GUI/Frame.h b/src/GUI/Frame.h
index a2acb8e..e502fea 100644
--- a/src/GUI/Frame.h
+++ b/src/GUI/Frame.h
@@ -32,12 +32,14 @@ public:
, Rectangle()
, m_Name("UIParent")
, m_Layer(0)
+ , m_Hidden(false)
{ }
// Create a frame as a child
Frame(Frame* parent, std::string name)
: m_Name(name)
, m_Layer(0)
+ , m_Hidden(false)
{ SetParent(std::shared_ptr(parent)); }
::RenderQueue RenderQueue;
@@ -74,6 +76,9 @@ public:
std::string Name() const { return m_Name; }
void SetName(std::string val) { m_Name = val; }
int Layer() const { return m_Layer; }
+ bool Hidden() const { return m_Hidden; }
+ void Hide() { m_Hidden = true; }
+ void Show() { m_Hidden = false; }
int Left() const override
{
@@ -105,6 +110,9 @@ public:
void UpdateLayered(double dt)
{
+ if (this->Hidden())
+ return;
+
// Update ourselves
this->Update(dt);
@@ -115,6 +123,8 @@ public:
for (auto &pairChild : children)
{
auto child = pairChild.second;
+ if (child->Hidden())
+ continue;
child->Update(dt);
}
}
@@ -123,6 +133,9 @@ public:
void DrawLayered(std::shared_ptr renderer)
{
+ if (this->Hidden())
+ return;
+
// Draw ourselves
renderer->SetViewport(AbsoluteRectangle());
this->Draw(renderer);
@@ -134,6 +147,8 @@ public:
for (auto &pairChild : children)
{
auto child = pairChild.second;
+ if (child->Hidden())
+ continue;
Rectangle rect = child->AbsoluteRectangle();
renderer->SetViewport(rect);
child->Draw(renderer);
@@ -149,7 +164,8 @@ protected:
std::string m_Name;
int m_Layer;
-
+ bool m_Hidden;
+
std::shared_ptr m_Parent;
typedef std::multimap> Children_t; // name -> frame
std::map m_Children; // layer -> Children_t
diff --git a/src/GUI/GameFrame.h b/src/GUI/GameFrame.h
index 8286997..078a687 100644
--- a/src/GUI/GameFrame.h
+++ b/src/GUI/GameFrame.h
@@ -18,32 +18,48 @@ public:
GameFrame(Frame* parent, std::string name)
: Frame(parent, name)
{
+ EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &GameFrame::OnCommand);
+
m_World = std::make_shared(EventBroker, ResourceManager);
auto worldFrame = new WorldFrame(this, "GameWorldFrame", m_World);
{
vp1 = new Viewport(worldFrame, "Viewport1", m_World);
vp1->X = 0;
vp1->Width = 640;
- vp1->Height = 720 / 2;
new PlayerHUD(vp1, "PlayerHUD", m_World, 1);
vp2 = new Viewport(worldFrame, "Viewport2", m_World);
vp2->X = vp1->Right();
vp2->Width = 640;
- vp2->Height = 720 / 2;
new PlayerHUD(vp2, "PlayerHUD", m_World, 2);
- auto vpc = new Viewport(worldFrame, "ViewportFreeCam", m_World);
- vpc->Y = 720 / 2;
- vpc->Height = 720 / 2;
+ m_FreeCamViewport = new Viewport(worldFrame, "ViewportFreeCam", m_World);
+ m_FreeCamViewport->Show();
}
m_World->Initialize();
}
private:
+ EventRelay m_EInputCommand;
+
std::shared_ptr m_World;
Viewport* vp1;
Viewport* vp2;
+ Viewport* m_FreeCamViewport;
+
+ bool OnCommand(const Events::InputCommand &event)
+ {
+ if (event.Command == "cam_vertical" || event.Command == "cam_horizontal" || event.Command == "cam_normal" || event.Command == "cam_lock")
+ {
+ m_FreeCamViewport->Show();
+ }
+ else
+ {
+ m_FreeCamViewport->Hide();
+ }
+
+ return true;
+ }
};
}