diff --git a/include/Game/CBackground.h b/include/Game/CBackground.h new file mode 100644 index 0000000..a87f10a --- /dev/null +++ b/include/Game/CBackground.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-10-14. +// + +#ifndef DAYDREAM_CBACKGROUND_H +#define DAYDREAM_CBACKGROUND_H + +#include "Core/Component.h" + +namespace dd +{ + +namespace Components +{ + +struct Background : Component +{ + +}; + +} + +} + +#endif //DAYDREAM_CBACKGROUND_H diff --git a/include/Game/CWall.h b/include/Game/CWall.h new file mode 100644 index 0000000..c7187c9 --- /dev/null +++ b/include/Game/CWall.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-10-14. +// + +#ifndef DAYDREAM_CWALL_H +#define DAYDREAM_CWALL_H + +#include "Core/Component.h" + +namespace dd +{ + +namespace Components +{ + +struct Wall : Component +{ + +}; + +} + +} + +#endif //DAYDREAM_CWALL_H diff --git a/include/Game/ERaiseWater.h b/include/Game/ERaiseWater.h new file mode 100644 index 0000000..2697723 --- /dev/null +++ b/include/Game/ERaiseWater.h @@ -0,0 +1,25 @@ +// +// Created by Administrator on 2015-10-14. +// + +#ifndef DAYDREAM_ERAISEWATER_H +#define DAYDREAM_ERAISEWATER_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct RaiseWater : Event +{ + float Amount; +}; + +} + +} + +#endif //DAYDREAM_ERAISEWATER_H diff --git a/include/Game/EResetAll.h b/include/Game/EResetAll.h new file mode 100644 index 0000000..4f6dec7 --- /dev/null +++ b/include/Game/EResetAll.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-10-14. +// + +#ifndef DAYDREAM_ERESETALL_H +#define DAYDREAM_ERESETALL_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct ResetAll : Event +{ + +}; + +} + +} + +#endif //DAYDREAM_ERESETALL_H diff --git a/include/Game/ScreenShakeSystem.h b/include/Game/ScreenShakeSystem.h new file mode 100644 index 0000000..52d3174 --- /dev/null +++ b/include/Game/ScreenShakeSystem.h @@ -0,0 +1,65 @@ +// +// Created by Adniklastrator on 2015-10-14. +// + +#ifndef DAYDREAM_SCREENSHAKESYSTEM_H +#define DAYDREAM_SCREENSHAKESYSTEM_H + + +#include "Core/System.h" +#include "Core/CTransform.h" +#include "Core/CTemplate.h" +#include "Core/EventBroker.h" +#include "Core/World.h" +#include "Game/EPause.h" +#include "Game/EScreenShake.h" +//#include "Core/Camera.h" Camera Component + + +namespace dd +{ + +namespace Systems +{ + +class ScreenShakeSystem : public System +{ +public: + ScreenShakeSystem(World* world, std::shared_ptr eventBroker) + : System(world, eventBroker) + { } + + void Initialize() override; + void InitializeObjects() override; + + void UpdateEntity(double dt, EntityID entity, EntityID parent) override; + void FlipPause(); + + bool IsPaused() const { return m_Pause; } + void SetPause(const bool& pause) { m_Pause = pause; } +private: + bool m_Pause; + bool m_ScreenShake; + int m_ShakeIntensity; + glm::vec3 m_CameraPosition; + float m_ShakeRepresentativeIntensity; + float m_ShakeTimer; + float m_ShakeEndTime; + float m_TimeTakenToCoolDown; + float m_CoolerMultiplier; + glm::vec3 m_Random; + + dd::EventRelay m_EPause; + dd::EventRelay m_EScreenShake; + bool OnPause(const dd::Events::Pause &event); + bool OnScreenShake(const dd::Events::ScreenShake &event); + + + +}; + +} + +} + +#endif //DAYDREAM_SCREENSHAKESYSTEM_H diff --git a/src/game/Game/ScreenShakeSystem.cpp b/src/game/Game/ScreenShakeSystem.cpp new file mode 100644 index 0000000..e5166fa --- /dev/null +++ b/src/game/Game/ScreenShakeSystem.cpp @@ -0,0 +1,94 @@ +// +// Created by Adniklastrator on 2015-10-14. +// + +#include "PrecompiledHeader.h" +#include "Game/ScreenShakeSystem.h" + +void dd::Systems::ScreenShakeSystem::Initialize() +{ + EVENT_SUBSCRIBE_MEMBER(m_EPause, &ScreenShakeSystem::OnPause); + EVENT_SUBSCRIBE_MEMBER(m_EScreenShake, &ScreenShakeSystem::OnScreenShake); + + InitializeObjects(); +} + +void dd::Systems::ScreenShakeSystem::InitializeObjects() +{ + m_Pause = false; + m_ScreenShake = false; + m_ShakeIntensity = 0; + m_CameraPosition = glm::vec3(0, 0, 0); + m_ShakeRepresentativeIntensity = 0; + m_ShakeTimer = 0; + m_ShakeEndTime = 0; + m_TimeTakenToCoolDown = 0; + m_CoolerMultiplier = 0; + m_Random = glm::vec3(0, 0, 0); +} + +void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) +{ + if (IsPaused()) { + return; + } + + /*auto camera = m_World->GetComponent(entity); + + if (camera != nullptr) { + auto transform = m_World->GetComponent(entity); + + if (m_ScreenShake) { + m_CameraPosition = transform->Position - m_Random; + + m_ShakeTimer += dt; + if (m_ShakeTimer >= m_ShakeEndTime) { + //std::cout << "Used: " << m_ShakeIntensity << " True: " << m_ShakeRepresentativeIntensity << std::endl; + m_ShakeRepresentativeIntensity -= m_ShakeRepresentativeIntensity * m_CoolerMultiplier * dt; + m_ShakeIntensity = m_ShakeRepresentativeIntensity; + if (m_ShakeIntensity <= 0) { + m_ScreenShake = false; + transform->Position = glm::vec3(0, 0, 0); + return; + } + } + else { + //std::cout << "Timer: " << m_ShakeTimer << " End: " << m_ShakeEndTime << std::endl; + } + m_Random.x = (rand() % m_ShakeIntensity); + m_Random.y = (rand() % m_ShakeIntensity); + + float half = m_ShakeIntensity / 2; + + m_Random.x = (m_Random.x - half) / 20; + m_Random.y = (m_Random.y - half) / 20; + + //std::cout << "X: " << randomX << " Y: " << randomY << std::endl; + transform->Position = glm::vec3(m_Random); + } else { + m_CameraPosition = transform->Position; + } + }*/ +} + +bool dd::Systems::ScreenShakeSystem::OnPause(const dd::Events::Pause &event) +{ + if (IsPaused()) { + SetPause(false); + } else { + SetPause(true); + } + return true; +} + +bool dd::Systems::ScreenShakeSystem::OnScreenShake(const dd::Events::ScreenShake &event) +{ + m_ScreenShake = true; + m_ShakeIntensity = event.Intensity; + m_ShakeRepresentativeIntensity = event.Intensity; + m_ShakeEndTime = event.Time; + m_ShakeTimer = 0; + m_TimeTakenToCoolDown = event.TimeTakenToCoolDown; + m_CoolerMultiplier = m_ShakeIntensity / m_TimeTakenToCoolDown; + return true; +} \ No newline at end of file