// // RUReboltCompat.cpp // red_utils // // Created by 徐炼新 on 2024/4/26. // #include "RUReboltCompt.h" #include "Rebolt/BTManger.hpp" NS_RU_BEGIN #pragma mark - class ReboltCompt void RU_addCallBack(const std::function& callBack,float dt){ Node* nd = cocos2d::Node::create(); nd->retain(); nd->onEnter(); auto cbn = CallFuncN::create([=](Node* node){ callBack(); node->onExit(); node->autorelease(); }); nd->runAction(Sequence::create(DelayTime::create(dt),cbn, NULL)); } ///其他参数是空. ReboltCompt* ReboltCompt::LoadReboltComptFile(const string& ccbName,redream::NotifyDevelopmentDelegate *ndDelegate){ return LoadReboltComptFile(ccbName,nullptr,ndDelegate,nullptr); } ///加载Rebolt的redream,没有也能加载. ///loaderLib自定义加载ui的class ///ndDelegate: NotifyDevelopmentDelegate的实例,如果是空,则返回的 ReboltCompt为代理,此时可以用 ReboltCompt的onNotifyDev函数为回调入口 ///owner : 通常为nil ReboltCompt* ReboltCompt::LoadReboltComptFile(const string& ccbName, redream::NodeLoaderLibrary* loaderLib, redream::NotifyDevelopmentDelegate *ndDelegate, Ref* owner) { redream::NodeLoaderLibrary* loader = nullptr; if (loaderLib) { loader = loaderLib; } else{ loader = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); } redream::REDReader * ccbReader = new redream::REDReader(loader); Node* node = ccbReader->readNodeGraphFromFile(ccbName.c_str(), owner); redream::ReboltRedManager* rs = ccbReader->getReboltRedManager(); ReboltCompt* rc = ReboltCompt::create(); node->addComponent(rc); rc->_rs = rs; if (ndDelegate==nullptr) { ndDelegate = rc; } if (rs) { rs->retain(); rs->setNotifyDevelopmentDelegate(ndDelegate); } auto reboltmangs = ccbReader->getReboltRedManagerMapPtr(); for (auto it = reboltmangs->begin(); it != reboltmangs->end(); it++) { auto rrm = it->second; rrm->setNotifyDevelopmentDelegate(ndDelegate); } ccbReader->autorelease(); return rc; } ReboltCompt::~ReboltCompt() { CC_SAFE_RELEASE(_rs); } void ReboltCompt::DelayRemoveOwer(float dt) { RU_addCallBack([=](){ if (getOwner()) { getOwner()->removeFromParent(); } }, dt); } void ReboltCompt::onNotifyDevelopment(redream::ReboltRedManager* reboltRedManager, redream::NotifyDevelopmentWaiter* waiter, std::string notify, std::string param, bool reboltIsWait, Node* outNode) { if (_onNotifyDev) { ReboltNotifyData odd; odd.reboltRedManager = reboltRedManager; odd.waiter = waiter; odd.notify = notify; odd.param = param; odd.reboltIsWait = reboltIsWait; odd.outNode = outNode; _onNotifyDev(std::move(odd)); } } std::string ReboltCompt::runBehaviacWhitFunName(std::string name, std::map boolMap, std::map stringMap) { if(_rs) { return _rs->runBehaviacWhitFunName(name, boolMap, stringMap); } CCASSERT(_rs, "没有设置ReboltRedManger"); return ""; } void ReboltCompt::setCoderDataVar(std::string key, std::string content) { CCASSERT(_rs, "请先setReboltRedManger"); if(_rs) { _rs->setCoderDataVar(key, content); } } void ReboltCompt::registerOnNotify(const std::function& notifyCallback){ _onNotifyDev = notifyCallback; } NS_RU_END