Kraken shows up on last stage. Created WaterSystem for possible future use.
This commit is contained in:
@@ -11,8 +11,11 @@ void dd::Systems::KrakenSystem::Initialize()
|
||||
m_RandomGenerator = std::mt19937(rd());
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &KrakenSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &KrakenSystem::OnResume);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EContact, &KrakenSystem::OnContact);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAppear, &KrakenSystem::OnKrakenAppear);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &KrakenSystem::OnKrakenAttack);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenHit, &KrakenSystem::OnKrakenHit);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &KrakenSystem::OnKrakenDefeated);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &KrakenSystem::OnBrickGenerating);
|
||||
|
||||
EntityID ent = m_World->CreateEntity();
|
||||
@@ -59,7 +62,7 @@ void dd::Systems::KrakenSystem::Update(double dt)
|
||||
|
||||
void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||
{
|
||||
if (IsPaused()) {
|
||||
if (IsPaused() || !m_KrakenBattle) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -68,6 +71,11 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
||||
|
||||
auto kraken = m_World->GetComponent<Components::Kraken>(entity);
|
||||
if (kraken != nullptr) {
|
||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||
if (transform->Position.y < -10) {
|
||||
m_World->RemoveEntity(entity);
|
||||
return;
|
||||
}
|
||||
Events::KrakenAttack krakenAttack;
|
||||
switch (kraken->CurrentAction)
|
||||
{
|
||||
@@ -77,9 +85,9 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
|
||||
m_KrakenTimer = 0;
|
||||
std::uniform_real_distribution<float> dist(1, 2.999f);
|
||||
float random = dist(m_RandomGenerator);
|
||||
std::cout << random << std::endl;
|
||||
//std::cout << random << std::endl;
|
||||
kraken->CurrentAction = random;
|
||||
std::cout << kraken->CurrentAction << std::endl;
|
||||
//std::cout << kraken->CurrentAction << std::endl;
|
||||
}
|
||||
break;
|
||||
case 2: // Grabbing
|
||||
@@ -126,6 +134,42 @@ bool dd::Systems::KrakenSystem::OnResume(const dd::Events::Resume &event)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnContact(const dd::Events::Contact &event)
|
||||
{
|
||||
Components::Kraken* kraken1 = m_World->GetComponent<Components::Kraken>(event.Entity1);
|
||||
Components::Kraken* kraken2 = m_World->GetComponent<Components::Kraken>(event.Entity2);
|
||||
Components::Kraken* kraken;
|
||||
|
||||
if (kraken1 != nullptr && kraken2 != nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
EntityID krakenEntity, otherEntitiy;
|
||||
|
||||
//Which is the ball?
|
||||
if (kraken1 != nullptr) {
|
||||
krakenEntity = event.Entity1;
|
||||
otherEntitiy = event.Entity2;
|
||||
kraken = kraken1;
|
||||
}
|
||||
else if (kraken2 != nullptr) {
|
||||
krakenEntity = event.Entity2;
|
||||
otherEntitiy = event.Entity1;
|
||||
kraken = kraken2;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto ball = m_World->GetComponent<Components::Ball>(otherEntitiy);
|
||||
if (ball != nullptr) {
|
||||
Events::KrakenHit e;
|
||||
e.Kraken = krakenEntity;
|
||||
e.Hitter = otherEntitiy;
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &event)
|
||||
{
|
||||
auto ent = m_World->CloneEntity(m_KrakenTemplate);
|
||||
@@ -144,6 +188,103 @@ bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &e
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
|
||||
{
|
||||
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
||||
//kraken->Health--;
|
||||
//std::cout << kraken->Health << std::endl;
|
||||
kraken->Health = -1;
|
||||
if (kraken->Health < 0) {
|
||||
Events::KrakenDefeated e;
|
||||
e.Kraken = event.Kraken;
|
||||
e.Hitter = event.Hitter;
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
|
||||
{
|
||||
m_KrakenBattle = false;
|
||||
|
||||
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
|
||||
auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken);
|
||||
/*physicsComponent->CollisionType = CollisionType::Type::Dynamic;
|
||||
physicsComponent->GravityScale = 1.f;
|
||||
physicsComponent->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Water | CollisionLayer::Wall);
|
||||
physicsComponent->Calculate = false;*/
|
||||
|
||||
auto transformComponentBrick = m_World->GetComponent<Components::Transform>(event.Kraken);
|
||||
auto transformComponentHitter = m_World->GetComponent<Components::Transform>(event.Hitter);
|
||||
|
||||
|
||||
auto brickModel = m_World->GetComponent<Components::Model>(event.Kraken);
|
||||
|
||||
auto cTransform = m_World->GetComponent<Components::Transform>(event.Kraken);
|
||||
/*cTransform->Position = cTransform->Position + transformComponentBrick->Position;
|
||||
glm::vec2 ballToBrick = 4.f * glm::normalize(glm::vec2(cTransform->Position.x - transformComponentHitter->Position.x, cTransform->Position.y - transformComponentHitter->Position.y));
|
||||
cTransform->Velocity = glm::vec3(ballToBrick.x, ballToBrick.y, 0.f);
|
||||
|
||||
std::uniform_real_distribution<float> dist(-1.5f, 1.5f);
|
||||
int impulseStrength = dist(m_RandomGenerator);
|
||||
|
||||
Events::SetImpulse i;
|
||||
i.Entity = event.Kraken;
|
||||
i.Impulse = glm::vec2(impulseStrength, 0.f);
|
||||
i.Point = glm::vec2(cTransform->Position.x, cTransform->Position.y + 0.5f);
|
||||
EventBroker->Publish(i);*/
|
||||
|
||||
auto cModel = m_World->GetComponent<Components::Model>(event.Kraken);
|
||||
cModel->Color = brickModel->Color;
|
||||
cModel->Color *= 0.5f;
|
||||
|
||||
/*m_World->RemoveComponent<Components::Template>(event.Kraken);
|
||||
m_World->SetEntityParent(event.Kraken, 0);
|
||||
m_World->CommitEntity(event.Kraken);*/
|
||||
|
||||
//Particle trail
|
||||
Events::CreateParticleSequence trail;
|
||||
trail.parent = event.Kraken;
|
||||
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 = brickModel->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 = cTransform->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 = brickModel->Color;
|
||||
poof.AlphaValues.clear();
|
||||
poof.AlphaValues.push_back(1.f);
|
||||
poof.AlphaValues.push_back(0.f);
|
||||
poof.Speed = 10;
|
||||
EventBroker->Publish(poof);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -18,10 +18,12 @@ void dd::Systems::LevelSystem::Initialize()
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EMultiBallLost, &LevelSystem::OnMultiBallLost);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPowerUpTaken, &LevelSystem::OnPowerUpTaken);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &LevelSystem::OnStageCleared);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EArrivedAtNewStage, &LevelSystem::OnArrivedAtNewStage);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &LevelSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &LevelSystem::OnResume);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated);
|
||||
|
||||
//PointLightTest
|
||||
{
|
||||
@@ -82,16 +84,7 @@ void dd::Systems::LevelSystem::Initialize()
|
||||
}*/
|
||||
|
||||
// auto particleEmitter= m_World->AddComponent<Components::Emitter>(Pe);
|
||||
//Water test
|
||||
{
|
||||
auto t_waterBody = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
|
||||
transform->Position = glm::vec3(0.f, -3.5f, -10.f);
|
||||
transform->Scale = glm::vec3(7.0f, 1.5f, 1.f);
|
||||
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
|
||||
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||
m_World->CommitEntity(t_waterBody);
|
||||
}
|
||||
|
||||
|
||||
//ParticleTest
|
||||
|
||||
@@ -132,20 +125,23 @@ void dd::Systems::LevelSystem::Initialize()
|
||||
//TODO: Why does the ball not collide with these bricks?
|
||||
//BottomBox
|
||||
{
|
||||
auto BottomWall = m_World->CreateEntity();
|
||||
EntityID BottomWall = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(BottomWall);
|
||||
auto wall = m_World->AddComponent<Components::Wall>(BottomWall);
|
||||
transform->Position = glm::vec3(0.f, -6.f, -10.f);
|
||||
transform->Scale = glm::vec3(20.f, 0.5f, 1.f);
|
||||
//std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall);
|
||||
//sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall);
|
||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
||||
std::shared_ptr<Components::RectangleShape> rectangleShape = m_World->AddComponent<Components::RectangleShape>(BottomWall);
|
||||
rectangleShape->Dimensions = glm::vec2(20.f, 0.5f);
|
||||
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(BottomWall);
|
||||
physics->CollisionType = CollisionType::Type::Static;
|
||||
physics->Category = CollisionLayer::Wall;
|
||||
physics->Calculate = true;
|
||||
physics->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::LifeBuoy);
|
||||
m_World->CommitEntity(BottomWall);
|
||||
|
||||
m_World->SetProperty(BottomWall, "Name", "BottomWall");
|
||||
}
|
||||
|
||||
{
|
||||
@@ -295,6 +291,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
||||
} else if (brick->Type == InkBlasterBrick) {
|
||||
Events::InkBlaster e;
|
||||
e.Shots = 5;
|
||||
e.Speed = 5;
|
||||
EventBroker->Publish(e);
|
||||
} else if(brick->Type == KrakenAttackBrick) {
|
||||
Events::KrakenAttack e;
|
||||
@@ -315,6 +312,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
||||
Events::StageCleared ec;
|
||||
ec.ClearedStage = m_CurrentLevel;
|
||||
ec.StageCluster = m_CurrentCluster;
|
||||
ec.StagesInCluster = m_StagesInCluster;
|
||||
EventBroker->Publish(ec);
|
||||
} else {
|
||||
if (ball != nullptr && MultiBalls() > 0) {
|
||||
@@ -682,6 +680,7 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr
|
||||
Events::InkBlaster e;
|
||||
e.Transform = transformComponentBrick;
|
||||
e.Shots = 5;
|
||||
e.Speed = 5;
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
else {
|
||||
@@ -704,8 +703,6 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr
|
||||
auto brickChildren = m_World->GetEntityChildren(entityBrick);
|
||||
for (auto b : brickChildren)
|
||||
{
|
||||
|
||||
|
||||
auto cTransform = m_World->GetComponent<Components::Transform>(b);
|
||||
cTransform->Position = cTransform->Position + transformComponentBrick->Position;
|
||||
glm::vec2 ballToBrick = 4.f * glm::normalize(glm::vec2(cTransform->Position.x - transformComponentHitter->Position.x, cTransform->Position.y - transformComponentHitter->Position.y));
|
||||
@@ -831,6 +828,16 @@ bool dd::Systems::LevelSystem::OnPowerUpTaken(const dd::Events::PowerUpTaken &ev
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
|
||||
{
|
||||
SetNumberOfBricks(NumberOfBricks() - 1);
|
||||
m_LooseBricks--;
|
||||
|
||||
std::cout << m_LooseBricks << std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &event)
|
||||
{
|
||||
if (!m_Cleared) {
|
||||
@@ -842,12 +849,13 @@ bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &ev
|
||||
es.Score = 500;
|
||||
EventBroker->Publish(es);
|
||||
m_CurrentLevel++;
|
||||
if (m_CurrentLevel < 6) {
|
||||
if (m_CurrentLevel <= event.StagesInCluster) {
|
||||
GetNextLevel();
|
||||
CreateLevel(12); //NextLevelDistance
|
||||
} else {
|
||||
// Win
|
||||
Events::ClusterClear e;
|
||||
e.ClusterCleared = m_CurrentCluster;
|
||||
EventBroker->Publish(e);
|
||||
|
||||
Events::Pause p;
|
||||
@@ -858,6 +866,12 @@ bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &ev
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::LevelSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event)
|
||||
{
|
||||
m_Cleared = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dd::Systems::LevelSystem::GetNextLevel()
|
||||
{
|
||||
std::array<int, 42> level;
|
||||
|
||||
+41
-14
@@ -30,6 +30,7 @@ void dd::Systems::PadSystem::Initialize()
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResetBall, &PadSystem::OnResetBall);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResetAll, &PadSystem::OnResetAll);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &PadSystem::OnRaiseWater);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWaterWall, &PadSystem::OnRaiseWaterWall);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &PadSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &PadSystem::OnResume);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &PadSystem::OnKrakenAttack);
|
||||
@@ -74,6 +75,17 @@ void dd::Systems::PadSystem::Initialize()
|
||||
|
||||
m_StickTransform = transform;
|
||||
m_StickyAim = sticky;
|
||||
|
||||
/*{
|
||||
auto entChild = m_World->CreateEntity(ent);
|
||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(entChild);
|
||||
transform->Position = glm::vec3(0.f, 12.5f, 0.f);
|
||||
|
||||
transform->Scale = glm::vec3(0.1f, 25.f, 0.1f);
|
||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(entChild);
|
||||
sprite->SpriteFile = "Models/Brick/White.png";
|
||||
sprite->Color = glm::vec4(0.f, 0.5f, 0.f, 0.5f);
|
||||
}*/
|
||||
}
|
||||
|
||||
m_ResetBall = true;
|
||||
@@ -219,8 +231,14 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
||||
} else if (val == GLFW_KEY_W) {
|
||||
Events::RaiseWater e;
|
||||
e.Amount = 0.2;
|
||||
e.Speed = 0.2;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_A) {
|
||||
} else if (val == GLFW_KEY_Q) {
|
||||
Events::RaiseWaterWall e;
|
||||
e.Amount = 0.2;
|
||||
e.Speed = 0.2;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_A) {
|
||||
Events::ResetAll e;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_M) {
|
||||
@@ -267,6 +285,7 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
||||
} else if (val == GLFW_KEY_I) {
|
||||
Events::InkBlaster e;
|
||||
e.Shots = 5;
|
||||
e.Speed = 5;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_K) {
|
||||
Events::KrakenAttack e;
|
||||
@@ -416,21 +435,29 @@ bool dd::Systems::PadSystem::OnResetAll(const dd::Events::ResetAll &event)
|
||||
}
|
||||
|
||||
bool dd::Systems::PadSystem::OnRaiseWater(const dd::Events::RaiseWater &event)
|
||||
{
|
||||
RaisePad(event.Amount, event.Speed);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::PadSystem::OnRaiseWaterWall(const dd::Events::RaiseWaterWall &event)
|
||||
{
|
||||
RaisePad(event.Amount, event.Speed);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::PadSystem::RaisePad(float amount, float speed)
|
||||
{
|
||||
auto transform = Transform();
|
||||
glm::vec3 raise = glm::vec3(0, event.Amount, 0);
|
||||
transform->Position += raise;
|
||||
|
||||
{
|
||||
auto t_waterBody = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
|
||||
transform->Position = glm::vec3(0.f, -3.5f, -10.f);
|
||||
transform->Scale = glm::vec3(7.0f, event.Amount * 1.6f, 1.f);
|
||||
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
|
||||
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||
m_World->CommitEntity(t_waterBody);
|
||||
}
|
||||
|
||||
glm::vec3 raise = glm::vec3(0, amount, 0);
|
||||
Events::Move e;
|
||||
e.Entity = m_Entity;
|
||||
e.GoalPosition = transform->Position + raise;
|
||||
e.Speed = speed;
|
||||
e.Queue = true;
|
||||
EventBroker->Publish(e);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ bool dd::Systems::ProjectileSystem::OnInkBlaster(const dd::Events::InkBlaster &e
|
||||
{
|
||||
m_InkBlaster = true;
|
||||
m_Shots = event.Shots;
|
||||
m_InkBlasterSpeed = event.Speed;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -115,9 +116,11 @@ bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButto
|
||||
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;
|
||||
transform->Velocity = glm::vec3(0, 5, 0);
|
||||
transform->Velocity = glm::vec3(0, projectile->Speed, 0);
|
||||
m_Shots--;
|
||||
if (m_Shots <= 0) {
|
||||
auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid);
|
||||
|
||||
@@ -97,7 +97,7 @@ bool dd::Systems::TravellingSystem::OnResume(const dd::Events::Resume &event)
|
||||
|
||||
bool dd::Systems::TravellingSystem::OnStageCleared(const dd::Events::StageCleared &event)
|
||||
{
|
||||
if (event.ClearedStage < 5) {
|
||||
if (event.ClearedStage < event.StagesInCluster) {
|
||||
m_Travelling = true;
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
//
|
||||
// Created by Adniklastrator on 2015-10-20.
|
||||
//
|
||||
|
||||
#include "PrecompiledHeader.h"
|
||||
#include "Game/WaterSystem.h"
|
||||
|
||||
void dd::Systems::WaterSystem::Initialize()
|
||||
{
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &WaterSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &WaterSystem::OnResume);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ERelevantObjectCreated, &WaterSystem::OnRelevantObjectCreated);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &WaterSystem::OnStageCleared);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &WaterSystem::OnRaiseWater);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWaterWall, &WaterSystem::OnRaiseWaterWall);
|
||||
|
||||
//Water test
|
||||
{
|
||||
auto t_waterBody = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
|
||||
transform->Position = glm::vec3(0.f, -3.5f, -10.f);
|
||||
transform->Scale = glm::vec3(7.0f, 1.5f, 1.f);
|
||||
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
|
||||
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||
m_World->CommitEntity(t_waterBody);
|
||||
}
|
||||
}
|
||||
|
||||
void dd::Systems::WaterSystem::Update(double dt)
|
||||
{
|
||||
if (m_Pause) {
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||
{
|
||||
if (m_Pause) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
||||
if (templateCheck != nullptr){ return; }
|
||||
|
||||
if (m_BottomWall == 0) {
|
||||
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
|
||||
if (m_World->GetProperty<std::string>(it->first, "Name") == "BottomWall") {
|
||||
m_BottomWall = entity;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnPause(const dd::Events::Pause &event)
|
||||
{
|
||||
/*if (event.Type != "WaterSystem" && event.Type != "All") {
|
||||
return false;
|
||||
}*/
|
||||
m_Pause = true;
|
||||
return true;
|
||||
}
|
||||
bool dd::Systems::WaterSystem::OnResume(const dd::Events::Resume &event)
|
||||
{
|
||||
/*if (event.Type != "WaterSystem" && event.Type != "All") {
|
||||
return false;
|
||||
}*/
|
||||
m_Pause = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnRelevantObjectCreated(const dd::Events::RelevantObjectCreated &event)
|
||||
{
|
||||
if (event.ObjectName == "BottomWall") {
|
||||
m_BottomWall = event.ObjectID;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnStageCleared(const dd::Events::StageCleared &event)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnRaiseWater(const dd::Events::RaiseWater &event)
|
||||
{
|
||||
{
|
||||
auto t_waterBody = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
|
||||
transform->Position = glm::vec3(0.f, -3.5f, -10.f);
|
||||
transform->Scale = glm::vec3(7.0f, event.Amount * 1.6f, 1.f);
|
||||
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
|
||||
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
|
||||
m_World->CommitEntity(t_waterBody);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::WaterSystem::OnRaiseWaterWall(const dd::Events::RaiseWaterWall &event)
|
||||
{
|
||||
auto transform = m_World->GetComponent<Components::Transform>(m_BottomWall);
|
||||
if (transform != nullptr) {
|
||||
glm::vec3 raise = glm::vec3(0, event.Amount, 0);
|
||||
Events::Move e;
|
||||
e.Entity = m_BottomWall;
|
||||
e.GoalPosition = transform->Position + raise;
|
||||
e.Queue = true;
|
||||
e.Speed = 0.2;
|
||||
EventBroker->Publish(e);
|
||||
} else {
|
||||
LOG_ERROR("There is no BottomWall in WaterSystem");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user