diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index cc1510e..6868b88 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -394,6 +394,25 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr m_World->RemoveComponent(b); m_World->SetEntityParent(b, 0); m_World->CommitEntity(b); + + //Particle trail + Events::CreateParticleSequence p; + p.parent = b; + p.AlphaValues.push_back(1.f); + p.AlphaValues.push_back(0.f); + p.RadiusValues.push_back(0.06f); + p.RadiusValues.push_back(0.f); + p.RadiusDistribution = 1; + p.EmitterLifeTime = 2.f; + p.ParticleLifeTime = 1.f; + p.ParticlesPerTick = 1; + p.SpawnRate = 0.1f; + p.Speed = 10.f; + p.EmittingAngle = glm::half_pi(); + p.SpriteFile = "Textures/Particles/FadeBall.png"; + p.Color = brickModel->Color; + //p.Spread = ... + EventBroker->Publish(p); } diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index 676c6b9..d2d0c63 100755 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -268,7 +268,7 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity } //Update alpha auto sprite = m_World->GetComponent(entity); - float timeProgress = particle->TimeLived / particle->LifeTime; + float timeProgress = particle->TimeLived / (particle->LifeTime - 0.1); if (timeProgress > particle->LifeTime) { timeProgress = particle->LifeTime; } @@ -305,10 +305,11 @@ float dd::Systems::PhysicsSystem::ScalarInterpolation(float timeProgress, std::v return spectrum[0]; } - float dValue = glm::abs(spectrum[0] - spectrum[1]); - if (spectrum[0] > spectrum[1]) { - dValue *= -1; - } + float dValue = spectrum[1] - spectrum[0]; +// glm::abs(spectrum[0] - spectrum[1]); +// if (spectrum[0] > spectrum[1]) { +// dValue *= -1; +// } float scalar = spectrum[0] + dValue * timeProgress; @@ -514,12 +515,18 @@ void dd::Systems::PhysicsSystem::UpdateParticleEmitters(double dt) //Create new particle for ( int j = 0; j < emitter->ParticlesPerTick; j++) { + b2ParticleDef particleDef; + //position + particleDef.position = b2Vec2(emitterTransform->Position.x, emitterTransform->Position.y); + if (particleDef.position.x == 0.f && particleDef.position.y == 0.f) { + continue; + } + auto particle = m_World->CloneEntity(pt, 0); m_World->RemoveComponent(particle); auto particleTransform = m_World->GetComponent(particle); auto particleComponent = m_World->GetComponent(particle); - b2ParticleDef particleDef; particleDef.flags = particleTemplate->Flags; //particleDef.color TODO: Implement this if we want color mixing and shit. particleDef.lifetime = particleTemplate->LifeTime; @@ -537,8 +544,7 @@ void dd::Systems::PhysicsSystem::UpdateParticleEmitters(double dt) glm::vec2 vel = unitVec * emitter->Speed * (float)dt * speedMultiplier; particleDef.velocity = b2Vec2(vel.x, vel.y); - //position - particleDef.position = b2Vec2(emitterTransform->Position.x, emitterTransform->Position.y); + //radius - currently not working :j float radius = emitter->RadiusValues[0];