Merge remote-tracking branch 'origin/master' into Physics
Conflicts: include/Game/BallSystem.h include/Game/ProjectileSystem.h src/game/Game/BallSystem.cpp src/game/Game/ProjectileSystem.cpp src/game/Rendering/AnimationSystem.cpp
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
[Debug]
|
[Debug]
|
||||||
SkipStory=false
|
|
||||||
LogLevel=1
|
LogLevel=1
|
||||||
|
SkipPreload=false
|
||||||
|
SkipMenu=false
|
||||||
|
|
||||||
[Audio]
|
[Audio]
|
||||||
SFXVolume=0.5
|
SFXVolume=0.5
|
||||||
@@ -9,4 +10,10 @@ BGMVolume=0.5
|
|||||||
[Video]
|
[Video]
|
||||||
Fullscreen=false
|
Fullscreen=false
|
||||||
Width=675
|
Width=675
|
||||||
Height=1080[Water]Radius=0.3[Cheat]GodMode=false[Water]Radius=0.3[Cheat]GodMode=false
|
Height=1080
|
||||||
|
|
||||||
|
[Water]
|
||||||
|
Radius=0.3
|
||||||
|
|
||||||
|
[Cheat]
|
||||||
|
GodMode=false
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+20
-5
@@ -37,6 +37,7 @@
|
|||||||
#include "Rendering/CModel.h"
|
#include "Rendering/CModel.h"
|
||||||
#include "Rendering/CSprite.h"
|
#include "Rendering/CSprite.h"
|
||||||
#include "Rendering/CPointLight.h"
|
#include "Rendering/CPointLight.h"
|
||||||
|
#include "Rendering/CCamera.h"
|
||||||
#include "Transform/TransformSystem.h"
|
#include "Transform/TransformSystem.h"
|
||||||
#include "Sound/SoundSystem.h"
|
#include "Sound/SoundSystem.h"
|
||||||
#include "Sound/CCollisionSound.h"
|
#include "Sound/CCollisionSound.h"
|
||||||
@@ -67,6 +68,7 @@
|
|||||||
|
|
||||||
#include "Game/BrickComponents.h"
|
#include "Game/BrickComponents.h"
|
||||||
|
|
||||||
|
#include "Game/ScreenShakeSystem.h"
|
||||||
#include "Game/EScreenShake.h"
|
#include "Game/EScreenShake.h"
|
||||||
|
|
||||||
#include "Physics/PhysicsSystem.h"
|
#include "Physics/PhysicsSystem.h"
|
||||||
@@ -102,9 +104,6 @@ public:
|
|||||||
ResourceManager::RegisterType<Model>("Model");
|
ResourceManager::RegisterType<Model>("Model");
|
||||||
ResourceManager::RegisterType<Sound>("Sound");
|
ResourceManager::RegisterType<Sound>("Sound");
|
||||||
ResourceManager::RegisterType<ConfigFile>("ConfigFile");
|
ResourceManager::RegisterType<ConfigFile>("ConfigFile");
|
||||||
ResourceManager::RegisterType<ShaderProgram>("ShaderProgram");
|
|
||||||
ResourceManager::RegisterType<VertexShader>("VertexShader");
|
|
||||||
ResourceManager::RegisterType<FragmentShader>("FragmentShader");
|
|
||||||
ResourceManager::LoadPreloadsFromFile();
|
ResourceManager::LoadPreloadsFromFile();
|
||||||
|
|
||||||
auto config = ResourceManager::Load<ConfigFile>("Config.ini");
|
auto config = ResourceManager::Load<ConfigFile>("Config.ini");
|
||||||
@@ -150,6 +149,7 @@ public:
|
|||||||
|
|
||||||
m_World->ComponentFactory.Register<Components::Sprite>();
|
m_World->ComponentFactory.Register<Components::Sprite>();
|
||||||
|
|
||||||
|
m_World->ComponentFactory.Register<Components::Camera>();
|
||||||
m_World->ComponentFactory.Register<Components::RectangleShape>();
|
m_World->ComponentFactory.Register<Components::RectangleShape>();
|
||||||
m_World->ComponentFactory.Register<Components::Physics>();
|
m_World->ComponentFactory.Register<Components::Physics>();
|
||||||
m_World->ComponentFactory.Register<Components::Ball>();
|
m_World->ComponentFactory.Register<Components::Ball>();
|
||||||
@@ -212,6 +212,9 @@ public:
|
|||||||
m_World->SystemFactory.Register<Systems::LifeSystem>(
|
m_World->SystemFactory.Register<Systems::LifeSystem>(
|
||||||
[this]() { return new Systems::LifeSystem(m_World.get(), m_EventBroker); });
|
[this]() { return new Systems::LifeSystem(m_World.get(), m_EventBroker); });
|
||||||
m_World->AddSystem<Systems::LifeSystem>();
|
m_World->AddSystem<Systems::LifeSystem>();
|
||||||
|
m_World->SystemFactory.Register<Systems::ScreenShakeSystem>(
|
||||||
|
[this]() { return new Systems::ScreenShakeSystem(m_World.get(), m_EventBroker); });
|
||||||
|
m_World->AddSystem<Systems::ScreenShakeSystem>();
|
||||||
|
|
||||||
m_World->ComponentFactory.Register<Components::Model>();
|
m_World->ComponentFactory.Register<Components::Model>();
|
||||||
m_World->ComponentFactory.Register<Components::Template>();
|
m_World->ComponentFactory.Register<Components::Template>();
|
||||||
@@ -274,8 +277,6 @@ public:
|
|||||||
TEMPAddToRenderQueue();
|
TEMPAddToRenderQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<dd::Camera> defaultCamera = nullptr;
|
|
||||||
|
|
||||||
// Render scene
|
// Render scene
|
||||||
//TODO send renderqueue to draw.
|
//TODO send renderqueue to draw.
|
||||||
m_Renderer->Draw(m_RendererQueue);
|
m_Renderer->Draw(m_RendererQueue);
|
||||||
@@ -295,6 +296,20 @@ public:
|
|||||||
{
|
{
|
||||||
if (!m_TransformSystem)
|
if (!m_TransformSystem)
|
||||||
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
||||||
|
|
||||||
|
// HACK: How do we handle multiple cameras? Maybe view and projection matrices in render queue...
|
||||||
|
auto cameras = m_World->GetComponentsOfType<Components::Camera>();
|
||||||
|
if (cameras != nullptr) {
|
||||||
|
for (auto& component : *cameras) {
|
||||||
|
auto camera = static_cast<Components::Camera*>(component.get());
|
||||||
|
auto transform = m_World->GetComponent<Components::Transform>(camera->Entity);
|
||||||
|
m_Renderer->Camera()->SetPosition(transform->Position);
|
||||||
|
m_Renderer->Camera()->SetOrientation(transform->Orientation);
|
||||||
|
m_Renderer->Camera()->SetFOV(camera->FOV);
|
||||||
|
m_Renderer->Camera()->SetNearClip(camera->NearClip);
|
||||||
|
m_Renderer->Camera()->SetFarClip(camera->FarClip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (auto &pair : *m_World->GetEntities())
|
for (auto &pair : *m_World->GetEntities())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
|
|
||||||
#include "Physics/ECreateParticleSequence.h"
|
#include "Physics/ECreateParticleSequence.h"
|
||||||
#include "Sound/CCollisionSound.h"
|
#include "Sound/CCollisionSound.h"
|
||||||
|
#include "Sound/EPlaySound.h"
|
||||||
#include "Rendering/EAnimationComplete.h"
|
#include "Rendering/EAnimationComplete.h"
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ struct Ball : Component
|
|||||||
bool Loaded = false;
|
bool Loaded = false;
|
||||||
glm::vec3 StickyPlacement = glm::vec3(0, 0, 0);
|
glm::vec3 StickyPlacement = glm::vec3(0, 0, 0);
|
||||||
glm::vec3 SavedSpeed = glm::vec3(0, 1, 0);
|
glm::vec3 SavedSpeed = glm::vec3(0, 1, 0);
|
||||||
|
|
||||||
|
int PosterBoy = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ struct Brick : Component
|
|||||||
int Type = 0;
|
int Type = 0;
|
||||||
bool Removed = false;
|
bool Removed = false;
|
||||||
int Number = 100; // For the Kraken to keep track of which bricks needs replacing.
|
int Number = 100; // For the Kraken to keep track of which bricks needs replacing.
|
||||||
|
bool BeingGenerated = false;
|
||||||
|
glm::vec3 GenerationGoal;
|
||||||
|
|
||||||
//What number of types each is.
|
//What number of types each is.
|
||||||
const int EmptyBrickSpace = 0;
|
const int EmptyBrickSpace = 0;
|
||||||
|
|||||||
@@ -17,13 +17,14 @@ struct Kraken : Component {
|
|||||||
|
|
||||||
int MaxHealth = 30;
|
int MaxHealth = 30;
|
||||||
int Health = MaxHealth;
|
int Health = MaxHealth;
|
||||||
int CurrentAction = 1;
|
int CurrentAction = 3;
|
||||||
|
float RetreatSpeed = 0.2;
|
||||||
|
|
||||||
const int Idle = 1;
|
const int Idle = 1;
|
||||||
const int Grabbing = 2;
|
const int Grabbing = 2;
|
||||||
const int Taunting = 3;
|
const int BrickGenerating = 3;
|
||||||
const int Moving = 4;
|
const int BrickGenerating2 = 4;
|
||||||
const int BrickGenerating = 5;
|
const int Waiting = 5;
|
||||||
// Idle. Generating bricks. Taunting. No idea.
|
// Idle. Generating bricks. Taunting. No idea.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,15 @@ namespace dd
|
|||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Life : Component {
|
struct Life : Component
|
||||||
|
{
|
||||||
int Number = 0;
|
int Number = 0;
|
||||||
|
float SinusAltitude = 0;
|
||||||
|
float Amplitude = 1;
|
||||||
|
float Frequency = 1;
|
||||||
|
float SinusSpeed = 1;
|
||||||
|
bool Left = false;
|
||||||
|
bool Dead = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Created by Adniklastrator on 2015-10-23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DAYDREAM_EBREAKALLBRICKS_H
|
||||||
|
#define DAYDREAM_EBREAKALLBRICKS_H
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace dd
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct BreakAllBricks : Event
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //DAYDREAM_EBREAKALLBRICKS_H
|
||||||
@@ -19,6 +19,7 @@ struct BrickGenerating : Event
|
|||||||
glm::vec3 Origin2;
|
glm::vec3 Origin2;
|
||||||
int TargetLine;
|
int TargetLine;
|
||||||
int Set;
|
int Set;
|
||||||
|
int SetCluster;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "Game/EKrakenHit.h"
|
#include "Game/EKrakenHit.h"
|
||||||
#include "Game/EKrakenDefeated.h"
|
#include "Game/EKrakenDefeated.h"
|
||||||
#include "Game/EBrickGenerating.h"
|
#include "Game/EBrickGenerating.h"
|
||||||
|
#include "Game/EArrivedAtNewStage.h"
|
||||||
#include "Game/CTravels.h"
|
#include "Game/CTravels.h"
|
||||||
#include "Game/CKraken.h"
|
#include "Game/CKraken.h"
|
||||||
#include "Game/CBall.h"
|
#include "Game/CBall.h"
|
||||||
@@ -64,12 +65,15 @@ private:
|
|||||||
|
|
||||||
bool m_Pause = false;
|
bool m_Pause = false;
|
||||||
bool m_KrakenBattle = false;
|
bool m_KrakenBattle = false;
|
||||||
|
bool m_KrakenHasArrived = false;
|
||||||
bool m_ReturnToIdle = false;
|
bool m_ReturnToIdle = false;
|
||||||
EntityID m_KrakenTemplate;
|
EntityID m_KrakenTemplate;
|
||||||
std::string m_Action = "Idle";
|
std::string m_Action = "Idle";
|
||||||
int m_NumberOfActions;
|
int m_NumberOfActions;
|
||||||
float m_KrakenTimer = 0;
|
float m_KrakenTimer = 0;
|
||||||
float m_KrakenSecondsToAction = 10;
|
float m_KrakenMaxSecondsToAction = 10;
|
||||||
|
float m_KrakenMinSecondsToAction = 10;
|
||||||
|
float m_KrakenCurrentSecondsToAction = 15;
|
||||||
const int Idle = 1;
|
const int Idle = 1;
|
||||||
|
|
||||||
std::array<int, 42> m_Bricks;
|
std::array<int, 42> m_Bricks;
|
||||||
@@ -83,6 +87,7 @@ private:
|
|||||||
dd::EventRelay<KrakenSystem, dd::Events::KrakenHit> m_EKrakenHit;
|
dd::EventRelay<KrakenSystem, dd::Events::KrakenHit> m_EKrakenHit;
|
||||||
dd::EventRelay<KrakenSystem, dd::Events::KrakenDefeated> m_EKrakenDefeated;
|
dd::EventRelay<KrakenSystem, dd::Events::KrakenDefeated> m_EKrakenDefeated;
|
||||||
dd::EventRelay<KrakenSystem, dd::Events::BrickGenerating> m_EBrickGenerating;
|
dd::EventRelay<KrakenSystem, dd::Events::BrickGenerating> m_EBrickGenerating;
|
||||||
|
dd::EventRelay<KrakenSystem, dd::Events::ArrivedAtNewStage> m_EArrivedAtNewStage;
|
||||||
bool OnPause(const dd::Events::Pause &event);
|
bool OnPause(const dd::Events::Pause &event);
|
||||||
bool OnResume(const dd::Events::Resume &event);
|
bool OnResume(const dd::Events::Resume &event);
|
||||||
bool OnContact(const dd::Events::Contact &event);
|
bool OnContact(const dd::Events::Contact &event);
|
||||||
@@ -91,6 +96,7 @@ private:
|
|||||||
bool OnKrakenHit(const dd::Events::KrakenHit &event);
|
bool OnKrakenHit(const dd::Events::KrakenHit &event);
|
||||||
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
|
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
|
||||||
bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
|
bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
|
||||||
|
bool OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event);
|
||||||
void GetBrickSet();
|
void GetBrickSet();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include "Rendering/CSprite.h"
|
#include "Rendering/CSprite.h"
|
||||||
#include "Rendering/CModel.h"
|
#include "Rendering/CModel.h"
|
||||||
#include "Rendering/CPointLight.h"
|
#include "Rendering/CPointLight.h"
|
||||||
|
#include "Rendering/CCamera.h"
|
||||||
|
|
||||||
#include "Transform/EMove.h"
|
#include "Transform/EMove.h"
|
||||||
|
|
||||||
@@ -180,6 +181,8 @@ private:
|
|||||||
bool m_BrickGenerating = false;
|
bool m_BrickGenerating = false;
|
||||||
dd::Events::BrickGenerating m_BrickGeneratingEvent;
|
dd::Events::BrickGenerating m_BrickGeneratingEvent;
|
||||||
|
|
||||||
|
bool m_BreakAllBricks = false;
|
||||||
|
|
||||||
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
|
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
|
||||||
dd::EventRelay<LevelSystem, dd::Events::ScoreEvent> m_EScoreEvent;
|
dd::EventRelay<LevelSystem, dd::Events::ScoreEvent> m_EScoreEvent;
|
||||||
dd::EventRelay<LevelSystem, dd::Events::MultiBall> m_EMultiBall;
|
dd::EventRelay<LevelSystem, dd::Events::MultiBall> m_EMultiBall;
|
||||||
@@ -207,7 +210,7 @@ private:
|
|||||||
bool OnHitPad(const dd::Events::HitPad &event);
|
bool OnHitPad(const dd::Events::HitPad &event);
|
||||||
bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
|
bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
|
||||||
bool BrickGenerating(const dd::Events::BrickGenerating &event);
|
bool BrickGenerating(const dd::Events::BrickGenerating &event);
|
||||||
void GetBrickSet(int Set);
|
void GetBrickSet(int Set, int SetCluster);
|
||||||
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
|
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
|
||||||
|
|
||||||
void GetNextLevel();
|
void GetNextLevel();
|
||||||
|
|||||||
@@ -24,6 +24,10 @@
|
|||||||
#include "Game/EGameOver.h"
|
#include "Game/EGameOver.h"
|
||||||
#include "Game/EKrakenAttackEnd.h"
|
#include "Game/EKrakenAttackEnd.h"
|
||||||
|
|
||||||
|
#include "Rendering/CAnimation.h"
|
||||||
|
#include "Physics/CParticleEmitter.h"
|
||||||
|
#include "Physics/ECreateParticleSequence.h"
|
||||||
|
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
{
|
{
|
||||||
@@ -54,6 +58,7 @@ private:
|
|||||||
bool m_Pause = false;
|
bool m_Pause = false;
|
||||||
int m_Lives = 3;
|
int m_Lives = 3;
|
||||||
int m_PastLives = 3;
|
int m_PastLives = 3;
|
||||||
|
float m_LifeSpeed = 0.8;
|
||||||
|
|
||||||
bool m_GodMode = false;
|
bool m_GodMode = false;
|
||||||
|
|
||||||
|
|||||||
@@ -72,29 +72,12 @@ public:
|
|||||||
void Update(double dt) override;
|
void Update(double dt) override;
|
||||||
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||||
|
|
||||||
EntityID& Entity() { return m_Entity; }
|
|
||||||
void SetEntity(const EntityID& ent) { m_Entity = ent; }
|
|
||||||
glm::vec3 Acceleration() const { return m_Acceleration; }
|
|
||||||
void SetAcceleration(const glm::vec3& acceleration) { m_Acceleration = acceleration; }
|
|
||||||
|
|
||||||
bool Left() const { return m_Left; }
|
|
||||||
void SetLeft(const bool& left) { m_Left = left; }
|
|
||||||
bool Right() const { return m_Right; }
|
|
||||||
void SetRight(const bool& right) { m_Right = right; }
|
|
||||||
float Edge() const { return m_Edge; }
|
|
||||||
void SetEdge(const float& edge) { m_Edge = edge; }
|
|
||||||
|
|
||||||
Components::Transform* Transform() const { return m_Transform; }
|
|
||||||
void SetTransform(Components::Transform* transform) { m_Transform = transform; }
|
|
||||||
Components::Pad* Pad() const { return m_Pad; }
|
|
||||||
void SetPad(Components::Pad* pad) { m_Pad = pad; }
|
|
||||||
|
|
||||||
bool IsPaused() const { return m_Pause; }
|
bool IsPaused() const { return m_Pause; }
|
||||||
void SetPause(const bool& pause) { m_Pause = pause; }
|
void SetPause(const bool& pause) { m_Pause = pause; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EntityID m_Entity = 0;
|
EntityID m_PadEntity = 0;
|
||||||
glm::vec3 m_Acceleration = glm::vec3(0.f, 0.f, 0.f);
|
glm::vec3 m_PadAcceleration = glm::vec3(0.f, 0.f, 0.f);
|
||||||
bool m_Left = false;
|
bool m_Left = false;
|
||||||
bool m_Right = false;
|
bool m_Right = false;
|
||||||
bool m_ReplaceBall = false;
|
bool m_ReplaceBall = false;
|
||||||
@@ -107,11 +90,11 @@ private:
|
|||||||
float m_Edge = 2.8f;
|
float m_Edge = 2.8f;
|
||||||
float m_PadOriginalHeight = -4.8;
|
float m_PadOriginalHeight = -4.8;
|
||||||
float m_PadHeight = m_PadOriginalHeight;
|
float m_PadHeight = m_PadOriginalHeight;
|
||||||
EntityID m_KrakenArm = NULL;
|
EntityID m_KrakenArm = 0;
|
||||||
EntityID m_KrakenArmHitbox = NULL;
|
EntityID m_KrakenArmHitbox = 0;
|
||||||
float m_PadRiseSpeed = 0.2;
|
float m_PadRiseSpeed = 0.2;
|
||||||
Components::Transform* m_Transform = nullptr;
|
Components::Transform* m_PadTransform = nullptr;
|
||||||
Components::Pad* m_Pad = nullptr;
|
Components::Pad* m_PadComponent = nullptr;
|
||||||
std::shared_ptr<Components::Transform> m_StickTransform;
|
std::shared_ptr<Components::Transform> m_StickTransform;
|
||||||
std::shared_ptr<Components::StickyAim> m_StickyAim;
|
std::shared_ptr<Components::StickyAim> m_StickyAim;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
#ifndef DAYDREAM_PROJECTILESYSTEM_H
|
#ifndef DAYDREAM_PROJECTILESYSTEM_H
|
||||||
#define DAYDREAM_PROJECTILESYSTEM_H
|
#define DAYDREAM_PROJECTILESYSTEM_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/CTransform.h"
|
#include "Core/CTransform.h"
|
||||||
#include "Core/CTemplate.h"
|
#include "Core/CTemplate.h"
|
||||||
@@ -26,8 +30,6 @@
|
|||||||
#include "Game/CProjectile.h"
|
#include "Game/CProjectile.h"
|
||||||
#include "Game/CBall.h"
|
#include "Game/CBall.h"
|
||||||
#include "Rendering/CSprite.h"
|
#include "Rendering/CSprite.h"
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include "Rendering/CAnimation.h"
|
#include "Rendering/CAnimation.h"
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "Core/CTemplate.h"
|
#include "Core/CTemplate.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
|
#include "Rendering/CCamera.h"
|
||||||
#include "Game/EPause.h"
|
#include "Game/EPause.h"
|
||||||
#include "Game/EResume.h"
|
#include "Game/EResume.h"
|
||||||
#include "Game/EScreenShake.h"
|
#include "Game/EScreenShake.h"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ struct ParticleEmitter : public Component
|
|||||||
float Speed = 2.f;
|
float Speed = 2.f;
|
||||||
double LifeTime = 100;
|
double LifeTime = 100;
|
||||||
float RadiusDistribution = 0;
|
float RadiusDistribution = 0;
|
||||||
|
bool DefaultScale = false;
|
||||||
//values to interpolate between.
|
//values to interpolate between.
|
||||||
std::vector<glm::vec3> ScaleValues;
|
std::vector<glm::vec3> ScaleValues;
|
||||||
std::vector<float> AlphaValues;
|
std::vector<float> AlphaValues;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ struct CreateParticleSequence : public Event
|
|||||||
glm::vec4 Color = glm::vec4(0);
|
glm::vec4 Color = glm::vec4(0);
|
||||||
EntityID parent = 0;
|
EntityID parent = 0;
|
||||||
// values to interpolate between.
|
// values to interpolate between.
|
||||||
|
bool DefaultScale = false;
|
||||||
std::vector<glm::vec3> ScaleValues;
|
std::vector<glm::vec3> ScaleValues;
|
||||||
std::vector<float> AlphaValues;
|
std::vector<float> AlphaValues;
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "Core/CTemplate.h"
|
#include "Core/CTemplate.h"
|
||||||
#include "Core/CTransform.h"
|
#include "Core/CTransform.h"
|
||||||
#include "Core/CTemplate.h"
|
#include "Core/CTemplate.h"
|
||||||
|
#include "Rendering/Texture.h"
|
||||||
|
|
||||||
#include "Physics/EContact.h"
|
#include "Physics/EContact.h"
|
||||||
#include "Physics/ESetImpulse.h"
|
#include "Physics/ESetImpulse.h"
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ public:
|
|||||||
void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
||||||
bool VSYNC() const { return m_VSYNC; }
|
bool VSYNC() const { return m_VSYNC; }
|
||||||
void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
||||||
const dd::Camera* Camera() const { return m_Camera; }
|
dd::Camera* Camera() const { return m_Camera; }
|
||||||
void SetCamera(const dd::Camera* camera)
|
void SetCamera(dd::Camera* camera)
|
||||||
{
|
{
|
||||||
if (camera == nullptr) {
|
if (camera == nullptr) {
|
||||||
m_Camera = m_DefaultCamera.get();
|
m_Camera = m_DefaultCamera.get();
|
||||||
@@ -55,7 +55,7 @@ protected:
|
|||||||
bool m_Fullscreen = false;
|
bool m_Fullscreen = false;
|
||||||
bool m_VSYNC = false;
|
bool m_VSYNC = false;
|
||||||
std::unique_ptr<dd::Camera> m_DefaultCamera = nullptr;
|
std::unique_ptr<dd::Camera> m_DefaultCamera = nullptr;
|
||||||
const dd::Camera* m_Camera = nullptr;
|
dd::Camera* m_Camera = nullptr;
|
||||||
GLFWwindow* m_Window = nullptr;
|
GLFWwindow* m_Window = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -30,14 +30,9 @@ namespace Components
|
|||||||
|
|
||||||
struct Camera : Component
|
struct Camera : Component
|
||||||
{
|
{
|
||||||
Camera()
|
float FOV = glm::radians(45.f);
|
||||||
: FOV(glm::radians(45.f))
|
float NearClip = 0.01f;
|
||||||
, NearClip(0.1f)
|
float FarClip = 100.f;
|
||||||
, FarClip(100.f) { }
|
|
||||||
|
|
||||||
float FOV;
|
|
||||||
float NearClip;
|
|
||||||
float FarClip;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ class Renderer : public BaseRenderer
|
|||||||
public:
|
public:
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
void Draw(RenderQueueCollection& rq) override;
|
void Draw(RenderQueueCollection& rq) override;
|
||||||
void PlaceCamera(glm::vec3 position);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_GLVersion[2];
|
int m_GLVersion[2];
|
||||||
@@ -97,12 +96,6 @@ private:
|
|||||||
void DrawWater(RenderQueue &objects);
|
void DrawWater(RenderQueue &objects);
|
||||||
void DrawGUI(RenderQueue& rq);
|
void DrawGUI(RenderQueue& rq);
|
||||||
void DebugKeys();
|
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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include "Physics/ECreateParticleSequence.h"
|
#include "Physics/ECreateParticleSequence.h"
|
||||||
#include "Physics/EContact.h"
|
#include "Physics/EContact.h"
|
||||||
#include "Game/EGameStart.h"
|
#include "Game/EGameStart.h"
|
||||||
|
#include "Game/EKrakenAppear.h"
|
||||||
|
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
@@ -42,6 +43,7 @@ private:
|
|||||||
const std::string GAME_BGM = "Sounds/BGM/under-the-sea-n.wav";
|
const std::string GAME_BGM = "Sounds/BGM/under-the-sea-n.wav";
|
||||||
const std::string WATER_BGM = "Sounds/BGM/water-flowing.wav";
|
const std::string WATER_BGM = "Sounds/BGM/water-flowing.wav";
|
||||||
const std::string STORY_VOICE = "Sounds/jap-story.wav";
|
const std::string STORY_VOICE = "Sounds/jap-story.wav";
|
||||||
|
const std::string BOSS_BGM = "Sounds/BGM/boss-fight.wav";
|
||||||
|
|
||||||
float m_BGMMasterVolume = 1.f;
|
float m_BGMMasterVolume = 1.f;
|
||||||
float m_SFXMasterVolume = 1.f;
|
float m_SFXMasterVolume = 1.f;
|
||||||
@@ -62,6 +64,8 @@ private:
|
|||||||
bool OnMasterVolume(const dd::Events::MasterVolume &event);
|
bool OnMasterVolume(const dd::Events::MasterVolume &event);
|
||||||
dd::EventRelay<SoundSystem, dd::Events::GameStart> m_EGameStart;
|
dd::EventRelay<SoundSystem, dd::Events::GameStart> m_EGameStart;
|
||||||
bool OnGameStart(const dd::Events::GameStart &event);
|
bool OnGameStart(const dd::Events::GameStart &event);
|
||||||
|
dd::EventRelay <SoundSystem, dd::Events::KrakenAppear> m_EKrakenAppear;
|
||||||
|
bool OnKrakenAppear(const dd::Events::KrakenAppear &event);
|
||||||
|
|
||||||
|
|
||||||
ALuint CreateSource();
|
ALuint CreateSource();
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ void dd::Systems::BallSystem::Initialize()
|
|||||||
auto transform2 = m_World->GetComponent<Components::Transform>(ent2);
|
auto transform2 = m_World->GetComponent<Components::Transform>(ent2);
|
||||||
transform2->Position = glm::vec3(-0.f, 0.26f, -10.f);
|
transform2->Position = glm::vec3(-0.f, 0.26f, -10.f);
|
||||||
transform2->Velocity = glm::vec3(0.0f, -10.f, 0.f);
|
transform2->Velocity = glm::vec3(0.0f, -10.f, 0.f);
|
||||||
|
|
||||||
|
/*auto PosterBoy = CreateBall();
|
||||||
|
auto PosterBall = m_World->GetComponent<Components::Ball>(PosterBoy);
|
||||||
|
PosterBall->PosterBoy = 1;
|
||||||
|
auto Postertran = m_World->GetComponent<Components::Transform>(PosterBoy);
|
||||||
|
Postertran->Position = glm::vec3(-3.f, -3.f, -10.f);
|
||||||
|
Postertran->Velocity = glm::vec3(0.0f, 0.f, 0.f);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
SetReplaceBall(true);
|
SetReplaceBall(true);
|
||||||
@@ -89,6 +96,11 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
if (templateCheck != nullptr){ return; }
|
if (templateCheck != nullptr){ return; }
|
||||||
|
|
||||||
if (ballComponent != nullptr) {
|
if (ballComponent != nullptr) {
|
||||||
|
auto transformBall = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
if (ballComponent->PosterBoy == 1) {
|
||||||
|
transformBall->Position = glm::vec3(-3, 3, -10);
|
||||||
|
}
|
||||||
|
|
||||||
if (ReplaceBall()) {
|
if (ReplaceBall()) {
|
||||||
m_First = true;
|
m_First = true;
|
||||||
SetReplaceBall(false);
|
SetReplaceBall(false);
|
||||||
@@ -98,17 +110,15 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
ballComponent->SavedSpeed = glm::vec3(random, 1, 0.f);
|
ballComponent->SavedSpeed = glm::vec3(random, 1, 0.f);
|
||||||
//ballComponent->SavedSpeed = glm::vec3(0.f, 1, 0.f);
|
//ballComponent->SavedSpeed = glm::vec3(0.f, 1, 0.f);
|
||||||
ballComponent->Waiting = true;
|
ballComponent->Waiting = true;
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ballComponent->Waiting) {
|
if (ballComponent->Waiting) {
|
||||||
if (!m_Waiting) {
|
if (!m_Waiting) {
|
||||||
m_Restarting = false;
|
m_Restarting = false;
|
||||||
ballComponent->Waiting = false;
|
ballComponent->Waiting = false;
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
|
||||||
/*std::uniform_real_distribution<float> dist(-0.5f, 0.5f);
|
/*std::uniform_real_distribution<float> dist(-0.5f, 0.5f);
|
||||||
float random = dist(m_RandomGenerator);*/
|
float random = dist(m_RandomGenerator);*/
|
||||||
transform->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed;
|
transformBall->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed;
|
||||||
|
|
||||||
auto cAnim = m_World->GetComponent<Components::Animation>(entity);
|
auto cAnim = m_World->GetComponent<Components::Animation>(entity);
|
||||||
cAnim->Loop = false;
|
cAnim->Loop = false;
|
||||||
@@ -116,6 +126,7 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
cAnim->Time = 0.f;
|
cAnim->Time = 0.f;
|
||||||
//transform->Velocity = glm::normalize(glm::vec3(0, 1, 0)) * ballComponent->Speed;
|
//transform->Velocity = glm::normalize(glm::vec3(0, 1, 0)) * ballComponent->Speed;
|
||||||
} else {
|
} else {
|
||||||
|
transformBall->Velocity = glm::vec3(0.f, 0.f, 0.f);
|
||||||
|
|
||||||
auto cModel = m_World->GetComponent<Components::Model>(entity);
|
auto cModel = m_World->GetComponent<Components::Model>(entity);
|
||||||
cModel->ModelFile = "Models/Sid/Sid_Jump.dae";
|
cModel->ModelFile = "Models/Sid/Sid_Jump.dae";
|
||||||
@@ -141,8 +152,7 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
//TODO - Ball can stick to same pad just after detaching.
|
//TODO - Ball can stick to same pad just after detaching.
|
||||||
if (!m_Waiting)
|
if (!m_Waiting)
|
||||||
{
|
{
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
transformBall->Velocity = ballComponent->SavedSpeed;
|
||||||
transform->Velocity = ballComponent->SavedSpeed;
|
|
||||||
m_StickyCounter--;
|
m_StickyCounter--;
|
||||||
if (m_StickyCounter > 0) {
|
if (m_StickyCounter > 0) {
|
||||||
m_Sticky = true;
|
m_Sticky = true;
|
||||||
@@ -151,7 +161,6 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto transformBall = m_World->GetComponent<Components::Transform>(entity);
|
|
||||||
if (glm::abs(transformBall->Velocity.y) < 2) {
|
if (glm::abs(transformBall->Velocity.y) < 2) {
|
||||||
if (transformBall->Velocity.y > 0) {
|
if (transformBall->Velocity.y > 0) {
|
||||||
transformBall->Velocity.y = 2;
|
transformBall->Velocity.y = 2;
|
||||||
@@ -170,6 +179,9 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
Events::LifeLost e;
|
Events::LifeLost e;
|
||||||
e.Entity = entity;
|
e.Entity = entity;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
|
Events::PlaySound se;
|
||||||
|
se.FilePath = "Sounds/jap-lose-life.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} //Removing this made the wall collisions work again
|
} //Removing this made the wall collisions work again
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ void dd::Systems::KrakenSystem::Initialize()
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenHit, &KrakenSystem::OnKrakenHit);
|
EVENT_SUBSCRIBE_MEMBER(m_EKrakenHit, &KrakenSystem::OnKrakenHit);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &KrakenSystem::OnKrakenDefeated);
|
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &KrakenSystem::OnKrakenDefeated);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &KrakenSystem::OnBrickGenerating);
|
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &KrakenSystem::OnBrickGenerating);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EArrivedAtNewStage, &KrakenSystem::OnArrivedAtNewStage);
|
||||||
|
|
||||||
EntityID ent = m_World->CreateEntity();
|
EntityID ent = m_World->CreateEntity();
|
||||||
auto transform = m_World->AddComponent<Components::Transform>(ent);
|
auto transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
@@ -46,7 +47,7 @@ void dd::Systems::KrakenSystem::Initialize()
|
|||||||
|
|
||||||
//sound
|
//sound
|
||||||
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(ent);
|
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(ent);
|
||||||
collisionSound->FilePath = "Sounds/Brick/LTTP_Boss_Hit.wav";
|
collisionSound->FilePath = "Sounds/Boss/boss-hit.wav";
|
||||||
m_World->CommitEntity(ent);
|
m_World->CommitEntity(ent);
|
||||||
|
|
||||||
m_KrakenTemplate = ent;
|
m_KrakenTemplate = ent;
|
||||||
@@ -67,6 +68,16 @@ void dd::Systems::KrakenSystem::Update(double dt)
|
|||||||
|
|
||||||
void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||||
{
|
{
|
||||||
|
auto kraken = m_World->GetComponent<Components::Kraken>(entity);
|
||||||
|
if (kraken != nullptr) {
|
||||||
|
if (kraken->Health < 0) {
|
||||||
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
transform->Position.y += kraken->RetreatSpeed * dt;
|
||||||
|
kraken->RetreatSpeed += 0.05;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (IsPaused() || !m_KrakenBattle) {
|
if (IsPaused() || !m_KrakenBattle) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -74,7 +85,7 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
|||||||
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
||||||
if (templateCheck != nullptr){ return; }
|
if (templateCheck != nullptr){ return; }
|
||||||
|
|
||||||
auto kraken = m_World->GetComponent<Components::Kraken>(entity);
|
|
||||||
if (kraken != nullptr) {
|
if (kraken != nullptr) {
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
if (transform->Position.y < -10) {
|
if (transform->Position.y < -10) {
|
||||||
@@ -86,7 +97,7 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
|||||||
{
|
{
|
||||||
case 1: // Idle
|
case 1: // Idle
|
||||||
m_KrakenTimer += dt;
|
m_KrakenTimer += dt;
|
||||||
if (m_KrakenTimer > m_KrakenSecondsToAction) {
|
if (m_KrakenTimer > m_KrakenCurrentSecondsToAction) {
|
||||||
m_KrakenTimer = 0;
|
m_KrakenTimer = 0;
|
||||||
if (m_NumberOfActions == 0) {
|
if (m_NumberOfActions == 0) {
|
||||||
kraken->CurrentAction = 3;
|
kraken->CurrentAction = 3;
|
||||||
@@ -114,7 +125,14 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
|||||||
Events::BrickGenerating e;
|
Events::BrickGenerating e;
|
||||||
e.Origin1 = glm::vec3(-5, 7, -10);
|
e.Origin1 = glm::vec3(-5, 7, -10);
|
||||||
e.Origin2 = glm::vec3(5, 7, -10);
|
e.Origin2 = glm::vec3(5, 7, -10);
|
||||||
std::uniform_real_distribution<float> dist(1, 5.999f);
|
if (kraken->Health > 20) {
|
||||||
|
e.SetCluster = 0;
|
||||||
|
} else if (kraken->Health > 10) {
|
||||||
|
e.SetCluster = 1;
|
||||||
|
} else {
|
||||||
|
e.SetCluster = 2;
|
||||||
|
}
|
||||||
|
std::uniform_real_distribution<float> dist(1, 6.999f);
|
||||||
float random = dist(m_RandomGenerator);
|
float random = dist(m_RandomGenerator);
|
||||||
e.Set = random;
|
e.Set = random;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
@@ -126,7 +144,14 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
|||||||
Events::BrickGenerating e;
|
Events::BrickGenerating e;
|
||||||
e.Origin1 = glm::vec3(-5, 7, -10);
|
e.Origin1 = glm::vec3(-5, 7, -10);
|
||||||
e.Origin2 = glm::vec3(5, 7, -10);
|
e.Origin2 = glm::vec3(5, 7, -10);
|
||||||
std::uniform_real_distribution<float> dist(1, 5.999f);
|
if (kraken->Health > 20) {
|
||||||
|
e.SetCluster = 0;
|
||||||
|
} else if (kraken->Health > 10) {
|
||||||
|
e.SetCluster = 1;
|
||||||
|
} else {
|
||||||
|
e.SetCluster = 2;
|
||||||
|
}
|
||||||
|
std::uniform_real_distribution<float> dist(1, 6.999f);
|
||||||
float random = dist(m_RandomGenerator);
|
float random = dist(m_RandomGenerator);
|
||||||
e.Set = random;
|
e.Set = random;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
@@ -196,6 +221,7 @@ bool dd::Systems::KrakenSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
if (projectile != nullptr) {
|
if (projectile != nullptr) {
|
||||||
Events::ScoreEvent es;
|
Events::ScoreEvent es;
|
||||||
es.Score = 23;
|
es.Score = 23;
|
||||||
|
EventBroker->Publish(es);
|
||||||
Events::KrakenHit e;
|
Events::KrakenHit e;
|
||||||
e.Kraken = krakenEntity;
|
e.Kraken = krakenEntity;
|
||||||
e.Hitter = otherEntitiy;
|
e.Hitter = otherEntitiy;
|
||||||
@@ -215,6 +241,7 @@ bool dd::Systems::KrakenSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
EventBroker->Publish(ec);
|
EventBroker->Publish(ec);
|
||||||
Events::ScoreEvent es;
|
Events::ScoreEvent es;
|
||||||
es.Score = ball->Combo * 23;
|
es.Score = ball->Combo * 23;
|
||||||
|
EventBroker->Publish(es);
|
||||||
Events::KrakenHit e;
|
Events::KrakenHit e;
|
||||||
e.Kraken = krakenEntity;
|
e.Kraken = krakenEntity;
|
||||||
e.Hitter = otherEntitiy;
|
e.Hitter = otherEntitiy;
|
||||||
@@ -248,7 +275,62 @@ bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &e
|
|||||||
bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
|
bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
|
||||||
{
|
{
|
||||||
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
||||||
|
auto transform = m_World->GetComponent<Components::Transform>(event.Hitter);
|
||||||
kraken->Health--;
|
kraken->Health--;
|
||||||
|
//kraken->Health -= 15;
|
||||||
|
//kraken->Health = -1; //To defeat the kraken instantly.
|
||||||
|
|
||||||
|
auto model = m_World->GetComponent<Components::Model>(event.Kraken);
|
||||||
|
float modifier = ((float)kraken->MaxHealth - (float)kraken->Health) / (float)kraken->MaxHealth; // 1 is almost no life left, 0 is max life left.
|
||||||
|
//std::cout << modifier << std::endl;
|
||||||
|
model->Color = glm::vec4(1, 1 - modifier, 1 - modifier, 1);
|
||||||
|
|
||||||
|
int timeDifferenceBetweenMaxAndMin = m_KrakenMaxSecondsToAction - m_KrakenMinSecondsToAction;
|
||||||
|
m_KrakenCurrentSecondsToAction = m_KrakenMaxSecondsToAction - (modifier * timeDifferenceBetweenMaxAndMin);
|
||||||
|
// If modifier is 1, MaxSeconds is 15, MinSeconds is 5, then... 15 - (1 * 10), meaning 5.
|
||||||
|
|
||||||
|
auto ball = m_World->GetComponent<Components::Transform>(event.Hitter);
|
||||||
|
if (ball != nullptr) {
|
||||||
|
//Particle trail
|
||||||
|
Events::CreateParticleSequence trail;
|
||||||
|
trail.parent = event.Hitter;
|
||||||
|
trail.AlphaValues.push_back(1.f);
|
||||||
|
trail.AlphaValues.push_back(0.f);
|
||||||
|
trail.ScaleValues.push_back(glm::vec3(0.08f));
|
||||||
|
trail.ScaleValues.push_back(glm::vec3(0.f));
|
||||||
|
trail.RadiusDistribution = 2;
|
||||||
|
trail.EmitterLifeTime = 1.f;
|
||||||
|
trail.ParticleLifeTime = 1.f;
|
||||||
|
trail.ParticlesPerTick = 1;
|
||||||
|
trail.SpawnRate = 0.5f;
|
||||||
|
trail.Speed = 10.f;
|
||||||
|
trail.EmittingAngle = glm::half_pi<float>();
|
||||||
|
trail.SpriteFile = "Textures/Particles/FadeBall.png";
|
||||||
|
trail.Color = glm::vec4(1, 0, 0, 1);
|
||||||
|
//p.Spread = ...
|
||||||
|
EventBroker->Publish(trail);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ParticlePoof
|
||||||
|
Events::CreateParticleSequence poof;
|
||||||
|
poof.EmitterLifeTime = 4;
|
||||||
|
poof.EmittingAngle = glm::half_pi<float>();
|
||||||
|
poof.Spread = 0.5f;
|
||||||
|
poof.NumberOfTicks = 1;
|
||||||
|
poof.ParticleLifeTime = 1.5f;
|
||||||
|
poof.ParticlesPerTick = 2;
|
||||||
|
poof.Position = transform->Position;
|
||||||
|
poof.ScaleValues.clear();
|
||||||
|
poof.ScaleValues.push_back(glm::vec3(0.5f));
|
||||||
|
poof.ScaleValues.push_back(glm::vec3(2.f, 2.f, 0.2f));
|
||||||
|
poof.SpriteFile = "Textures/Particles/Cloud_Particle.png";
|
||||||
|
poof.Color = glm::vec4(1, 0, 0, 1);
|
||||||
|
poof.AlphaValues.clear();
|
||||||
|
poof.AlphaValues.push_back(1.f);
|
||||||
|
poof.AlphaValues.push_back(0.f);
|
||||||
|
poof.Speed = 20;
|
||||||
|
EventBroker->Publish(poof);
|
||||||
|
|
||||||
//std::cout << kraken->Health << std::endl;
|
//std::cout << kraken->Health << std::endl;
|
||||||
//kraken->Health = -1;
|
//kraken->Health = -1;
|
||||||
if (kraken->Health < 0) {
|
if (kraken->Health < 0) {
|
||||||
@@ -266,6 +348,8 @@ bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeate
|
|||||||
|
|
||||||
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
||||||
auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken);
|
auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken);
|
||||||
|
|
||||||
|
m_World->RemoveComponent<Components::Travels>(event.Kraken);
|
||||||
/*physicsComponent->CollisionType = CollisionType::Type::Dynamic;
|
/*physicsComponent->CollisionType = CollisionType::Type::Dynamic;
|
||||||
physicsComponent->GravityScale = 1.f;*/
|
physicsComponent->GravityScale = 1.f;*/
|
||||||
physicsComponent->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Water | CollisionLayer::Wall);
|
physicsComponent->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Water | CollisionLayer::Wall);
|
||||||
@@ -292,8 +376,8 @@ bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeate
|
|||||||
EventBroker->Publish(i);*/
|
EventBroker->Publish(i);*/
|
||||||
|
|
||||||
auto cModel = m_World->GetComponent<Components::Model>(event.Kraken);
|
auto cModel = m_World->GetComponent<Components::Model>(event.Kraken);
|
||||||
cModel->Color = brickModel->Color;
|
cModel->Color = glm::vec4(1, 1, 1, 1);
|
||||||
cModel->Color *= 0.5f;
|
cModel->Color *= 0.3f;
|
||||||
|
|
||||||
/*m_World->RemoveComponent<Components::Template>(event.Kraken);
|
/*m_World->RemoveComponent<Components::Template>(event.Kraken);
|
||||||
m_World->SetEntityParent(event.Kraken, 0);
|
m_World->SetEntityParent(event.Kraken, 0);
|
||||||
@@ -345,4 +429,12 @@ bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeate
|
|||||||
bool dd::Systems::KrakenSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
|
bool dd::Systems::KrakenSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dd::Systems::KrakenSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event)
|
||||||
|
{
|
||||||
|
if (m_KrakenBattle) {
|
||||||
|
m_KrakenHasArrived = true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
+338
-112
@@ -27,6 +27,15 @@ void dd::Systems::LevelSystem::Initialize()
|
|||||||
|
|
||||||
m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false);
|
m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false);
|
||||||
|
|
||||||
|
// Camera
|
||||||
|
{
|
||||||
|
auto ent = m_World->CreateEntity();
|
||||||
|
auto transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
|
auto camera = m_World->AddComponent<Components::Camera>(ent);
|
||||||
|
camera->FOV = glm::radians(58.31f);
|
||||||
|
m_World->CommitEntity(ent);
|
||||||
|
}
|
||||||
|
|
||||||
//PointLightTest
|
//PointLightTest
|
||||||
{
|
{
|
||||||
auto t_Light = m_World->CreateEntity();
|
auto t_Light = m_World->CreateEntity();
|
||||||
@@ -132,8 +141,8 @@ void dd::Systems::LevelSystem::Initialize()
|
|||||||
auto wall = m_World->AddComponent<Components::Wall>(BottomWall);
|
auto wall = m_World->AddComponent<Components::Wall>(BottomWall);
|
||||||
transform->Position = glm::vec3(0.f, -6.f, -10.f);
|
transform->Position = glm::vec3(0.f, -6.f, -10.f);
|
||||||
transform->Scale = glm::vec3(20.f, 0.5f, 1.f);
|
transform->Scale = glm::vec3(20.f, 0.5f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall);
|
//std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall);
|
||||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
//sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||||
std::shared_ptr<Components::RectangleShape> rectangleShape = m_World->AddComponent<Components::RectangleShape>(BottomWall);
|
std::shared_ptr<Components::RectangleShape> rectangleShape = m_World->AddComponent<Components::RectangleShape>(BottomWall);
|
||||||
rectangleShape->Dimensions = glm::vec2(20.f, 0.5f);
|
rectangleShape->Dimensions = glm::vec2(20.f, 0.5f);
|
||||||
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(BottomWall);
|
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(BottomWall);
|
||||||
@@ -238,7 +247,7 @@ void dd::Systems::LevelSystem::Initialize()
|
|||||||
transform->Position = glm::vec3(50, 50, -10);
|
transform->Position = glm::vec3(50, 50, -10);
|
||||||
//sound
|
//sound
|
||||||
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(m_BrickTemplate);
|
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(m_BrickTemplate);
|
||||||
collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav";
|
collisionSound->FilePath = "Sounds/Brick/brick-hit.wav";
|
||||||
m_World->CommitEntity(m_BrickTemplate);
|
m_World->CommitEntity(m_BrickTemplate);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -281,7 +290,25 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
|
|
||||||
auto brick = m_World->GetComponent<Components::Brick>(entity);
|
auto brick = m_World->GetComponent<Components::Brick>(entity);
|
||||||
if (brick != nullptr) {
|
if (brick != nullptr) {
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
if (m_BreakAllBricks) {
|
||||||
|
if (!brick->Removed) {
|
||||||
|
brick->Removed = true;
|
||||||
|
BrickHit(entity, entity, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
if (brick->BeingGenerated) {
|
||||||
|
if (transform->Position == brick->GenerationGoal) {
|
||||||
|
brick->BeingGenerated = false;
|
||||||
|
auto cPhys = m_World->AddComponent<Components::Physics>(entity);
|
||||||
|
cPhys->CollisionType = CollisionType::Type::Static;
|
||||||
|
cPhys->GravityScale = 0.f;
|
||||||
|
cPhys->Category = CollisionLayer::Type::Brick;
|
||||||
|
cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Ball | CollisionLayer::Type::Projectile | CollisionLayer::Type::Wall | CollisionLayer::LifeBuoy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Removes bricks that falls out of the stage.
|
//Removes bricks that falls out of the stage.
|
||||||
if (transform->Position.y < -10) {
|
if (transform->Position.y < -10) {
|
||||||
if (brick->Type == StandardBrick) {
|
if (brick->Type == StandardBrick) {
|
||||||
@@ -317,7 +344,17 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
|
|
||||||
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
||||||
|
|
||||||
if (NumberOfBricks() <= 0 && m_LooseBricks <= 0 && !Restarting()) {
|
if (ball != nullptr) {
|
||||||
|
if (m_BrickGenerating) {
|
||||||
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
if (transform->Position.y < 0 && transform->Velocity.y < 0) {
|
||||||
|
m_BrickGenerating = false;
|
||||||
|
BrickGenerating(m_BrickGeneratingEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NumberOfBricks() <= 0 && m_LooseBricks <= 0 && !Restarting() && !m_Cleared) {
|
||||||
if (MultiBalls() <= 0 && PowerUps() <= 0) {
|
if (MultiBalls() <= 0 && PowerUps() <= 0) {
|
||||||
Events::StageCleared ec;
|
Events::StageCleared ec;
|
||||||
ec.ClearedStage = m_CurrentLevel;
|
ec.ClearedStage = m_CurrentLevel;
|
||||||
@@ -470,7 +507,7 @@ bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerati
|
|||||||
|
|
||||||
bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating &event)
|
bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating &event)
|
||||||
{
|
{
|
||||||
GetBrickSet(event.Set);
|
GetBrickSet(event.Set, event.SetCluster);
|
||||||
|
|
||||||
int rows = 6;
|
int rows = 6;
|
||||||
int lines = 7;
|
int lines = 7;
|
||||||
@@ -481,6 +518,8 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
|
|||||||
auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -3.2, 1, m_BrickSet[getter], m_ColorSet[getter]);
|
auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -3.2, 1, m_BrickSet[getter], m_ColorSet[getter]);
|
||||||
if (ent != NULL) {
|
if (ent != NULL) {
|
||||||
auto brick = m_World->GetComponent<Components::Brick>(ent);
|
auto brick = m_World->GetComponent<Components::Brick>(ent);
|
||||||
|
brick->BeingGenerated = true;
|
||||||
|
m_World->RemoveComponent<Components::Physics>(ent);
|
||||||
brick->Number = getter;
|
brick->Number = getter;
|
||||||
m_KrakenBricks[getter] = true;
|
m_KrakenBricks[getter] = true;
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(ent);
|
auto transform = m_World->GetComponent<Components::Transform>(ent);
|
||||||
@@ -491,6 +530,7 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
|
|||||||
} else {
|
} else {
|
||||||
transform->Position = event.Origin2;
|
transform->Position = event.Origin2;
|
||||||
}
|
}
|
||||||
|
brick->GenerationGoal = e.GoalPosition;
|
||||||
e.Entity = ent;
|
e.Entity = ent;
|
||||||
e.Speed = 6;
|
e.Speed = 6;
|
||||||
e.Queue = false;
|
e.Queue = false;
|
||||||
@@ -505,7 +545,7 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Systems::LevelSystem::GetBrickSet(int set) // These are sets the Kraken gets!
|
void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are sets the Kraken gets!
|
||||||
{
|
{
|
||||||
std::array<int, 42> level;
|
std::array<int, 42> level;
|
||||||
std::array<glm::vec4, 42> color;
|
std::array<glm::vec4, 42> color;
|
||||||
@@ -537,101 +577,282 @@ void dd::Systems::LevelSystem::GetBrickSet(int set) // These are sets the Kraken
|
|||||||
glm::vec4 m = glm::vec4(1, 0, 1, 1);
|
glm::vec4 m = glm::vec4(1, 0, 1, 1);
|
||||||
glm::vec4 d = glm::vec4(0, 0, 0, 1);
|
glm::vec4 d = glm::vec4(0, 0, 0, 1);
|
||||||
|
|
||||||
if (set == 1) {
|
if (setCluster == 0) {
|
||||||
level =
|
if (set == 1) {
|
||||||
{1, 0, 0, 0, 0, 0, 1,
|
level = // The Charge
|
||||||
1, 0, 0, 0, 0, 0, 1,
|
{1, 0, 0, 0, 0, 0, 1,
|
||||||
1, 0, 0, 0, 0, 0, 1,
|
0, 1, 0, 0, 0, 1, 0,
|
||||||
1, 1, 1, 1, 1, 1, 2,
|
0, 0, 1, 0, 1, 0, 0,
|
||||||
1, 1, 1, 1, 1, 1, 1,
|
0, 0, 0, 1, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
color =
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
{r, r, r, r, r, r, r,
|
color =
|
||||||
r, r, r, r, r, r, r,
|
{r, r, r, r, r, r, r,
|
||||||
r, r, r, r, r, r, r,
|
r, r, r, r, r, r, r,
|
||||||
r, r, r, r, r, r, r,
|
r, r, r, r, r, r, r,
|
||||||
r, r, r, r, r, r, r,
|
r, r, r, r, r, r, r,
|
||||||
r, r, r, r, r, r, r};
|
r, r, r, r, r, r, r,
|
||||||
}
|
r, r, r, r, r, r, r };
|
||||||
else if (set == 2) {
|
} else if (set == 2) {
|
||||||
level =
|
level = // The Audience
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
3, 0, 1, 0, 1, 0, 1,
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
0, 1, 0, 1, 0, 1, 0,
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
1, 0, 1, 0, 1, 0, 1,
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
color =
|
color =
|
||||||
{y, y, y, y, y, y, y,
|
{y, y, y, y, y, y, y,
|
||||||
y, y, y, y, y, y, y,
|
y, y, y, y, y, y, y,
|
||||||
y, y, y, y, y, y, y,
|
y, y, y, y, y, y, y,
|
||||||
y, y, y, y, y, y, y,
|
y, y, y, y, y, y, y,
|
||||||
y, y, y, y, y, y, y,
|
y, y, y, y, y, y, y,
|
||||||
y, y, y, y, y, y, y};
|
y, y, y, y, y, y, y };
|
||||||
}
|
} else if (set == 3) {
|
||||||
else if (set == 3) {
|
level = // The Alien Defense
|
||||||
level =
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
1, 0, 1, 0, 1, 0, 1,
|
0, 1, 0, 0, 0, 1, 0,
|
||||||
0, 1, 1, 1, 1, 1, 0,
|
1, 1, 1, 0, 1, 1, 1,
|
||||||
0, 0, 4, 1, 1, 0, 0,
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
0, 0, 0, 1, 0, 0, 0};
|
color =
|
||||||
color =
|
{b, b, b, b, b, b, b,
|
||||||
{b, b, b, b, b, b, b,
|
b, b, b, b, b, b, b,
|
||||||
b, b, b, b, b, b, b,
|
b, b, b, b, b, b, b,
|
||||||
b, b, b, b, b, b, b,
|
b, b, b, b, b, b, b,
|
||||||
b, b, b, b, b, b, b,
|
b, b, b, b, b, b, b,
|
||||||
b, b, b, b, b, b, b,
|
b, b, b, b, b, b, b };
|
||||||
b, b, b, b, b, b, b};
|
} else if (set == 4) {
|
||||||
}
|
level = // The Scales (right)
|
||||||
else if (set == 4) {
|
{1, 1, 1, 0, 0, 0, 0,
|
||||||
level =
|
1, 1, 1, 0, 0, 0, 0,
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
1, 1, 1, 1, 1, 3, 1,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1,
|
0, 0, 0, 0, 1, 1, 1 };
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
color =
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
{m, m, m, m, m, m, m,
|
||||||
color =
|
m, m, m, m, m, m, m,
|
||||||
{m, m, m, m, m, m, m,
|
m, m, m, m, m, m, m,
|
||||||
m, m, m, m, m, m, m,
|
m, m, m, m, m, m, m,
|
||||||
m, m, m, m, m, m, m,
|
m, m, m, m, m, m, m,
|
||||||
m, m, m, m, m, m, m,
|
m, m, m, m, m, m, m };
|
||||||
m, m, m, m, m, m, m,
|
} else if (set == 5) {
|
||||||
m, m, m, m, m, m, m};
|
level = // The Scales (left)
|
||||||
}
|
{0, 0, 0, 0, 1, 1, 1,
|
||||||
else if (set == 5) {
|
0, 0, 0, 0, 1, 1, 1,
|
||||||
level =
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 1, 1, 0, 1, 1, 0,
|
1, 1, 1, 0, 0, 0, 0,
|
||||||
0, 1, 2, 0, 1, 1, 0,
|
1, 1, 1, 0, 0, 0, 0 };
|
||||||
0, 1, 1, 0, 1, 1, 0,
|
color =
|
||||||
0, 1, 1, 0, 1, 1, 0,
|
{g, g, g, g, g, g, g,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
g, g, g, g, g, g, g,
|
||||||
color =
|
g, g, g, g, g, g, g,
|
||||||
{g, g, g, g, g, g, g,
|
g, g, g, g, g, g, g,
|
||||||
g, g, g, g, g, g, g,
|
g, g, g, g, g, g, g,
|
||||||
g, g, g, g, g, g, g,
|
g, g, g, g, g, g, g };
|
||||||
g, g, g, g, g, g, g,
|
} else if (set == 6) {
|
||||||
g, g, g, g, g, g, g,
|
level = // The Sword
|
||||||
g, g, g, g, g, g, g};
|
{0, 0, 0, 1, 0, 0, 0,
|
||||||
}
|
0, 0, 1, 1, 1, 0, 0,
|
||||||
else if (set == 6) {
|
0, 0, 0, 1, 0, 0, 0,
|
||||||
level =
|
0, 0, 0, 1, 0, 0, 0,
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 1, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 1, 0, 0, 0 };
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
color =
|
||||||
1, 1, 1, 1, 1, 1, 1,
|
{c, c, c, c, c, c, c,
|
||||||
1, 1, 1, 1, 1, 1, 1,
|
c, c, c, c, c, c, c,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
c, c, c, c, c, c, c,
|
||||||
color =
|
c, c, c, c, c, c, c,
|
||||||
{r, r, r, r, r, r, r,
|
c, c, c, c, c, c, c,
|
||||||
r, r, r, r, r, r, r,
|
c, c, c, c, c, c, c };
|
||||||
r, r, r, r, r, r, r,
|
}
|
||||||
r, r, r, r, r, r, r,
|
} else if (setCluster == 1) {
|
||||||
r, r, r, r, r, r, r,
|
if (set == 1) {
|
||||||
r, r, r, r, r, r, r};
|
level = // The Wall
|
||||||
|
{1, 0, 0, 0, 0, 0, 1,
|
||||||
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
|
1, 0, 0, 0, 0, 0, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 2,
|
||||||
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r };
|
||||||
|
} else if (set == 2) {
|
||||||
|
level = // The Checkerboard
|
||||||
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
3, 0, 1, 0, 1, 0, 1,
|
||||||
|
0, 1, 0, 1, 0, 1, 0,
|
||||||
|
1, 0, 1, 0, 1, 0, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y };
|
||||||
|
} else if (set == 3) {
|
||||||
|
level = // The Fighter Jet
|
||||||
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 0, 1, 0, 1, 0, 1,
|
||||||
|
0, 1, 1, 1, 1, 1, 0,
|
||||||
|
0, 0, 4, 1, 1, 0, 0,
|
||||||
|
0, 0, 0, 1, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b };
|
||||||
|
} else if (set == 4) {
|
||||||
|
level = // The Formation
|
||||||
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 1, 1, 3, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m };
|
||||||
|
} else if (set == 5) {
|
||||||
|
level = // The Pillars
|
||||||
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 1, 1, 0, 1, 1, 0,
|
||||||
|
0, 1, 2, 0, 1, 1, 0,
|
||||||
|
0, 1, 1, 0, 1, 1, 0,
|
||||||
|
0, 1, 1, 0, 1, 1, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g };
|
||||||
|
} else if (set == 6) {
|
||||||
|
level = // The Treasure Chest
|
||||||
|
{0, 0, 0, 1, 0, 0, 0,
|
||||||
|
0, 0, 1, 1, 1, 0, 0,
|
||||||
|
0, 1, 1, 5, 1, 1, 0,
|
||||||
|
0, 0, 1, 1, 1, 0, 0,
|
||||||
|
0, 0, 0, 1, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c };
|
||||||
|
}
|
||||||
|
} else if (setCluster == 2) {
|
||||||
|
if (set == 1) {
|
||||||
|
level = // The Butterfly
|
||||||
|
{1, 0, 0, 1, 0, 0, 1,
|
||||||
|
1, 1, 0, 1, 0, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 0, 1, 0, 1, 1,
|
||||||
|
1, 0, 0, 2, 0, 0, 1,
|
||||||
|
1, 0, 0, 1, 0, 0, 3 };
|
||||||
|
color =
|
||||||
|
{r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r,
|
||||||
|
r, r, r, r, r, r, r };
|
||||||
|
} else if (set == 2) {
|
||||||
|
level = // The Cross
|
||||||
|
{1, 1, 0, 0, 0, 1, 1,
|
||||||
|
0, 4, 1, 0, 1, 1, 0,
|
||||||
|
0, 0, 1, 1, 1, 0, 0,
|
||||||
|
0, 0, 1, 3, 1, 0, 0,
|
||||||
|
0, 1, 1, 0, 1, 1, 0,
|
||||||
|
1, 1, 0, 0, 0, 1, 1 };
|
||||||
|
color =
|
||||||
|
{y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y,
|
||||||
|
y, y, y, y, y, y, y };
|
||||||
|
} else if (set == 3) {
|
||||||
|
level = // The Inverted Cross
|
||||||
|
{0, 0, 1, 6, 1, 0, 0,
|
||||||
|
1, 0, 0, 1, 0, 0, 1,
|
||||||
|
1, 1, 0, 0, 0, 1, 3,
|
||||||
|
1, 1, 0, 0, 0, 1, 1,
|
||||||
|
1, 0, 0, 1, 0, 0, 1,
|
||||||
|
0, 0, 1, 1, 1, 0, 0 };
|
||||||
|
color =
|
||||||
|
{b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b,
|
||||||
|
b, b, b, b, b, b, b };
|
||||||
|
} else if (set == 4) {
|
||||||
|
level = // The Great Wall
|
||||||
|
{1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 1, 1, 1, 1, 5, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
1, 3, 1, 1, 1, 1, 1 };
|
||||||
|
color =
|
||||||
|
{m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m,
|
||||||
|
m, m, m, m, m, m, m };
|
||||||
|
} else if (set == 5) {
|
||||||
|
level = // The Champion
|
||||||
|
{0, 0, 1, 1, 1, 0, 0,
|
||||||
|
0, 0, 1, 1, 2, 0, 0,
|
||||||
|
0, 0, 1, 1, 1, 0, 0,
|
||||||
|
1, 1, 1, 0, 1, 1, 1,
|
||||||
|
5, 1, 1, 0, 1, 1, 1,
|
||||||
|
1, 1, 1, 0, 1, 1, 1 };
|
||||||
|
color =
|
||||||
|
{g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g,
|
||||||
|
g, g, g, g, g, g, g };
|
||||||
|
} else if (set == 6) {
|
||||||
|
level = // The Dog. What, you can't see it? XD
|
||||||
|
{0, 1, 1, 1, 1, 1, 0,
|
||||||
|
1, 1, 2, 1, 2, 1, 1,
|
||||||
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
|
1, 0, 1, 1, 1, 0, 1,
|
||||||
|
1, 0, 1, 1, 1, 0, 1,
|
||||||
|
0, 0, 0, 3, 0, 0, 0 };
|
||||||
|
color =
|
||||||
|
{c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c,
|
||||||
|
c, c, c, c, c, c, c };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::copy(std::begin(level), std::end(level), std::begin(m_BrickSet));
|
std::copy(std::begin(level), std::end(level), std::begin(m_BrickSet));
|
||||||
@@ -690,7 +911,11 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
brick = m_World->GetComponent<Components::Brick>(entityBrick);
|
brick = m_World->GetComponent<Components::Brick>(entityBrick);
|
||||||
if (brick == nullptr) {
|
if (brick == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (brick->BeingGenerated) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (entityShot != 0) {
|
if (entityShot != 0) {
|
||||||
// For when a brick gets shot.
|
// For when a brick gets shot.
|
||||||
@@ -913,10 +1138,15 @@ bool dd::Systems::LevelSystem::OnPowerUpTaken(const dd::Events::PowerUpTaken &ev
|
|||||||
bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
|
bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
|
||||||
{
|
{
|
||||||
m_BrickGenerating = false;
|
m_BrickGenerating = false;
|
||||||
|
m_BreakAllBricks = true;
|
||||||
SetNumberOfBricks(NumberOfBricks() - 1);
|
SetNumberOfBricks(NumberOfBricks() - 1);
|
||||||
m_LooseBricks--;
|
m_LooseBricks--;
|
||||||
|
|
||||||
std::cout << m_LooseBricks << std::endl;
|
Events::ScoreEvent e;
|
||||||
|
e.Score = 1000;
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
|
||||||
|
//std::cout << m_LooseBricks << std::endl;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -924,6 +1154,7 @@ bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated
|
|||||||
bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &event)
|
bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &event)
|
||||||
{
|
{
|
||||||
if (!m_Cleared) {
|
if (!m_Cleared) {
|
||||||
|
m_BreakAllBricks = false;
|
||||||
m_Cleared = true;
|
m_Cleared = true;
|
||||||
SetRestarting(true);
|
SetRestarting(true);
|
||||||
Events::ResetBall e;
|
Events::ResetBall e;
|
||||||
@@ -1002,7 +1233,6 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
|||||||
glm::vec4 p3 = glm::vec4(189.f / 255.f, 0.f / 255.f, 187.f / 255.f, 1.f);
|
glm::vec4 p3 = glm::vec4(189.f / 255.f, 0.f / 255.f, 187.f / 255.f, 1.f);
|
||||||
glm::vec4 p4 = glm::vec4(125.f / 255.f, 0.f / 255.f, 147.f / 255.f, 1.f);
|
glm::vec4 p4 = glm::vec4(125.f / 255.f, 0.f / 255.f, 147.f / 255.f, 1.f);
|
||||||
|
|
||||||
|
|
||||||
if (m_CurrentCluster == 0) {
|
if (m_CurrentCluster == 0) {
|
||||||
if (m_CurrentLevel == 1) {
|
if (m_CurrentLevel == 1) {
|
||||||
level =
|
level =
|
||||||
@@ -1023,10 +1253,10 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
|||||||
level =
|
level =
|
||||||
{0, 0, 0, 0, 0, 0, 0,
|
{0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 100, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 100, 0, 0, 0};
|
||||||
color =
|
color =
|
||||||
{w, w, w, w, w, w, w,
|
{w, w, w, w, w, w, w,
|
||||||
w, w, w, w, w, w, w,
|
w, w, w, w, w, w, w,
|
||||||
@@ -1102,7 +1332,7 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
|||||||
1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 0, 1, 2, 1, 0, 1,
|
1, 0, 1, 2, 1, 0, 1,
|
||||||
0, 1, 0, 1, 0, 1, 0,
|
0, 1, 0, 1, 0, 1, 0,
|
||||||
0, 0, 0, 0, 0, 0, 6,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0};
|
||||||
color =
|
color =
|
||||||
{w, w, w, w, w, w, w,
|
{w, w, w, w, w, w, w,
|
||||||
@@ -1199,10 +1429,6 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
|||||||
bool dd::Systems::LevelSystem::OnHitPad(const dd::Events::HitPad &event)
|
bool dd::Systems::LevelSystem::OnHitPad(const dd::Events::HitPad &event)
|
||||||
{
|
{
|
||||||
m_Cleared = false;
|
m_Cleared = false;
|
||||||
if (m_BrickGenerating) {
|
|
||||||
m_BrickGenerating = false;
|
|
||||||
BrickGenerating(m_BrickGeneratingEvent);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+101
-11
@@ -47,14 +47,94 @@ void dd::Systems::LifeSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
|
|
||||||
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
||||||
if (templateCheck != nullptr){ return; }
|
if (templateCheck != nullptr){ return; }
|
||||||
|
auto life = m_World->GetComponent<Components::Life>(entity);
|
||||||
|
|
||||||
if (Lives() != PastLives()) {
|
|
||||||
auto life = m_World->GetComponent<Components::Life>(entity);
|
if (life != nullptr) {
|
||||||
if (life != nullptr) {
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
if (life->Number + 1 == PastLives()) {
|
if (transform->Position.y < -8) {
|
||||||
m_World->RemoveEntity(entity);
|
m_World->RemoveEntity(entity);
|
||||||
SetPastLives(Lives());
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
transform->Position.x += transform->Velocity.x * dt;
|
||||||
|
transform->Position.y += transform->Velocity.y * dt;
|
||||||
|
|
||||||
|
glm::vec2 dir = glm::normalize(glm::vec2(transform->Velocity.x, transform->Velocity.y));
|
||||||
|
glm::vec2 up = glm::vec2(0.f, 1.f);
|
||||||
|
float angle = glm::acos(glm::dot<float>(dir, up)) * glm::sign(dir.x);
|
||||||
|
transform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, -1.f));
|
||||||
|
|
||||||
|
if (!life->Dead) {
|
||||||
|
if (life->Left) {
|
||||||
|
if (transform->Position.x < -3.8) {
|
||||||
|
life->Left = false;
|
||||||
|
transform->Velocity.x = m_LifeSpeed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (transform->Position.x > 3.8) {
|
||||||
|
life->Left = true;
|
||||||
|
transform->Velocity.x = -m_LifeSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float sin = life->SinusAltitude;
|
||||||
|
life->SinusAltitude += life->SinusSpeed * dt;
|
||||||
|
float y = glm::sin((sin)* glm::half_pi<float>() * life->Frequency) * life->Amplitude;
|
||||||
|
transform->Velocity.y = y;
|
||||||
|
|
||||||
|
if (Lives() != PastLives()) {
|
||||||
|
if (life->Number + 1 == PastLives()) {
|
||||||
|
life->Dead = true;
|
||||||
|
auto model = m_World->GetComponent<Components::Model>(entity);
|
||||||
|
model->Color *= 0.3;
|
||||||
|
|
||||||
|
//Particle trail
|
||||||
|
Events::CreateParticleSequence trail;
|
||||||
|
trail.parent = entity;
|
||||||
|
trail.AlphaValues.push_back(1.f);
|
||||||
|
trail.AlphaValues.push_back(0.f);
|
||||||
|
trail.ScaleValues.push_back(glm::vec3(0.08f));
|
||||||
|
trail.ScaleValues.push_back(glm::vec3(0.f));
|
||||||
|
trail.RadiusDistribution = 1;
|
||||||
|
trail.EmitterLifeTime = 2.f;
|
||||||
|
trail.ParticleLifeTime = 1.f;
|
||||||
|
trail.ParticlesPerTick = 1;
|
||||||
|
trail.SpawnRate = 0.1f;
|
||||||
|
trail.Speed = 10.f;
|
||||||
|
trail.EmittingAngle = glm::half_pi<float>();
|
||||||
|
trail.SpriteFile = "Textures/Particles/FadeBall.png";
|
||||||
|
trail.Color = model->Color;
|
||||||
|
//p.Spread = ...
|
||||||
|
EventBroker->Publish(trail);
|
||||||
|
|
||||||
|
//ParticlePoof
|
||||||
|
Events::CreateParticleSequence poof;
|
||||||
|
poof.EmitterLifeTime = 4;
|
||||||
|
poof.EmittingAngle = glm::half_pi<float>();
|
||||||
|
poof.Spread = 0.5f;
|
||||||
|
poof.NumberOfTicks = 1;
|
||||||
|
poof.ParticleLifeTime = 1.5f;
|
||||||
|
poof.ParticlesPerTick = 1;
|
||||||
|
poof.Position = transform->Position;
|
||||||
|
poof.ScaleValues.clear();
|
||||||
|
poof.ScaleValues.push_back(glm::vec3(0.5f));
|
||||||
|
poof.ScaleValues.push_back(glm::vec3(2.f, 2.f, 0.2f));
|
||||||
|
poof.SpriteFile = "Textures/Particles/Cloud_Particle.png";
|
||||||
|
poof.Color = model->Color;
|
||||||
|
poof.AlphaValues.clear();
|
||||||
|
poof.AlphaValues.push_back(1.f);
|
||||||
|
poof.AlphaValues.push_back(0.f);
|
||||||
|
poof.Speed = 10;
|
||||||
|
EventBroker->Publish(poof);
|
||||||
|
|
||||||
|
//m_World->RemoveEntity(entity);
|
||||||
|
SetPastLives(Lives());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
transform->Velocity.y -= 0.5 * dt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -63,15 +143,25 @@ void dd::Systems::LifeSystem::CreateLife(int number)
|
|||||||
{
|
{
|
||||||
auto life = m_World->CreateEntity();
|
auto life = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life);
|
||||||
transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f);
|
//transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f);
|
||||||
transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f);
|
transform->Position = glm::vec3(-3.8f + number * 3.7f, -5.2f, -10.f);
|
||||||
|
//transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f);
|
||||||
|
transform->Scale = glm::vec3(0.2f, 0.2f, 0.2f);
|
||||||
|
transform->Velocity.x = m_LifeSpeed;
|
||||||
|
|
||||||
std::shared_ptr<Components::Life> lifeNr = m_World->AddComponent<Components::Life>(life);
|
std::shared_ptr<Components::Life> cLife = m_World->AddComponent<Components::Life>(life);
|
||||||
lifeNr->Number = number;
|
cLife->Number = number;
|
||||||
|
cLife->SinusAltitude = glm::half_pi<float>() * number;
|
||||||
|
cLife->Amplitude = 0.2;
|
||||||
|
cLife->Frequency = 1;
|
||||||
|
cLife->SinusSpeed = 1;
|
||||||
|
|
||||||
auto model = m_World->AddComponent<Components::Model>(life);
|
auto model = m_World->AddComponent<Components::Model>(life);
|
||||||
model->ModelFile = "Models/Sid/Sid.dae";
|
model->ModelFile = "Models/Sid/Sid.dae";
|
||||||
|
|
||||||
|
auto anim = m_World->AddComponent<Components::Animation>(life);
|
||||||
|
anim->Speed = 0.5f;
|
||||||
|
|
||||||
m_World->CommitEntity(life);
|
m_World->CommitEntity(life);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +171,7 @@ bool dd::Systems::LifeSystem::OnLifeLost(const dd::Events::LifeLost &event)
|
|||||||
SetLives(Lives() - 1);
|
SetLives(Lives() - 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dd::Systems::LifeSystem::OnPause(const dd::Events::Pause &event)
|
bool dd::Systems::LifeSystem::OnPause(const dd::Events::Pause &event)
|
||||||
|
|||||||
+65
-63
@@ -58,7 +58,11 @@ void dd::Systems::PadSystem::Initialize()
|
|||||||
auto pad = m_World->AddComponent<Components::Pad>(ent);
|
auto pad = m_World->AddComponent<Components::Pad>(ent);
|
||||||
m_World->CommitEntity(ent);
|
m_World->CommitEntity(ent);
|
||||||
|
|
||||||
SetEdge(3.2 - (ctransform->Scale.x / 2));
|
m_Edge = 3.2 - (ctransform->Scale.x / 2);
|
||||||
|
|
||||||
|
m_PadEntity = ent;
|
||||||
|
m_PadTransform = ctransform.get();
|
||||||
|
m_PadComponent = pad.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Stick
|
//Stick
|
||||||
@@ -77,18 +81,31 @@ void dd::Systems::PadSystem::Initialize()
|
|||||||
m_StickTransform = transform;
|
m_StickTransform = transform;
|
||||||
m_StickyAim = sticky;
|
m_StickyAim = sticky;
|
||||||
|
|
||||||
/*{
|
/*{
|
||||||
auto entChild = m_World->CreateEntity(ent);
|
auto entChild = m_World->CreateEntity(ent);
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(entChild);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(entChild);
|
||||||
transform->Position = glm::vec3(0.f, 12.5f, 0.f);
|
transform->Position = glm::vec3(0.f, 12.5f, 0.f);
|
||||||
|
|
||||||
transform->Scale = glm::vec3(0.1f, 25.f, 0.1f);
|
transform->Scale = glm::vec3(0.1f, 25.f, 0.1f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(entChild);
|
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(entChild);
|
||||||
sprite->SpriteFile = "Models/Brick/White.png";
|
sprite->SpriteFile = "Models/Brick/White.png";
|
||||||
sprite->Color = glm::vec4(0.f, 0.5f, 0.f, 0.5f);
|
sprite->Color = glm::vec4(0.f, 0.5f, 0.f, 0.5f);
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kraken arm
|
||||||
|
{
|
||||||
|
m_KrakenArm = m_World->CreateEntity(m_PadEntity);
|
||||||
|
auto transform = m_World->AddComponent<Components::Transform>(m_KrakenArm);
|
||||||
|
transform->Position = glm::vec3(1.f, -3.0f, 0.f);
|
||||||
|
auto model = m_World->AddComponent<Components::Model>(m_KrakenArm);
|
||||||
|
model->ModelFile = "Models/Kraken/Arm.dae";
|
||||||
|
auto animation = m_World->AddComponent<Components::Animation>(m_KrakenArm);
|
||||||
|
animation->Speed = 0.0f;
|
||||||
|
animation->Loop = false;
|
||||||
|
m_World->CommitEntity(m_KrakenArm);
|
||||||
|
}
|
||||||
|
|
||||||
m_ResetBall = true;
|
m_ResetBall = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +127,7 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p
|
|||||||
m_ResetBall = false;
|
m_ResetBall = false;
|
||||||
}
|
}
|
||||||
auto ballTransform = m_World->GetComponent<Components::Transform>(entity);
|
auto ballTransform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
ballTransform->Position = Transform()->Position;
|
ballTransform->Position = m_PadTransform->Position;
|
||||||
ballTransform->Position += ball->StickyPlacement;
|
ballTransform->Position += ball->StickyPlacement;
|
||||||
if (ball->Loaded) {
|
if (ball->Loaded) {
|
||||||
ballTransform->Orientation = glm::quat();
|
ballTransform->Orientation = glm::quat();
|
||||||
@@ -138,17 +155,6 @@ void dd::Systems::PadSystem::Update(double dt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Entity() == 0) {
|
|
||||||
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
|
|
||||||
if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") {
|
|
||||||
SetEntity(it->first);
|
|
||||||
SetTransform(m_World->GetComponent<Components::Transform>(Entity()));
|
|
||||||
SetPad(m_World->GetComponent<Components::Pad>(Entity()));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_KrakenAttack) {
|
if (m_KrakenAttack) {
|
||||||
m_KrakenCharge -= m_KrakenStrength * dt;
|
m_KrakenCharge -= m_KrakenStrength * dt;
|
||||||
if (m_KrakenCharge < 0) {
|
if (m_KrakenCharge < 0) {
|
||||||
@@ -160,9 +166,9 @@ void dd::Systems::PadSystem::Update(double dt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto transform = Transform();
|
auto transform = m_PadTransform;
|
||||||
auto pad = Pad();
|
auto pad = m_PadComponent;
|
||||||
auto acceleration = Acceleration();
|
auto acceleration = m_PadAcceleration;
|
||||||
|
|
||||||
if (glm::abs(transform->Position.y - m_PadHeight) > m_PadRiseSpeed) {
|
if (glm::abs(transform->Position.y - m_PadHeight) > m_PadRiseSpeed) {
|
||||||
if (transform->Position.y < m_PadHeight) {
|
if (transform->Position.y < m_PadHeight) {
|
||||||
@@ -178,27 +184,27 @@ void dd::Systems::PadSystem::Update(double dt)
|
|||||||
transform->Velocity.x = pad->MaxSpeed;
|
transform->Velocity.x = pad->MaxSpeed;
|
||||||
}
|
}
|
||||||
transform->Position += transform->Velocity * (float)dt;
|
transform->Position += transform->Velocity * (float)dt;
|
||||||
if (transform->Position.x > Edge()) {
|
if (transform->Position.x > m_Edge) {
|
||||||
transform->Position.x = Edge();
|
transform->Position.x = m_Edge;
|
||||||
} else if (transform->Position.x < -Edge()) {
|
} else if (transform->Position.x < -m_Edge) {
|
||||||
transform->Position.x = -Edge();
|
transform->Position.x = -m_Edge;
|
||||||
}
|
}
|
||||||
transform->Velocity += acceleration * (float)dt;
|
transform->Velocity += acceleration * (float)dt;
|
||||||
if (glm::abs(transform->Velocity.x) > 1 || (!Left() && !Right())) {
|
if (glm::abs(transform->Velocity.x) > 1 || (!m_Left && !m_Right)) {
|
||||||
transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float) dt;
|
transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float) dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Left()) {
|
if (m_Left) {
|
||||||
acceleration.x = -pad->AccelerationSpeed;
|
acceleration.x = -pad->AccelerationSpeed;
|
||||||
} else if (Right()) {
|
} else if (m_Right) {
|
||||||
acceleration.x = pad->AccelerationSpeed;
|
acceleration.x = pad->AccelerationSpeed;
|
||||||
} else {
|
} else {
|
||||||
acceleration.x = 0.f;
|
acceleration.x = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTransform(transform);
|
m_PadTransform = transform;
|
||||||
SetPad(pad);
|
m_PadComponent = pad;
|
||||||
SetAcceleration(acceleration);
|
m_PadAcceleration = acceleration;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -232,11 +238,11 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
|||||||
} else if (val == GLFW_KEY_LEFT) {
|
} else if (val == GLFW_KEY_LEFT) {
|
||||||
//std::cout << "Left!" << std::endl;
|
//std::cout << "Left!" << std::endl;
|
||||||
//acceleration.x = -0.01f;
|
//acceleration.x = -0.01f;
|
||||||
SetLeft(true);
|
m_Left = true;
|
||||||
} else if (val == GLFW_KEY_RIGHT) {
|
} else if (val == GLFW_KEY_RIGHT) {
|
||||||
//std::cout << "Right!" << std::endl;
|
//std::cout << "Right!" << std::endl;
|
||||||
//acceleration.x = 0.01f;
|
//acceleration.x = 0.01f;
|
||||||
SetRight(true);
|
m_Right = true;
|
||||||
} else if (val == GLFW_KEY_R) {
|
} else if (val == GLFW_KEY_R) {
|
||||||
Events::ResetBall e;
|
Events::ResetBall e;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
@@ -255,7 +261,7 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
|||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_M) {
|
} else if (val == GLFW_KEY_M) {
|
||||||
Events::MultiBall e;
|
Events::MultiBall e;
|
||||||
e.padTransform = Transform();
|
e.padTransform = m_PadTransform;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_P) {
|
} else if (val == GLFW_KEY_P) {
|
||||||
if (IsPaused()) {
|
if (IsPaused()) {
|
||||||
@@ -289,7 +295,7 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
|||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_L) {
|
} else if (val == GLFW_KEY_L) {
|
||||||
Events::Lifebuoy e;
|
Events::Lifebuoy e;
|
||||||
e.Transform = Transform();
|
e.Transform = m_PadTransform;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_Y) {
|
} else if (val == GLFW_KEY_Y) {
|
||||||
Events::StickyPad e;
|
Events::StickyPad e;
|
||||||
@@ -308,14 +314,14 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
|||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_Q) {
|
} else if (val == GLFW_KEY_Q) {
|
||||||
Events::Move e;
|
Events::Move e;
|
||||||
e.Entity = Entity();
|
e.Entity = m_PadEntity;
|
||||||
e.GoalPosition = glm::vec3(0, 0, -10);
|
e.GoalPosition = glm::vec3(0, 0, -10);
|
||||||
e.Speed = 5;
|
e.Speed = 5;
|
||||||
e.Queue = false;
|
e.Queue = false;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_SPACE) {
|
} else if (val == GLFW_KEY_SPACE) {
|
||||||
Events::ActionButton e;
|
Events::ActionButton e;
|
||||||
e.Position = Transform()->Position;
|
e.Position = m_PadTransform->Position;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
} else if (val == GLFW_KEY_D) {
|
} else if (val == GLFW_KEY_D) {
|
||||||
return false;
|
return false;
|
||||||
@@ -331,9 +337,9 @@ bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event)
|
|||||||
} else if (val == GLFW_KEY_DOWN) {
|
} else if (val == GLFW_KEY_DOWN) {
|
||||||
|
|
||||||
} else if (val == GLFW_KEY_LEFT) {
|
} else if (val == GLFW_KEY_LEFT) {
|
||||||
SetLeft(false);
|
m_Left = false;
|
||||||
} else if (val == GLFW_KEY_RIGHT) {
|
} else if (val == GLFW_KEY_RIGHT) {
|
||||||
SetRight(false);
|
m_Right = false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -476,23 +482,15 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even
|
|||||||
m_PlayerStrength = event.PlayerStrength;
|
m_PlayerStrength = event.PlayerStrength;
|
||||||
m_KrakenCharge = event.ChargeUpdate;
|
m_KrakenCharge = event.ChargeUpdate;
|
||||||
m_KrakenAttack = true;
|
m_KrakenAttack = true;
|
||||||
auto transform = Transform();
|
auto transform = m_PadTransform;
|
||||||
auto acceleration = Acceleration();
|
auto acceleration = m_PadAcceleration;
|
||||||
|
|
||||||
transform->Velocity = glm::vec3(0, 0, 0);
|
transform->Velocity = glm::vec3(0, 0, 0);
|
||||||
acceleration = glm::vec3(0, 0, 0);
|
acceleration = glm::vec3(0, 0, 0);
|
||||||
LOG_INFO("Kraken arm duuude");
|
if (m_KrakenArmHitbox == 0) {
|
||||||
if (!m_KrakenArm){
|
auto animation = m_World->GetComponent<Components::Animation>(m_KrakenArm);
|
||||||
LOG_INFO("InKrakenArmDuuude");
|
animation->Time = 0.0;
|
||||||
m_KrakenArm = m_World->CreateEntity(Entity());
|
animation->Speed = 1.0;
|
||||||
auto transform = m_World->AddComponent<Components::Transform>(m_KrakenArm);
|
|
||||||
transform->Position = glm::vec3(1.f, -3.0f, 0.f);
|
|
||||||
auto model = m_World->AddComponent<Components::Model>(m_KrakenArm);
|
|
||||||
model->ModelFile = "Models/Kraken/Arm.dae";
|
|
||||||
auto animation = m_World->AddComponent<Components::Animation>(m_KrakenArm);
|
|
||||||
animation->Speed = 1.0f;
|
|
||||||
animation->Loop = false;
|
|
||||||
m_World->CommitEntity(m_KrakenArm);
|
|
||||||
|
|
||||||
m_KrakenArmHitbox = m_World->CreateEntity();
|
m_KrakenArmHitbox = m_World->CreateEntity();
|
||||||
auto hb_transform = m_World->AddComponent<Components::Transform>(m_KrakenArmHitbox);
|
auto hb_transform = m_World->AddComponent<Components::Transform>(m_KrakenArmHitbox);
|
||||||
@@ -513,8 +511,8 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even
|
|||||||
m_World->CommitEntity(m_KrakenArmHitbox);
|
m_World->CommitEntity(m_KrakenArmHitbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTransform(transform);
|
m_PadTransform = transform;
|
||||||
SetAcceleration(acceleration);
|
m_PadAcceleration = acceleration;
|
||||||
} else if (m_KrakenCharge >= 1) {
|
} else if (m_KrakenCharge >= 1) {
|
||||||
m_KrakenAttack = false;
|
m_KrakenAttack = false;
|
||||||
Events::KrakenAttackEnd e;
|
Events::KrakenAttackEnd e;
|
||||||
@@ -530,10 +528,14 @@ bool dd::Systems::PadSystem::OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd
|
|||||||
m_KrakenStrength = 0;
|
m_KrakenStrength = 0;
|
||||||
m_PlayerStrength = 0;
|
m_PlayerStrength = 0;
|
||||||
|
|
||||||
m_World->RemoveEntity(m_KrakenArm);
|
//m_World->RemoveEntity(m_KrakenArm);
|
||||||
m_World->RemoveEntity(m_KrakenArmHitbox);
|
|
||||||
m_KrakenArm = NULL;
|
auto animation = m_World->GetComponent<Components::Animation>(m_KrakenArm);
|
||||||
m_KrakenArmHitbox = NULL;
|
animation->Time = 0.0;
|
||||||
|
animation->Speed = -1.5;
|
||||||
|
m_World->RemoveEntity(m_KrakenArmHitbox);
|
||||||
|
//m_KrakenArm = NULL;
|
||||||
|
m_KrakenArmHitbox = 0;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,151 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by Adniklastrator on 2015-10-08.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#include "PrecompiledHeader.h"
|
|
||||||
#include "Game/ProjectileSystem.h"
|
|
||||||
|
|
||||||
|
|
||||||
void dd::Systems::ProjectileSystem::Initialize()
|
|
||||||
{
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EContact, &ProjectileSystem::OnContact);
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &ProjectileSystem::OnPause);
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &ProjectileSystem::OnResume);
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInkBlaster, &ProjectileSystem::OnInkBlaster);
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &ProjectileSystem::OnHitPad);
|
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &ProjectileSystem::OnActionButton);
|
|
||||||
|
|
||||||
//Ink Blast
|
|
||||||
{
|
|
||||||
auto ent = m_World->CreateEntity();
|
|
||||||
m_World->SetProperty(ent, "Name", "Projectile");
|
|
||||||
std::shared_ptr<Components::Transform> ctransform = m_World->AddComponent<Components::Transform>(ent);
|
|
||||||
|
|
||||||
auto circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
|
||||||
auto inkBlastTemplate = m_World->AddComponent<Components::Template>(ent);
|
|
||||||
circleShape->Radius = 0.1f;
|
|
||||||
auto physics = m_World->AddComponent<Components::Physics>(ent);
|
|
||||||
physics->CollisionType = CollisionType::Type::Dynamic;
|
|
||||||
physics->Category = CollisionLayer::Type::Projectile;
|
|
||||||
physics->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Pad | CollisionLayer::Type::Brick | CollisionLayer::Type::Wall);
|
|
||||||
physics->Calculate = true;
|
|
||||||
ctransform->Position = glm::vec3(0.f, 0.f, -10.f);
|
|
||||||
ctransform->Scale = glm::vec3(0.6f, 0.6f, 0.6f);
|
|
||||||
// auto cModel = m_World->AddComponent<Components::Model>(ent);
|
|
||||||
// cModel->ModelFile = "Models/Test/Ball/Sid.obj";
|
|
||||||
auto cSprite = m_World->AddComponent<Components::Sprite>(ent);
|
|
||||||
cSprite->SpriteFile = "Textures/Particles/OilShot.png";
|
|
||||||
auto projectile = m_World->AddComponent<Components::Projectile>(ent);
|
|
||||||
|
|
||||||
m_World->CommitEntity(ent);
|
|
||||||
|
|
||||||
m_InkBlastTemplate = ent;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void dd::Systems::ProjectileSystem::Update(double dt)
|
|
||||||
{
|
|
||||||
if (m_Pause) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void dd::Systems::ProjectileSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
|
||||||
{
|
|
||||||
if (IsPaused()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
|
||||||
if (templateCheck != nullptr){ return; }
|
|
||||||
|
|
||||||
auto shot = m_World->GetComponent<Components::Projectile>(entity);
|
|
||||||
if (shot != nullptr) {
|
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
|
||||||
if (transform->Position.y > 8) {
|
|
||||||
m_World->RemoveEntity(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnPause(const dd::Events::Pause &event)
|
|
||||||
{
|
|
||||||
/*if (event.Type != "ProjectileSystem" && event.Type != "All") {
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
m_Pause = true;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnResume(const dd::Events::Resume &event)
|
|
||||||
{
|
|
||||||
/*if (event.Type != "ProjectileSystem" && event.Type != "All") {
|
|
||||||
return false;
|
|
||||||
}*/
|
|
||||||
m_Pause = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnContact(const dd::Events::Contact &event)
|
|
||||||
{
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnInkBlaster(const dd::Events::InkBlaster &event)
|
|
||||||
{
|
|
||||||
m_InkBlaster = true;
|
|
||||||
m_Shots = event.Shots;
|
|
||||||
m_InkBlasterSpeed = event.Speed;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnHitPad(const dd::Events::HitPad &event)
|
|
||||||
{
|
|
||||||
if (m_InkBlaster) {
|
|
||||||
m_SquidLoaded = true;
|
|
||||||
m_AttachedSquid = event.Ball;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButton &event)
|
|
||||||
{
|
|
||||||
if (m_InkBlaster && m_SquidLoaded) {
|
|
||||||
auto ent = m_World->CloneEntity(m_InkBlastTemplate);
|
|
||||||
m_World->RemoveComponent<Components::Template>(ent);
|
|
||||||
auto projectile = m_World->GetComponent<Components::Projectile>(ent);
|
|
||||||
projectile->Speed = m_InkBlasterSpeed;
|
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(ent);
|
|
||||||
transform->Position = event.Position;
|
|
||||||
<<<<<<< HEAD
|
|
||||||
transform->Velocity = glm::vec3(0, projectile->Speed, 0);
|
|
||||||
=======
|
|
||||||
transform->Velocity = glm::vec3(0, 7, 0);
|
|
||||||
>>>>>>> origin/master
|
|
||||||
m_Shots--;
|
|
||||||
if (m_Shots <= 0) {
|
|
||||||
auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid);
|
|
||||||
m_InkBlaster = false;
|
|
||||||
m_SquidLoaded = false;
|
|
||||||
ball->InkBlaster = false;
|
|
||||||
ball->Sticky = false;
|
|
||||||
ball->Waiting = true;
|
|
||||||
|
|
||||||
{
|
|
||||||
Events::InkBlasterOver e;
|
|
||||||
e.Ball = m_AttachedSquid;
|
|
||||||
EventBroker->Publish(e);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
Events::ActionButton e;
|
|
||||||
EventBroker->Publish(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -37,7 +37,7 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*auto camera = m_World->GetComponent<Components::Camera>(entity);
|
auto camera = m_World->GetComponent<Components::Camera>(entity);
|
||||||
|
|
||||||
if (camera != nullptr) {
|
if (camera != nullptr) {
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
@@ -74,7 +74,7 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En
|
|||||||
} else {
|
} else {
|
||||||
m_CameraPosition = transform->Position;
|
m_CameraPosition = transform->Position;
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dd::Systems::ScreenShakeSystem::OnPause(const dd::Events::Pause &event)
|
bool dd::Systems::ScreenShakeSystem::OnPause(const dd::Events::Pause &event)
|
||||||
|
|||||||
@@ -236,7 +236,12 @@ void dd::Systems::PhysicsSystem::Update(double dt)
|
|||||||
auto particle = m_World->GetComponent<Components::Particle>(entity);
|
auto particle = m_World->GetComponent<Components::Particle>(entity);
|
||||||
|
|
||||||
transform->Position = glm::vec3(position.x, position.y, transform->Position.z);
|
transform->Position = glm::vec3(position.x, position.y, transform->Position.z);
|
||||||
transform->Scale = particle->Scale;//glm::vec3(particle->Radius * 2.f, particle->Radius * 2.f, 1);
|
EntityID emitter = m_ParticleEmitters.ParticleEmitter[e];
|
||||||
|
auto cEmitter = m_World->GetComponent<Components::ParticleEmitter>(emitter);
|
||||||
|
if (!cEmitter->DefaultScale)
|
||||||
|
{
|
||||||
|
transform->Scale = particle->Scale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,7 +277,7 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
|
|||||||
m_World->RemoveEntity(entity);
|
m_World->RemoveEntity(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Update alpha
|
//Update alpha & scale
|
||||||
auto sprite = m_World->GetComponent<Components::Sprite>(entity);
|
auto sprite = m_World->GetComponent<Components::Sprite>(entity);
|
||||||
float timeProgress = particle->TimeLived / (particle->LifeTime - 0.1);
|
float timeProgress = particle->TimeLived / (particle->LifeTime - 0.1);
|
||||||
if (timeProgress > 1) {
|
if (timeProgress > 1) {
|
||||||
@@ -281,7 +286,9 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
|
|||||||
auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem);
|
auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem);
|
||||||
if (emitter) {
|
if (emitter) {
|
||||||
sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues);
|
sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues);
|
||||||
particle->Scale = VectorInterpolation(timeProgress, emitter->ScaleValues);
|
if (!emitter->DefaultScale) {
|
||||||
|
particle->Scale = VectorInterpolation(timeProgress, emitter->ScaleValues);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -720,8 +727,9 @@ bool dd::Systems::PhysicsSystem::CreateParticleSequence(const Events::CreatePart
|
|||||||
particleEmitter->EmittingAngle = event.EmittingAngle;
|
particleEmitter->EmittingAngle = event.EmittingAngle;
|
||||||
particleEmitter->LifeTime = event.EmitterLifeTime;
|
particleEmitter->LifeTime = event.EmitterLifeTime;
|
||||||
particleEmitter->AlphaValues = event.AlphaValues;
|
particleEmitter->AlphaValues = event.AlphaValues;
|
||||||
particleEmitter->ScaleValues = event.ScaleValues;
|
|
||||||
particleEmitter->RadiusDistribution = event.RadiusDistribution;
|
particleEmitter->RadiusDistribution = event.RadiusDistribution;
|
||||||
|
particleEmitter->DefaultScale = event.DefaultScale;
|
||||||
|
particleEmitter->ScaleValues = event.ScaleValues;
|
||||||
{
|
{
|
||||||
//Creating Particle Template
|
//Creating Particle Template
|
||||||
auto particle = m_World->CreateEntity(emitter);
|
auto particle = m_World->CreateEntity(emitter);
|
||||||
@@ -731,10 +739,17 @@ bool dd::Systems::PhysicsSystem::CreateParticleSequence(const Events::CreatePart
|
|||||||
m_World->AddComponent<Components::Template>(particle);
|
m_World->AddComponent<Components::Template>(particle);
|
||||||
particleTransform->Position = emitterTransform->Position;
|
particleTransform->Position = emitterTransform->Position;
|
||||||
sprite->SpriteFile = event.SpriteFile;
|
sprite->SpriteFile = event.SpriteFile;
|
||||||
|
if (particleEmitter->DefaultScale == true)
|
||||||
|
{
|
||||||
|
Texture* texture = ResourceManager::Load<Texture>(event.SpriteFile);
|
||||||
|
particleEmitter->ScaleValues.clear();
|
||||||
|
particleEmitter->ScaleValues.push_back(glm::vec3(texture->Width / 100, texture->Height / 100, 1));
|
||||||
|
|
||||||
|
}
|
||||||
sprite->Color = event.Color;
|
sprite->Color = event.Color;
|
||||||
particleComponent->LifeTime = event.ParticleLifeTime;
|
particleComponent->LifeTime = event.ParticleLifeTime;
|
||||||
particleComponent->Flags = event.Flags;
|
particleComponent->Flags = event.Flags;
|
||||||
particleComponent->Scale = event.ScaleValues[0];
|
particleComponent->Scale = particleEmitter->ScaleValues[0];
|
||||||
particleComponent->ParticleSystem = emitter;
|
particleComponent->ParticleSystem = emitter;
|
||||||
}
|
}
|
||||||
m_World->CommitEntity(emitter);
|
m_World->CommitEntity(emitter);
|
||||||
@@ -823,7 +838,7 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
}
|
}
|
||||||
Events::PlaySound se;
|
Events::PlaySound se;
|
||||||
|
|
||||||
//Spawn a particle when a brick collides with somthing
|
//Spawn a particle when a brick collides with something
|
||||||
Events::CreateParticleSequence e;
|
Events::CreateParticleSequence e;
|
||||||
e.EmitterLifeTime = 3;
|
e.EmitterLifeTime = 3;
|
||||||
e.EmittingAngle = glm::half_pi<float>();
|
e.EmittingAngle = glm::half_pi<float>();
|
||||||
@@ -835,8 +850,9 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
e.Color = glm::vec4(1.f);
|
e.Color = glm::vec4(1.f);
|
||||||
e.AlphaValues.push_back(1.f);
|
e.AlphaValues.push_back(1.f);
|
||||||
e.AlphaValues.push_back(0.f);
|
e.AlphaValues.push_back(0.f);
|
||||||
e.ScaleValues.push_back(glm::vec3(1.f));
|
e.ScaleValues.push_back(glm::vec3(4));
|
||||||
e.Speed = 0;
|
e.Speed = 0;
|
||||||
|
e.DefaultScale = true;
|
||||||
|
|
||||||
auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity);
|
auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity);
|
||||||
auto PowerSaviour = m_World->GetComponent<Components::LifebuoyBrick>(entity);
|
auto PowerSaviour = m_World->GetComponent<Components::LifebuoyBrick>(entity);
|
||||||
@@ -846,21 +862,27 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
|
|
||||||
if (PowerFriend) {
|
if (PowerFriend) {
|
||||||
se.FilePath = "Sounds/jap-awesome.wav";
|
se.FilePath = "Sounds/jap-awesome.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
e.SpriteFile = "Textures/PowerUps/Friends.png";
|
e.SpriteFile = "Textures/PowerUps/Friends.png";
|
||||||
} else if (PowerSaviour) {
|
} else if (PowerSaviour) {
|
||||||
se.FilePath = "Sounds/jap-awesome.wav";
|
se.FilePath = "Sounds/jap-awesome.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
e.SpriteFile = "Textures/PowerUps/Saviour.png";
|
e.SpriteFile = "Textures/PowerUps/Saviour.png";
|
||||||
} else if (PowerSticky) {
|
} else if (PowerSticky) {
|
||||||
se.FilePath = "Sounds/jap-awesome.wav";
|
se.FilePath = "Sounds/jap-awesome.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
e.SpriteFile = "Textures/PowerUps/Sticky.png";
|
e.SpriteFile = "Textures/PowerUps/Sticky.png";
|
||||||
} else if (PowerInkBlaster){
|
} else if (PowerInkBlaster){
|
||||||
se.FilePath = "Sounds/jap-awesome.wav";
|
se.FilePath = "Sounds/jap-awesome.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
e.SpriteFile = "Textures/PowerUps/InkBlaster.png";
|
e.SpriteFile = "Textures/PowerUps/InkBlaster.png";
|
||||||
} else if (PowerKraken) {
|
} else if (PowerKraken) {
|
||||||
se.FilePath = "Sounds/jap-awesome.wav";
|
se.FilePath = "Sounds/jap-huh.wav";
|
||||||
|
EventBroker->Publish(se);
|
||||||
e.SpriteFile = "Textures/PowerUps/RealeaseTheKraken.png";
|
e.SpriteFile = "Textures/PowerUps/RealeaseTheKraken.png";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
e.DefaultScale = false;
|
||||||
e.EmitterLifeTime = 4;
|
e.EmitterLifeTime = 4;
|
||||||
e.EmittingAngle = glm::half_pi<float>();
|
e.EmittingAngle = glm::half_pi<float>();
|
||||||
e.Spread = 0.5f;
|
e.Spread = 0.5f;
|
||||||
@@ -880,7 +902,6 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
EventBroker->Publish(se);
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,18 +35,17 @@ void dd::Systems::AnimationSystem::Update(double dt)
|
|||||||
|
|
||||||
if (animationComponent->Speed != 0.0) {
|
if (animationComponent->Speed != 0.0) {
|
||||||
double nextTime = animationComponent->Time + animationComponent->Speed * dt;
|
double nextTime = animationComponent->Time + animationComponent->Speed * dt;
|
||||||
if (glm::abs(nextTime) > animation->Duration) {
|
if (!animationComponent->Loop && glm::abs(nextTime) > animation->Duration) {
|
||||||
if (!animationComponent->Loop) {
|
animationComponent->Time = glm::sign(nextTime) * animation->Duration;
|
||||||
animationComponent->Time = glm::sign(nextTime) * animation->Duration;
|
animationComponent->Speed = 0.0;
|
||||||
animationComponent->Speed = 0.0;
|
LOG_DEBUG("Animation \"%s\" on Entity %i finished.", animationComponent->Name.c_str(), ent);
|
||||||
LOG_DEBUG("Animation \"%s\" on Entity %i finished.", animationComponent->Name.c_str(), ent);
|
Events::AnimationComplete e;
|
||||||
Events::AnimationComplete e;
|
e.Entity = ent;
|
||||||
e.Entity = ent;
|
e.Animation = animationComponent->Name;
|
||||||
e.Animation = animationComponent->Name;
|
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
} else {
|
||||||
|
animationComponent->Time = nextTime;
|
||||||
}
|
}
|
||||||
animationComponent->Time = nextTime;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,10 @@
|
|||||||
|
|
||||||
void dd::Renderer::Initialize()
|
void dd::Renderer::Initialize()
|
||||||
{
|
{
|
||||||
|
ResourceManager::RegisterType<ShaderProgram>("ShaderProgram");
|
||||||
|
ResourceManager::RegisterType<VertexShader>("VertexShader");
|
||||||
|
ResourceManager::RegisterType<FragmentShader>("FragmentShader");
|
||||||
|
|
||||||
// Initialize GLFW
|
// Initialize GLFW
|
||||||
if (!glfwInit()) {
|
if (!glfwInit()) {
|
||||||
LOG_ERROR("GLFW: Initialization failed");
|
LOG_ERROR("GLFW: Initialization failed");
|
||||||
@@ -59,7 +63,7 @@ void dd::Renderer::Initialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create default camera
|
// Create default camera
|
||||||
m_DefaultCamera = std::unique_ptr<dd::Camera>(new dd::Camera((float)m_Resolution.Width / m_Resolution.Height, 45.f, 0.01f, 5000.f));
|
m_DefaultCamera = std::unique_ptr<dd::Camera>(new dd::Camera((float)m_Resolution.Width / m_Resolution.Height, glm::radians(45.f), 0.01f, 5000.f));
|
||||||
m_DefaultCamera->SetPosition(glm::vec3(0, 0, 0));
|
m_DefaultCamera->SetPosition(glm::vec3(0, 0, 0));
|
||||||
if (m_Camera == nullptr) {
|
if (m_Camera == nullptr) {
|
||||||
m_Camera = m_DefaultCamera.get();
|
m_Camera = m_DefaultCamera.get();
|
||||||
@@ -387,11 +391,6 @@ void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
|||||||
DrawWater(objects);
|
DrawWater(objects);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Renderer::PlaceCamera(glm::vec3 position)
|
|
||||||
{
|
|
||||||
m_DefaultCamera->SetPosition(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
||||||
{
|
{
|
||||||
GLuint shaderProgramHandle = program;
|
GLuint shaderProgramHandle = program;
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ std::vector<glm::mat4> dd::Skeleton::GetFrameBones(const Animation& animation, d
|
|||||||
int currentKeyframeIndex = GetKeyframe(animation, time);
|
int currentKeyframeIndex = GetKeyframe(animation, time);
|
||||||
|
|
||||||
const Animation::Keyframe& currentFrame = animation.Keyframes[currentKeyframeIndex];
|
const Animation::Keyframe& currentFrame = animation.Keyframes[currentKeyframeIndex];
|
||||||
const Animation::Keyframe& nextFrame = animation.Keyframes[currentKeyframeIndex + 1];
|
const Animation::Keyframe& nextFrame = animation.Keyframes[(currentKeyframeIndex + 1) % animation.Keyframes.size()];
|
||||||
float alpha = (time - currentFrame.Time) / (nextFrame.Time - currentFrame.Time);
|
float alpha = (time - currentFrame.Time) / (nextFrame.Time - currentFrame.Time);
|
||||||
|
|
||||||
//auto animationFrame = Animations[""].Keyframes[frame];
|
//auto animationFrame = Animations[""].Keyframes[frame];
|
||||||
@@ -149,7 +149,7 @@ int dd::Skeleton::GetKeyframe(const Animation& animation, double time)
|
|||||||
{
|
{
|
||||||
if (time < 0)
|
if (time < 0)
|
||||||
time = 0;
|
time = 0;
|
||||||
if (time > animation.Duration)
|
if (time >= animation.Duration)
|
||||||
return animation.Keyframes.size() - 1;
|
return animation.Keyframes.size() - 1;
|
||||||
|
|
||||||
for (int keyframe = 0; keyframe < animation.Keyframes.size(); ++keyframe) {
|
for (int keyframe = 0; keyframe < animation.Keyframes.size(); ++keyframe) {
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ void dd::Systems::SoundSystem::Initialize()
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound);
|
EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume);
|
EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &SoundSystem::OnGameStart);
|
EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &SoundSystem::OnGameStart);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAppear, &SoundSystem::OnKrakenAppear);
|
||||||
|
|
||||||
m_SFXMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.SFXVolume", 1.f);
|
m_SFXMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.SFXVolume", 1.f);
|
||||||
m_BGMMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.BGMVolume", 1.f);
|
m_BGMMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.BGMVolume", 1.f);
|
||||||
@@ -214,5 +215,32 @@ bool dd::Systems::SoundSystem::OnGameStart(const dd::Events::GameStart &event)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool dd::Systems::SoundSystem::OnKrakenAppear(const dd::Events::KrakenAppear &event)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
dd::Events::StopSound e;
|
||||||
|
e.FilePath = GAME_BGM;
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dd::Events::StopSound e;
|
||||||
|
e.FilePath = WATER_BGM;
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dd::Events::PlaySound e;
|
||||||
|
e.FilePath = BOSS_BGM;
|
||||||
|
e.IsAmbient = true;
|
||||||
|
e.Gain = 0.4f;
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dd::Events::PlaySound e;
|
||||||
|
e.FilePath = "Sounds/Boss/boss-roar.wav";
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user