From 571edbc214aa12dd353d23a518ce63944ce9a390 Mon Sep 17 00:00:00 2001 From: Stiffly Date: Tue, 27 May 2014 07:09:22 +0200 Subject: [PATCH] ... even more event-based --- src/Systems/ParticleSystem.cpp | 48 ++++++++++------------------------ src/Systems/ParticleSystem.h | 9 ++++--- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/Systems/ParticleSystem.cpp b/src/Systems/ParticleSystem.cpp index 9b094d3..f16d9ad 100644 --- a/src/Systems/ParticleSystem.cpp +++ b/src/Systems/ParticleSystem.cpp @@ -8,7 +8,7 @@ void Systems::ParticleSystem::Initialize() { m_TransformSystem = m_World->GetSystem(); tempSpawnedExplosions = false; - EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &ParticleSystem::OnKeyUp); + EVENT_SUBSCRIBE_MEMBER(m_EExplosion, &ParticleSystem::CreateExplosion); } void Systems::ParticleSystem::Update(double dt) @@ -225,53 +225,33 @@ void Systems::ParticleSystem::ScalarInterpolation(double timeProgress, std::vect alpha = spectrum[0] + dAlpha * timeProgress; } -void Systems::ParticleSystem::CreateExplosion(glm::vec3 _pos, double _lifeTime, int _particlesToSpawn, std::string _spritePath, glm::quat _relativeUpOri, float _speed, float _spreadAngle, float _particleScale) +bool Systems::ParticleSystem::CreateExplosion(const Events::CreateExplosion &e) { auto explosion = m_World->CreateEntity(); auto emitter = m_World->AddComponent(explosion); - emitter->LifeTime = _lifeTime; - emitter->SpawnCount = _particlesToSpawn; - emitter->Speed = _speed; - emitter->SpreadAngle = _spreadAngle; - emitter->SpawnFrequency = _lifeTime + 20; //temp -// emitter->UseGoalVelocity = true; -// emitter->GoalVelocity = glm::vec3(0,-_speed, 0); + emitter->LifeTime = e.LifeTime; + emitter->SpawnCount = e.ParticlesToSpawn; + emitter->Speed = e.Speed; + emitter->SpreadAngle = e.SpreadAngle; + emitter->SpawnFrequency = e.LifeTime + 20; //temp + // emitter->UseGoalVelocity = true; + // emitter->GoalVelocity = glm::vec3(0,-_speed, 0); m_World->CommitEntity(explosion); auto particleEnt = m_World->CreateEntity(); auto TEMP = m_World->AddComponent(particleEnt); TEMP->Scale = glm::vec3(0); auto spriteComponent = m_World->AddComponent(particleEnt); - spriteComponent->SpriteFile = _spritePath; + spriteComponent->SpriteFile = e.spritePath; m_World->CommitEntity(particleEnt); emitter->ParticleTemplate = particleEnt; - + auto transform = m_World->AddComponent(explosion); - transform->Position = _pos; - transform->Orientation = _relativeUpOri; - + transform->Position = e.Position; + transform->Orientation = e.RelativeUpOrientation; + SpawnParticles(explosion); m_ExplosionEmitters[explosion] = glfwGetTime(); -} -bool Systems::ParticleSystem::OnKeyUp(const Events::KeyUp &e) -{ - if(!tempSpawnedExplosions) - { - if (e.KeyCode == GLFW_KEY_B) - { - tempSpawnedExplosions = true; - CreateExplosion( - glm::vec3(0, 10, 0), - 0.5, - 60, - "Textures/Sprites/NewtonTreeDeleteASAPPlease.png", - glm::angleAxis(glm::pi()/2, glm::vec3(1,0,0)), - 40, - glm::pi(), - 0.5f - ); - } - } return true; } \ No newline at end of file diff --git a/src/Systems/ParticleSystem.h b/src/Systems/ParticleSystem.h index fad8815..f0a10de 100644 --- a/src/Systems/ParticleSystem.h +++ b/src/Systems/ParticleSystem.h @@ -9,6 +9,7 @@ #include "Components/Sprite.h" #include "EventBroker.h" #include "Events/KeyUp.h" +#include "Events/CreateExplosion.h" #include "Color.h" #include @@ -35,7 +36,7 @@ public: void UpdateEntity(double dt, EntityID entity, EntityID parent) override; void Initialize() override; - void CreateExplosion(glm::vec3 _pos, double _lifeTime, int _particlesToSpawn, std::string _spritePath, glm::quat _relativeUpOri, float _speed, float _spreadAngle, float _particleScale); + //void CreateExplosion(glm::vec3 _pos, double _lifeTime, int _particlesToSpawn, std::string _spritePath, glm::quat _relativeUpOri, float _speed, float _spreadAngle, float _particleScale); virtual bool OnCommand(const Events::KeyUp &event) { return false; } @@ -54,8 +55,10 @@ private: bool tempSpawnedExplosions; - EventRelay m_EKeyUp; - bool OnKeyUp(const Events::KeyUp &e); +// EventRelay m_EKeyUp; +// bool OnKeyUp(const Events::KeyUp &e); + EventRelay m_EExplosion; + bool CreateExplosion(const Events::CreateExplosion &e); };