You.i Engine
YiSpriteSceneNode.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SPRITE_SCENE_NODE_H_
3 #define _YI_SPRITE_SCENE_NODE_H_
4 
5 #include "framework/YiPredef.h"
8 
14 class CYISceneNode;
15 class CYISceneManager;
16 
22 {
23 public:
24 
29  {
30  public:
31 
36  SpriteAnimation(SpriteSheet *pSpriteSheet, std::vector<uint32_t> &frameSequence, uint32_t uFPS, uint32_t uLoops);
38 
43  uint32_t GetSequenceIndexAtPercentage(float fPercentage) const;
44 
48  void UpdateSpriteFrame(uint32_t uSequenceIndex) const;
49 
50  void SetIndex(uint32_t uIndex);
51  uint32_t GetIndex() const;
52 
53  SpriteSheet *GetSpriteSheet() const;
54  const std::vector<uint32_t> &GetFrameSequence() const;
55  uint32_t GetFPS() const;
56  uint32_t GetLoops() const;
57 
58  private:
59 
60  SpriteSheet *m_pSpriteSheet;
61  std::vector<uint32_t> m_frameSequence;
62  uint32_t m_uFPS;
63  uint32_t m_uLoops;
64  uint32_t m_uIndex;
65  };
66 
67 
71  class Listener
72  {
73  public:
74  Listener() {}
75  virtual ~Listener() {}
76 
80  virtual void OnSequenceIndexChanged(uint32_t uAnimationIndex, uint32_t uNewSequenceIndex) = 0;
81 
85  virtual void OnAnimationBegin(uint32_t uAnimationIndex) = 0;
86 
90  virtual void OnAnimationEnd(uint32_t uAnimationIndex) = 0;
91  };
92 
93 
95  virtual ~CYISpriteSceneNode();
96 
100  void SetCurrentAnimation(uint32_t nAnimationIndex);
101 
102  void Start();
103  void Pause();
104  void Reset();
105  void ChangeDirection();
108 
112  uint32_t AddSpriteSheet(std::unique_ptr<SpriteSheet> pSpriteSheet);
113  const SpriteSheet *GetSpriteSheet(uint32_t uIndex) const;
114 
118  uint32_t AddSpriteAnimation(std::unique_ptr<SpriteAnimation> pSpriteAnimation);
119  const SpriteAnimation *GetSpriteAnimation(uint32_t uIndex) const;
120 
121  void SetListener(Listener *pListener);
122 
123 
124 protected:
125  void UpdateSpriteFrame();
126 
127  virtual void OnAnimate(CYIAnimation *pAnim, float fDataPosition) override;
128  virtual void OnAnimationBegin(CYIAnimation *pAnim) override;
129  virtual void OnAnimationEnd(CYIAnimation *pAnim) override;
130 
131  std::unique_ptr<CYIAnimation> m_pAnimationDriver;
132  std::vector<std::unique_ptr<SpriteSheet>> m_SpriteSheets;
133  std::vector<std::unique_ptr<SpriteAnimation>> m_SpriteAnimations;
137 
139 
140 private:
142 };
143 
146 #ifdef YI_FUNCTION_SPECIALIZATION_FULLY_SUPPORTED
147 template<>
148 inline const CYISpriteSceneNode *YiDynamicCast<CYISpriteSceneNode>(const CYISceneNode *pObject)
149 {
150  return pObject ? (pObject->CanCastTo<CYISpriteSceneNode>() ? static_cast<const CYISpriteSceneNode *>(pObject) : nullptr) : nullptr;
151 }
152 #endif
153 
154 #endif // _YI_SPRITE_SCENE_NODE_H_
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
const SpriteAnimation * m_pCurrentAnimation
Definition: YiSpriteSceneNode.h:135
std::vector< std::unique_ptr< SpriteSheet > > m_SpriteSheets
Definition: YiSpriteSceneNode.h:132
Scene trees composed of CYISceneNode objects are registered with the scene manager in order for them ...
Definition: YiSceneManager.h:73
virtual void OnAnimationBegin(CYIAnimation *pAnim) override
uint32_t AddSpriteAnimation(std::unique_ptr< SpriteAnimation > pSpriteAnimation)
DIRECTION
Definition: YiAnimation.h:51
Specialized CYISceneNode implementing a sprite.
Definition: YiSpriteSceneNode.h:21
Definition: YiSpriteSheet.h:21
#define YI_TYPE_BASES(...)
Definition: YiRtti.h:350
uint32_t GetSequenceIndexAtPercentage(float fPercentage) const
virtual void OnAnimationEnd(CYIAnimation *pAnim) override
uint32_t AddSpriteSheet(std::unique_ptr< SpriteSheet > pSpriteSheet)
void SetListener(Listener *pListener)
Listener * m_pListener
Definition: YiSpriteSceneNode.h:136
virtual ~CYISpriteSceneNode()
Definition: YiSpriteSceneNode.h:28
std::unique_ptr< CYIAnimation > m_pAnimationDriver
Definition: YiSpriteSceneNode.h:131
virtual ~Listener()
Definition: YiSpriteSceneNode.h:75
Listener()
Definition: YiSpriteSceneNode.h:74
void UpdateSpriteFrame(uint32_t uSequenceIndex) const
SpriteAnimation(SpriteSheet *pSpriteSheet, std::vector< uint32_t > &frameSequence, uint32_t uFPS, uint32_t uLoops)
uint32_t m_uCurrentSequenceIndex
Definition: YiSpriteSceneNode.h:134
A scene node is the base type for all nodes which are used by the scene manager; it is an integral pa...
Definition: YiSceneNode.h:114
virtual void OnAnimate(CYIAnimation *pAnim, float fDataPosition) override
const std::vector< uint32_t > & GetFrameSequence() const
void SetIndex(uint32_t uIndex)
Definition: YiSpriteSceneNode.h:71
std::vector< std::unique_ptr< SpriteAnimation > > m_SpriteAnimations
Definition: YiSpriteSceneNode.h:133
const SpriteAnimation * GetSpriteAnimation(uint32_t uIndex) const
CYIAnimation::DIRECTION GetDirection() const
SpriteSheet * GetSpriteSheet() const
Used to create animations programatically.
Definition: YiAnimation.h:32
STATUS
Definition: YiAnimation.h:42
Base class used to listen to one or more CYIAnimations as they update over time.
Definition: YiAnimation.h:65
void SetCurrentAnimation(uint32_t nAnimationIndex)
CYIAnimation::STATUS GetStatus() const