This commit is contained in:
Stiffly
2014-05-18 20:32:10 +02:00
parent df13663ca8
commit 1a52b1d04c
2 changed files with 36 additions and 36 deletions
+4 -2
View File
@@ -390,7 +390,7 @@ void GameWorld::Initialize()
auto entity = CreateEntity(tank); auto entity = CreateEntity(tank);
auto transformComponent = AddComponent<Components::Transform>(entity, "Transform"); auto transformComponent = AddComponent<Components::Transform>(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->Scale = glm::vec3(3,3,3);
transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0)); transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0));
auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter"); auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter");
@@ -399,6 +399,7 @@ void GameWorld::Initialize()
emitterComponent->SpreadAngle = glm::pi<float>(); emitterComponent->SpreadAngle = glm::pi<float>();
emitterComponent->UseGoalVelocity = false; emitterComponent->UseGoalVelocity = false;
emitterComponent->LifeTime = 0.5; emitterComponent->LifeTime = 0.5;
emitterComponent->Speed = 5;
//emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100); //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100);
emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05));
CommitEntity(entity); CommitEntity(entity);
@@ -452,7 +453,7 @@ void GameWorld::Initialize()
auto entity = CreateEntity(tank); auto entity = CreateEntity(tank);
auto transformComponent = AddComponent<Components::Transform>(entity, "Transform"); auto transformComponent = AddComponent<Components::Transform>(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->Scale = glm::vec3(3,3,3);
transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0)); transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0));
auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter"); auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter");
@@ -461,6 +462,7 @@ void GameWorld::Initialize()
emitterComponent->SpreadAngle = glm::pi<float>(); emitterComponent->SpreadAngle = glm::pi<float>();
emitterComponent->UseGoalVelocity = false; emitterComponent->UseGoalVelocity = false;
emitterComponent->LifeTime = 0.5; emitterComponent->LifeTime = 0.5;
emitterComponent->Speed = 5;
//emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100); //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100);
emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05));
CommitEntity(entity); CommitEntity(entity);
+32 -34
View File
@@ -101,43 +101,42 @@ void Systems::ParticleSystem::RegisterComponents(ComponentFactory* cf)
void Systems::ParticleSystem::SpawnParticles(EntityID emitterID) void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
{ {
auto emitterComponent = m_World->GetComponent<Components::ParticleEmitter>(emitterID, "ParticleEmitter"); auto eComponent = m_World->GetComponent<Components::ParticleEmitter>(emitterID, "ParticleEmitter");
auto emitterTransform = m_World->GetComponent<Components::Transform>(emitterID, "Transform"); auto eTransform = m_World->GetComponent<Components::Transform>(emitterID, "Transform");
glm::vec3 emitterPos = m_TransformSystem->AbsolutePosition(emitterID); glm::vec3 ePosition = m_TransformSystem->AbsolutePosition(emitterID);
glm::quat emitterOrientation = emitterTransform->Orientation; glm::quat eOrientation = eTransform->Orientation;
float tempSpeed = 4; glm::vec3 paticleSpeed = glm::vec3(eComponent->Speed);
glm::vec3 speed = glm::vec3(tempSpeed);
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<Components::Transform>(ent, "Transform"); auto particleTransform = m_World->GetComponent<Components::Transform>(particleEntity, "Transform");
particleTransform->Position = emitterPos; 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. //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; float spreadAngle = eComponent->SpreadAngle;
particleTransform->Velocity = emitterOrientation * glm::vec3(0, 0, -1) * speed * 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(1, 0, 0))) *
glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 1, 0))) * glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 1, 0))) *
glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 0, 1))); glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 0, 1)));
auto particle = m_World->AddComponent<Components::Particle>(ent, "Particle"); auto particleComponent = m_World->AddComponent<Components::Particle>(particleEntity, "Particle");
particle->LifeTime = emitterComponent->LifeTime; particleComponent->LifeTime = eComponent->LifeTime;
particle->ScaleSpectrum = emitterComponent->ScaleSpectrum; particleComponent->ScaleSpectrum = eComponent->ScaleSpectrum;
particle->VelocitySpectrum.push_back(particleTransform->Velocity); 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 else
{ {
particleTransform->Scale = emitterComponent->ScaleSpectrum[0]; particleTransform->Scale = eComponent->ScaleSpectrum[0];
} }
} }
else else
@@ -145,23 +144,22 @@ void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
particleTransform->Scale = glm::vec3(1, 1, 1); particleTransform->Scale = glm::vec3(1, 1, 1);
} }
if(emitterComponent->UseGoalVelocity) if(eComponent->UseGoalVelocity)
particle->VelocitySpectrum.push_back(emitterComponent->GoalVelocity); particleComponent->VelocitySpectrum.push_back(eComponent->GoalVelocity);
particle->OrientationSpectrum = emitterComponent->OrientationSpectrum; particleComponent->OrientationSpectrum = eComponent->OrientationSpectrum;
if(particle->OrientationSpectrum.size() != 0) if(particleComponent->OrientationSpectrum.size() != 0)
particleTransform->Orientation = glm::angleAxis(0.f, particle->OrientationSpectrum[0]); particleTransform->Orientation = glm::angleAxis(0.f, particleComponent->OrientationSpectrum[0]);
particle->AngularVelocitySpectrum = emitterComponent->AngularVelocitySpectrum; particleComponent->AngularVelocitySpectrum = eComponent->AngularVelocitySpectrum;
ParticleData data; ParticleData data;
data.ParticleID = ent; data.ParticleID = particleEntity;
data.SpawnTime = glfwGetTime(); data.SpawnTime = glfwGetTime();
if (particle->AngularVelocitySpectrum.size() != 0) if (particleComponent->AngularVelocitySpectrum.size() != 0)
data.AngularVelocity = particle->AngularVelocitySpectrum[0]; data.AngularVelocity = particleComponent->AngularVelocitySpectrum[0];
if (particle->OrientationSpectrum.size() != 0) if (particleComponent->OrientationSpectrum.size() != 0)
data.Orientation = particle->OrientationSpectrum[0]; data.Orientation = particleComponent->OrientationSpectrum[0];
else data.Orientation = emitterOrientation * glm::vec3(0,0,-1); else data.Orientation = eOrientation * glm::vec3(0,0,-1);
m_ParticleEmitter[emitterID].push_back(data); m_ParticleEmitter[emitterID].push_back(data);
} }
} }