Some pretty darn cool explosions

This commit is contained in:
Stiffly
2014-06-01 01:15:53 +02:00
parent 804b0cac60
commit 756107363e
8 changed files with 42 additions and 14 deletions
+1 -1
Submodule assets updated: 4724dbbd28...bd746269ff
-1
View File
@@ -11,7 +11,6 @@ namespace Components
struct Particle : Component struct Particle : Component
{ {
std::vector<Color> ColorSpectrum;
std::vector<glm::vec3> ScaleSpectrum; std::vector<glm::vec3> ScaleSpectrum;
double LifeTime; double LifeTime;
double SpawnTime; double SpawnTime;
+3 -2
View File
@@ -19,13 +19,14 @@ struct ParticleEmitter : Component
, SpawnCount(0) , SpawnCount(0)
, SpreadAngle(0) , SpreadAngle(0)
, LifeTime(0) , LifeTime(0)
, TimeSinceLastSpawn(100) { } // TEMP fulhack så att partiklarna spawnar direkt , TimeSinceLastSpawn(100)
, Color(glm::vec4(0)) { }
EntityID ParticleTemplate; EntityID ParticleTemplate;
float SpawnFrequency; float SpawnFrequency;
float Speed; float Speed;
int SpawnCount; int SpawnCount;
std::vector<Color> ColorSpectrum; glm::vec4 Color;
std::vector<glm::vec3> ScaleSpectrum; std::vector<glm::vec3> ScaleSpectrum;
float SpreadAngle; float SpreadAngle;
double LifeTime; double LifeTime;
+4 -1
View File
@@ -9,14 +9,17 @@ namespace Events
{ {
struct CreateExplosion : Event struct CreateExplosion : Event
{ {
CreateExplosion()
: Color(glm::vec4(0)) {}
glm::vec3 Position; glm::vec3 Position;
glm::vec4 Color;
double LifeTime; double LifeTime;
int ParticlesToSpawn; int ParticlesToSpawn;
std::string spritePath; std::string spritePath;
glm::quat RelativeUpOrientation; glm::quat RelativeUpOrientation;
float Speed; float Speed;
float SpreadAngle; float SpreadAngle;
float ParticleScale; std::vector<float> ParticleScale;
}; };
} }
+1 -1
View File
@@ -163,7 +163,7 @@ void Renderer::LoadContent()
FrameBufferTextures(); FrameBufferTextures();
m_sphereModel = ResourceManager->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"); m_sphereModel = ResourceManager->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj");
m_Skybox = std::make_shared<Skybox>("Textures/Skybox/sky36", "jpg"); m_Skybox = std::make_shared<Skybox>("Textures/Skybox/sunset", "jpg");
} }
void Renderer::Draw(double dt) void Renderer::Draw(double dt)
+1 -1
View File
@@ -201,7 +201,7 @@ private:
void CreateNormalMapTangent(); void CreateNormalMapTangent();
void ForwardRendering(RenderQueue &rq); void ForwardRendering(RenderQueue &rq);
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); } static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth > j->Depth); }
GLuint CreateQuad(); GLuint CreateQuad();
void DrawDebugShadowMap(); void DrawDebugShadowMap();
+14 -1
View File
@@ -95,6 +95,9 @@ void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID
ScalarInterpolation(timeProgress, spectrum, alpha); ScalarInterpolation(timeProgress, spectrum, alpha);
sprite->Color.w = alpha; sprite->Color.w = alpha;
} }
/*// Angular velocity interpolation /*// Angular velocity interpolation
if (particleComponent->AngularVelocitySpectrum.size() != 0) if (particleComponent->AngularVelocitySpectrum.size() != 0)
{ {
@@ -161,6 +164,10 @@ void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
particle->VelocitySpectrum.push_back(particleTransform->Velocity); particle->VelocitySpectrum.push_back(particleTransform->Velocity);
particle->Fade = eComponent->Fade; particle->Fade = eComponent->Fade;
auto sprite = m_World->GetComponent<Components::Sprite>(ent);
if(eComponent->Color != glm::vec4(0))
sprite->Color = eComponent->Color;
if (eComponent->ScaleSpectrum.size() > 0) if (eComponent->ScaleSpectrum.size() > 0)
{ {
if (eComponent->ScaleSpectrum.size() > 1) if (eComponent->ScaleSpectrum.size() > 1)
@@ -235,9 +242,15 @@ bool Systems::ParticleSystem::CreateExplosion(const Events::CreateExplosion &e)
emitter->SpawnCount = e.ParticlesToSpawn; emitter->SpawnCount = e.ParticlesToSpawn;
emitter->Speed = e.Speed; emitter->Speed = e.Speed;
emitter->SpreadAngle = e.SpreadAngle; emitter->SpreadAngle = e.SpreadAngle;
emitter->ScaleSpectrum.push_back(glm::vec3(e.ParticleScale)); //emitter->ScaleSpectrum.push_back(glm::vec3(e.ParticleScale));
emitter->SpawnFrequency = e.LifeTime + 20; //temp emitter->SpawnFrequency = e.LifeTime + 20; //temp
emitter->Fade = true; emitter->Fade = true;
emitter->Color = e.Color;
std::vector<glm::vec3> scale;
scale.push_back(glm::vec3(e.ParticleScale[0]));
if(e.ParticleScale.size() >= 2)
scale.push_back(glm::vec3(e.ParticleScale[1]));
emitter->ScaleSpectrum = scale;
// emitter->GoalVelocity = glm::vec3(0,-_speed, 0); // emitter->GoalVelocity = glm::vec3(0,-_speed, 0);
m_World->CommitEntity(explosion); m_World->CommitEntity(explosion);
+18 -6
View File
@@ -130,23 +130,35 @@ bool Systems::TankSteeringSystem::OnCollision( const Events::Collision &e )
{ {
Events::CreateExplosion e; Events::CreateExplosion e;
e.LifeTime = 2; e.LifeTime = 3;
e.ParticleScale = 8; e.ParticleScale.push_back(8);
e.ParticlesToSpawn = 10; e.ParticlesToSpawn = 20;
e.Position = shellTransform->Position; e.Position = shellTransform->Position;
e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0)); e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0));
e.Speed = 3; e.Speed = 3;
e.SpreadAngle = glm::pi<float>(); e.SpreadAngle = glm::pi<float>();
e.spritePath = "Textures/Sprites/Smoke1.png"; e.spritePath = "Textures/Sprites/Smoke1.png";
e.Color = glm::vec4(0.6,0.6,0.6,1);
EventBroker->Publish(e); EventBroker->Publish(e);
e.LifeTime = 1; e.LifeTime = 0.7;
e.ParticleScale = 12; e.ParticleScale.push_back(12);
e.ParticlesToSpawn = 10; e.ParticlesToSpawn = 10;
e.Position = shellTransform->Position; e.Position = shellTransform->Position;
e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0)); e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0));
e.Speed = 17;
e.SpreadAngle = glm::pi<float>();
e.spritePath = "Textures/Sprites/Fire.png";
EventBroker->Publish(e);
e.LifeTime = 0.2;
e.ParticleScale.push_back(1);
e.ParticleScale.push_back(15);
e.ParticlesToSpawn = 5;
e.Position = shellTransform->Position;
e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0));
e.Speed = 6; e.Speed = 6;
e.SpreadAngle = glm::pi<float>(); e.SpreadAngle = glm::pi<float>();
e.spritePath = "Textures/Sprites/Fire.png"; e.spritePath = "Textures/Sprites/Blast1.png";
e.Color = glm::vec4(2, 2, 2, 0.2);
EventBroker->Publish(e); EventBroker->Publish(e);
} }