diff --git a/src/Events/CreateExplosion.h b/src/Events/CreateExplosion.h index 3766c6b..f7b5932 100644 --- a/src/Events/CreateExplosion.h +++ b/src/Events/CreateExplosion.h @@ -11,6 +11,7 @@ namespace Events { CreateExplosion() : Color(glm::vec4(0)), + usePointLight(false), UseGoalVector(false) {} glm::vec3 Position; @@ -21,6 +22,7 @@ namespace Events glm::quat RelativeUpOrientation; float Speed; float SpreadAngle; + float usePointLight; std::vector ParticleScale; bool UseGoalVector; glm::vec3 GoalVelocity; diff --git a/src/Systems/ParticleSystem.cpp b/src/Systems/ParticleSystem.cpp index 9546f06..6b31f72 100644 --- a/src/Systems/ParticleSystem.cpp +++ b/src/Systems/ParticleSystem.cpp @@ -268,6 +268,13 @@ bool Systems::ParticleSystem::CreateExplosion(const Events::CreateExplosion &e) auto templateComponent = m_World->AddComponent(particleEnt); auto TEMP = m_World->AddComponent(particleEnt); auto spriteComponent = m_World->AddComponent(particleEnt); + if(e.usePointLight) + { + auto light = m_World->AddComponent(particleEnt); + light->Diffuse = glm::vec3(231.f/255.f, 181.f/255.f, 48.f/255.f); + light->Specular = glm::vec3(0.5f, 0.5f, 0.5f); + light->Radius = 20.f; + } spriteComponent->SpriteFile = e.spritePath; m_World->CommitEntity(particleEnt); emitter->ParticleTemplate = particleEnt; diff --git a/src/Systems/ParticleSystem.h b/src/Systems/ParticleSystem.h index f70cc9d..57b5d65 100644 --- a/src/Systems/ParticleSystem.h +++ b/src/Systems/ParticleSystem.h @@ -5,6 +5,7 @@ #include "Systems/TransformSystem.h" #include "Components/Transform.h" #include "Components/ParticleEmitter.h" +#include "Components/PointLight.h" #include "Components/Particle.h" #include "Components/Sprite.h" #include "EventBroker.h" diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index c6611d3..23a1731 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -785,7 +785,22 @@ bool Systems::PhysicsSystem::OnApplyPointImpulse( const Events::ApplyPointImpuls void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string type, Component* component) { - if(m_RigidBodies.find(entity) != m_RigidBodies.end()) + +} + + +void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity ) +{ + if (m_Vehicles.find(entity) != m_Vehicles.end()) + { + m_PhysicsWorld->markForWrite(); + m_Vehicles[entity]->removeFromWorld(); + m_PhysicsWorld->unmarkForWrite(); + m_Vehicles.erase(entity); + m_RigidBodyEntities.erase(m_RigidBodies[entity]); + m_RigidBodies.erase(entity); + } + else if (m_RigidBodies.find(entity) != m_RigidBodies.end()) { m_PhysicsWorld->markForWrite(); m_RigidBodyEntities.erase(m_RigidBodies[entity]); @@ -793,11 +808,6 @@ void Systems::PhysicsSystem::OnComponentRemoved(EntityID entity, std::string typ m_RigidBodies.erase(entity); m_PhysicsWorld->unmarkForWrite(); } -} - - -void Systems::PhysicsSystem::OnEntityRemoved( EntityID entity ) -{ /* else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) { @@ -898,27 +908,28 @@ bool Systems::PhysicsSystem::OnDead( const Events::Dead &e ) { if(m_Vehicles.find(e.Entity) != m_Vehicles.end()) { - EntityID camera = m_World->GetProperty(e.Entity, "Camera"); - m_World->RemoveComponent(camera); - auto transform = m_World->GetComponent(e.Entity); - transform->Position = glm::vec3(0, -10000.f, 0); - //m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); + m_World->RemoveEntity(e.Entity); + //EntityID camera = m_World->GetProperty(e.Entity, "Camera"); + //m_World->RemoveComponent(camera); + //auto transform = m_World->GetComponent(e.Entity); + //transform->Position = glm::vec3(0, -10000.f, 0); + ////m_RigidBodies[e.Entity]->setPosition(hkVector4(0, -10000, 0)); - /*m_Vehicles.erase(e.Entity); - m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); - m_RigidBodies.erase(e.Entity);*/ + ///*m_Vehicles.erase(e.Entity); + //m_RigidBodyEntities.erase(m_RigidBodies[e.Entity]); + //m_RigidBodies.erase(e.Entity);*/ - auto jeep = m_World->GetComponent(e.Entity); - if(jeep) - { - m_World->RemoveComponent(e.Entity); - } + //auto jeep = m_World->GetComponent(e.Entity); + //if(jeep) + //{ + // m_World->RemoveComponent(e.Entity); + //} - auto tank = m_World->GetComponent(e.Entity); - if(tank) - { - m_World->RemoveComponent(e.Entity); - } + //auto tank = m_World->GetComponent(e.Entity); + //if(tank) + //{ + // m_World->RemoveComponent(e.Entity); + //} auto listener = m_World->GetComponent(e.Entity); if (listener) diff --git a/src/Systems/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index db44598..bd6b105 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -252,6 +252,7 @@ bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) e.Speed = 6; e.SpreadAngle = glm::pi(); e.spritePath = "Textures/Sprites/Blast1.png"; + e.usePointLight = true; e.Color = glm::vec4(2, 2, 2, 0.2); EventBroker->Publish(e); diff --git a/src/World.cpp b/src/World.cpp index 61f1f36..27428d6 100755 --- a/src/World.cpp +++ b/src/World.cpp @@ -78,16 +78,16 @@ bool World::ValidEntity(EntityID entity) void World::RemoveEntity(EntityID entity) { + m_EntitiesToRemove.insert(entity); + auto it = m_EntityChildren.find(entity); if (it != m_EntityChildren.end()) { for (auto entity : it->second) { - m_EntitiesToRemove.insert(entity); + RemoveEntity(entity); } } - - m_EntitiesToRemove.insert(entity); } void World::ProcessEntityRemovals()