RUQCoreSpine.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // spine的加载类
  3. //
  4. #ifndef RUQCoreSpine_h
  5. #define RUQCoreSpine_h
  6. #include "cocos2d.h"
  7. #include "editor-support/spine/spine-cocos2dx.h"
  8. //#include "editor-support/spine/spine.h"
  9. #include "Redream.h"
  10. #include "RUDefine.h"
  11. USING_NS_CC;
  12. using namespace std;
  13. //using namespace spine;
  14. NS_RU_BEGIN
  15. class QCoreSpine
  16. :public spine::SkeletonAnimation
  17. {
  18. public:
  19. CREATE_FUNC(QCoreSpine);
  20. static spine::Atlas* getAtlasByName(std::string name);
  21. static spine::SkeletonData* getSkeletonDataByName(std::string name,spine::Atlas* atlas);
  22. static QCoreSpine* createWithData (spine::SkeletonData* skeletonData, bool ownsSkeletonData = false);
  23. static QCoreSpine* createWithJsonFile (const std::string& skeletonJsonFile, spine::Atlas* atlas, float scale = 1);
  24. static QCoreSpine* createWithJsonFile (const std::string& skeletonJsonFile, const std::string& atlasFile, float scale = 1);
  25. static QCoreSpine* createWithBinaryFile (const std::string& skeletonBinaryFile, spine::Atlas* atlas, float scale = 1);
  26. static QCoreSpine* createWithBinaryFile (const std::string& skeletonBinaryFile, const std::string& atlasFile, float scale = 1);
  27. //通过缓存创建spine节点
  28. static QCoreSpine* createWithBinaryFileAndCache (const std::string& skeletonBinaryFile, const std::string& atlasFile, float scale = 1);
  29. void changeSkeleton(const std::string& skeletonJsonFile, const std::string& atlasFile, float scale = 1);
  30. virtual float getAnimTime(std::string name);
  31. virtual void playAnim(string name,const std::function<void()> &func = nullptr, bool isDeleteSelf = false ,bool isLoop = false,float delay = 0,bool delFunc = true);
  32. virtual void playAnimN(string name,const std::function<void(Node*)> &funcN = nullptr, bool isDeleteSelf = false ,bool isLoop = false);
  33. virtual void playRandomAnim();
  34. virtual void playAnimInRangeWithArray(std::vector<std::string> randomNames ,std::vector<int> randomRates);
  35. // 倒序播放
  36. virtual void playBackAnim(const char* name,const std::function<void()> &func = nullptr, bool isDeleteSelf = false ,bool isLoop = false);
  37. virtual void playAnimInRange(const char* name = "normal_");
  38. QCoreSpine ();
  39. ~QCoreSpine();
  40. virtual void onExit() override;
  41. //获取动画数据
  42. spine::SkeletonData* getSkeletonData();
  43. void setEventCallBack(const std::function<void(spine::TrackEntry*,const char*)> &func);
  44. void changeToOtherParent(Node* newParent);
  45. std::function<void(const string&, QCoreSpine*)> setCbOnExit(std::function<void(const string&, QCoreSpine*)> cb);
  46. string getRunningSequenceName();
  47. float getAnimDuration(std::string name);
  48. private:
  49. //重置变量
  50. void resetVar();
  51. void setContent();
  52. private:
  53. void setDataName(const string& name);
  54. std::function<void(const string&, QCoreSpine*)> _cbOnExit = nullptr;
  55. string _dataName;
  56. std::function<void()> _mComplete;
  57. std::function<void()> _mCallFunc;
  58. std::function<void(Node*)> _mCallFuncN;
  59. std::function<void(spine::TrackEntry*,const char*)> _mCallEvent;
  60. std::vector<std::string> _randomNames;
  61. std::vector<int> _randomRates;
  62. static void reScaleSkeletonData(spine::SkeletonData* skeletonData,float scale);
  63. };
  64. class QCoreSpineLoader : public redream::NodeLoader {
  65. public:
  66. RED_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(QCoreSpineLoader, loader);
  67. protected:
  68. RED_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(QCoreSpine);
  69. virtual void onHandlePropTypeString(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * pString, redream::REDReader * ccbReader);
  70. virtual void onHandlePropTypeFloat(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, float pFloat, redream::REDReader * ccbReader);
  71. virtual void onHandlePropTypeCheck(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, bool pCheck, redream::REDReader * ccbReader);
  72. void checkRefreshSpine(cocos2d::Node * pNode);
  73. private:
  74. std::string _skelName = "";
  75. std::string _atlasName = "";
  76. std::string _curAnimName = "";
  77. float _spineScale = 0.0f;
  78. bool _loop = false;
  79. };
  80. NS_RU_END
  81. #endif /* defined(RUQCoreSpine_h) */