diff --git a/include/Engine/GUI/Button.h b/include/Engine/GUI/Button.h
deleted file mode 100644
index 80845cb7..00000000
--- a/include/Engine/GUI/Button.h
+++ /dev/null
@@ -1,165 +0,0 @@
-#ifndef GUI_BUTTON_H__
-#define GUI_BUTTON_H__
-
-#include "GUI/TextureFrame.h"
-#include "GUI/EButtonEnter.h"
-#include "GUI/EButtonLeave.h"
-#include "GUI/EButtonPress.h"
-#include "GUI/EButtonRelease.h"
-#include "Core/EMouseMove.h"
-#include "Core/EMousePress.h"
-#include "Core/EMouseRelease.h"
-
-namespace dd
-{
-namespace GUI
-{
-
-class Button : public TextureFrame
-{
-public:
- Button(Frame* parent, std::string name)
- : TextureFrame(parent, name)
- {
- EVENT_SUBSCRIBE_MEMBER(m_EMouseMove, &Button::OnMouseMove);
- EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &Button::OnMousePress);
- EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &Button::OnMouseRelease);
- }
-
- void SetTextureHover(std::string resourceName)
- {
- m_TextureHover = resourceName;
- }
- void SetTextureReleased(std::string resourceName)
- {
- m_TextureReleased = resourceName;
- SetTexture(resourceName);
- }
- void SetTexturePressed(std::string resourceName)
- {
- m_TexturePressed = resourceName;
- }
-
- void Draw(RenderScene& rq) override
- {
- if (m_Texture == nullptr && !m_TextureReleased.empty()) {
- SetTexture(m_TextureReleased);
- }
-
- TextureFrame::Draw(rq);
- }
-
- virtual void OnEnter() { }
- virtual void OnLeave() { }
- virtual void OnPress() { }
- virtual void OnRelease() { }
-
-protected:
- bool m_MouseIsOver = false;
- bool m_IsDown = false;
-
- virtual bool OnMouseMove(const Events::MouseMove& event)
- {
- if (Hidden()) {
- return false;
- }
-
- bool isOver = Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1));
- if (isOver && !m_MouseIsOver) { // Enter
- if (!m_IsDown) {
- if (!m_TextureHover.empty()) {
- SetTexture(m_TextureHover);
- }
- }
- OnEnter();
- Events::ButtonEnter e;
- e.FrameName = m_Name;
- EventBroker->Publish(e);
- Events::PlaySound soundEvent;
- soundEvent.FilePath = "Sounds/GUI/hover-n.wav";
- EventBroker->Publish(soundEvent);
-
- } else if (!isOver && m_MouseIsOver) { // Leave
- if (!m_IsDown) {
- if (!m_TextureReleased.empty()) {
- SetTexture(m_TextureReleased);
- }
- }
- OnLeave();
- Events::ButtonLeave e;
- e.FrameName = m_Name;
- EventBroker->Publish(e);
- }
- m_MouseIsOver = isOver;
-
- return true;
- }
- virtual bool OnMousePress(const Events::MousePress& event)
- {
- if (Hidden()) {
- //LOG_DEBUG("Pressed hidden button");
- return false;
- }
-
- if (!Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1))) {
- return false;
- }
-
- if (!m_TexturePressed.empty()) {
- SetTexture(m_TexturePressed);
- }
-
- m_IsDown = true;
- OnPress();
- Events::ButtonPress e;
- e.FrameName = m_Name;
- e.Button = this;
- EventBroker->Publish(e);
-
- return true;
- }
- virtual bool OnMouseRelease(const Events::MouseRelease& event)
- {
- if (Hidden()) {
- //LOG_DEBUG("Released hidden button");
- return false;
- }
-
- bool isOver = Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1));
- if (!isOver && !m_IsDown) {
- return false;
- }
-
- if (m_MouseIsOver) {
- if (!m_TextureHover.empty()) {
- SetTexture(m_TextureHover);
- }
- } else {
- if (!m_TextureReleased.empty()) {
- SetTexture(m_TextureReleased);
- }
- }
-
- m_IsDown = false;
- OnRelease();
- Events::ButtonRelease e;
- e.FrameName = m_Name;
- e.Button = this;
- EventBroker->Publish(e);
-
- return true;
- }
-
-private:
- EventRelay m_EMouseMove;
- EventRelay m_EMousePress;
- EventRelay m_EMouseRelease;
-
- std::string m_TextureHover;
- std::string m_TexturePressed;
- std::string m_TextureReleased;
-};
-
-}
-}
-#endif
diff --git a/include/Engine/GUI/ButtonSystem.h b/include/Engine/GUI/ButtonSystem.h
new file mode 100644
index 00000000..7dfe6b48
--- /dev/null
+++ b/include/Engine/GUI/ButtonSystem.h
@@ -0,0 +1,44 @@
+#ifndef ButtonSystem_h__
+#define ButtonSystem_h__
+
+#include "../Rendering/IRenderer.h"
+#include "../Core/ConfigFile.h"
+#include "../Rendering/PickingPass.h"
+#include "../Core/ResourceManager.h"
+#include "../Core/System.h"
+#include "../Core/Event.h"
+#include "../Core/EMousePress.h"
+#include "../Core/EMouseRelease.h"
+#include "../Core/ELockMouse.h"
+
+#include "EButtonPressed.h"
+#include "EButtonReleased.h"
+#include "EButtonClicked.h"
+
+
+class ButtonSystem : public PureSystem
+{
+public:
+ ButtonSystem(SystemParams params, IRenderer* renderer);
+ virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
+private:
+ IRenderer* m_Renderer;
+ bool m_MouseIsLocked = false;
+
+ EntityWrapper m_PickEntity = EntityWrapper::Invalid;
+ PickData m_PickData;
+
+ EventRelay m_EMouseLock;
+ bool OnMouseLock(const Events::LockMouse& e);
+ EventRelay m_EMouseUnlock;
+ bool OnMouseUnlock(const Events::UnlockMouse& e);
+
+ EventRelay m_EMousePress;
+ bool OnMousePress(const Events::MousePress& e);
+ EventRelay m_EMouseRelease;
+ bool OnMouseRelease(const Events::MouseRelease& e);
+};
+
+
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonClicked.h b/include/Engine/GUI/EButtonClicked.h
new file mode 100644
index 00000000..f34d6b3d
--- /dev/null
+++ b/include/Engine/GUI/EButtonClicked.h
@@ -0,0 +1,15 @@
+#ifndef Events_ButtonClicked_h__
+#define Events_ButtonClicked_h__
+
+#include "Core/Event.h"
+
+namespace Events
+{
+
+struct ButtonClicked : public Event {
+ std::string EntityName = "DEFAULT STRING USED";
+};
+
+}
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonEnter.h b/include/Engine/GUI/EButtonEnter.h
deleted file mode 100644
index 13a78383..00000000
--- a/include/Engine/GUI/EButtonEnter.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef Events_ButtonEnter_h__
-#define Events_ButtonEnter_h__
-
-#include "../Core/EventBroker.h"
-
-namespace Events
-{
-
-/** Thrown on GUI button hover. */
-struct ButtonEnter : Event
-{
- std::string FrameName;
-};
-
-}
-
-#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonLeave.h b/include/Engine/GUI/EButtonLeave.h
deleted file mode 100644
index 789e5aec..00000000
--- a/include/Engine/GUI/EButtonLeave.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef Events_ButtonLeave_h__
-#define Events_ButtonLeave_h__
-
-#include "../Core/EventBroker.h"
-
-namespace Events
-{
-
-/** Thrown on GUI button hover. */
-struct ButtonLeave : Event
-{
- std::string FrameName;
-};
-
-}
-
-#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonPress.h b/include/Engine/GUI/EButtonPress.h
deleted file mode 100644
index 6f925b2b..00000000
--- a/include/Engine/GUI/EButtonPress.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef Events_ButtonPress_h__
-#define Events_ButtonPress_h__
-
-#include "../Core/EventBroker.h"
-
-namespace GUI { class Button; }
-
-namespace Events
-{
-
-/** Thrown on GUI button press. */
-struct ButtonPress : Event
-{
- std::string FrameName;
- GUI::Button* Button;
-};
-
-}
-
-#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonPressed.h b/include/Engine/GUI/EButtonPressed.h
new file mode 100644
index 00000000..04d50978
--- /dev/null
+++ b/include/Engine/GUI/EButtonPressed.h
@@ -0,0 +1,15 @@
+#ifndef Events_ButtonPressed_h__
+#define Events_ButtonPressed_h__
+
+#include "Core/Event.h"
+
+namespace Events
+{
+
+struct ButtonPressed : public Event {
+ std::string EntityName = "DEFAULT STRING USED";
+};
+
+}
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonRelease.h b/include/Engine/GUI/EButtonRelease.h
deleted file mode 100644
index d13a8ad6..00000000
--- a/include/Engine/GUI/EButtonRelease.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef Events_ButtonRelease_h__
-#define Events_ButtonRelease_h__
-
-#include "../Core/EventBroker.h"
-
-namespace GUI { class Button; }
-
-namespace Events
-{
-
-/** Thrown on GUI button release. */
-struct ButtonRelease : Event
-{
- std::string FrameName;
- GUI::Button* Button;
-};
-
-}
-
-#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/EButtonReleased.h b/include/Engine/GUI/EButtonReleased.h
new file mode 100644
index 00000000..14736ca0
--- /dev/null
+++ b/include/Engine/GUI/EButtonReleased.h
@@ -0,0 +1,13 @@
+#ifndef Events_ButtonReleased_h__
+#define Events_ButtonReleased_h__
+
+#include "Core/Event.h"
+
+namespace Events
+{
+
+struct ButtonReleased : public Event { };
+
+}
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/Frame.h b/include/Engine/GUI/Frame.h
deleted file mode 100644
index 4c5f2eb9..00000000
--- a/include/Engine/GUI/Frame.h
+++ /dev/null
@@ -1,261 +0,0 @@
-#ifndef GUI_Frame_h__
-#define GUI_Frame_h__
-
-#include "../Common.h"
-#include "../Core/Util/Rectangle.h"
-#include "../Core/EventBroker.h"
-#include "../Core/EKeyDown.h"
-#include "../Core/EKeyUp.h"
-#include "../Core/ResourceManager.h"
-#include "../Rendering/RenderQueue.h"
-#include "../Rendering/Texture.h"
-#include "../Input/EInputCommand.h"
-
-namespace GUI
-{
-
-class Frame : public Rectangle
-{
-public:
- enum class Anchor
- {
- Left,
- Right,
- Top,
- Bottom
- };
-
- static const int BaseWidth = 1280;
- static const int BaseHeight = 720;
-
- // Set up a base frame with an event broker
- Frame(EventBroker* eventBroker)
- : m_EventBroker(eventBroker)
- , BaseFrame(this)
- , m_Name("UIParent")
- , Rectangle() { }
-
- // Create a frame as a child
- Frame(Frame* parent, std::string name)
- : m_Name(name)
- {
- SetParent(parent);
- Width = parent->Width;
- Height = parent->Height;
- EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &Frame::OnKeyDown);
- EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &Frame::OnKeyUp);
- EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Frame::OnCommand);
- }
-
- ~Frame()
- {
- /*for (auto layer : m_Children)
- {
- for (auto child : layer.second)
- {
- delete child.second;
- }
- }
-
- if (m_Parent)
- {
- m_Parent->RemoveChild(this);
- }*/
- }
-
- Frame* Parent() const { return m_Parent; }
-
- void SetParent(Frame* parent)
- {
- if (parent == nullptr) {
- LOG_ERROR("Failed to parent frame \"%s\": Invalid parent", m_Name.c_str());
- return;
- }
-
- m_Layer = parent->Layer() + 1;
- parent->AddChild(this);
- m_Parent = parent;
- m_EventBroker = parent->m_EventBroker;
- BaseFrame = parent->BaseFrame;
- }
-
- void AddChild(Frame* child)
- {
- m_Children[child->m_Layer].insert(std::make_pair(child->Name(), child));
- if (m_Parent) {
- m_Parent->AddChild(child);
- }
- }
-
- void RemoveChild(Frame* child)
- {
- auto it = m_Children.find(child->m_Layer);
- if (it != m_Children.end()) {
- m_Children.erase(it);
- }
-
- if (m_Parent) {
- m_Parent->RemoveChild(child);
- }
- }
-
- std::string Name() const { return m_Name; }
- void SetName(std::string val) { m_Name = val; }
-
- int Layer() const { return m_Layer; }
-
- bool Hidden() const
- {
- if (m_Parent)
- return m_Parent->Hidden() || m_Hidden;
- else
- return m_Hidden;
- }
- bool Visible() const
- {
- return !Hidden();
- }
-
- virtual void Hide() { m_Hidden = true; }
- virtual void Show() { m_Hidden = false; }
-
- int Left() const override
- {
- if (m_Parent)
- return m_Parent->Left() + X;
- else
- return X;
- }
- void SetLeft(int absLeft) override
- {
- if (m_Parent) {
- X = absLeft - m_Parent->Left();
- } else {
- X = absLeft;
- }
- }
- int Right() const override
- {
- return Left() + Width;
- }
- void SetRight(int absRight) override
- {
- if (m_Parent) {
- X = absRight - Width - m_Parent->Left();
- } else {
- X = absRight - Width;
- }
- }
- int Top() const override
- {
- if (m_Parent)
- return m_Parent->Top() + Y;
- else
- return Y;
- }
- void SetTop(int absTop) override
- {
- if (m_Parent) {
- Y = absTop - m_Parent->Top();
- } else {
- Y = absTop;
- }
- }
- int Bottom() const override
- {
- return Top() + Height;
- }
- void SetBottom(int absBottom) override
- {
- if (m_Parent) {
- Y = absBottom - Height - m_Parent->Top();
- } else {
- Y = absBottom - Height;
- }
- }
-
- glm::vec2 Scale()
- {
- if (m_Parent)
- return m_Parent->Scale();
- else
- return glm::vec2(Width, Height) / glm::vec2(BaseWidth, BaseHeight);
- }
-
- Rectangle AbsoluteRectangle()
- {
- int left = Left();
- if (m_Parent)
- left = std::max(left, m_Parent->Left());
- int top = Top();
- if (m_Parent)
- top = std::max(top, m_Parent->Top());
- int width = Right() - left;
- int height = Bottom() - top;
- return Rectangle(left, top, width, height);
- }
-
- void UpdateLayered(double dt)
- {
- // Update ourselves
- this->Update(dt);
-
- // Update children
- for (auto& pairLayer : m_Children) {
- auto children = pairLayer.second;
- for (auto& pairChild : children) {
- auto child = pairChild.second;
- child->Update(dt);
- }
- }
- }
-
- virtual void Update(double dt) { }
-
- void DrawLayered(RenderScene& rq)
- {
- if (this->Hidden())
- return;
-
- // Draw ourselves
- this->Draw(rq);
-
- // Draw children
- for (auto& pairLayer : m_Children) {
- auto children = pairLayer.second;
- for (auto& pairChild : children) {
- auto child = pairChild.second;
- if (child->Hidden())
- continue;
- child->Draw(rq);
- }
- }
- }
-
- virtual void Draw(RenderScene& rq) { }
-
-protected:
- ::EventBroker* m_EventBroker;
- Frame* BaseFrame = nullptr;
-
- std::string m_Name = "Unnamed";
- int m_Layer = 0;
- bool m_Hidden = false;
-
- Frame* m_Parent = nullptr;
- typedef std::multimap Children_t; // name -> frame
- std::map m_Children; // layer -> Children_t
-
- virtual bool OnKeyDown(const Events::KeyDown& event) { return false; }
- virtual bool OnKeyUp(const Events::KeyUp& event) { return false; }
- virtual bool OnCommand(const Events::InputCommand& event) { return false; }
-
-private:
- EventRelay m_EKeyDown;
- EventRelay m_EKeyUp;
- EventRelay m_EInputCommand;
-};
-
-}
-
-#endif
diff --git a/include/Engine/GUI/MainMenuSystem.h b/include/Engine/GUI/MainMenuSystem.h
new file mode 100644
index 00000000..45400d1d
--- /dev/null
+++ b/include/Engine/GUI/MainMenuSystem.h
@@ -0,0 +1,32 @@
+#ifndef MainMenuSystem_h__
+#define MainMenuSystem_h__
+
+#include "../Core/System.h"
+#include "../Rendering/IRenderer.h"
+#include "../Core/ResourceManager.h"
+#include "../Core/Event.h"
+
+#include "EButtonClicked.h"
+#include "EButtonPressed.h"
+#include "EButtonReleased.h"
+
+
+class MainMenuSystem : public ImpureSystem
+{
+public:
+ MainMenuSystem(SystemParams params, IRenderer* renderer);
+ virtual void Update(double dt) override;
+
+private:
+ IRenderer* m_Renderer;
+
+ EventRelay m_EClicked;
+ bool OnButtonClick(const Events::ButtonClicked& e);
+ EventRelay m_EReleased;
+ bool OnButtonRelease(const Events::ButtonReleased& e);
+ EventRelay m_EPressed;
+ bool OnButtonPress(const Events::ButtonPressed& e);
+
+};
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/GUI/TextureFrame.h b/include/Engine/GUI/TextureFrame.h
deleted file mode 100644
index 77967b4d..00000000
--- a/include/Engine/GUI/TextureFrame.h
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef GUI_TextureFrame_h__
-#define GUI_TextureFrame_h__
-
-#include "Frame.h"
-#include "../Rendering/Texture.h"
-#include "../Rendering/Util/CommonFunctions.h"
-
-namespace GUI
-{
-
-class TextureFrame : public Frame
-{
-public:
- TextureFrame(Frame* parent, std::string name)
- : Frame(parent, name) { }
-
- void EnableScissor() { m_ScissorEnabled = true; }
- void DisableScissor() { m_ScissorEnabled = false; }
-
- void Draw(RenderScene& rq) override
- {
- if (m_Texture == nullptr)
- return;
-
- // Texture while fading
- if (m_FadeTexture && m_CurrentFade < 1) {
- FrameJob job;
- job.Scissor = (m_ScissorEnabled) ? m_Parent->AbsoluteRectangle() : Rectangle();
- job.Viewport = Rectangle(Left(), Top(), Width, Height);
- job.TextureID = m_FadeTexture->ResourceID;
- job.DiffuseTexture = m_FadeTexture;
- job.Color = glm::vec4(m_Color.r, m_Color.g, m_Color.b, m_Color.a);
- job.Name = Name();
- rq.GUI.Add(job);
- }
-
- // Main texture
- {
- FrameJob job;
- job.Scissor = (m_ScissorEnabled) ? m_Parent->AbsoluteRectangle() : Rectangle();
- job.Viewport = Rectangle(Left(), Top(), Width, Height);
- job.TextureID = m_Texture->ResourceID;
- job.DiffuseTexture = m_Texture;
- job.Color = glm::vec4(m_Color.r, m_Color.g, m_Color.b, m_Color.a * m_CurrentFade);
- job.Name = Name();
- rq.GUI.Add(job);
- }
- }
-
- std::string Texture() const { return m_TextureName; }
-
- void SetTexture(std::string resourceName)
- {
- if (resourceName.empty()) {
- m_Texture = nullptr;
- return;
- }
-
- m_Texture = CommonFunctions::LoadTexture(resourceName, false);
- m_TextureName = resourceName;
- if (m_Texture == nullptr) {
- m_Texture = CommonFunctions::LoadTexture("Textures/Core/ErrorTexture.png", false);
- }
-
- SizeToTexture();
- }
-
- void SizeToTexture()
- {
- if (m_Texture != nullptr) {
- this->Width = m_Texture->Width;
- this->Height = m_Texture->Height;
- }
- }
-
- void FadeToTexture(std::string resourceName, double duration)
- {
- m_FadeTexture = m_Texture;
- SetTexture(resourceName);
- m_FadeDuration = duration;
- m_CurrentFade = 0.f;
- }
-
- void Update(double dt) override
- {
- if (m_CurrentFade < 1) {
- m_CurrentFade += dt / m_FadeDuration;
- if (m_CurrentFade > 1) {
- m_FadeTexture = nullptr;
- m_CurrentFade = 1;
- m_FadeDuration = 0;
- }
- }
- }
-
- glm::vec4 Color() const { return m_Color; }
- void SetColor(glm::vec4 val) { m_Color = val; }
-
-protected:
- bool m_ScissorEnabled = true;
- Texture* m_Texture = nullptr;
- std::string m_TextureName;
- Texture* m_FadeTexture = nullptr;
- glm::vec4 m_Color = glm::vec4(1.f, 1.f, 1.f, 1.f);
- float m_FadeDuration = 0.f;
- float m_CurrentFade = 1.f;
-
-};
-
-}
-
-#endif
diff --git a/include/Game/Game.h b/include/Game/Game.h
index baf15656..d13efec0 100644
--- a/include/Game/Game.h
+++ b/include/Game/Game.h
@@ -8,7 +8,6 @@
#include "Core/EventBroker.h"
#include "Rendering/Renderer.h"
#include "Core/InputManager.h"
-#include "GUI/Frame.h"
#include "Core/World.h"
#include "Input/InputProxy.h"
#include "Input/KeyboardInputHandler.h"
@@ -53,7 +52,6 @@ private:
IRenderer* m_Renderer;
InputManager* m_InputManager;
InputProxy* m_InputProxy;
- GUI::Frame* m_FrameStack;
World* m_World;
Octree* m_OctreeCollision;
Octree* m_OctreeTrigger;
diff --git a/include/Game/Systems/HealthSystem.h b/include/Game/Systems/HealthSystem.h
index 56f2f838..962e3737 100644
--- a/include/Game/Systems/HealthSystem.h
+++ b/include/Game/Systems/HealthSystem.h
@@ -27,17 +27,16 @@ public:
private:
bool m_NetworkEnabled;
- //methods which will take care of specific events
+ // methods which will take care of specific events
EventRelay m_EPlayerDamage;
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e);
EventRelay m_EPlayerHealthPickup;
bool HealthSystem::OnPlayerHealthPickup(Events::PlayerHealthPickup& e);
EventRelay m_InputCommand;
bool HealthSystem::OnInputCommand(Events::InputCommand& e);
-
+
//vector which will keep track of health changes
std::vector> m_DeltaHealthVector;
-
};
#endif
\ No newline at end of file
diff --git a/resources/Schema/Components/Button.xsd b/resources/Schema/Components/Button.xsd
index 07f2eafc..7d97fef1 100644
--- a/resources/Schema/Components/Button.xsd
+++ b/resources/Schema/Components/Button.xsd
@@ -1,6 +1,7 @@
+
Makes sprites klickable.
diff --git a/resources/Schema/Entities/QualityAssurance.xml b/resources/Schema/Entities/QualityAssurance.xml
index 30fb915b..6bd8a25a 100644
--- a/resources/Schema/Entities/QualityAssurance.xml
+++ b/resources/Schema/Entities/QualityAssurance.xml
@@ -40,7 +40,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -180,7 +180,7 @@
-
+
@@ -225,7 +225,7 @@
-
+
@@ -289,7 +289,7 @@
-
+
@@ -321,7 +321,7 @@
-
+
@@ -671,7 +671,7 @@
-
+
@@ -718,7 +718,7 @@
-
+
@@ -778,7 +778,7 @@
-
+
@@ -825,7 +825,7 @@
-
+
@@ -871,7 +871,7 @@
-
+
@@ -918,7 +918,7 @@
-
+
@@ -965,7 +965,7 @@
-
+
@@ -1379,7 +1379,7 @@
-
+
@@ -1388,7 +1388,7 @@
true
- 2.5166344949826396
+ 2.5333333077342104
3.7999999523162842
true
@@ -1435,7 +1435,7 @@
-
+
@@ -1444,7 +1444,7 @@
- 0.35000808291962926
+ 0.70455028055985736
Models/Characters/Assault/AssaultTPose.mesh
@@ -1487,7 +1487,7 @@
-
+
@@ -1498,7 +1498,7 @@
true
- 0.35000808291962926
+ 0.70455028055985736
true
@@ -1543,7 +1543,7 @@
-
+
@@ -1553,7 +1553,7 @@
true
- 9.4833086749886775
+ 9.1832418997049956
10
3
@@ -1601,7 +1601,7 @@
-
+
@@ -1611,7 +1611,7 @@
true
- 4.0667207575903603
+ 1.007708532606415
true
5
true
@@ -1792,7 +1792,7 @@
true
- 2.5166344949826396
+ 2.5333333077342104
3.7999999523162842
true
@@ -2185,7 +2185,7 @@
-
+
@@ -2213,7 +2213,7 @@
-
+
@@ -2241,7 +2241,7 @@
-
+
@@ -2269,7 +2269,7 @@
-
+
@@ -2297,7 +2297,7 @@
-
+
@@ -2349,7 +2349,7 @@
-
+
@@ -2377,7 +2377,7 @@
-
+
@@ -2405,7 +2405,7 @@
-
+
diff --git a/src/Engine/GUI/ButtonSystem.cpp b/src/Engine/GUI/ButtonSystem.cpp
new file mode 100644
index 00000000..dbdc0e18
--- /dev/null
+++ b/src/Engine/GUI/ButtonSystem.cpp
@@ -0,0 +1,78 @@
+#include "GUI/ButtonSystem.h"
+
+ButtonSystem::ButtonSystem(SystemParams params, IRenderer* renderer)
+ : System(params)
+ , PureSystem("Button")
+ , m_Renderer(renderer)
+{
+ EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &ButtonSystem::OnMousePress);
+ EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &ButtonSystem::OnMouseRelease);
+ EVENT_SUBSCRIBE_MEMBER(m_EMouseLock, &ButtonSystem::OnMouseLock);
+ EVENT_SUBSCRIBE_MEMBER(m_EMouseUnlock, &ButtonSystem::OnMouseUnlock);
+}
+
+
+bool ButtonSystem::OnMouseLock(const Events::LockMouse& e)
+{
+ m_MouseIsLocked = true;
+ return true;
+}
+
+
+bool ButtonSystem::OnMouseUnlock(const Events::UnlockMouse& e)
+{
+ m_MouseIsLocked = false;
+ return true;
+}
+
+
+bool ButtonSystem::OnMousePress(const Events::MousePress& e)
+{
+ if (e.Button == GLFW_MOUSE_BUTTON_1 && !m_MouseIsLocked) {
+ m_PickData = m_Renderer->Pick(glm::vec2(e.X, e.Y));
+ if (m_PickData.Entity != EntityID_Invalid && m_PickData.World == m_World) {
+ if(m_World->HasComponent(m_PickData.Entity, "Button")) {
+ //Entity is a button, save it and send pressed event.
+
+ m_PickEntity = EntityWrapper(m_World, m_PickData.Entity);
+
+ //You have clicked on a button entity, send pressed event.
+ Events::ButtonPressed ePressed;
+ ePressed.EntityName = m_PickEntity.Name();
+ m_EventBroker->Publish(ePressed);
+ }
+ }
+ }
+ return true;
+}
+
+bool ButtonSystem::OnMouseRelease(const Events::MouseRelease& e)
+{
+ if(!m_MouseIsLocked) {
+ //Mouse is not locked, send release event.
+ Events::ButtonReleased eReleased;
+ m_EventBroker->Publish(eReleased);
+ m_PickData = m_Renderer->Pick(glm::vec2(e.X, e.Y));
+ if(m_PickData.Entity != EntityID_Invalid && m_PickData.World == m_World) {
+ if(m_World->HasComponent(m_PickData.Entity, "Button")) {
+ EntityWrapper ent = EntityWrapper(m_World, m_PickData.Entity);
+ if (ent == m_PickEntity) {
+ //The entity you released the mouse button on is the same as you pressed it on. "Clicked"
+ Events::ButtonClicked eClicked;
+ eClicked.EntityName = m_PickEntity.Name();
+ m_EventBroker->Publish(eClicked);
+ }
+ }
+ }
+ }
+ return true;
+}
+
+void ButtonSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt)
+{
+
+}
+
+
+
+
\ No newline at end of file
diff --git a/src/Engine/GUI/MainMenuSystem.cpp b/src/Engine/GUI/MainMenuSystem.cpp
new file mode 100644
index 00000000..3d6b6ced
--- /dev/null
+++ b/src/Engine/GUI/MainMenuSystem.cpp
@@ -0,0 +1,37 @@
+#include "GUI/MainMenuSystem.h"
+
+MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer)
+ : System(params)
+ , ImpureSystem()
+ , m_Renderer(renderer)
+{
+ EVENT_SUBSCRIBE_MEMBER(m_EPressed, &MainMenuSystem::OnButtonPress);
+ EVENT_SUBSCRIBE_MEMBER(m_EReleased, &MainMenuSystem::OnButtonRelease);
+ EVENT_SUBSCRIBE_MEMBER(m_EClicked, &MainMenuSystem::OnButtonClick);
+}
+
+void MainMenuSystem::Update(double dt)
+{
+
+}
+
+bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e)
+{
+ printf("\nClicked: %s", e.EntityName);
+ return true;
+}
+
+bool MainMenuSystem::OnButtonRelease(const Events::ButtonReleased& e)
+{
+ printf("\nReleased");
+
+ return true;
+}
+
+bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e)
+{
+ printf("\nPressed: %s", e.EntityName);
+
+ return true;
+}
+
diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp
index 49b1a963..45044937 100644
--- a/src/Game/Game.cpp
+++ b/src/Game/Game.cpp
@@ -26,6 +26,8 @@
#include "Network/MultiplayerSnapshotFilter.h"
#include "Game/Systems/AmmunitionHUDSystem.h"
#include "Game/Systems/KillFeedSystem.h"
+#include "GUI/ButtonSystem.h"
+#include "GUI/MainMenuSystem.h"
Game::Game(int argc, char* argv[])
@@ -72,11 +74,6 @@ Game::Game(int argc, char* argv[])
m_InputProxy->AddHandler();
m_InputProxy->LoadBindings("Input.ini");
- // Create the root level GUI frame
- m_FrameStack = new GUI::Frame(m_EventBroker);
- m_FrameStack->Width = m_Renderer->Resolution().Width;
- m_FrameStack->Height = m_Renderer->Resolution().Height;
-
// Create a world
m_World = new World(m_EventBroker);
std::string mapToLoad = m_Config->Get("Debug.LoadMap", "");
@@ -132,6 +129,8 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel);
m_SystemPipeline->AddSystem(updateOrderLevel);
+ m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer);
+ m_SystemPipeline->AddSystem(updateOrderLevel, m_Renderer);
// Populate Octree with collidables
++updateOrderLevel;
m_SystemPipeline->AddSystem(updateOrderLevel, m_OctreeCollision, "Collidable");
@@ -168,7 +167,6 @@ Game::~Game()
delete m_NetworkServer;
}
delete m_World;
- delete m_FrameStack;
delete m_InputProxy;
delete m_InputManager;
delete m_RenderFrame;