ScreenShakeSystem made. And some other things.

This commit is contained in:
PlatinumSkink
2015-10-14 18:52:04 +02:00
parent 8e32574692
commit 55cc1f5b69
6 changed files with 259 additions and 0 deletions
+25
View File
@@ -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
+25
View File
@@ -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
+25
View File
@@ -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
+25
View File
@@ -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
+65
View File
@@ -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<dd::EventBroker> 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<ScreenShakeSystem, dd::Events::Pause> m_EPause;
dd::EventRelay<ScreenShakeSystem, dd::Events::ScreenShake> m_EScreenShake;
bool OnPause(const dd::Events::Pause &event);
bool OnScreenShake(const dd::Events::ScreenShake &event);
};
}
}
#endif //DAYDREAM_SCREENSHAKESYSTEM_H
+94
View File
@@ -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<Components::Camera>(entity);
if (camera != nullptr) {
auto transform = m_World->GetComponent<Components::Transform>(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;
}