123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //
- // 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<void()>& 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<std::string, bool> boolMap, std::map<std::string, std::string> 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<void(const ReboltNotifyData&)>& notifyCallback){
- _onNotifyDev = notifyCallback;
- }
- NS_RU_END
|