// // RedSpineBakeModel.hpp // empty2dx-desktop // // Created by Liang zhong on 2022/11/5. // #ifndef RedSpineBakeModel_h #define RedSpineBakeModel_h #include #include #include #include #include #include "cocos2d.h" #include "RedSlotBakeModel.h" #include "RedAnimationBakeModel.h" #include "spine_bake_data.pb.h" #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID # include # include "platform/android/jni/JniHelper.h" # include "platform/android/CCFileUtils-android.h" # include # define BinaryFileClassName "org/cocos2dx/cpp/BinaryFileUtils" typedef unsigned char BYTE; struct ByteData { std::vector data; int length; }; #endif typedef struct _AsyncLoadAnimationFileRequest { std::string key = ""; std::string fileFullPath = ""; bool isCharacter = false; } AsyncLoadAnimationFileRequest; class RedSpineBakeManage { public: static RedSpineBakeManage* getInstance(); static void destoryInstance(); void setCurrentAnimationBakeModel(std::string aName,RedAnimationBakeModel *aAni); RedAnimationBakeModel * getAnimateByName(std::string aFileName,std::string aName); void endBakeSaveToFile(std::string aPath); void startBake(std::string aFileName); void loadAnimationFileAsync(const std::string& aFileName, const std::string& aPath, bool isCharacter = false); void loadAnimationFile(const std::string& aFileName, const std::string& aPath, bool isCharacter = false); void releaseAimationFile(std::string aFileName); void fetchAnimations(const std::string& aFileName, std::vector& anims); private: RedSpineBakeManage() = default; ~RedSpineBakeManage() = default; /** * 功能:释放烘培管理器 */ void _release(); /** * 功能:子线程读取烘培动画文件 */ void _readAnimationFileInThread(); /** * 功能:解析指定路径的动画proto文件 * 参数 fileFullPath:动画proto文件的全路径 * 参数 dataIndex_pb:proto文件解析后得到的数据 * 返回值:解析得到的数据,如果解析失败数据为空 */ cocos2d::Data _parseProtoData(const std::string& fileFullPath, const std::string& fileName, google::protobuf::Map& dataIndexPb, bool isCharacter = false); private: std::unordered_map>animateList;//记录所有animate std::string fileName; std::string filePath; std::map>> cbsLoading; //记录所有文件 std::unordered_map byteArrayList; std::unordered_map> dataIndexPbList; ///异步加载文件线程 std::thread* _loadThread = nullptr; ///异步加载文件请求队列 std::queue _requests; ////异步加载文件请求队列锁 std::mutex _requestsMtx; ///线程休眠条件变量 condition_variable _sleepCondition; }; #endif /* RedSpineBakeModel_h */