diff --git a/assets/Textures/PowerUps/Friend.png b/assets/Textures/PowerUps/Friends.png similarity index 100% rename from assets/Textures/PowerUps/Friend.png rename to assets/Textures/PowerUps/Friends.png diff --git a/assets/Textures/PowerUps/Ink Blaster.png b/assets/Textures/PowerUps/InkBlaster.png similarity index 100% rename from assets/Textures/PowerUps/Ink Blaster.png rename to assets/Textures/PowerUps/InkBlaster.png diff --git a/include/Game/CBrick.h b/include/Game/CBrick.h index 7b477cf..a264125 100644 --- a/include/Game/CBrick.h +++ b/include/Game/CBrick.h @@ -16,6 +16,7 @@ namespace Components struct Brick : Component { int Score = 50; + //0 = empty, 1 = normal, 2 = multi-brick, 3 = lifebuoy, 4 = sticky, 5 = blaster, 6 = kraken int Type = 0; bool Removed = false; diff --git a/include/Physics/PhysicsSystem.h b/include/Physics/PhysicsSystem.h index 880f546..6788124 100755 --- a/include/Physics/PhysicsSystem.h +++ b/include/Physics/PhysicsSystem.h @@ -25,6 +25,8 @@ #include "Physics/CCircleShape.h" #include "Physics/CParticleEmitter.h" +#include "Game/BrickComponents.h" + #include "Transform/TransformSystem.h" #include "Transform/TransformSystem.h" diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index 85cd429..19f538b 100755 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -690,10 +690,12 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event) { //Check if it is a brick colliding auto brick = m_World->GetComponent(event.Entity1); + EntityID entity = event.Entity1; Components::Model* model; if (!brick) { brick = m_World->GetComponent(event.Entity2); + EntityID entity = event.Entity2; if (!brick) { return false; } @@ -704,21 +706,57 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event) else { model = m_World->GetComponent(event.Entity1); } + + //Spawn a particle when a brick collides with somthing Events::CreateParticleSequence e; - e.EmitterLifeTime = 4; - //- glm::atan(event.Normal.x, event.Normal.y + + + e.EmitterLifeTime = 3; e.EmittingAngle = glm::half_pi(); - e.Spread = 0.5f; + e.Spread = 0.f; e.NumberOfTicks = 1; e.ParticleLifeTime = 1.f; - e.ParticlesPerTick = 15; - e.Position = glm::vec3(event.IntersectionPoint.x, event.IntersectionPoint.y, -10); - e.Radius = 0.2f; - e.SpriteFile = "Textures/Particles/Cloud_Particle.png"; - e.Color = model->Color + glm::vec4(0.5f); - e.Speed = 100; + e.ParticlesPerTick = 1; + e.Position = glm::vec3(event.IntersectionPoint.x, event.IntersectionPoint.y, -7); + e.Color = glm::vec4(1.f); + e.Radius = 1.f; + e.Speed = 0; + + auto PowerFriend = m_World->GetComponent(entity); + auto PowerSaviour = m_World->GetComponent(entity); + auto PowerSticky = m_World->GetComponent(entity); + auto PowerInkBlaster = m_World->GetComponent(entity); + auto PowerKraken = m_World->GetComponent(entity); + + if (PowerFriend) { + e.SpriteFile = "Textures/PowerUps/Friends.png"; + } else if (PowerSaviour) { + e.SpriteFile = "Textures/PowerUps/Saviour.png"; + } else if (PowerSticky) { + e.SpriteFile = "Textures/PowerUps/Sticky.png"; + } else if (PowerInkBlaster){ + e.SpriteFile = "Textures/PowerUps/InkBlaster.png"; + } else if (PowerKraken) { + e.SpriteFile = "Textures/PowerUps/RealeaseTheKraken.png"; + } + else { + e.EmitterLifeTime = 4; + e.EmittingAngle = glm::half_pi(); + e.Spread = 0.5f; + e.NumberOfTicks = 1; + e.ParticleLifeTime = 1.f; + e.ParticlesPerTick = 15; + e.Position = glm::vec3(event.IntersectionPoint.x, event.IntersectionPoint.y, -10); + e.Radius = 0.2f; + e.SpriteFile = "Textures/Particles/Cloud_Particle.png"; + e.Color = model->Color + glm::vec4(0.5f); + e.Speed = 100; + } + EventBroker->Publish(e); return true; + + }