CCBAnimationManager.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. #ifndef __CCB_CCBANIMATION_MANAGER_H__
  2. #define __CCB_CCBANIMATION_MANAGER_H__
  3. #include "base/CCMap.h"
  4. #include "2d/CCActionInterval.h"
  5. #include "2d/CCActionInstant.h"
  6. #include "2d/CCActionEase.h"
  7. #include "extensions/ExtensionMacros.h"
  8. #include "editor-support/cocosbuilder/CCBSequence.h"
  9. #include "editor-support/cocosbuilder/CCBKeyframe.h"
  10. #include "editor-support/cocosbuilder/CCBSequenceProperty.h"
  11. #include "extensions/GUI/CCControlExtension/CCControl.h"
  12. namespace cocosbuilder {
  13. class CC_DLL CCBAnimationManagerDelegate
  14. {
  15. public:
  16. virtual ~CCBAnimationManagerDelegate() {}
  17. virtual void completedAnimationSequenceNamed(const char *name) = 0;
  18. };
  19. class CC_DLL CCBAnimationManager : public cocos2d::Ref
  20. {
  21. public:
  22. bool _jsControlled;
  23. /**
  24. * @js ctor
  25. */
  26. CCBAnimationManager();
  27. /**
  28. * @js NA
  29. * @lua NA
  30. */
  31. ~CCBAnimationManager();
  32. cocos2d::Ref *_owner;
  33. virtual bool init();
  34. cocos2d::Vector<CCBSequence*>& getSequences();
  35. void setSequences(const cocos2d::Vector<CCBSequence*>& seq);
  36. int getAutoPlaySequenceId();
  37. void setAutoPlaySequenceId(int autoPlaySequenceId);
  38. cocos2d::Node* getRootNode();
  39. void setRootNode(cocos2d::Node* pRootNode); // weak reference
  40. void addDocumentCallbackNode(cocos2d::Node *node);
  41. void addDocumentCallbackName(std::string name);
  42. void addDocumentCallbackControlEvents(cocos2d::extension::Control::EventType eventType);
  43. void addDocumentOutletNode(cocos2d::Node *node);
  44. void addDocumentOutletName(std::string name);
  45. void setDocumentControllerName(const std::string &name);
  46. std::string getDocumentControllerName();
  47. cocos2d::ValueVector& getDocumentCallbackNames();
  48. cocos2d::Vector<cocos2d::Node*>& getDocumentCallbackNodes();
  49. cocos2d::ValueVector& getDocumentCallbackControlEvents();
  50. cocos2d::ValueVector& getDocumentOutletNames();
  51. cocos2d::Vector<cocos2d::Node*>& getDocumentOutletNodes();
  52. std::string getLastCompletedSequenceName();
  53. cocos2d::ValueVector& getKeyframeCallbacks();
  54. const cocos2d::Size& getRootContainerSize();
  55. void setRootContainerSize(const cocos2d::Size &rootContainerSize);
  56. CCBAnimationManagerDelegate* getDelegate();
  57. void setDelegate(CCBAnimationManagerDelegate* pDelegate); // retain
  58. const char* getRunningSequenceName();
  59. const cocos2d::Size& getContainerSize(cocos2d::Node* pNode);
  60. void addNode(cocos2d::Node *pNode, const std::unordered_map<int, cocos2d::Map<std::string, CCBSequenceProperty*>>& seq);
  61. void setBaseValue(const cocos2d::Value& value, cocos2d::Node *pNode, const std::string& propName);
  62. void setObject(cocos2d::Ref* obj, cocos2d::Node *pNode, const std::string& propName);
  63. void moveAnimationsFromNode(cocos2d::Node* fromNode, cocos2d::Node* toNode);
  64. /** @deprecated This interface will be deprecated sooner or later.*/
  65. CC_DEPRECATED_ATTRIBUTE void runAnimations(const char *pName, float fTweenDuration);
  66. /** @deprecated This interface will be deprecated sooner or later.*/
  67. CC_DEPRECATED_ATTRIBUTE void runAnimations(const char *pName);
  68. /** @deprecated This interface will be deprecated sooner or later.*/
  69. CC_DEPRECATED_ATTRIBUTE void runAnimations(int nSeqId, float fTweenDuraiton);
  70. void runAnimationsForSequenceNamedTweenDuration(const char *pName, float fTweenDuration);
  71. void runAnimationsForSequenceNamed(const char *pName);
  72. void runAnimationsForSequenceIdTweenDuration(int nSeqId, float fTweenDuraiton);
  73. /**
  74. * when this function bound to js ,the second param are callfunc_selector
  75. * @lua NA
  76. */
  77. void setAnimationCompletedCallback(cocos2d::Ref *target, cocos2d::SEL_CallFunc callbackFunc);
  78. void debug();
  79. /**
  80. * @js setCallFuncForJSCallbackNamed
  81. */
  82. void setCallFunc(cocos2d::CallFunc *callFunc, const std::string &callbackNamed);
  83. cocos2d::Sequence* actionForCallbackChannel(CCBSequenceProperty* channel);
  84. cocos2d::Sequence* actionForSoundChannel(CCBSequenceProperty* channel);
  85. // return -1 if timeline not exist
  86. int getSequenceId(const char* pSequenceName);
  87. // get timeline duration
  88. float getSequenceDuration(const char* pSequenceName);
  89. private:
  90. const cocos2d::Value& getBaseValue(cocos2d::Node *pNode, const std::string& propName);
  91. Ref* getObject(cocos2d::Node *pNode, const std::string& propName);
  92. CCBSequence* getSequence(int nSequenceId);
  93. cocos2d::ActionInterval* getAction(CCBKeyframe *pKeyframe0, CCBKeyframe *pKeyframe1, const std::string& propName, cocos2d::Node *pNode);
  94. void setAnimatedProperty(const std::string& propName, cocos2d::Node *pNode, const cocos2d::Value& value, Ref* obj, float fTweenDuration);
  95. void setFirstFrame(cocos2d::Node *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);
  96. cocos2d::ActionInterval* getEaseAction(cocos2d::ActionInterval *pAction, CCBKeyframe::EasingType easingType, float fEasingOpt);
  97. void runAction(cocos2d::Node *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);
  98. void sequenceCompleted();
  99. private:
  100. cocos2d::Vector<CCBSequence*> _sequences;
  101. std::unordered_map<cocos2d::Node*, std::unordered_map<int, cocos2d::Map<std::string, CCBSequenceProperty*>>> _nodeSequences;
  102. std::unordered_map<cocos2d::Node*, std::unordered_map<std::string, cocos2d::Value>> _baseValues;
  103. std::unordered_map<cocos2d::Node*, std::unordered_map<std::string, cocos2d::Ref*>> _objects;
  104. int _autoPlaySequenceId;
  105. cocos2d::Node *_rootNode;
  106. cocos2d::Size _rootContainerSize;
  107. CCBAnimationManagerDelegate *_delegate;
  108. CCBSequence *_runningSequence;
  109. cocos2d::ValueVector _documentOutletNames;
  110. cocos2d::Vector<cocos2d::Node*> _documentOutletNodes;
  111. cocos2d::ValueVector _documentCallbackNames;
  112. cocos2d::Vector<cocos2d::Node*> _documentCallbackNodes;
  113. cocos2d::ValueVector _documentCallbackControlEvents;
  114. cocos2d::ValueVector _keyframeCallbacks;
  115. cocos2d::Map<std::string, cocos2d::CallFunc*> _keyframeCallFuncs;
  116. std::string _documentControllerName;
  117. std::string _lastCompletedSequenceName;
  118. cocos2d::SEL_CallFunc _animationCompleteCallbackFunc;
  119. cocos2d::Ref *_target;
  120. };
  121. class CC_DLL CCBSetSpriteFrame : public cocos2d::ActionInstant
  122. {
  123. public:
  124. /** creates a Place action with a position */
  125. static CCBSetSpriteFrame* create(cocos2d::SpriteFrame *pSpriteFrame);
  126. /**
  127. * @js NA
  128. * @lua NA
  129. */
  130. ~CCBSetSpriteFrame();
  131. bool initWithSpriteFrame(cocos2d::SpriteFrame *pSpriteFrame);
  132. // Overrides
  133. virtual void update(float time) override;
  134. virtual CCBSetSpriteFrame* clone() const override;
  135. virtual CCBSetSpriteFrame* reverse() const override;
  136. private:
  137. cocos2d::SpriteFrame *_spriteFrame;
  138. };
  139. class CC_DLL CCBSoundEffect : public cocos2d::ActionInstant
  140. {
  141. public:
  142. static CCBSoundEffect* actionWithSoundFile(const std::string &file, float pitch, float pan, float gain);
  143. /**
  144. * @js NA
  145. * @lua NA
  146. */
  147. ~CCBSoundEffect();
  148. bool initWithSoundFile(const std::string &file, float pitch, float pan, float gain);
  149. // Overrides
  150. virtual void update(float time) override;
  151. virtual CCBSoundEffect* clone() const override;
  152. virtual CCBSoundEffect* reverse() const override;
  153. private:
  154. std::string _soundFile;
  155. float _pitch, _pan, _gain;
  156. };
  157. class CC_DLL CCBRotateTo : public cocos2d::ActionInterval
  158. {
  159. public:
  160. static CCBRotateTo* create(float fDuration, float fAngle);
  161. bool initWithDuration(float fDuration, float fAngle);
  162. // Override
  163. virtual void update(float time) override;
  164. virtual CCBRotateTo* clone() const override;
  165. virtual CCBRotateTo* reverse() const override;
  166. virtual void startWithTarget(cocos2d::Node *pNode) override;
  167. private:
  168. float _startAngle;
  169. float _dstAngle;
  170. float _diffAngle;
  171. };
  172. class CC_DLL CCBRotateXTo: public cocos2d::ActionInterval
  173. {
  174. public:
  175. static CCBRotateXTo* create(float fDuration, float fAngle);
  176. bool initWithDuration(float fDuration, float fAngle);
  177. // Overrides
  178. virtual void startWithTarget(cocos2d::Node *pNode) override;
  179. virtual CCBRotateXTo* clone() const override;
  180. virtual CCBRotateXTo* reverse() const override;
  181. virtual void update(float time) override;
  182. private:
  183. float _startAngle;
  184. float _dstAngle;
  185. float _diffAngle;
  186. };
  187. class CC_DLL CCBRotateYTo: public cocos2d::ActionInterval
  188. {
  189. public:
  190. static CCBRotateYTo* create(float fDuration, float fAngle);
  191. bool initWithDuration(float fDuration, float fAngle);
  192. // Override
  193. virtual void startWithTarget(cocos2d::Node *pNode) override;
  194. virtual CCBRotateYTo* clone() const override;
  195. virtual CCBRotateYTo* reverse() const override;
  196. virtual void update(float time) override;
  197. private:
  198. float _startAngle;
  199. float _dstAngle;
  200. float _diffAngle;
  201. };
  202. class CC_DLL CCBEaseInstant : public cocos2d::ActionEase
  203. {
  204. public:
  205. static CCBEaseInstant* create(cocos2d::ActionInterval *pAction);
  206. virtual CCBEaseInstant* clone() const override;
  207. virtual CCBEaseInstant* reverse() const override;
  208. virtual void update(float dt) override;
  209. };
  210. }
  211. #endif // __CCB_CCBANIMATION_MANAGER_H__