Fission FSN
Loading...
Searching...
No Matches
fsIParticle.h
Go to the documentation of this file.
1/********************************************************************
2*
3* Created: 20/3/2014 11:14
4*
5* File: fsIParticle.h
6*
7* Author: Mick Waites
8*
9* Purpose: Base class for a particle, could be either a sprite
10* or an animation.
11*
12*********************************************************************/
13
14#ifndef fsIParticlehdr
15#define fsIParticlehdr
16
17#include <memory>
18
20#include <fsCore/fsVec2d.h>
21#include <fsCore/fsPoint.h>
22#include <fsCore/fsSColour.h>
23
25
26#include "fsCParticleData.h"
27
31class fsIScene;
33class fsCSprite;
35class fsCBrush;
36
37
39{
40 friend class fsCParticleData;
41 friend class fsCParticleEmitter;
43
44public:
45
47 {
48 std::shared_ptr<fsCParticleData::fsSOscillationGraph> mHorizontalOscillationGraph;
49 std::shared_ptr<fsCParticleData::fsSOscillationGraph> mVerticalOscillationGraph;
50
55
57 std::shared_ptr<fsCParticleData::fsSOscillationGraph> pHorizontalOscillationGraph = std::shared_ptr<fsCParticleData::fsSOscillationGraph>(nullptr),
58 std::shared_ptr<fsCParticleData::fsSOscillationGraph> pVerticalOscillationGraph = std::shared_ptr<fsCParticleData::fsSOscillationGraph>(nullptr),
59 fsCGraph<fsSColour>* const pColourGraph = nullptr,
60 fsCParticleScaleParameter* const pScale = nullptr,
61 fsCParticleScaleParameter* const pScaleY = nullptr,
62 fsCParticleRotateParameter* const pRotate = nullptr
63 ) :
64 mHorizontalOscillationGraph(pHorizontalOscillationGraph),
65 mVerticalOscillationGraph(pVerticalOscillationGraph),
66 mColourGraph(pColourGraph),
67 mScale(pScale),
68 mScaleY(pScaleY),
69 mRotate(pRotate)
70 {
71 }
72 };
73
74 virtual ~fsIParticle();
75 fsIParticle(const sCreateParmas& pParams);
76
77protected:
78
80
81 void deactivate();
82 fsBool hitTest(const fsPoint& pLocalPos) const;
83 std::shared_ptr<fsCBrush> brushGet() const;
84
85 void visibilitySet(fsBool pVisible);
86
87 void scaleInitialise();
88 void angleInitialise();
89
90 void posInitialise(const fsVec2d& pPos, const fsVec2d& pVel, const fsVec2d& pVelDelta, const fsVec2d& pVelUV);
92
93 fsBool activeGet() const;
94 void activate(fsS32 pLifeTimeMs);
95
96 void renderMatrixApply(const fsAffineMtx2d& pRenderMatrix);
97 void renderMatrixApply();
98
99 fsBool update(fsS32 pDeltaMs);
100 void render();
101
102
103 virtual std::shared_ptr<fsCBrush> brushGetDo() const = 0;
104
105 virtual fsBool hitTestDo(const fsPoint& pLocalPos) const { return false; };
106
107 virtual void visibilitySetDo(fsBool pVisible)
108 {
109 }
110
111 virtual void updateDo(fsS32 pDeltaTime) = 0;
112 virtual void renderDo() = 0;
113
114 virtual void colourGraphUpdate() = 0;
115 virtual void matrixApplyDo(const fsAffineMtx2d& pMatrix) = 0;
116
117 virtual void textureWrapSet()
118 {
119 }
120
121 virtual void uvApply(const fsVec2d& pUV)
122 {
123 }
124
128
133
139
143
144 std::unique_ptr<fsCParticleData::fsSOscillationGraph> mHorizontalOscillationGraph;
145 std::unique_ptr<fsCParticleData::fsSOscillationGraph> mVerticalOscillationGraph;
146
148
149private:
150
151 void propertiesFinalise(fsS32 pDeltaMs);
152 void propertiesUpdate(fsS32 pDeltaMs);
153
154
155 void positionUVUpdate(fsF32 pDeltaFloat);
156 void oscillationUpdate(fsS32 pDeltaMs);
157 void positionUpdate(fsF32 pDeltaFloat);
158 void scaleUpdate(fsS32 pDeltaMs);
159 void angleUpdate(fsS32 pDeltaMs);
160
161 void scaleFinalise();
162 void angleFinalise();
163};
164
165#endif
Definition fsAffineMtx2d.h:27
Definition fsCBrush.h:26
Definition fsCGraph.h:24
Definition fsCParticleParameter.h:22
Definition fsCParticleRotateParameter.h:19
Definition fsCParticleScaleParameter.h:19
Definition fsCSprite.h:24
Definition fsIAnimationData.h:18
virtual void renderDo()=0
fsCGraph< fsSColour > * mColourGraph
Definition fsIParticle.h:147
fsVec2d mVelUV
Definition fsIParticle.h:137
friend class fsCParticleData
Definition fsIParticle.h:40
fsVec2d mVel
Definition fsIParticle.h:135
fsAffineMtx2d mRenderMtx
Definition fsIParticle.h:129
fsBool activeGet() const
Definition fsIParticle.cpp:84
virtual ~fsIParticle()
Definition fsIParticle.cpp:312
void activate(fsS32 pLifeTimeMs)
Definition fsIParticle.cpp:93
fsSColour4B colourGraphValueGet(fsS32 pTime) const
Definition fsIParticle.cpp:68
fsAffineMtx2d mLocalMtx
Definition fsIParticle.h:130
fsBool mActive
Definition fsIParticle.h:125
std::unique_ptr< fsCParticleData::fsSOscillationGraph > mVerticalOscillationGraph
Definition fsIParticle.h:145
friend class fsCParticleEmitter
Definition fsIParticle.h:41
virtual void visibilitySetDo(fsBool pVisible)
Definition fsIParticle.h:107
fsCParticleParameter * mScaleXParam
Definition fsIParticle.h:140
fsCParticleParameter * mScaleYParam
Definition fsIParticle.h:141
void colourGraphInitialise(fsCGraph< fsSColour > *pColourGraph)
Definition fsIParticle.cpp:79
void posInitialise(const fsVec2d &pPos, const fsVec2d &pVel, const fsVec2d &pVelDelta, const fsVec2d &pVelUV)
Definition fsIParticle.cpp:37
virtual void textureWrapSet()
Definition fsIParticle.h:117
fsVec2d mVelDelta
Definition fsIParticle.h:136
fsIParticle(const sCreateParmas &pParams)
Definition fsIParticle.cpp:284
void deactivate()
Definition fsIParticle.cpp:10
void render()
Definition fsIParticle.cpp:276
fsS32 mElapsedTimeMs
Definition fsIParticle.h:127
virtual void uvApply(const fsVec2d &pUV)
Definition fsIParticle.h:121
void scaleInitialise()
Definition fsIParticle.cpp:52
void angleInitialise()
Definition fsIParticle.cpp:62
fsBool mMtxDirty
Definition fsIParticle.h:131
void renderMatrixApply()
Definition fsIParticle.cpp:104
virtual void matrixApplyDo(const fsAffineMtx2d &pMatrix)=0
fsS32 mLifetimeMs
Definition fsIParticle.h:126
std::unique_ptr< fsCParticleData::fsSOscillationGraph > mHorizontalOscillationGraph
Definition fsIParticle.h:144
std::shared_ptr< fsCBrush > brushGet() const
Definition fsIParticle.cpp:16
virtual fsBool hitTestDo(const fsPoint &pLocalPos) const
Definition fsIParticle.h:105
fsBool update(fsS32 pDeltaMs)
Definition fsIParticle.cpp:123
virtual void colourGraphUpdate()=0
fsVec2d mPos
Definition fsIParticle.h:134
fsVec2d mMtxPos
Definition fsIParticle.h:132
void visibilitySet(fsBool pVisible)
Definition fsIParticle.cpp:32
virtual void updateDo(fsS32 pDeltaTime)=0
friend class gfCTappableCollectableParticleEmitterComponent
Definition fsIParticle.h:42
fsBool hitTest(const fsPoint &pLocalPos) const
Definition fsIParticle.cpp:21
fsVec2d mPosUV
Definition fsIParticle.h:138
fsCParticleParameter * mAngleParam
Definition fsIParticle.h:142
virtual std::shared_ptr< fsCBrush > brushGetDo() const =0
Definition fsIRenderableComponent.h:21
Definition fsIScene.h:18
bool fsBool
Definition fsBaseTypes.h:26
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28
fsCParticleRotateParameter *const mRotate
Definition fsIParticle.h:54
std::shared_ptr< fsCParticleData::fsSOscillationGraph > mHorizontalOscillationGraph
Definition fsIParticle.h:48
fsCGraph< fsSColour > *const mColourGraph
Definition fsIParticle.h:51
std::shared_ptr< fsCParticleData::fsSOscillationGraph > mVerticalOscillationGraph
Definition fsIParticle.h:49
fsCParticleScaleParameter *const mScale
Definition fsIParticle.h:52
sCreateParmas(std::shared_ptr< fsCParticleData::fsSOscillationGraph > pHorizontalOscillationGraph=std::shared_ptr< fsCParticleData::fsSOscillationGraph >(nullptr), std::shared_ptr< fsCParticleData::fsSOscillationGraph > pVerticalOscillationGraph=std::shared_ptr< fsCParticleData::fsSOscillationGraph >(nullptr), fsCGraph< fsSColour > *const pColourGraph=nullptr, fsCParticleScaleParameter *const pScale=nullptr, fsCParticleScaleParameter *const pScaleY=nullptr, fsCParticleRotateParameter *const pRotate=nullptr)
Definition fsIParticle.h:56
fsCParticleScaleParameter *const mScaleY
Definition fsIParticle.h:53
Definition fsPoint.h:17
Definition fsSColour.h:54
Definition fsVec2d.h:16