added a radius distribution to randomize the scale.

This commit is contained in:
Stiffly
2015-10-13 17:39:40 +02:00
parent 1065d3abc3
commit 5040ff4649
2 changed files with 22 additions and 17 deletions
+1 -1
View File
@@ -396,7 +396,7 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr
ep.AlphaValues.push_back(1.f); ep.AlphaValues.push_back(1.f);
ep.AlphaValues.push_back(0.f); ep.AlphaValues.push_back(0.f);
ep.RadiusValues.push_back(0.05f); ep.RadiusValues.push_back(0.05f);
ep.RadiusDistribution = 0.05; ep.RadiusDistribution = 0.05f;
ep.Speed = 50; ep.Speed = 50;
EventBroker->Publish(ep); EventBroker->Publish(ep);
} }
+21 -16
View File
@@ -273,7 +273,7 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
if (particle && !pTemplate) { if (particle && !pTemplate) {
particle->TimeLived += dt; particle->TimeLived += dt;
//Delete particles //Delete particles
if (particle->TimeLived >= particle->LifeTime - 0.1) { if (particle->TimeLived >= particle->LifeTime - 0.1) {
for (int i = 0; i < m_EntitiesToParticleHandle.size(); i++) { for (int i = 0; i < m_EntitiesToParticleHandle.size(); i++) {
const b2ParticleHandle* handle = m_EntitiesToParticleHandle[i][entity]; const b2ParticleHandle* handle = m_EntitiesToParticleHandle[i][entity];
@@ -299,7 +299,7 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem); auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem);
if (emitter) { if (emitter) {
sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues); sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues);
if (emitter->RadiusValues.size() >= 1) { if (emitter->RadiusValues.size() > 1) {
particle->Radius = ScalarInterpolation(timeProgress, emitter->RadiusValues); particle->Radius = ScalarInterpolation(timeProgress, emitter->RadiusValues);
} }
} }
@@ -540,12 +540,18 @@ void dd::Systems::PhysicsSystem::UpdateParticleEmitters(double dt)
if(emitter->TimeSinceLastSpawn < emitter->SpawnRate || emitter->NumberOfTicks < 1) { if(emitter->TimeSinceLastSpawn < emitter->SpawnRate || emitter->NumberOfTicks < 1) {
continue; continue;
} }
//Create new particle
emitter->NumberOfTicks--; emitter->NumberOfTicks--;
emitter->TimeSinceLastSpawn -= emitter->SpawnRate; emitter->TimeSinceLastSpawn -= emitter->SpawnRate;
auto templateTransform = m_World->GetComponent<Components::Transform>(pt); auto templateTransform = m_World->GetComponent<Components::Transform>(pt);
//Create new particle
for ( int j = 0; j < emitter->ParticlesPerTick; j++) { for ( int j = 0; j < emitter->ParticlesPerTick; j++) {
auto particle = m_World->CloneEntity(pt, 0);
m_World->RemoveComponent<Components::Template>(particle);
auto particleTransform = m_World->GetComponent<Components::Transform>(particle);
auto particleComponent = m_World->GetComponent<Components::Particle>(particle);
b2ParticleDef particleDef; b2ParticleDef particleDef;
particleDef.flags = particleTemplate->Flags; particleDef.flags = particleTemplate->Flags;
//particleDef.color TODO: Implement this if we want color mixing and shit. //particleDef.color TODO: Implement this if we want color mixing and shit.
@@ -567,21 +573,18 @@ void dd::Systems::PhysicsSystem::UpdateParticleEmitters(double dt)
//position //position
particleDef.position = b2Vec2(emitterTransform->Position.x, emitterTransform->Position.y); particleDef.position = b2Vec2(emitterTransform->Position.x, emitterTransform->Position.y);
//radius - currently not working :j
auto particle = m_World->CloneEntity(pt, 0);
m_World->RemoveComponent<Components::Template>(particle);
auto particleTransform = m_World->GetComponent<Components::Transform>(particle);
auto particleComponent = m_World->GetComponent<Components::Particle>(particle);
float radius = emitter->RadiusValues[0]; float radius = emitter->RadiusValues[0];
if (emitter->RadiusDistribution != 0) { float newRadius = 0;
float halfRadius = emitter->RadiusDistribution / 2; if (emitter->RadiusDistribution > 0) {
float halfRadius = radius / 2;
std::uniform_real_distribution<float> dis3(radius - halfRadius, radius + halfRadius); std::uniform_real_distribution<float> dis3(radius - halfRadius, radius + halfRadius);
radius = dis3(gen); newRadius = dis3(gen);
//emitter->RadiusValues[0] = radius;
} }
//particleTransform->Scale = glm::vec3(radius * 2, radius * 2, 1); else {
particleComponent->Radius = radius; newRadius = radius;
}
particleComponent->Radius = newRadius;
//Random z-value //Random z-value
std::uniform_real_distribution<float> dist(0, 1); std::uniform_real_distribution<float> dist(0, 1);
@@ -773,6 +776,7 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
e.Color = glm::vec4(1.f); e.Color = glm::vec4(1.f);
e.AlphaValues.push_back(1.f); e.AlphaValues.push_back(1.f);
e.AlphaValues.push_back(0.f); e.AlphaValues.push_back(0.f);
e.RadiusValues.push_back(1);
e.Speed = 0; e.Speed = 0;
auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity); auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity);
@@ -800,6 +804,7 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
e.ParticleLifeTime = 1.f; e.ParticleLifeTime = 1.f;
e.ParticlesPerTick = 15; e.ParticlesPerTick = 15;
e.Position = glm::vec3(event.IntersectionPoint.x, event.IntersectionPoint.y, -10); e.Position = glm::vec3(event.IntersectionPoint.x, event.IntersectionPoint.y, -10);
e.RadiusValues.clear();
e.RadiusValues.push_back(0.2); e.RadiusValues.push_back(0.2);
e.RadiusValues.push_back(1); e.RadiusValues.push_back(1);
e.SpriteFile = "Textures/Particles/Cloud_Particle.png"; e.SpriteFile = "Textures/Particles/Cloud_Particle.png";