From 1a52b1d04c308e5d9921bc29c17d1fedd6256af7 Mon Sep 17 00:00:00 2001 From: Stiffly Date: Sun, 18 May 2014 20:32:10 +0200 Subject: [PATCH] finlir --- src/GameWorld.cpp | 6 ++-- src/Systems/ParticleSystem.cpp | 66 +++++++++++++++++----------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 056598c..2a9fc9c 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -390,7 +390,7 @@ void GameWorld::Initialize() auto entity = CreateEntity(tank); auto transformComponent = AddComponent(entity, "Transform"); - transformComponent->Position = glm::vec3(2,-1.7,2.0); + transformComponent->Position = glm::vec3(-2,-1.7,2.0); transformComponent->Scale = glm::vec3(3,3,3); transformComponent->Orientation = glm::angleAxis(glm::pi()/2, glm::vec3(1,0,0)); auto emitterComponent = AddComponent(entity, "ParticleEmitter"); @@ -399,6 +399,7 @@ void GameWorld::Initialize() emitterComponent->SpreadAngle = glm::pi(); emitterComponent->UseGoalVelocity = false; emitterComponent->LifeTime = 0.5; + emitterComponent->Speed = 5; //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi() / 100); emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); CommitEntity(entity); @@ -452,7 +453,7 @@ void GameWorld::Initialize() auto entity = CreateEntity(tank); auto transformComponent = AddComponent(entity, "Transform"); - transformComponent->Position = glm::vec3(-2,-1.7,2.0); + transformComponent->Position = glm::vec3(2,-1.7,2.0); transformComponent->Scale = glm::vec3(3,3,3); transformComponent->Orientation = glm::angleAxis(glm::pi()/2, glm::vec3(1,0,0)); auto emitterComponent = AddComponent(entity, "ParticleEmitter"); @@ -461,6 +462,7 @@ void GameWorld::Initialize() emitterComponent->SpreadAngle = glm::pi(); emitterComponent->UseGoalVelocity = false; emitterComponent->LifeTime = 0.5; + emitterComponent->Speed = 5; //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi() / 100); emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); CommitEntity(entity); diff --git a/src/Systems/ParticleSystem.cpp b/src/Systems/ParticleSystem.cpp index 0882f9d..75580b4 100644 --- a/src/Systems/ParticleSystem.cpp +++ b/src/Systems/ParticleSystem.cpp @@ -101,43 +101,42 @@ void Systems::ParticleSystem::RegisterComponents(ComponentFactory* cf) void Systems::ParticleSystem::SpawnParticles(EntityID emitterID) { - auto emitterComponent = m_World->GetComponent(emitterID, "ParticleEmitter"); - auto emitterTransform = m_World->GetComponent(emitterID, "Transform"); - glm::vec3 emitterPos = m_TransformSystem->AbsolutePosition(emitterID); - glm::quat emitterOrientation = emitterTransform->Orientation; + auto eComponent = m_World->GetComponent(emitterID, "ParticleEmitter"); + auto eTransform = m_World->GetComponent(emitterID, "Transform"); + glm::vec3 ePosition = m_TransformSystem->AbsolutePosition(emitterID); + glm::quat eOrientation = eTransform->Orientation; - float tempSpeed = 4; - glm::vec3 speed = glm::vec3(tempSpeed); + glm::vec3 paticleSpeed = glm::vec3(eComponent->Speed); - for(int i = 0; i < emitterComponent->SpawnCount; i++) + for(int i = 0; i < eComponent->SpawnCount; i++) { - auto ent = m_World->CloneEntity(emitterComponent->ParticleTemplate); + auto particleEntity = m_World->CloneEntity(eComponent->ParticleTemplate); - auto particleTransform = m_World->GetComponent(ent, "Transform"); - particleTransform->Position = emitterPos; + auto particleTransform = m_World->GetComponent(particleEntity, "Transform"); + particleTransform->Position = ePosition; - particleTransform->Orientation = emitterOrientation; + particleTransform->Orientation = eOrientation; //The emitter's orientation as "start value" times the default direction for emitter. Times the speed, and then rotate on x and y axis with the randomized spread angle. - float spreadAngle = emitterComponent->SpreadAngle; - particleTransform->Velocity = emitterOrientation * glm::vec3(0, 0, -1) * speed * + float spreadAngle = eComponent->SpreadAngle; + particleTransform->Velocity = eOrientation * glm::vec3(0, 0, -1) * paticleSpeed * glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(1, 0, 0))) * glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 1, 0))) * glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 0, 1))); - auto particle = m_World->AddComponent(ent, "Particle"); - particle->LifeTime = emitterComponent->LifeTime; - particle->ScaleSpectrum = emitterComponent->ScaleSpectrum; - particle->VelocitySpectrum.push_back(particleTransform->Velocity); + auto particleComponent = m_World->AddComponent(particleEntity, "Particle"); + particleComponent->LifeTime = eComponent->LifeTime; + particleComponent->ScaleSpectrum = eComponent->ScaleSpectrum; + particleComponent->VelocitySpectrum.push_back(particleTransform->Velocity); - if (emitterComponent->ScaleSpectrum.size() > 0) + if (eComponent->ScaleSpectrum.size() > 0) { - if (emitterComponent->ScaleSpectrum.size() > 1) + if (eComponent->ScaleSpectrum.size() > 1) { - particle->ScaleSpectrum = emitterComponent->ScaleSpectrum; + particleComponent->ScaleSpectrum = eComponent->ScaleSpectrum; } else { - particleTransform->Scale = emitterComponent->ScaleSpectrum[0]; + particleTransform->Scale = eComponent->ScaleSpectrum[0]; } } else @@ -145,23 +144,22 @@ void Systems::ParticleSystem::SpawnParticles(EntityID emitterID) particleTransform->Scale = glm::vec3(1, 1, 1); } - if(emitterComponent->UseGoalVelocity) - particle->VelocitySpectrum.push_back(emitterComponent->GoalVelocity); - particle->OrientationSpectrum = emitterComponent->OrientationSpectrum; - if(particle->OrientationSpectrum.size() != 0) - particleTransform->Orientation = glm::angleAxis(0.f, particle->OrientationSpectrum[0]); - particle->AngularVelocitySpectrum = emitterComponent->AngularVelocitySpectrum; + if(eComponent->UseGoalVelocity) + particleComponent->VelocitySpectrum.push_back(eComponent->GoalVelocity); + particleComponent->OrientationSpectrum = eComponent->OrientationSpectrum; + if(particleComponent->OrientationSpectrum.size() != 0) + particleTransform->Orientation = glm::angleAxis(0.f, particleComponent->OrientationSpectrum[0]); + particleComponent->AngularVelocitySpectrum = eComponent->AngularVelocitySpectrum; ParticleData data; - data.ParticleID = ent; + data.ParticleID = particleEntity; data.SpawnTime = glfwGetTime(); - if (particle->AngularVelocitySpectrum.size() != 0) - data.AngularVelocity = particle->AngularVelocitySpectrum[0]; - if (particle->OrientationSpectrum.size() != 0) - data.Orientation = particle->OrientationSpectrum[0]; - else data.Orientation = emitterOrientation * glm::vec3(0,0,-1); - + if (particleComponent->AngularVelocitySpectrum.size() != 0) + data.AngularVelocity = particleComponent->AngularVelocitySpectrum[0]; + if (particleComponent->OrientationSpectrum.size() != 0) + data.Orientation = particleComponent->OrientationSpectrum[0]; + else data.Orientation = eOrientation * glm::vec3(0,0,-1); m_ParticleEmitter[emitterID].push_back(data); } }