aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api
diff options
context:
space:
mode:
authorjaroWMR <jarorutjes07@gmail.com>2024-10-23 18:42:44 +0200
committerjaroWMR <jarorutjes07@gmail.com>2024-10-23 18:42:44 +0200
commit0d2491e8619ec9012381ed3e39e85e37e0cb7765 (patch)
tree67bcbd12d655acce8eb6677cf97c07edb2f1d93f /src/crepe/api
parent5558d2d0530cc01fd8e3c8ce18cc38ce9c6f8057 (diff)
moved particleEmitter
Diffstat (limited to 'src/crepe/api')
-rw-r--r--src/crepe/api/CMakeLists.txt2
-rw-r--r--src/crepe/api/ParticleEmitter.cpp28
-rw-r--r--src/crepe/api/ParticleEmitter.h32
3 files changed, 62 insertions, 0 deletions
diff --git a/src/crepe/api/CMakeLists.txt b/src/crepe/api/CMakeLists.txt
index c97423d..465ba46 100644
--- a/src/crepe/api/CMakeLists.txt
+++ b/src/crepe/api/CMakeLists.txt
@@ -6,6 +6,7 @@ target_sources(crepe PUBLIC
Rigidbody.cpp
Sprite.cpp
Force.cpp
+ ParticleEmitter.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -17,5 +18,6 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
Rigidbody.h
Sprite.h
Force.h
+ ParticleEmitter.h
)
diff --git a/src/crepe/api/ParticleEmitter.cpp b/src/crepe/api/ParticleEmitter.cpp
new file mode 100644
index 0000000..318c6db
--- /dev/null
+++ b/src/crepe/api/ParticleEmitter.cpp
@@ -0,0 +1,28 @@
+#include "ParticleEmitter.h"
+#include <ctime>
+#include "Particle.h"
+#include <iostream>
+
+using namespace crepe;
+
+ParticleEmitter::ParticleEmitter(uint32_t gameObjectId ,uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset, float m_beginLifespan, float m_endLifespan)
+ : Component(gameObjectId), m_maxParticles(maxParticles), m_emissionRate(emissionRate), m_speed(speed), m_speedOffset(speedOffset), m_position{0, 0}, m_beginLifespan(m_beginLifespan),m_endLifespan(m_endLifespan) {
+ std::srand(static_cast<uint32_t>(std::time(nullptr))); // initialize random seed
+ std::cout << "Create emitter" << std::endl;
+ m_minAngle = (360 + angle - (angleOffset % 360)) % 360; // calculate minAngle
+ m_maxAngle = (360 + angle + (angleOffset % 360)) % 360; // calculate maxAngle
+ m_position.x = 400;
+ m_position.y = 400;
+ for (size_t i = 0; i < m_maxParticles; i++)
+ {
+ this->particles.emplace_back();
+ }
+
+}
+
+ParticleEmitter::~ParticleEmitter() {
+ std::vector<Particle>::iterator it = this->particles.begin();
+ while (it != this->particles.end()) {
+ it = this->particles.erase(it);
+ }
+}
diff --git a/src/crepe/api/ParticleEmitter.h b/src/crepe/api/ParticleEmitter.h
new file mode 100644
index 0000000..8cd78a9
--- /dev/null
+++ b/src/crepe/api/ParticleEmitter.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include <vector>
+#include "Particle.h"
+#include <cstdint>
+#include "Component.h"
+#
+
+namespace crepe {
+
+class ParticleEmitter : public Component {
+public:
+ ParticleEmitter(uint32_t gameObjectId, uint32_t maxParticles, uint32_t emissionRate, uint32_t speed, uint32_t speedOffset, uint32_t angle, uint32_t angleOffset,float m_beginLifespan,float m_endLifespan);
+ ~ParticleEmitter();
+
+ Position m_position; //position of the emitter
+ uint32_t m_maxParticles; //maximum number of particles
+ uint32_t m_emissionRate; //rate of particle emission
+ uint32_t m_speed; //base speed of the particles
+ uint32_t m_speedOffset; //offset for random speed variation
+ uint32_t m_minAngle; //min angle of particle emission
+ uint32_t m_maxAngle; //max angle of particle emission
+ float m_beginLifespan; //begin Lifespan of particle (only visual)
+ float m_endLifespan; //begin Lifespan of particle
+
+ std::vector<Particle> particles; //collection of particles
+
+};
+
+}
+
+