Space Fighter
A "shmup" game for Computer Programming C++
Loading...
Searching...
No Matches
ParticleEmitter.h
Go to the documentation of this file.
1
2/*
3 ██╗ ██╗ █████╗ ████████╗ █████╗ ███╗ ██╗ █████╗
4 ██║ ██╔╝ ██╔══██╗ ╚══██╔══╝ ██╔══██╗ ████╗ ██║ ██╔══██╗
5 █████╔╝ ███████║ ██║ ███████║ ██╔██╗ ██║ ███████║
6 ██╔═██╗ ██╔══██║ ██║ ██╔══██║ ██║╚██╗██║ ██╔══██║
7 ██║ ██╗ ██║ ██║ ██║ ██║ ██║ ██║ ╚████║ ██║ ██║
8 ╚═╝ ╚═╝ ╚═╝ ╚═╝/\ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝
9 /vvvvvvvvvvvvvvvvvvv \=========================================,
10 `^^^^^^^^^^^^^^^^^^^ /---------------------------------------"
11 Katana Engine \/ © 2012 - Shuriken Studios LLC
12 http://www.shurikenstudios.com
13*/
14
15#pragma once
16
17#include "KatanaEngine.h"
18
19namespace KatanaEngine
20{
21
24 {
25
26 public:
27
29 {
30 m_pInitializer = pInitializer;
31 }
32
33 virtual ~ParticleEmitter() { delete m_pInitializer; }
34
35
38 virtual void Emit(const float amount, const GameTime& gameTime)
39 {
40 const float fCount = amount * m_maxParticlesPerSecond * (float)gameTime.GetElapsedTime();
41 float iCount = (int)fCount;
42 m_remainingParticles += fCount - iCount;
43
44 while (iCount)
45 {
46 IParticle *pParticle = m_pPool->GetInactiveParticle();
47 if (!pParticle) {
48 m_remainingParticles += iCount;
49 return;
50 }
51
52 m_pInitializer->Initialize(pParticle, m_position);
53 iCount--;
54 }
55 }
56
57 virtual void SetMaxParticlesPerSecond(const int max) { m_maxParticlesPerSecond = max; }
58
59 virtual void SetParticlePool(ParticlePool *pPool) { m_pPool = pPool; }
60
61 virtual void SetPosition(const Vector2 &position) { m_position = position; }
62
63 private:
64
65 Vector2 m_position;
66
67 int m_maxParticlesPerSecond = 100;
68
69 float m_remainingParticles = 0;
70
71 ParticlePool *m_pPool = nullptr;
72
73 IParticleInitializer *m_pInitializer = nullptr;
74
75 };
76
77}
Contains timing values for game updates and rendering.
Definition GameTime.h:21
double GetElapsedTime() const
Gets the time in seconds since last frame.
Definition GameTime.h:30
Interface for a particle.
Definition IParticle.h:24
Interface for a particle initializer.
virtual void Initialize(IParticle *pParticle, Vector2 &position) const =0
Initializes a particle.
Class for emitting particles.
virtual void Emit(const float amount, const GameTime &gameTime)
Emits particles.
virtual void SetMaxParticlesPerSecond(const int max)
ParticleEmitter(IParticleInitializer *pInitializer)
virtual void SetPosition(const Vector2 &position)
virtual void SetParticlePool(ParticlePool *pPool)
Class that manages a pool of particles.
virtual IParticle * GetInactiveParticle()
Defines a vector with 2 components (x and y).
Definition Vector2.h:21
Katana Engine is a library of classes, interfaces, and value types that provides a foundation for dev...
Definition Animation.cpp:18