TDME2  1.9.200
ObjectParticleSystem.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <vector>
5 
6 #include <tdme/tdme.h>
7 #include <tdme/engine/fwd-tdme.h>
9 #include <tdme/engine/Color4.h>
14 #include <tdme/engine/Entity.h>
16 #include <tdme/engine/Transform.h>
17 #include <tdme/math/Matrix4x4.h>
18 #include <tdme/math/Vector3.h>
20 
21 using std::string;
22 using std::vector;
23 
35 
36 /**
37  * Object particle system entity to be used with engine class
38  * @author Andreas Drewke
39  */
42  , public ParticleSystem
43 {
45 
46 private:
47  bool frustumCulling { true };
49 
50  // overridden methods
51  inline void setParentTransform(const Transform& transform) override {
52  ObjectParticleSystemInternal::setParentTransform(transform);
53  }
54 
55 public:
56  // forbid class copy
58 
59  /**
60  * Public constructor
61  * @param id id
62  * @param model model
63  * @param scale scale
64  * @param autoEmit auto emit
65  * @param contributesShadows enable contributes shadows
66  * @param receivesShadows enable receives shadows
67  * @param maxCount max count
68  * @param emitter emitter
69  */
70  ObjectParticleSystem(const string& id, Model* model, const Vector3& scale, bool autoEmit, bool contributesShadows, bool receivesShadows, int32_t maxCount, ParticleEmitter* emitter);
71 
72  // overridden method
73  inline EntityType getEntityType() override {
75  }
76 
77  /**
78  * @return objects
79  */
80  inline const vector<Object*>& getObjects() {
81  return objects;
82  }
83 
84  /**
85  * @return enabled objects
86  */
87  inline const vector<Object*>& getEnabledObjects() {
88  return enabledObjects;
89  }
90 
91  void setEngine(Engine* engine) override;
92  void setRenderer(Renderer* renderer) override;
93  void initialize() override;
94  void dispose() override;
95 
96  inline bool isEnabled() override {
97  return ObjectParticleSystemInternal::isEnabled();
98  }
99 
100  void setEnabled(bool enabled) override;
101  bool isFrustumCulling() override;
102  void setFrustumCulling(bool frustumCulling) override;
103  void update() override;
104 
105  inline BoundingBox* getBoundingBox() override {
106  return &boundingBox;
107  }
108 
109  inline BoundingBox* getWorldBoundingBox() override {
110  return &worldBoundingBox;
111  }
112 
113  inline ParticleEmitter* getEmitter() override {
114  return ObjectParticleSystemInternal::getEmitter();
115  }
116 
117  inline const Color4& getEffectColorAdd() const override {
118  return ObjectParticleSystemInternal::getEffectColorAdd();
119  }
120 
121  inline void setEffectColorAdd(const Color4& effectColorAdd) override {
122  ObjectParticleSystemInternal::setEffectColorAdd(effectColorAdd);
123  }
124 
125  inline const Color4& getEffectColorMul() const override {
126  return ObjectParticleSystemInternal::getEffectColorMul();
127  }
128 
129  inline void setEffectColorMul(const Color4& effectColorMul) override {
130  ObjectParticleSystemInternal::setEffectColorMul(effectColorMul);
131  }
132 
133  inline const string& getId() override {
134  return ObjectParticleSystemInternal::getId();
135  }
136 
137  inline bool isContributesShadows() override {
138  return ObjectParticleSystemInternal::isContributesShadows();
139  }
140 
141  inline void setContributesShadows(bool contributesShadows) override {
142  ObjectParticleSystemInternal::setContributesShadows(contributesShadows);
143  }
144 
145  inline bool isReceivesShadows() override {
146  return ObjectParticleSystemInternal::isReceivesShadows();
147  }
148 
149  inline void setReceivesShadows(bool receivesShadows) override {
150  ObjectParticleSystemInternal::setReceivesShadows(receivesShadows);
151  }
152 
153  inline bool isPickable() override {
154  return ObjectParticleSystemInternal::isPickable();
155  }
156 
157  inline void setPickable(bool pickable) override {
158  ObjectParticleSystemInternal::setPickable(pickable);
159  }
160 
161  inline const Vector3& getTranslation() const override {
162  return Transform::getTranslation();
163  }
164 
165  inline void setTranslation(const Vector3& translation) override {
167  }
168 
169  inline const Vector3& getScale() const override {
170  return Transform::getScale();
171  }
172 
173  inline void setScale(const Vector3& scale) override {
175  }
176 
177  inline const int getRotationCount() const override {
179  }
180 
181  inline Rotation& getRotation(const int idx) override {
182  return Transform::getRotation(idx);
183  }
184 
185  inline void addRotation(const Vector3& axis, const float angle) override {
186  Transform::addRotation(axis, angle);
187  }
188 
189  inline void removeRotation(const int idx) override {
191  }
192 
193  inline const Vector3& getRotationAxis(const int idx) const override {
194  return Transform::getRotationAxis(idx);
195  }
196 
197  inline void setRotationAxis(const int idx, const Vector3& axis) override {
198  Transform::setRotationAxis(idx, axis);
199  }
200 
201  inline const float getRotationAngle(const int idx) const override {
202  return Transform::getRotationAngle(idx);
203  }
204 
205  inline void setRotationAngle(const int idx, const float angle) override {
206  Transform::setRotationAngle(idx, angle);
207  }
208 
209  inline const Quaternion& getRotationsQuaternion() const override {
211  }
212 
213  inline const Matrix4x4& getTransformMatrix() const override {
214  return entityTransformMatrix;
215  }
216 
217  inline const Transform& getParentTransform() const override {
218  return parentTransform;
219  }
220 
221  inline const Transform& getTransform() const override {
222  return *this;
223  }
224 
225  void setTransform(const Transform& transform) override;
226 
227  inline RenderPass getRenderPass() const override {
228  return renderPass;
229  }
230 
231  inline void setRenderPass(RenderPass renderPass) override {
232  this->renderPass = renderPass;
233  }
234 
235  inline bool isActive() override {
236  return ObjectParticleSystemInternal::isActive();
237  }
238 
239  inline bool isAutoEmit() override {
240  return ObjectParticleSystemInternal::isAutoEmit();
241  }
242 
243  inline int emitParticles() override {
244  return ObjectParticleSystemInternal::emitParticles();
245  }
246 
247  void setAutoEmit(bool autoEmit) override;
248  void updateParticles() override;
249 
250  inline const Transform& getLocalTransform() override {
251  return ObjectParticleSystemInternal::getLocalTransform();
252  }
253  inline void setLocalTransform(const Transform& transform) override {
254  ObjectParticleSystemInternal::setLocalTransform(transform);
255  }
256 
257 };
Color 4 definition class.
Definition: Color4.h:18
Engine main class.
Definition: Engine.h:131
@ ENTITYTYPE_OBJECTPARTICLESYSTEM
Definition: Entity.h:98
Object particle system entity to be used with engine class.
BoundingBox * getBoundingBox() override
const Vector3 & getTranslation() const override
void updateParticles() override
Updates the particle entity.
const Transform & getTransform() const override
void setLocalTransform(const Transform &transform) override
Set local transform.
RenderPass getRenderPass() const override
void dispose() override
Dispose this entity.
void setTranslation(const Vector3 &translation) override
Set translation.
void removeRotation(const int idx) override
Remove rotation.
Rotation & getRotation(const int idx) override
Get rotation at given index.
const int getRotationCount() const override
ObjectParticleSystem(const string &id, Model *model, const Vector3 &scale, bool autoEmit, bool contributesShadows, bool receivesShadows, int32_t maxCount, ParticleEmitter *emitter)
Public constructor.
const Vector3 & getRotationAxis(const int idx) const override
void initialize() override
Initiates this entity.
void setRenderPass(RenderPass renderPass) override
Set render pass.
void setReceivesShadows(bool receivesShadows) override
Enable/disable receives shadows.
void addRotation(const Vector3 &axis, const float angle) override
Add rotation.
void update() override
Update transform.
void setPickable(bool pickable) override
Set this entity pickable.
void setEffectColorMul(const Color4 &effectColorMul) override
Set effect color that will be multiplied with fragment color.
ParticleEmitter * getEmitter() override
void setTransform(const Transform &transform) override
Set transform.
const vector< Object * > & getObjects()
const Quaternion & getRotationsQuaternion() const override
void setScale(const Vector3 &scale) override
Set scale.
const Vector3 & getScale() const override
const float getRotationAngle(const int idx) const override
BoundingBox * getWorldBoundingBox() override
const Color4 & getEffectColorMul() const override
The effect color will be multiplied with fragment color.
void setFrustumCulling(bool frustumCulling) override
Set frustum culling.
void setAutoEmit(bool autoEmit) override
Set auto emit.
void setEngine(Engine *engine) override
Set up engine.
void setEnabled(bool enabled) override
Enable/disable rendering.
const Transform & getParentTransform() const override
const Matrix4x4 & getTransformMatrix() const override
int emitParticles() override
Adds particles to this particle entity at given position.
void setParentTransform(const Transform &transform) override
Set parent transform.
const vector< Object * > & getEnabledObjects()
void setContributesShadows(bool contributesShadows) override
Enable/disable contributes shadows.
void setRotationAxis(const int idx, const Vector3 &axis) override
Set rotation axis.
void setEffectColorAdd(const Color4 &effectColorAdd) override
Set effect color that will be added to fragment color.
const Color4 & getEffectColorAdd() const override
The effect color will be added to fragment color.
const Transform & getLocalTransform() override
void setRenderer(Renderer *renderer) override
Set up renderer.
void setRotationAngle(const int idx, const float angle) override
Particle system group, which combines several particle systems into a group, to be used with engine c...
Rotation representation.
Definition: Rotation.h:18
Transform which contain scale, rotations and translation.
Definition: Transform.h:29
void setRotationAngle(const int idx, const float angle)
Definition: Transform.h:155
void setRotationAxis(const int idx, const Vector3 &axis)
Set rotation axis.
Definition: Transform.h:138
void setTranslation(const Vector3 &translation)
Set translation.
Definition: Transform.h:64
void removeRotation(const int idx)
Remove rotation.
Definition: Transform.h:121
const Vector3 & getScale() const
Definition: Transform.h:71
Rotation & getRotation(const int idx)
Get rotation at given index.
Definition: Transform.h:95
void setScale(const Vector3 &scale)
Set scale.
Definition: Transform.h:79
const int getRotationCount() const
Definition: Transform.h:86
const Vector3 & getRotationAxis(const int idx) const
Definition: Transform.h:129
const Quaternion & getRotationsQuaternion() const
Definition: Transform.h:162
const Vector3 & getTranslation() const
Definition: Transform.h:56
void addRotation(const Vector3 &axis, const float angle)
Add rotation.
Definition: Transform.h:113
const float getRotationAngle(const int idx) const
Definition: Transform.h:146
Representation of a 3D model.
Definition: Model.h:35
Axis aligned bounding box used for frustum, this is not directly connectable with physics engine.
Definition: BoundingBox.h:26
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Quaternion class representing quaternion mathematical structure and operations with x,...
Definition: Quaternion.h:24
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
Particle system entity interface.
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6