Water splash
This commit is contained in:
+1
-1
Submodule assets updated: 78ba667b37...a6e3f120fd
@@ -20,6 +20,7 @@ struct ParticleEmitter : Component
|
|||||||
, SpreadAngle(0)
|
, SpreadAngle(0)
|
||||||
, LifeTime(0)
|
, LifeTime(0)
|
||||||
, TimeSinceLastSpawn(100)
|
, TimeSinceLastSpawn(100)
|
||||||
|
, Emitting(false)
|
||||||
, Color(glm::vec4(0)) { }
|
, Color(glm::vec4(0)) { }
|
||||||
|
|
||||||
EntityID ParticleTemplate;
|
EntityID ParticleTemplate;
|
||||||
@@ -32,6 +33,7 @@ struct ParticleEmitter : Component
|
|||||||
double LifeTime;
|
double LifeTime;
|
||||||
bool UseGoalVelocity;
|
bool UseGoalVelocity;
|
||||||
bool Fade;
|
bool Fade;
|
||||||
|
bool Emitting;
|
||||||
glm::vec3 GoalVelocity;
|
glm::vec3 GoalVelocity;
|
||||||
std::vector<float> AngularVelocitySpectrum;
|
std::vector<float> AngularVelocitySpectrum;
|
||||||
std::vector<glm::vec3> OrientationSpectrum; //Keep? noo..
|
std::vector<glm::vec3> OrientationSpectrum; //Keep? noo..
|
||||||
|
|||||||
@@ -9,8 +9,10 @@ namespace Events
|
|||||||
{
|
{
|
||||||
struct CreateExplosion : Event
|
struct CreateExplosion : Event
|
||||||
{
|
{
|
||||||
CreateExplosion()
|
CreateExplosion() :
|
||||||
: Color(glm::vec4(0)) {}
|
Color(glm::vec4(0)),
|
||||||
|
UseGoalVector(false) {}
|
||||||
|
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
glm::vec4 Color;
|
glm::vec4 Color;
|
||||||
double LifeTime;
|
double LifeTime;
|
||||||
@@ -20,6 +22,10 @@ namespace Events
|
|||||||
float Speed;
|
float Speed;
|
||||||
float SpreadAngle;
|
float SpreadAngle;
|
||||||
std::vector<float> ParticleScale;
|
std::vector<float> ParticleScale;
|
||||||
|
bool UseGoalVector;
|
||||||
|
glm::vec3 GoalVelocity;
|
||||||
|
bool Emitting;
|
||||||
|
float SpawnFrequency;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,11 +49,15 @@ void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
{
|
{
|
||||||
emitterComponent->TimeSinceLastSpawn += dt;
|
emitterComponent->TimeSinceLastSpawn += dt;
|
||||||
auto emitterTransformComponent = m_World->GetComponent<Components::Transform>(entity);
|
auto emitterTransformComponent = m_World->GetComponent<Components::Transform>(entity);
|
||||||
// if(emitterComponent->TimeSinceLastSpawn > emitterComponent->SpawnFrequency)
|
if(emitterComponent->Emitting)
|
||||||
// {
|
{
|
||||||
// SpawnParticles(entity);
|
if(emitterComponent->TimeSinceLastSpawn > emitterComponent->SpawnFrequency)
|
||||||
// emitterComponent->TimeSinceLastSpawn = 0;
|
{
|
||||||
// }
|
SpawnParticles(entity);
|
||||||
|
emitterComponent->TimeSinceLastSpawn = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto particleComponent = m_World->GetComponent<Components::Particle>(entity);
|
auto particleComponent = m_World->GetComponent<Components::Particle>(entity);
|
||||||
@@ -242,10 +246,17 @@ 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->Emitting = e.Emitting;
|
||||||
|
emitter->SpawnFrequency = e.SpawnFrequency;
|
||||||
//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;
|
emitter->Color = e.Color;
|
||||||
|
if(e.UseGoalVector)
|
||||||
|
{
|
||||||
|
emitter->UseGoalVelocity = e.UseGoalVector;
|
||||||
|
emitter->GoalVelocity = e.GoalVelocity;
|
||||||
|
}
|
||||||
std::vector<glm::vec3> scale;
|
std::vector<glm::vec3> scale;
|
||||||
scale.push_back(glm::vec3(e.ParticleScale[0]));
|
scale.push_back(glm::vec3(e.ParticleScale[0]));
|
||||||
if(e.ParticleScale.size() >= 2)
|
if(e.ParticleScale.size() >= 2)
|
||||||
|
|||||||
@@ -102,12 +102,14 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit
|
|||||||
e.LifeTime = 1.5;
|
e.LifeTime = 1.5;
|
||||||
e.ParticleScale.push_back(0.6);
|
e.ParticleScale.push_back(0.6);
|
||||||
e.ParticleScale.push_back(1.8);
|
e.ParticleScale.push_back(1.8);
|
||||||
e.ParticlesToSpawn = 5;
|
e.ParticlesToSpawn = 1;
|
||||||
e.Position = cloneTransform->Position;
|
e.Position = cloneTransform->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 = 1.7;
|
e.Speed = 1.7;
|
||||||
e.SpreadAngle = glm::pi<float>()/10;
|
e.SpreadAngle = glm::pi<float>()/100;
|
||||||
e.spritePath = "Textures/Sprites/Smoke1.png";
|
e.spritePath = "Textures/Sprites/Smoke1.png";
|
||||||
|
e.Emitting = true;
|
||||||
|
e.SpawnFrequency = 0.2;
|
||||||
e.Color = glm::vec4(0.6,0.6,0.6,1);
|
e.Color = glm::vec4(0.6,0.6,0.6,1);
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
@@ -192,36 +194,65 @@ bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e)
|
|||||||
//auto otherTransform = m_World->GetComponent<Components::Transform>(otherEntity);
|
//auto otherTransform = m_World->GetComponent<Components::Transform>(otherEntity);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
// Events::CreateExplosion e;
|
||||||
|
// e.LifeTime = 3;
|
||||||
|
// e.ParticleScale.push_back(8);
|
||||||
|
// e.ParticlesToSpawn = 20;
|
||||||
|
// e.Position = shellTransform->Position;
|
||||||
|
// e.RelativeUpOrientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1,0,0));
|
||||||
|
// e.Speed = 3;
|
||||||
|
// e.SpreadAngle = glm::pi<float>();
|
||||||
|
// e.spritePath = "Textures/Sprites/Smoke1.png";
|
||||||
|
// e.Color = glm::vec4(0.6,0.6,0.6,1);
|
||||||
|
// EventBroker->Publish(e);
|
||||||
|
// e.LifeTime = 0.7;
|
||||||
|
// e.ParticleScale.push_back(12);
|
||||||
|
// e.ParticlesToSpawn = 10;
|
||||||
|
// e.Position = shellTransform->Position;
|
||||||
|
// 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.SpreadAngle = glm::pi<float>();
|
||||||
|
// e.spritePath = "Textures/Sprites/Blast1.png";
|
||||||
|
// e.Color = glm::vec4(2, 2, 2, 0.2);
|
||||||
|
// EventBroker->Publish(e);
|
||||||
|
|
||||||
Events::CreateExplosion e;
|
Events::CreateExplosion e;
|
||||||
e.LifeTime = 3;
|
e.LifeTime = 1;
|
||||||
e.ParticleScale.push_back(8);
|
e.ParticleScale.push_back(1);
|
||||||
|
e.ParticleScale.push_back(3);
|
||||||
e.ParticlesToSpawn = 20;
|
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.SpreadAngle = glm::radians<float>(180) / 4;
|
||||||
e.Speed = 3;
|
e.RelativeUpOrientation = glm::angleAxis(glm::radians<float>(90), glm::vec3(1,0,0));
|
||||||
e.SpreadAngle = glm::pi<float>();
|
e.UseGoalVector = true;
|
||||||
e.spritePath = "Textures/Sprites/Smoke1.png";
|
e.GoalVelocity = glm::vec3(0,-4,0);
|
||||||
e.Color = glm::vec4(0.6,0.6,0.6,1);
|
|
||||||
EventBroker->Publish(e);
|
|
||||||
e.LifeTime = 0.7;
|
|
||||||
e.ParticleScale.push_back(12);
|
|
||||||
e.ParticlesToSpawn = 10;
|
|
||||||
e.Position = shellTransform->Position;
|
|
||||||
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.spritePath = "Textures/Sprites/Splash.png";
|
||||||
e.spritePath = "Textures/Sprites/Blast1.png";
|
e.Color = glm::vec4(5.f,5.f,5.f,1);
|
||||||
e.Color = glm::vec4(2, 2, 2, 0.2);
|
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
e.LifeTime = 1;
|
||||||
|
e.ParticleScale.push_back(1);
|
||||||
|
e.ParticleScale.push_back(3);
|
||||||
|
e.ParticlesToSpawn = 20;
|
||||||
|
e.Position = shellTransform->Position;
|
||||||
|
e.SpreadAngle = glm::radians<float>(180)/ 4;
|
||||||
|
e.RelativeUpOrientation = glm::angleAxis(glm::radians<float>(90), glm::vec3(1,0,0));
|
||||||
|
e.UseGoalVector = true;
|
||||||
|
e.GoalVelocity = glm::vec3(0,-4,0);
|
||||||
|
e.Speed = 6;
|
||||||
|
e.spritePath = "Textures/Sprites/Splash.png";
|
||||||
|
e.Color = glm::vec4(1.f,1.f,1.f,1);
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user