CCBAnimationManager.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  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. int runAnimationsForSequenceNamedTweenDuration(const char *pName, float fTweenDuration);
  71. int runAnimationsForSequenceNamed(const char *pName);
  72. void runAnimationsForSequenceIdTweenDuration(int nSeqId, float fTweenDuraiton);
  73. cocos2d::Spawn* getNodeAniByName(const char *pName,cocos2d::Node *pNode,cocos2d::Vec2 orginPos);
  74. /**
  75. * when this function bound to js ,the second param are callfunc_selector
  76. * @lua NA
  77. */
  78. void setAnimationCompletedCallback(cocos2d::Ref *target, cocos2d::SEL_CallFunc callbackFunc);
  79. void debug();
  80. /**
  81. * @js setCallFuncForJSCallbackNamed
  82. */
  83. void setCallFunc(cocos2d::CallFunc *callFunc, const std::string &callbackNamed);
  84. cocos2d::Sequence* actionForCallbackChannel(CCBSequenceProperty* channel);
  85. cocos2d::Sequence* actionForSoundChannel(CCBSequenceProperty* channel);
  86. // return -1 if timeline not exist
  87. int getSequenceId(const char* pSequenceName);
  88. // get timeline duration
  89. float getSequenceDuration(const char* pSequenceName);
  90. std::string getCCBFileName();
  91. void setCCBFileName(std::string filename);
  92. CC_SYNTHESIZE(float, _speed, AnimationSpeed);
  93. void updateSpeed(float speed);
  94. const std::unordered_map<cocos2d::Node*, std::unordered_map<int, cocos2d::Map<std::string, CCBSequenceProperty*>>> & getNodeSequences();
  95. private:
  96. const cocos2d::Value& getBaseValue(cocos2d::Node *pNode, const std::string& propName);
  97. Ref* getObject(cocos2d::Node *pNode, const std::string& propName);
  98. CCBSequence* getSequence(int nSequenceId);
  99. cocos2d::ActionInterval* getAction(CCBKeyframe *pKeyframe0, CCBKeyframe *pKeyframe1, const std::string& propName, cocos2d::Node *pNode);
  100. void setAnimatedProperty(const std::string& propName, cocos2d::Node *pNode, const cocos2d::Value& value, Ref* obj, float fTweenDuration);
  101. void setFirstFrame(cocos2d::Node *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);
  102. cocos2d::ActionInterval* getEaseAction(cocos2d::ActionInterval *pAction, CCBKeyframe::EasingType easingType, float fEasingOpt);
  103. void runAction(cocos2d::Node *pNode, CCBSequenceProperty *pSeqProp, float fTweenDuration);
  104. void sequenceCompleted();
  105. void updateSpeed(float speed, cocos2d::Node* node);
  106. private:
  107. cocos2d::Vector<CCBSequence*> _sequences;
  108. std::unordered_map<cocos2d::Node*, std::unordered_map<int, cocos2d::Map<std::string, CCBSequenceProperty*>>> _nodeSequences;
  109. std::unordered_map<cocos2d::Node*, std::unordered_map<std::string, cocos2d::Value>> _baseValues;
  110. std::unordered_map<cocos2d::Node*, std::unordered_map<std::string, cocos2d::Ref*>> _objects;
  111. int _autoPlaySequenceId;
  112. cocos2d::Node *_rootNode;
  113. cocos2d::Size _rootContainerSize;
  114. CCBAnimationManagerDelegate *_delegate;
  115. CCBSequence *_runningSequence;
  116. cocos2d::ValueVector _documentOutletNames;
  117. cocos2d::Vector<cocos2d::Node*> _documentOutletNodes;
  118. cocos2d::ValueVector _documentCallbackNames;
  119. cocos2d::Vector<cocos2d::Node*> _documentCallbackNodes;
  120. cocos2d::ValueVector _documentCallbackControlEvents;
  121. cocos2d::ValueVector _keyframeCallbacks;
  122. cocos2d::Map<std::string, cocos2d::CallFunc*> _keyframeCallFuncs;
  123. std::string _documentControllerName;
  124. std::string _lastCompletedSequenceName;
  125. cocos2d::SEL_CallFunc _animationCompleteCallbackFunc;
  126. cocos2d::Ref *_target;
  127. std::string _ccbFileName;
  128. };
  129. class CC_DLL CCBSetSpriteFrame : public cocos2d::ActionInstant
  130. {
  131. public:
  132. /** creates a Place action with a position */
  133. static CCBSetSpriteFrame* create(cocos2d::SpriteFrame *pSpriteFrame);
  134. /**
  135. * @js NA
  136. * @lua NA
  137. */
  138. ~CCBSetSpriteFrame();
  139. bool initWithSpriteFrame(cocos2d::SpriteFrame *pSpriteFrame);
  140. // Overrides
  141. virtual void update(float time) override;
  142. virtual CCBSetSpriteFrame* clone() const override;
  143. virtual CCBSetSpriteFrame* reverse() const override;
  144. private:
  145. cocos2d::SpriteFrame *_spriteFrame;
  146. };
  147. class CC_DLL CCBSoundEffect : public cocos2d::ActionInstant
  148. {
  149. public:
  150. static CCBSoundEffect* actionWithSoundFile(const std::string &file, float pitch, float pan, float gain);
  151. /**
  152. * @js NA
  153. * @lua NA
  154. */
  155. ~CCBSoundEffect();
  156. bool initWithSoundFile(const std::string &file, float pitch, float pan, float gain);
  157. // Overrides
  158. virtual void update(float time) override;
  159. virtual CCBSoundEffect* clone() const override;
  160. virtual CCBSoundEffect* reverse() const override;
  161. private:
  162. std::string _soundFile;
  163. float _pitch, _pan, _gain;
  164. };
  165. class CC_DLL CCBRotateTo : public cocos2d::ActionInterval
  166. {
  167. public:
  168. static CCBRotateTo* create(float fDuration, float fAngle);
  169. bool initWithDuration(float fDuration, float fAngle);
  170. // Override
  171. virtual void update(float time) override;
  172. virtual CCBRotateTo* clone() const override;
  173. virtual CCBRotateTo* reverse() const override;
  174. virtual void startWithTarget(cocos2d::Node *pNode) override;
  175. private:
  176. float _startAngle;
  177. float _dstAngle;
  178. float _diffAngle;
  179. };
  180. class CC_DLL CCBRotateXTo: public cocos2d::ActionInterval
  181. {
  182. public:
  183. static CCBRotateXTo* create(float fDuration, float fAngle);
  184. bool initWithDuration(float fDuration, float fAngle);
  185. // Overrides
  186. virtual void startWithTarget(cocos2d::Node *pNode) override;
  187. virtual CCBRotateXTo* clone() const override;
  188. virtual CCBRotateXTo* reverse() const override;
  189. virtual void update(float time) override;
  190. private:
  191. float _startAngle;
  192. float _dstAngle;
  193. float _diffAngle;
  194. };
  195. class CC_DLL CCBRotateYTo: public cocos2d::ActionInterval
  196. {
  197. public:
  198. static CCBRotateYTo* create(float fDuration, float fAngle);
  199. bool initWithDuration(float fDuration, float fAngle);
  200. // Override
  201. virtual void startWithTarget(cocos2d::Node *pNode) override;
  202. virtual CCBRotateYTo* clone() const override;
  203. virtual CCBRotateYTo* reverse() const override;
  204. virtual void update(float time) override;
  205. private:
  206. float _startAngle;
  207. float _dstAngle;
  208. float _diffAngle;
  209. };
  210. class CC_DLL CCBFrameIndexTo : public cocos2d::ActionInterval {
  211. public:
  212. static CCBFrameIndexTo* create(float fDuration, int startIndex, int endIndex);
  213. bool initWithDuration(float fDuration, int startIndex, int endIndex);
  214. // Override
  215. virtual void startWithTarget(cocos2d::Node *pNode) override;
  216. virtual CCBFrameIndexTo* clone() const override;
  217. virtual CCBFrameIndexTo* reverse() const override;
  218. virtual void update(float time) override;
  219. private:
  220. int _startIndex;
  221. int _endIndex;
  222. float _diffIndex;
  223. };
  224. // add zml 粒子属性动画
  225. // 粒子生成器尺寸
  226. class CC_DLL CCBParticlePosVarTo : public cocos2d::ActionInterval {
  227. public:
  228. static CCBParticlePosVarTo* create(float fDuration, cocos2d::Vec2 size);
  229. bool initWithDuration(float fDuration, cocos2d::Vec2 size);
  230. // Override
  231. virtual void startWithTarget(cocos2d::Node *pNode) override;
  232. virtual CCBParticlePosVarTo* clone() const override;
  233. virtual CCBParticlePosVarTo* reverse() const override;
  234. virtual void update(float time) override;
  235. private:
  236. cocos2d::Vec2 _startGravity;
  237. cocos2d::Vec2 _endGravity;
  238. cocos2d::Vec2 _diffGravity;
  239. };
  240. // 重力
  241. class CC_DLL CCBGravityTo : public cocos2d::ActionInterval {
  242. public:
  243. static CCBGravityTo* create(float fDuration, cocos2d::Vec2 gravity);
  244. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  245. // Override
  246. virtual void startWithTarget(cocos2d::Node *pNode) override;
  247. virtual CCBGravityTo* clone() const override;
  248. virtual CCBGravityTo* reverse() const override;
  249. virtual void update(float time) override;
  250. private:
  251. cocos2d::Vec2 _startGravity;
  252. cocos2d::Vec2 _endGravity;
  253. cocos2d::Vec2 _diffGravity;
  254. };
  255. //粒子速度
  256. class CC_DLL CCBParticleSpeedTo : public cocos2d::ActionInterval {
  257. public:
  258. static CCBParticleSpeedTo* create(float fDuration, cocos2d::Vec2 gravity);
  259. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  260. // Override
  261. virtual void startWithTarget(cocos2d::Node *pNode) override;
  262. virtual CCBParticleSpeedTo* clone() const override;
  263. virtual CCBParticleSpeedTo* reverse() const override;
  264. virtual void update(float time) override;
  265. private:
  266. cocos2d::Vec2 _startFloatVar;
  267. cocos2d::Vec2 _endFloatVar;
  268. cocos2d::Vec2 _diffFloatVar;
  269. };
  270. //粒子生命
  271. class CC_DLL CCBParticleLifeTo : public cocos2d::ActionInterval {
  272. public:
  273. static CCBParticleLifeTo* create(float fDuration, cocos2d::Vec2 gravity);
  274. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  275. // Override
  276. virtual void startWithTarget(cocos2d::Node *pNode) override;
  277. virtual CCBParticleLifeTo* clone() const override;
  278. virtual CCBParticleLifeTo* reverse() const override;
  279. virtual void update(float time) override;
  280. private:
  281. cocos2d::Vec2 _startFloatVar;
  282. cocos2d::Vec2 _endFloatVar;
  283. cocos2d::Vec2 _diffFloatVar;
  284. };
  285. //粒子开始大小
  286. class CC_DLL CCBParticleStartSizeTo : public cocos2d::ActionInterval {
  287. public:
  288. static CCBParticleStartSizeTo* create(float fDuration, cocos2d::Vec2 gravity);
  289. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  290. // Override
  291. virtual void startWithTarget(cocos2d::Node *pNode) override;
  292. virtual CCBParticleStartSizeTo* clone() const override;
  293. virtual CCBParticleStartSizeTo* reverse() const override;
  294. virtual void update(float time) override;
  295. private:
  296. cocos2d::Vec2 _startFloatVar;
  297. cocos2d::Vec2 _endFloatVar;
  298. cocos2d::Vec2 _diffFloatVar;
  299. };
  300. //粒子结束尺寸
  301. class CC_DLL CCBParticleEndSizeTo : public cocos2d::ActionInterval {
  302. public:
  303. static CCBParticleEndSizeTo* create(float fDuration, cocos2d::Vec2 floatVar);
  304. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  305. // Override
  306. virtual void startWithTarget(cocos2d::Node *pNode) override;
  307. virtual CCBParticleEndSizeTo* clone() const override;
  308. virtual CCBParticleEndSizeTo* reverse() const override;
  309. virtual void update(float time) override;
  310. private:
  311. cocos2d::Vec2 _startFloatVar;
  312. cocos2d::Vec2 _endFloatVar;
  313. cocos2d::Vec2 _diffFloatVar;
  314. };
  315. //粒子开始旋转角度
  316. class CC_DLL CCBParticleStartSpinTo : public cocos2d::ActionInterval {
  317. public:
  318. static CCBParticleStartSpinTo* create(float fDuration, cocos2d::Vec2 floatVar);
  319. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  320. // Override
  321. virtual void startWithTarget(cocos2d::Node *pNode) override;
  322. virtual CCBParticleStartSpinTo* clone() const override;
  323. virtual CCBParticleStartSpinTo* reverse() const override;
  324. virtual void update(float time) override;
  325. private:
  326. cocos2d::Vec2 _startFloatVar;
  327. cocos2d::Vec2 _endFloatVar;
  328. cocos2d::Vec2 _diffFloatVar;
  329. };
  330. //粒子结束旋转角度
  331. class CC_DLL CCBParticleEndSpinTo : public cocos2d::ActionInterval {
  332. public:
  333. static CCBParticleEndSpinTo* create(float fDuration, cocos2d::Vec2 floatVar);
  334. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  335. // Override
  336. virtual void startWithTarget(cocos2d::Node *pNode) override;
  337. virtual CCBParticleEndSpinTo* clone() const override;
  338. virtual CCBParticleEndSpinTo* reverse() const override;
  339. virtual void update(float time) override;
  340. private:
  341. cocos2d::Vec2 _startFloatVar;
  342. cocos2d::Vec2 _endFloatVar;
  343. cocos2d::Vec2 _diffFloatVar;
  344. };
  345. //粒子发射角度
  346. class CC_DLL CCBParticleAngleTo : public cocos2d::ActionInterval {
  347. public:
  348. static CCBParticleAngleTo* create(float fDuration, cocos2d::Vec2 floatVar);
  349. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  350. // Override
  351. virtual void startWithTarget(cocos2d::Node *pNode) override;
  352. virtual CCBParticleAngleTo* clone() const override;
  353. virtual CCBParticleAngleTo* reverse() const override;
  354. virtual void update(float time) override;
  355. private:
  356. cocos2d::Vec2 _startFloatVar;
  357. cocos2d::Vec2 _endFloatVar;
  358. cocos2d::Vec2 _diffFloatVar;
  359. };
  360. //粒子重力模式切向加速度
  361. class CC_DLL CCBParticleTangentialAccelTo : public cocos2d::ActionInterval {
  362. public:
  363. static CCBParticleTangentialAccelTo* create(float fDuration, cocos2d::Vec2 floatVar);
  364. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  365. // Override
  366. virtual void startWithTarget(cocos2d::Node *pNode) override;
  367. virtual CCBParticleTangentialAccelTo* clone() const override;
  368. virtual CCBParticleTangentialAccelTo* reverse() const override;
  369. virtual void update(float time) override;
  370. private:
  371. cocos2d::Vec2 _startFloatVar;
  372. cocos2d::Vec2 _endFloatVar;
  373. cocos2d::Vec2 _diffFloatVar;
  374. };
  375. //粒子径向加速度
  376. class CC_DLL CCBParticleRadialAccelTo : public cocos2d::ActionInterval {
  377. public:
  378. static CCBParticleRadialAccelTo* create(float fDuration, cocos2d::Vec2 floatVar);
  379. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  380. // Override
  381. virtual void startWithTarget(cocos2d::Node *pNode) override;
  382. virtual CCBParticleRadialAccelTo* clone() const override;
  383. virtual CCBParticleRadialAccelTo* reverse() const override;
  384. virtual void update(float time) override;
  385. private:
  386. cocos2d::Vec2 _startFloatVar;
  387. cocos2d::Vec2 _endFloatVar;
  388. cocos2d::Vec2 _diffFloatVar;
  389. };
  390. //粒子半径模式开始半径
  391. class CC_DLL CCBParticleStartRadiusTo : public cocos2d::ActionInterval {
  392. public:
  393. static CCBParticleStartRadiusTo* create(float fDuration, cocos2d::Vec2 floatVar);
  394. bool initWithDuration(float fDuration, cocos2d::Vec2 floatVar);
  395. // Override
  396. virtual void startWithTarget(cocos2d::Node *pNode) override;
  397. virtual CCBParticleStartRadiusTo* clone() const override;
  398. virtual CCBParticleStartRadiusTo* reverse() const override;
  399. virtual void update(float time) override;
  400. private:
  401. cocos2d::Vec2 _startFloatVar;
  402. cocos2d::Vec2 _endFloatVar;
  403. cocos2d::Vec2 _diffFloatVar;
  404. };
  405. //粒子半径模式结束半径
  406. class CC_DLL CCBParticleEndRadiusTo : public cocos2d::ActionInterval {
  407. public:
  408. static CCBParticleEndRadiusTo* create(float fDuration, cocos2d::Vec2 gravity);
  409. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  410. // Override
  411. virtual void startWithTarget(cocos2d::Node *pNode) override;
  412. virtual CCBParticleEndRadiusTo* clone() const override;
  413. virtual CCBParticleEndRadiusTo* reverse() const override;
  414. virtual void update(float time) override;
  415. private:
  416. cocos2d::Vec2 _startFloatVar;
  417. cocos2d::Vec2 _endFloatVar;
  418. cocos2d::Vec2 _diffFloatVar;
  419. };
  420. //粒子半径模式每秒旋转
  421. class CC_DLL CCBParticleRotatePerSecondTo : public cocos2d::ActionInterval {
  422. public:
  423. static CCBParticleRotatePerSecondTo* create(float fDuration, cocos2d::Vec2 gravity);
  424. bool initWithDuration(float fDuration, cocos2d::Vec2 gravity);
  425. // Override
  426. virtual void startWithTarget(cocos2d::Node *pNode) override;
  427. virtual CCBParticleRotatePerSecondTo* clone() const override;
  428. virtual CCBParticleRotatePerSecondTo* reverse() const override;
  429. virtual void update(float time) override;
  430. private:
  431. cocos2d::Vec2 _startFloatVar;
  432. cocos2d::Vec2 _endFloatVar;
  433. cocos2d::Vec2 _diffFloatVar;
  434. };
  435. class CC_DLL CCBEaseInstant : public cocos2d::ActionEase
  436. {
  437. public:
  438. static CCBEaseInstant* create(cocos2d::ActionInterval *pAction);
  439. virtual CCBEaseInstant* clone() const override;
  440. virtual CCBEaseInstant* reverse() const override;
  441. virtual void update(float dt) override;
  442. };
  443. }
  444. #endif // __CCB_CCBANIMATION_MANAGER_H__