Added TravellingSystem for travelling to the next stage. Added incomplete ScreenShake. Ball now starts on pad.

This commit is contained in:
PlatinumSkink
2015-10-13 17:28:31 +02:00
parent 40343744c1
commit 36d0601dfd
12 changed files with 281 additions and 66 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ struct Transform : public Component
glm::vec3 Scale;
// Sticky is if it sticks with the player or not. True means it will follow the camera.
bool Sticky;
bool Sticky = true;
};
}
+61 -1
View File
@@ -50,12 +50,15 @@
#include "Game/CStickyAim.h"
#include "Game/BallSystem.h"
#include "Game/HitLagSystem.h"
#include "Game/TravellingSystem.h"
#include "Game/LifebuoySystem.h"
#include "Game/ProjectileSystem.h"
#include "Game/Bricks/CPowerUpBrick.h"
#include "Game/BrickComponents.h"
#include "Game/EScreenShake.h"
#include "Physics/PhysicsSystem.h"
#include "Physics/CPhysics.h"
#include "Physics/CRectangleShape.h"
@@ -153,6 +156,9 @@ public:
m_World->SystemFactory.Register<Systems::PhysicsSystem>(
[this]() { return new Systems::PhysicsSystem(m_World.get(), m_EventBroker); });
m_World->AddSystem<Systems::PhysicsSystem>();
m_World->SystemFactory.Register<Systems::TravellingSystem>(
[this]() { return new Systems::TravellingSystem(m_World.get(), m_EventBroker); });
m_World->AddSystem<Systems::TravellingSystem>();
m_World->ComponentFactory.Register<Components::Model>();
m_World->ComponentFactory.Register<Components::Template>();
@@ -360,8 +366,10 @@ public:
//EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &Engine::OnGameStart);
m_EGameStart = decltype(m_EGameStart)(std::bind(&Engine::OnGameStart, this, std::placeholders::_1));
m_EventBroker->Subscribe(m_EGameStart);
m_EScreenShake = decltype(m_EScreenShake)(std::bind(&Engine::OnScreenShake, this, std::placeholders::_1));
m_EventBroker->Subscribe(m_EScreenShake);
m_LastTime = glfwGetTime();
m_LastTime = glfwGetTime();
}
bool Running() const { return !glfwWindowShouldClose(m_Renderer->Window()); }
@@ -380,6 +388,9 @@ public:
//ResourceManager::Update();
if (m_GameIsRunning) {
m_World->Update(dt);
// I apologize about this.
ScreenShakeUpdate(dt);
}
m_EventBroker->Process<GUI::Frame>();
m_FrameStack->UpdateLayered(dt);
@@ -391,6 +402,8 @@ public:
TEMPAddToRenderQueue();
}
std::unique_ptr<dd::Camera> defaultCamera = nullptr;
// Render scene
//TODO send renderqueue to draw.
m_Renderer->Draw(m_RendererQueue);
@@ -550,6 +563,36 @@ public:
m_RendererQueue.Forward.Add(job);
}
void ScreenShakeUpdate(double dt)
{
if (m_ScreenShake) {
m_ShakeTimer += dt;
if (m_ShakeTimer >= m_ShakeEndTime) {
m_ShakeRepresentativeIntensity -= m_ShakeRepresentativeIntensity * 0.1 * dt;
m_ShakeIntensity = m_ShakeRepresentativeIntensity;
if (m_ShakeRepresentativeIntensity < 0.1) {
m_ScreenShake = false;
m_Renderer->PlaceCamera(glm::vec3(0, 0, 0));
return;
}
} else {
std::cout << "Timer: " << m_ShakeTimer << " End: " << m_ShakeEndTime << std::endl;
}
//float randomX = (rand() % m_ShakeIntensity);
//float randomY = (rand() % m_ShakeIntensity);
float randomX = 0;
float randomY = 0;
std::cout << "X: " << randomX << " Y: " << randomY << std::endl;
float half = m_ShakeIntensity / 2;
//m_Renderer->PlaceCamera(glm::vec3(randomX - half, randomY - half, 0));
} else {
}
}
private:
std::shared_ptr<EventBroker> m_EventBroker;
GUI::Frame* m_FrameStack = nullptr;
@@ -557,6 +600,7 @@ private:
RenderQueueCollection m_RendererQueue;
std::shared_ptr<InputManager> m_InputManager;
std::shared_ptr<World> m_World;
glm::vec3 m_CameraPosition = glm::vec3(0.f, 0.f, 0.f);
//TODO: Redo
bool m_GameIsRunning = false;
@@ -581,6 +625,22 @@ private:
return true;
};
//TODO: Extreme Redo.
bool m_ScreenShake = false;
int m_ShakeIntensity = 0;
float m_ShakeRepresentativeIntensity = 0;
float m_ShakeTimer = 0;
float m_ShakeEndTime = 0;
dd::EventRelay<Engine, dd::Events::ScreenShake> m_EScreenShake;
bool OnScreenShake(const dd::Events::ScreenShake &event)
{
m_ScreenShake = true;
m_ShakeIntensity = event.Intensity;
m_ShakeEndTime = event.Time;
m_ShakeTimer = 0;
return true;
}
double m_LastTime;
};
+13
View File
@@ -20,6 +20,12 @@
#define DD_RENDERER_H__
#include "Util/Rectangle.h"
#include "Core/System.h"
#include "Core/CTransform.h"
#include "Core/CTemplate.h"
#include "Core/EventBroker.h"
#include "Core/World.h"
#include "Game/EScreenShake.h"
#include "Camera.h"
#include "RenderQueue.h"
#include "ShaderProgram.h"
@@ -48,6 +54,7 @@ public:
}
void Initialize();
void Draw(RenderQueueCollection& rq);
void PlaceCamera(glm::vec3 position);
private:
Rectangle m_Resolution = Rectangle(1280, 720);
@@ -107,6 +114,12 @@ private:
void DrawWater(RenderQueue &objects);
void DrawGUI(RenderQueue& rq);
void DebugKeys();
dd::EventRelay<Renderer, dd::Events::ScreenShake> m_EScreenShake;
bool OnScreenShake(dd::Events::ScreenShake &event);
bool m_ScreenShake = false;
float m_ShakeIntensity = 0;
float m_ShakeTimer = 0;
};
}