Saga3D API Documentation  1.0-RC4
ISceneNode.h
Go to the documentation of this file.
1 #ifndef __I_SCENE_NODE_H_INCLUDED__
2 #define __I_SCENE_NODE_H_INCLUDED__
3 
4 #include "ID.h"
5 #include "ESceneNodeTypes.h"
6 #include "ISceneNodeAnimator.h"
7 #include "GraphicsConstants.h"
8 #include "SRenderPass.h"
9 #include "SPipeline.h"
10 #include "SIndirectCommand.h"
11 #include "aabbox3d.h"
12 #include <glm/gtx/euler_angles.hpp>
13 #include <glm/gtx/transform.hpp>
14 #include <glm/gtx/matrix_decompose.hpp>
15 #include <string>
16 #include <vector>
17 #include <array>
18 #include <algorithm>
19 #include <memory>
20 #include <functional>
21 
22 namespace saga
23 {
24 namespace scene
25 {
26  class ISceneNode;
27 
29  using ISceneNodeList = std::vector<std::shared_ptr<ISceneNode>>;
31  // typedef std::vector<ISceneNodeAnimator*> ISceneNodeAnimatorList;
32 
34 
41  class ISceneNode : public std::enable_shared_from_this<ISceneNode>, public IEventReceiver
42  {
43  public:
44 
47  const std::shared_ptr<ISceneNode>& parent,
48  const std::shared_ptr<ISceneManager>& mgr,
49  const glm::vec3& position = glm::vec3(0,0,0),
50  const glm::vec3& rotation = glm::vec3(0,0,0),
51  const glm::vec3& scale = glm::vec3(1.0f, 1.0f, 1.0f))
52  : RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale),
53  SceneManager(mgr)
54  {
55  if (parent)
56  parent->addChild(shared_from_this());
57 
59  }
60 
61  virtual void onEvent(const SDL_Event& event) override
62  {
63  for (auto& anim : Animators)
64  {
65  anim->onEvent(event);
66  }
67  }
68 
70  virtual ~ISceneNode()
71  {
72  // delete all children
73  removeAll();
74 
75  Animators.clear();
76 
77  // if (TriangleSelector)
78  // TriangleSelector->drop();
79  }
80 
81  void setID(const ID id) { NodeID = id; }
82  const auto getID() const { return NodeID; }
83 
85 
97  {
98  if (IsVisible)
99  {
100  auto it = Children.begin();
101  for (; it != Children.end(); ++it)
102  (*it)->onRegisterSceneNode(pass);
103  }
104  }
105 
107  {
108  auto it = Children.begin();
109  for (; it != Children.end(); ++it)
110  (*it)->onUnregisterSceneNode(pass);
111  }
112 
113  void setOnRender(std::function<void()> func) { OnRenderCallback = func; }
114 
116 
117  bool hasDrawCommands() const { return !DrawCommands.empty(); }
118 
119  void setDrawCommands(video::DrawCommandList&& list) { DrawCommands = std::move(list); }
120 
121  const auto& getDrawCommands() const { return DrawCommands; }
122 
123  auto getTexture(int slot) const { return Textures.at(slot); }
124 
125  auto& getTextures() { return Textures; }
126 
127  void setTexture(int slot, video::TextureHandle texture)
128  {
129  Textures[slot] = texture;
130  }
131 
132  virtual void setPipeline(video::PipelineHandle pipeline) { Pipeline = pipeline; }
133 
134  auto getPipeline() const { return Pipeline; }
135 
137 
142  virtual void onAnimate(const float time)
143  {
144  if (IsVisible)
145  {
146  // animate this node with all animators
147 
148  for (auto& anim : Animators)
149  {
150  anim->animateNode(*this, time);
151  }
152 
153  // update absolute position
155 
156  // perform the post render process on all children
157  auto it = Children.begin();
158  for (; it != Children.end(); ++it)
159  (*it)->onAnimate(time);
160  }
161  }
162 
164 
165  virtual const std::string& getName() const
166  {
167  return Name;
168  }
169 
171 
172  virtual void setName(const std::string& name)
173  {
174  Name = name;
175  }
176 
178 
185  virtual const core::aabbox3d<float>& getBoundingBox() const = 0;
186 
188 
192  {
194  // TODO: get transformed bounding box
195  // AbsoluteTransformation.transformBoxEx(box);
196  return box;
197  }
198 
201 
204  virtual void getTransformedBoundingBoxEdges(std::vector<glm::vec3>& edges) const
205  {
206  edges.resize(8);
207  getBoundingBox().getEdges(edges.data());
208  for (std::uint32_t i= 0; i<8; ++i)
209  edges[i] = glm::vec3(AbsoluteTransformation * glm::vec4(edges[i], 1));
210  }
211 
213 
219  virtual const glm::mat4& getAbsoluteTransformation() const
220  {
221  return AbsoluteTransformation;
222  }
223 
225 
229  virtual glm::mat4 getRelativeTransformation() const
230  {
231  auto translation = glm::translate(glm::mat4(1.0f), RelativeTranslation);
232  auto rotation = glm::eulerAngleXYZ(RelativeRotation.x, RelativeRotation.y, RelativeRotation.z);
233  auto scale = glm::scale(RelativeScale);
234  return translation * rotation * scale;
235  }
236 
238 
242  virtual bool isVisible() const
243  {
244  return IsVisible;
245  }
246 
248 
250  virtual bool isTrulyVisible() const
251  {
252  if(!IsVisible)
253  return false;
254 
255  if(!Parent)
256  return true;
257 
258  return Parent->isTrulyVisible();
259  }
260 
262 
266  virtual void setVisible(bool isVisible)
267  {
269  }
270 
272 
275  virtual void addChild(const std::shared_ptr<ISceneNode>& child)
276  {
277  if (child && (child.get() != this))
278  {
279  // Change scene manager?
280  // if (SceneManager != child->SceneManager)
281  // child->setSceneManager(SceneManager);
282 
283  // child->grab();
284  child->remove(); // remove from old parent
285  Children.push_back(child);
286  child->Parent = shared_from_this();
287  }
288  }
289 
295  virtual bool removeChild(const std::shared_ptr<ISceneNode>& child)
296  {
297  auto it = Children.begin();
298  for (; it != Children.end(); ++it)
299  if ((*it).get() == child.get())
300  {
301  (*it)->Parent = 0;
302  // (*it)->drop();
303  Children.erase(it);
304  return true;
305  }
306 
307  return false;
308  }
309 
311 
314  virtual void removeAll()
315  {
316  auto it = Children.begin();
317  for (; it != Children.end(); ++it)
318  {
319  (*it)->Parent = 0;
320  // (*it)->drop();
321  }
322 
323  Children.clear();
324  }
325 
327 
329  virtual void remove()
330  {
331  if (Parent)
332  Parent->removeChild(shared_from_this());
333  }
334 
336 
337  virtual void addAnimator(const std::shared_ptr<ISceneNodeAnimator>& animator)
338  {
339  if (animator)
340  {
341  Animators.push_back(animator);
342  }
343  }
344 
345 
347 
348  const auto& getAnimators() const
349  {
350  return Animators;
351  }
352 
353 
355 
358  virtual void removeAnimator(const std::shared_ptr<ISceneNodeAnimator>& animator)
359  {
360  Animators.erase(std::remove(Animators.begin(), Animators.end(), animator), Animators.end());
361  }
362 
364 
366  virtual void removeAnimators()
367  {
368  Animators.clear();
369  }
370 
372 
376  virtual const glm::vec3& getScale() const
377  {
378  return RelativeScale;
379  }
380 
382 
383  virtual void setScale(const glm::vec3& scale)
384  {
385  RelativeScale = scale;
386  }
387 
389 
393  virtual const glm::vec3& getRotation() const
394  {
395  return RelativeRotation;
396  }
397 
399 
401  virtual void setRotation(const glm::vec3& rotation)
402  {
403  RelativeRotation = rotation;
404  }
405 
407 
410  virtual const glm::vec3& getPosition() const
411  {
412  return RelativeTranslation;
413  }
414 
416 
418  virtual void setPosition(const glm::vec3& newpos)
419  {
420  RelativeTranslation = newpos;
421  }
422 
424 
432  virtual glm::vec3 getAbsolutePosition() const
433  {
434  return AbsoluteTransformation[3];
435  }
436 
438 
439  const std::vector<std::shared_ptr<ISceneNode>>& getChildren() const
440  {
441  return Children;
442  }
443 
445 
446  virtual void setParent(const std::shared_ptr<ISceneNode>& newParent)
447  {
448  remove();
449 
450  Parent = newParent;
451 
452  if (Parent)
453  Parent->addChild(shared_from_this());
454  }
455 
457 
466  // virtual ITriangleSelector* getTriangleSelector() const
467  // {
468  // return TriangleSelector;
469  // }
470 
471 
473 
481  // virtual void setTriangleSelector(ITriangleSelector* selector)
482  // {
483  // if (TriangleSelector != selector)
484  // {
485  // // if (TriangleSelector)
486  // // TriangleSelector->drop();
487 
488  // TriangleSelector = selector;
489  // // if (TriangleSelector)
490  // // TriangleSelector->grab();
491  // }
492  // }
494 
496  virtual void updateAbsolutePosition()
497  {
498  if (Parent)
499  {
501  Parent->getAbsoluteTransformation() * getRelativeTransformation();
502  }
503  else
505  }
506 
508 
509  const std::shared_ptr<ISceneNode>& getParent() const
510  {
511  return Parent;
512  }
513 
515 
516  virtual E_SCENE_NODE_TYPE getType() const
517  {
519  }
520 
522 
525  virtual std::shared_ptr<ISceneNode> clone(const std::shared_ptr<ISceneNode>& newParent = 0)
526  {
527  return nullptr; // to be implemented by derived classes
528  }
529 
531 
532  virtual const std::shared_ptr<ISceneManager>& getSceneManager() const { return SceneManager; }
533 
534  protected:
535 
537 
541  // void cloneMembers(ISceneNode* toCopyFrom, ISceneManager* newManager)
542  // {
543  // Name = toCopyFrom->Name;
544  // AbsoluteTransformation = toCopyFrom->AbsoluteTransformation;
545  // RelativeTranslation = toCopyFrom->RelativeTranslation;
546  // RelativeRotation = toCopyFrom->RelativeRotation;
547  // RelativeScale = toCopyFrom->RelativeScale;
548  // ID = toCopyFrom->ID;
549  // setTriangleSelector(toCopyFrom->TriangleSelector);
550  // AutomaticCullingState = toCopyFrom->AutomaticCullingState;
551  // // DebugDataVisible = toCopyFrom->DebugDataVisible;
552  // IsVisible = toCopyFrom->IsVisible;
553  // IsDebugObject = toCopyFrom->IsDebugObject;
554 
555  // if (newManager)
556  // SceneManager = newManager;
557  // else
558  // SceneManager = toCopyFrom->SceneManager;
559 
560  // // clone children
561 
562  // auto it = toCopyFrom->Children.begin();
563  // for (; it != toCopyFrom->Children.end(); ++it)
564  // (*it)->clone(this, newManager);
565 
566  // clone animators
567 
568  // ISceneNodeAnimatorList::Iterator ait = toCopyFrom->Animators.begin();
569  // for (; ait != toCopyFrom->Animators.end(); ++ait)
570  // {
571  // ISceneNodeAnimator* anim = (*ait)->createClone(this, SceneManager);
572  // if (anim)
573  // {
574  // addAnimator(anim);
575  // anim->drop();
576  // }
577  // }
578  // }
579 
582  // void setSceneManager(ISceneManager* newManager)
583  // {
584  // SceneManager = newManager;
585 
586  // auto it = Children.begin();
587  // for (; it != Children.end(); ++it)
588  // (*it)->setSceneManager(newManager);
589  // }
590 
593 
595  std::string Name;
596 
599 
602 
604  glm::vec3 RelativeRotation;
605 
607  glm::vec3 RelativeScale;
608 
610  std::shared_ptr<ISceneNode> Parent = nullptr;
611 
613  std::vector<std::shared_ptr<ISceneNode>> Children;
614 
616  std::array<video::STexture::HandleType, video::MAX_NODE_TEXTURES> Textures = { video::NULL_GPU_RESOURCE_HANDLE };
617 
619  std::vector<std::shared_ptr<ISceneNodeAnimator>> Animators;
620 
622  std::shared_ptr<ISceneManager> SceneManager = nullptr;
623 
625 
629  std::function<void()> OnRenderCallback = nullptr;
630 
632 
634 
636  bool IsVisible = true;
637  };
638 
639 
640 } // namespace scene
641 } // namespace saga
642 
643 #endif
644 
saga::scene::ISceneNode::setDrawCommands
void setDrawCommands(video::DrawCommandList &&list)
Definition: ISceneNode.h:119
saga::scene::ISceneNode::getParent
const std::shared_ptr< ISceneNode > & getParent() const
Returns the parent of this scene node.
Definition: ISceneNode.h:509
saga::scene::ISceneNode::getPipeline
auto getPipeline() const
Definition: ISceneNode.h:134
saga::scene::ISceneNode::getAbsoluteTransformation
virtual const glm::mat4 & getAbsoluteTransformation() const
Get the absolute transformation of the node. Is recalculated every onAnimate()-call.
Definition: ISceneNode.h:219
ISceneNodeAnimator.h
saga::scene::ISceneNode::onAnimate
virtual void onAnimate(const float time)
onAnimate() is called just before rendering the whole scene.
Definition: ISceneNode.h:142
saga::scene::ISceneNode::getScale
virtual const glm::vec3 & getScale() const
Gets the scale of the scene node relative to its parent.
Definition: ISceneNode.h:376
saga::scene::ISceneNode::getPosition
virtual const glm::vec3 & getPosition() const
Gets the position of the node relative to its parent.
Definition: ISceneNode.h:410
saga::scene::ISceneNode::setParent
virtual void setParent(const std::shared_ptr< ISceneNode > &newParent)
Changes the parent of the scene node.
Definition: ISceneNode.h:446
saga::video::NULL_GPU_RESOURCE_HANDLE
constexpr SGPUResource::HandleType NULL_GPU_RESOURCE_HANDLE
Definition: SGPUResource.h:17
saga::scene::ISceneNode::setRotation
virtual void setRotation(const glm::vec3 &rotation)
Sets the rotation of the node relative to its parent.
Definition: ISceneNode.h:401
saga::scene::ISceneNode::hasDrawCommands
bool hasDrawCommands() const
Definition: ISceneNode.h:117
saga::scene::ISceneNode::setName
virtual void setName(const std::string &name)
Sets the name of the node.
Definition: ISceneNode.h:172
saga::scene::ISceneNode
Type for list of scene node animators.
Definition: ISceneNode.h:41
saga::scene::ISceneNode::OnRenderCallback
std::function< void()> OnRenderCallback
Custom hook into rendering process of the scene node.
Definition: ISceneNode.h:629
saga::scene::ISceneNode::Pipeline
video::PipelineHandle Pipeline
Definition: ISceneNode.h:633
saga::scene::E_SCENE_NODE_TYPE::UNKNOWN
@ UNKNOWN
Unknown scene node.
saga::scene::ISceneNode::AbsoluteTransformation
glm::mat4 AbsoluteTransformation
Absolute transformation of the node.
Definition: ISceneNode.h:598
saga::scene::ISceneNode::clone
virtual std::shared_ptr< ISceneNode > clone(const std::shared_ptr< ISceneNode > &newParent=0)
Creates a clone of this scene node and its children.
Definition: ISceneNode.h:525
saga::video::PipelineHandle
SGPUResource::HandleType PipelineHandle
Definition: SPipeline.h:27
saga::scene::ISceneNode::NodeID
ID NodeID
A clone function for the ISceneNode members.
Definition: ISceneNode.h:592
saga::scene::ISceneNode::getDrawCommands
const auto & getDrawCommands() const
Definition: ISceneNode.h:121
SRenderPass.h
saga::scene::E_SCENE_NODE_TYPE
E_SCENE_NODE_TYPE
An enumeration for all types of built-in scene nodes.
Definition: ESceneNodeTypes.h:17
saga::scene::ISceneNode::getTexture
auto getTexture(int slot) const
Definition: ISceneNode.h:123
saga::scene::ISceneNode::IsVisible
bool IsVisible
Is the node visible?
Definition: ISceneNode.h:636
saga::scene::ISceneNode::getAnimators
const auto & getAnimators() const
Get a list of all scene node animators.
Definition: ISceneNode.h:348
SIndirectCommand.h
saga::IEventReceiver
Interface of an object which can receive events (SDL_Event*)
Definition: IEventReceiver.h:17
saga::scene::ISceneNode::Children
std::vector< std::shared_ptr< ISceneNode > > Children
List of all children of this node.
Definition: ISceneNode.h:613
saga::scene::ISceneNode::getChildren
const std::vector< std::shared_ptr< ISceneNode > > & getChildren() const
Returns a const reference to the list of all children.
Definition: ISceneNode.h:439
saga::scene::ISceneNode::setID
void setID(const ID id)
Definition: ISceneNode.h:81
aabbox3d.h
saga::INVALID_ID
constexpr auto INVALID_ID
Definition: ID.h:9
saga::scene::ISceneNode::removeAnimators
virtual void removeAnimators()
Removes all animators from this scene node.
Definition: ISceneNode.h:366
saga::ID
std::uint32_t ID
Type for node ID.
Definition: ID.h:11
saga::core::aabbox3d< float >
saga::scene::ISceneNode::getSceneManager
virtual const std::shared_ptr< ISceneManager > & getSceneManager() const
Retrieve the scene manager for this node.
Definition: ISceneNode.h:532
saga::scene::ISceneNode::getType
virtual E_SCENE_NODE_TYPE getType() const
Returns type of the scene node.
Definition: ISceneNode.h:516
saga::video::TextureHandle
SGPUResource::HandleType TextureHandle
Definition: STexture.h:52
saga::scene::ISceneNode::~ISceneNode
virtual ~ISceneNode()
Destructor.
Definition: ISceneNode.h:70
saga::scene::ISceneNode::getBoundingBox
virtual const core::aabbox3d< float > & getBoundingBox() const =0
Get the axis aligned, not transformed bounding box of this node.
GraphicsConstants.h
saga::scene::ISceneNodeList
std::vector< std::shared_ptr< ISceneNode > > ISceneNodeList
Type for list of scene nodes.
Definition: ISceneNode.h:29
saga::scene::ISceneNode::onRegisterSceneNode
virtual void onRegisterSceneNode(video::RenderPassHandle pass)
This method is called just before the rendering process of the whole scene.
Definition: ISceneNode.h:96
saga::core::aabbox3d::getEdges
void getEdges(glm::vec3 *edges) const
Stores all 8 edges of the box into an array.
Definition: aabbox3d.h:149
saga::scene::ISceneNode::RelativeTranslation
glm::vec3 RelativeTranslation
Relative translation of the scene node.
Definition: ISceneNode.h:601
saga::scene::ISceneNode::getRotation
virtual const glm::vec3 & getRotation() const
Gets the rotation of the node relative to its parent.
Definition: ISceneNode.h:393
saga::scene::ISceneNode::onUnregisterSceneNode
virtual void onUnregisterSceneNode(video::RenderPassHandle pass)
Definition: ISceneNode.h:106
ID.h
saga::scene::ISceneNode::onRender
void onRender()
Definition: ISceneNode.h:115
saga::scene::ISceneNode::removeChild
virtual bool removeChild(const std::shared_ptr< ISceneNode > &child)
Definition: ISceneNode.h:295
saga::scene::ISceneNode::setPosition
virtual void setPosition(const glm::vec3 &newpos)
Sets the position of the node relative to its parent.
Definition: ISceneNode.h:418
saga::scene::ISceneNode::RelativeScale
glm::vec3 RelativeScale
Relative scale of the scene node.
Definition: ISceneNode.h:607
saga::scene::ISceneNode::remove
virtual void remove()
Removes this scene node from the scene.
Definition: ISceneNode.h:329
saga::video::DrawCommandList
std::vector< SDrawCommand > DrawCommandList
Definition: SIndirectCommand.h:40
saga::scene::ISceneNode::getTransformedBoundingBox
virtual const core::aabbox3d< float > getTransformedBoundingBox() const
Get the axis aligned, transformed and animated absolute bounding box of this node.
Definition: ISceneNode.h:191
saga::scene::ISceneNode::setPipeline
virtual void setPipeline(video::PipelineHandle pipeline)
Definition: ISceneNode.h:132
saga::scene::ISceneNode::SceneManager
std::shared_ptr< ISceneManager > SceneManager
Pointer to the scene manager.
Definition: ISceneNode.h:622
saga::scene::ISceneNode::setScale
virtual void setScale(const glm::vec3 &scale)
Sets the relative scale of the scene node.
Definition: ISceneNode.h:383
saga::scene::ISceneNode::getName
virtual const std::string & getName() const
Returns the name of the node.
Definition: ISceneNode.h:165
saga::scene::ISceneNode::addChild
virtual void addChild(const std::shared_ptr< ISceneNode > &child)
Adds a child to this scene node.
Definition: ISceneNode.h:275
saga::scene::ISceneNode::onEvent
virtual void onEvent(const SDL_Event &event) override
Called when an SDL event is fired.
Definition: ISceneNode.h:61
saga::scene::ISceneNode::Textures
std::array< video::STexture::HandleType, video::MAX_NODE_TEXTURES > Textures
Texture list.
Definition: ISceneNode.h:616
saga::scene::ISceneNode::setTexture
void setTexture(int slot, video::TextureHandle texture)
Definition: ISceneNode.h:127
saga::scene::ISceneNode::updateAbsolutePosition
virtual void updateAbsolutePosition()
Returns the triangle selector attached to this scene node.
Definition: ISceneNode.h:496
saga::scene::ISceneNode::getAbsolutePosition
virtual glm::vec3 getAbsolutePosition() const
Gets the absolute position of the node in world coordinates.
Definition: ISceneNode.h:432
saga::scene::ISceneNode::Parent
std::shared_ptr< ISceneNode > Parent
Pointer to the parent.
Definition: ISceneNode.h:610
saga::scene::ISceneNode::getRelativeTransformation
virtual glm::mat4 getRelativeTransformation() const
Returns the relative transformation of the scene node.
Definition: ISceneNode.h:229
saga::scene::ISceneNode::getTransformedBoundingBoxEdges
virtual void getTransformedBoundingBoxEdges(std::vector< glm::vec3 > &edges) const
Definition: ISceneNode.h:204
saga::scene::ISceneNode::setVisible
virtual void setVisible(bool isVisible)
Sets if the node should be visible or not.
Definition: ISceneNode.h:266
ESceneNodeTypes.h
saga::scene::ISceneNode::isTrulyVisible
virtual bool isTrulyVisible() const
Check whether the node is truly visible, taking into accounts its parents' visibility.
Definition: ISceneNode.h:250
saga::video::RenderPassHandle
SGPUResource::HandleType RenderPassHandle
Definition: SRenderPass.h:27
saga::scene::ISceneNode::removeAll
virtual void removeAll()
Removes all children of this scene node.
Definition: ISceneNode.h:314
saga::scene::ISceneNode::setOnRender
void setOnRender(std::function< void()> func)
Definition: ISceneNode.h:113
saga::scene::ISceneNode::addAnimator
virtual void addAnimator(const std::shared_ptr< ISceneNodeAnimator > &animator)
Adds an animator which should animate this node.
Definition: ISceneNode.h:337
saga::scene::ISceneNode::isVisible
virtual bool isVisible() const
Returns whether the node should be visible (if all of its parents are visible).
Definition: ISceneNode.h:242
SPipeline.h
saga::scene::ISceneNode::RelativeRotation
glm::vec3 RelativeRotation
Relative rotation of the scene node.
Definition: ISceneNode.h:604
saga::scene::ISceneNode::Name
std::string Name
Name of the scene node.
Definition: ISceneNode.h:595
saga::scene::ISceneNode::ISceneNode
ISceneNode(const std::shared_ptr< ISceneNode > &parent, const std::shared_ptr< ISceneManager > &mgr, const glm::vec3 &position=glm::vec3(0, 0, 0), const glm::vec3 &rotation=glm::vec3(0, 0, 0), const glm::vec3 &scale=glm::vec3(1.0f, 1.0f, 1.0f))
Constructor.
Definition: ISceneNode.h:46
saga::scene::ISceneNode::removeAnimator
virtual void removeAnimator(const std::shared_ptr< ISceneNodeAnimator > &animator)
Removes an animator from this scene node.
Definition: ISceneNode.h:358
saga::scene::ISceneNode::DrawCommands
video::DrawCommandList DrawCommands
Definition: ISceneNode.h:631
saga
Definition: aabbox3d.h:11
saga::scene::ISceneNode::getID
const auto getID() const
Definition: ISceneNode.h:82
saga::scene::ISceneNode::getTextures
auto & getTextures()
Definition: ISceneNode.h:125
saga::scene::ISceneNode::Animators
std::vector< std::shared_ptr< ISceneNodeAnimator > > Animators
List of all animator nodes.
Definition: ISceneNode.h:619