TDME2  1.9.200
ObjectBase.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 #include <string>
5 #include <vector>
6 
7 #include <tdme/tdme.h>
8 #include <tdme/engine/fwd-tdme.h>
15 #include <tdme/engine/Engine.h>
16 #include <tdme/engine/Transform.h>
17 #include <tdme/math/Matrix4x4.h>
18 
19 using std::string;
20 using std::unique_ptr;
21 using std::vector;
22 
33 
34 /**
35  * Object base class
36  * @author Andreas Drewke
37  */
39 {
40  friend class ObjectNode;
41  friend class ObjectNodeMesh;
43  friend class ModelUtilitiesInternal;
45 
46 private:
47  unique_ptr<ObjectBase_TransformedFacesIterator> transformedFacesIterator;
48 
49 protected:
51  vector<ObjectNode*> objectNodes;
53  int instances;
55  vector<ObjectAnimation*> instanceAnimations;
56  vector<bool> instanceEnabled;
57  vector<Transform> instanceTransform;
62 
63  // forbid class copy
65 
66  /**
67  * Set parent transform
68  * @param parentTransform parent transform
69  */
71  this->parentTransform = parentTransform;
72  }
73 
74  /**
75  * Private constructor
76  * @param model model
77  * @param useManagers use mesh and object node renderer model manager
78  * @param animationProcessingTarget animation processing target
79  * @param instances instances to compute and render by duplication
80  */
82 
83  /**
84  * Destructor
85  */
86  virtual ~ObjectBase();
87 
88 public:
89 
90  /**
91  * @return model
92  */
93  inline Model* getModel() {
94  return model;
95  }
96 
97  /**
98  * Compute animation
99  * @param contextIdx context index
100  * @param lastFrameAtTime time of last animation computation
101  * @param currentFrameAtTime time of current animation computation
102  */
103  virtual inline void computeAnimation(int contextIdx, int64_t lastFrameAtTime, int64_t currentFrameAtTime){
104  enabledInstances = 0;
105  for (auto i = 0; i < instances; i++) {
106  if (instanceEnabled[i] == false) continue;
107  instanceAnimations[i]->computeAnimation(contextIdx, instanceTransform[i].getTransformMatrix(), lastFrameAtTime, currentFrameAtTime);
109  }
111  }
112 
113  /**
114  * @return node count
115  */
116  int getNodeCount() const;
117 
118  /**
119  * Retrieves list of triangles of all or given nodes
120  * @param triangles triangles
121  * @param nodeIdx node index or -1 for all nodes
122  */
123  void getTriangles(vector<Triangle>& triangles, int nodeIdx = -1);
124 
125  /**
126  * @return transformed faces iterator
127  */
129 
130  /**
131  * Returns object node mesh object
132  * @param nodeId node id
133  * @return object node mesh object
134  */
135  ObjectNodeMesh* getMesh(const string& nodeId);
136 
137  /**
138  * Initiates this object
139  */
140  virtual void initialize();
141 
142  /**
143  * Disposes this object
144  */
145  virtual void dispose();
146 
147  /**
148  * @return maximum of instances
149  */
150  inline int getInstances() {
151  return instances;
152  }
153 
154  /**
155  * @return current instance
156  */
157  inline int getCurrentInstance() {
158  return currentInstance;
159  }
160 
161  /**
162  * Set current instance
163  * @param current instance
164  */
166  if (currentInstance >= 0 && currentInstance < instances) this->currentInstance = currentInstance;
167  }
168 
169  /**
170  * @return current instance enabled
171  */
172  inline bool getInstanceEnabled() {
174  }
175 
176  /**
177  * Set current instance enabled
178  * @param enabled instance enabled
179  */
180  inline void setInstanceEnabled(bool enabled) {
181  instanceEnabled[currentInstance] = enabled;
182  }
183 
184  /**
185  * Sets up a base animation to play
186  * @param id id
187  * @param speed speed whereas 1.0 is default speed
188  */
189  inline void setAnimation(const string& id, float speed = 1.0f) {
190  instanceAnimations[currentInstance]->setAnimation(id, speed);
191  }
192 
193  /**
194  * Set up animation speed
195  * @param speed speed whereas 1.0 is default speed
196  */
197  inline void setAnimationSpeed(float speed) {
198  instanceAnimations[currentInstance]->setAnimationSpeed(speed);
199  }
200 
201  /**
202  * Overlays a animation above the base animation
203  * @param id id
204  */
205  inline void addOverlayAnimation(const string& id) {
206  instanceAnimations[currentInstance]->addOverlayAnimation(id);
207  }
208 
209  /**
210  * Removes a overlay animation
211  * @param id id
212  */
213  inline void removeOverlayAnimation(const string& id) {
214  instanceAnimations[currentInstance]->removeOverlayAnimation(id);
215  }
216 
217  /**
218  * Removes all finished overlay animations
219  */
221  instanceAnimations[currentInstance]->removeFinishedOverlayAnimations();
222  }
223 
224  /**
225  * Removes all overlay animations
226  */
227  inline void removeOverlayAnimations() {
228  instanceAnimations[currentInstance]->removeOverlayAnimations();
229  }
230 
231  /**
232  * @return active animation setup id
233  */
234  inline const string getAnimation() {
235  return instanceAnimations[currentInstance]->getAnimation();
236  }
237 
238  /**
239  * Returns current base animation time
240  * @return 0.0 <= time <= 1.0
241  */
242  inline float getAnimationTime() {
243  return instanceAnimations[currentInstance]->getAnimationTime();
244  }
245 
246  /**
247  * Returns if there is currently running a overlay animation with given id
248  * @param id id
249  * @return animation is running
250  */
251  inline bool hasOverlayAnimation(const string& id) {
252  return instanceAnimations[currentInstance]->hasOverlayAnimation(id);
253  }
254 
255  /**
256  * Returns current overlay animation time
257  * @param id id
258  * @return 0.0 <= time <= 1.0
259  */
260  inline float getOverlayAnimationTime(const string& id) {
261  return instanceAnimations[currentInstance]->getOverlayAnimationTime(id);
262  }
263 
264  /**
265  * Returns transform matrix for given node
266  * @param id node id
267  * @return transform matrix or identity matrix if not found
268  */
269  inline const Matrix4x4 getNodeTransformMatrix(const string& id) {
270  return instanceAnimations[currentInstance]->getNodeTransformMatrix(id);
271  }
272 
273  /**
274  * Set transform matrix for given node
275  * @param id node id
276  * @param matrix transform matrix
277  */
278  inline void setNodeTransformMatrix(const string& id, const Matrix4x4& matrix) {
279  instanceAnimations[currentInstance]->setNodeTransformMatrix(id, matrix);
280  }
281 
282  /**
283  * Unset transform matrix for given node
284  * @param id node id
285  */
286  inline void unsetNodeTransformMatrix(const string& id) {
287  instanceAnimations[currentInstance]->unsetNodeTransformMatrix(id);
288  }
289 
290  /**
291  * @return this transform matrix
292  */
293  inline const Matrix4x4& getTransformMatrix() const {
295  }
296 
297 };
Engine main class.
Definition: Engine.h:131
Transform which contain scale, rotations and translation.
Definition: Transform.h:29
Representation of a 3D model.
Definition: Model.h:35
Model node.
Definition: Node.h:32
Triangle entity, this is not directly connectable with physics engine.
Definition: Triangle.h:18
void getTriangles(vector< Triangle > &triangles, int nodeIdx=-1)
Retrieves list of triangles of all or given nodes.
Definition: ObjectBase.cpp:99
void setAnimation(const string &id, float speed=1.0f)
Sets up a base animation to play.
Definition: ObjectBase.h:189
virtual void initialize()
Initiates this object.
Definition: ObjectBase.cpp:148
ObjectBase_TransformedFacesIterator * getTransformedFacesIterator()
Definition: ObjectBase.cpp:129
ObjectBase(Model *model, bool useManagers, Engine::AnimationProcessingTarget animationProcessingTarget, int instances)
Private constructor.
Definition: ObjectBase.cpp:64
const Matrix4x4 getNodeTransformMatrix(const string &id)
Returns transform matrix for given node.
Definition: ObjectBase.h:269
void setNodeTransformMatrix(const string &id, const Matrix4x4 &matrix)
Set transform matrix for given node.
Definition: ObjectBase.h:278
void addOverlayAnimation(const string &id)
Overlays a animation above the base animation.
Definition: ObjectBase.h:205
Engine::AnimationProcessingTarget animationProcessingTarget
Definition: ObjectBase.h:59
ObjectNodeMesh * getMesh(const string &nodeId)
Returns object node mesh object.
Definition: ObjectBase.cpp:137
float getOverlayAnimationTime(const string &id)
Returns current overlay animation time.
Definition: ObjectBase.h:260
void removeOverlayAnimation(const string &id)
Removes a overlay animation.
Definition: ObjectBase.h:213
bool hasOverlayAnimation(const string &id)
Returns if there is currently running a overlay animation with given id.
Definition: ObjectBase.h:251
unique_ptr< ObjectBase_TransformedFacesIterator > transformedFacesIterator
Definition: ObjectBase.h:47
void setCurrentInstance(int currentInstance)
Set current instance.
Definition: ObjectBase.h:165
void setAnimationSpeed(float speed)
Set up animation speed.
Definition: ObjectBase.h:197
void removeOverlayAnimations()
Removes all overlay animations.
Definition: ObjectBase.h:227
void unsetNodeTransformMatrix(const string &id)
Unset transform matrix for given node.
Definition: ObjectBase.h:286
virtual void dispose()
Disposes this object.
Definition: ObjectBase.cpp:189
float getAnimationTime()
Returns current base animation time.
Definition: ObjectBase.h:242
void setInstanceEnabled(bool enabled)
Set current instance enabled.
Definition: ObjectBase.h:180
vector< ObjectAnimation * > instanceAnimations
Definition: ObjectBase.h:55
void removeFinishedOverlayAnimations()
Removes all finished overlay animations.
Definition: ObjectBase.h:220
virtual void computeAnimation(int contextIdx, int64_t lastFrameAtTime, int64_t currentFrameAtTime)
Compute animation.
Definition: ObjectBase.h:103
void setParentTransform(const Transform &parentTransform)
Set parent transform.
Definition: ObjectBase.h:70
const Matrix4x4 & getTransformMatrix() const
Definition: ObjectBase.h:293
Object node mesh specifically for rendering.
Object node specifically for rendering.
Definition: ObjectNode.h:41
static void computeAnimation(int contextIdx, vector< ObjectNode * > &objectNodes)
Computes animation for given object nodes.
Definition: ObjectNode.cpp:185
Interface to compute shader skinning shader program.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Matrix4x4 & set(float r0c0, float r0c1, float r0c2, float r0c3, float r1c0, float r1c1, float r1c2, float r1c3, float r2c0, float r2c1, float r2c2, float r2c3, float r3c0, float r3c1, float r3c2, float r3c3)
Sets this matrix by its components.
Definition: Matrix4x4.h:108
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6