From 6e9eeaf99127bd1d6710cae2c755bfc72344a98e Mon Sep 17 00:00:00 2001 From: Stiffly Date: Wed, 4 Jun 2014 18:15:47 +0200 Subject: [PATCH] Dust particles from tank wheels. --- assets | 2 +- src/Components/ParticleEmitter.h | 2 +- src/GameWorld.cpp | 2 +- src/Systems/SoundSystem.cpp | 2 +- src/Systems/TankSteeringSystem.cpp | 182 +++++++++++++++++------------ src/Systems/TankSteeringSystem.h | 2 +- 6 files changed, 111 insertions(+), 81 deletions(-) diff --git a/assets b/assets index cfda101..d013629 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit cfda101f676fde45f9fd362b99fcec4f99e79cf1 +Subproject commit d013629690347939068dcf44726c08aa252a72ae diff --git a/src/Components/ParticleEmitter.h b/src/Components/ParticleEmitter.h index edd92b5..c403b6d 100755 --- a/src/Components/ParticleEmitter.h +++ b/src/Components/ParticleEmitter.h @@ -21,7 +21,7 @@ struct ParticleEmitter : Component , LifeTime(0) , TimeSinceLastSpawn(100) , Emitting(false) - , Color(glm::vec4(0)) { } + , Color(glm::vec4(1)) { } EntityID ParticleTemplate; float SpawnFrequency; diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 03ca2b2..a0e6373 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -11,7 +11,7 @@ void GameWorld::Initialize() //Background Music { Events::PlayBGM e; - e.Resource = "Sounds/BGM/RideoftheValkyries.mp3"; + e.Resource = "Sounds/SFX/WUB.mp3"; EventBroker->Publish(e); } diff --git a/src/Systems/SoundSystem.cpp b/src/Systems/SoundSystem.cpp index cfb104e..dbf5ff3 100755 --- a/src/Systems/SoundSystem.cpp +++ b/src/Systems/SoundSystem.cpp @@ -62,7 +62,7 @@ void Systems::SoundSystem::Update(double dt) } } - LOG_INFO("Antal emitters i listan: %i", m_Channels.size()); + //LOG_INFO("Antal emitters i listan: %i", m_Channels.size()); for(it = m_Channels.begin(); it != m_Channels.end();) { diff --git a/src/Systems/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index 1e55ecf..4f8c2b3 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -30,6 +30,32 @@ void Systems::TankSteeringSystem::Update(double dt) void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) { + auto pEmitter = m_World->GetComponent(entity); + if(pEmitter) + { + if(!m_World->GetComponent(parent)) + return; + auto tankTransform = m_World->GetComponent(parent); + glm::vec2 velXZ = glm::vec2(tankTransform->Velocity.x, tankTransform->Velocity.z); + float speedMPDT = glm::length(velXZ); + if(speedMPDT < 1) + { + pEmitter->Emitting = false; + return; + } + else + { + pEmitter->Emitting = true; + pEmitter->ScaleSpectrum.erase(pEmitter->ScaleSpectrum.begin()); + float scale = speedMPDT / 20; + scale = glm::clamp(scale, 0.3f, 20.f); + pEmitter->ScaleSpectrum.push_back(glm::vec3(speedMPDT / 20)); + float spawnFrequency = 1 / speedMPDT; + spawnFrequency = glm::clamp(spawnFrequency, 0.1f, 2.f); + pEmitter->SpawnFrequency = 1 / speedMPDT; + } + } + auto tankSteeringComponent = m_World->GetComponent(entity); if(!tankSteeringComponent) return; @@ -147,15 +173,6 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit m_TimeSinceLastShot[tankSteeringComponent->Barrel] += dt; } - -// auto shot = m_World->GetComponent(entity); -// if(shot) -// { -// if(inputController->Shoot && m_TimeSinceLastShot[tankSteeringComponent->Barrel] > 0.5) -// { -// -// } -// } } bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) @@ -194,66 +211,66 @@ bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) //auto otherTransform = m_World->GetComponent(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() / 2, glm::vec3(1,0,0)); + e.Speed = 3; + e.SpreadAngle = glm::pi(); + 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() / 2, glm::vec3(1,0,0)); + e.Speed = 17; + e.SpreadAngle = glm::pi(); + 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() / 2, glm::vec3(1,0,0)); + e.Speed = 6; + e.SpreadAngle = glm::pi(); + e.spritePath = "Textures/Sprites/Blast1.png"; + e.Color = glm::vec4(2, 2, 2, 0.2); + EventBroker->Publish(e); + // Events::CreateExplosion e; -// e.LifeTime = 3; -// e.ParticleScale.push_back(8); +// e.LifeTime = 1.5; +// e.ParticleScale.push_back(1); +// e.ParticleScale.push_back(6); // e.ParticlesToSpawn = 20; // e.Position = shellTransform->Position; -// e.RelativeUpOrientation = glm::angleAxis(glm::pi() / 2, glm::vec3(1,0,0)); -// e.Speed = 3; -// e.SpreadAngle = glm::pi(); -// e.spritePath = "Textures/Sprites/Smoke1.png"; -// e.Color = glm::vec4(0.6,0.6,0.6,1); +// e.SpreadAngle = glm::radians(180) / 4; +// e.RelativeUpOrientation = glm::angleAxis(glm::radians(90), glm::vec3(1,0,0)); +// e.UseGoalVector = true; +// e.GoalVelocity = glm::vec3(0,-12,0); +// e.Speed = 12; +// e.spritePath = "Textures/Sprites/Splash.png"; +// e.Color = glm::vec4(5.f,5.f,5.f,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() / 2, glm::vec3(1,0,0)); -// e.Speed = 17; -// e.SpreadAngle = glm::pi(); -// e.spritePath = "Textures/Sprites/Fire.png"; -// EventBroker->Publish(e); -// e.LifeTime = 0.2; +// e.LifeTime = 1.5; // e.ParticleScale.push_back(1); -// e.ParticleScale.push_back(15); -// e.ParticlesToSpawn = 5; +// e.ParticleScale.push_back(6); +// e.ParticlesToSpawn = 20; // e.Position = shellTransform->Position; -// e.RelativeUpOrientation = glm::angleAxis(glm::pi() / 2, glm::vec3(1,0,0)); -// e.Speed = 6; -// e.SpreadAngle = glm::pi(); -// e.spritePath = "Textures/Sprites/Blast1.png"; -// e.Color = glm::vec4(2, 2, 2, 0.2); +// e.SpreadAngle = glm::radians(180)/ 4; +// e.RelativeUpOrientation = glm::angleAxis(glm::radians(90), glm::vec3(1,0,0)); +// e.UseGoalVector = true; +// e.GoalVelocity = glm::vec3(0,-12,0); +// e.Speed = 12; +// e.spritePath = "Textures/Sprites/Splash.png"; +// e.Color = glm::vec4(1.f,1.f,1.f,1); // EventBroker->Publish(e); - - Events::CreateExplosion e; - e.LifeTime = 1.5; - e.ParticleScale.push_back(1); - e.ParticleScale.push_back(6); - e.ParticlesToSpawn = 20; - e.Position = shellTransform->Position; - e.SpreadAngle = glm::radians(180) / 4; - e.RelativeUpOrientation = glm::angleAxis(glm::radians(90), glm::vec3(1,0,0)); - e.UseGoalVector = true; - e.GoalVelocity = glm::vec3(0,-12,0); - e.Speed = 12; - e.spritePath = "Textures/Sprites/Splash.png"; - e.Color = glm::vec4(5.f,5.f,5.f,1); - - EventBroker->Publish(e); - e.LifeTime = 1.5; - e.ParticleScale.push_back(1); - e.ParticleScale.push_back(6); - e.ParticlesToSpawn = 20; - e.Position = shellTransform->Position; - e.SpreadAngle = glm::radians(180)/ 4; - e.RelativeUpOrientation = glm::angleAxis(glm::radians(90), glm::vec3(1,0,0)); - e.UseGoalVector = true; - e.GoalVelocity = glm::vec3(0,-12,0); - e.Speed = 12; - e.spritePath = "Textures/Sprites/Splash.png"; - e.Color = glm::vec4(1.f,1.f,1.f,1); - EventBroker->Publish(e); } { Events::PlaySFX e; @@ -431,7 +448,8 @@ EntityID Systems::TankSteeringSystem::CreateTank(int playerID) auto health = m_World->AddComponent(tank); health->Amount = 100.f; m_World->AddComponent(tank); - + + { auto shape = m_World->CreateEntity(tank); auto transform = m_World->AddComponent(shape); @@ -565,31 +583,43 @@ EntityID Systems::TankSteeringSystem::CreateTank(int playerID) AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, 2.375), 1, false); #pragma endregion +#pragma region DustParticles + + std::vector ePos; + ePos.push_back(glm::vec3(-2, -1.7, 2.0)); + ePos.push_back(glm::vec3(2, -1.7, 2.0)); + ePos.push_back(glm::vec3(2, -1.7, -2.0)); + ePos.push_back(glm::vec3(-2, -1.7, -2.0)); + + for (int i = 0; i < 4; i++) { auto entity = m_World->CreateEntity(tank); auto transformComponent = m_World->AddComponent(entity); - transformComponent->Position = glm::vec3(-2, -1.7, 2.0); + transformComponent->Position = ePos[i]; transformComponent->Scale = glm::vec3(3, 3, 3); transformComponent->Orientation = glm::angleAxis(glm::pi() / 2, glm::vec3(1, 0, 0)); auto emitterComponent = m_World->AddComponent(entity); - emitterComponent->SpawnCount = 2; - emitterComponent->SpawnFrequency = 0.005; + emitterComponent->SpawnCount = 1; + emitterComponent->SpawnFrequency = 0.1; emitterComponent->SpreadAngle = glm::pi(); emitterComponent->UseGoalVelocity = false; - emitterComponent->LifeTime = 0.5; - //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi() / 100); - emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); - m_World->CommitEntity(entity); - + emitterComponent->LifeTime = 0.3; + emitterComponent->Speed = 3; + emitterComponent->Emitting = true; + emitterComponent->Fade = true; + emitterComponent->ScaleSpectrum.push_back(glm::vec3(1)); + //emitterComponent->Color = glm::vec4(1); auto particleEntity = m_World->CreateEntity(entity); - auto TEMP = m_World->AddComponent(particleEntity); - TEMP->Scale = glm::vec3(0); + m_World->AddComponent(particleEntity); + m_World->AddComponent(particleEntity); auto spriteComponent = m_World->AddComponent(particleEntity); - spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png"; - emitterComponent->ParticleTemplate = particleEntity; - + spriteComponent->SpriteFile = "Textures/Sprites/Dirt.png"; m_World->CommitEntity(particleEntity); + emitterComponent->ParticleTemplate = particleEntity; + m_World->CommitEntity(entity); } +#pragma endregion + m_World->CommitEntity(tank); diff --git a/src/Systems/TankSteeringSystem.h b/src/Systems/TankSteeringSystem.h index 3f2ee51..78ad3e4 100644 --- a/src/Systems/TankSteeringSystem.h +++ b/src/Systems/TankSteeringSystem.h @@ -1,5 +1,4 @@ #include - #include "System.h" #include "Events/TankSteer.h" #include "Events/SetVelocity.h" @@ -23,6 +22,7 @@ #include "Components/TankShell.h" #include "Components/SphereShape.h" #include "Components/Listener.h" +#include "Components/SoundEmitter.h" #include "Events/EnableCollisions.h" #include "Events/DisableCollisions.h"