RUReboltLayer.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. //
  2. // RUReboltLayer.cpp
  3. // red_utils
  4. //
  5. // Created by ZhengSong on 2023/1/6.
  6. //
  7. #include "RUReboltLayer.h"
  8. #include "Rebolt/BTManger.hpp"
  9. using namespace redream;
  10. NS_RU_BEGIN
  11. RUReboltLayer::RUReboltLayer() {
  12. }
  13. RUReboltLayer::~RUReboltLayer() {
  14. CC_SAFE_RELEASE_NULL(_rs);
  15. }
  16. void RUReboltLayer::setGlobalDataVar(std::string key, std::string content) {
  17. BTManger::getInstance()->setGlobalDataVar(key, content);
  18. }
  19. RUReboltLayer* RUReboltLayer::createReboltLayer(const std::string& fileName, redream::NodeLoaderLibrary* ccNodeLoaderLibrary) {
  20. RUReboltLayer* ret = RUReboltLayer::create();
  21. if(ccNodeLoaderLibrary == nullptr) {
  22. ccNodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
  23. }
  24. redream::REDReader* ccbReader = new redream::REDReader(ccNodeLoaderLibrary);
  25. try {
  26. Node* node = ccbReader->readNodeGraphFromFile(fileName.c_str());
  27. redream::ReboltRedManager* rs = ccbReader->getReboltRedManager();
  28. if(rs) {
  29. ret->setReboltRedManger(rs);
  30. }
  31. REDReader::ReboltRedManagerMapPtr mgrs = ccbReader->getReboltRedManagerMapPtr();
  32. for(auto iter : *mgrs) {
  33. iter.second->setNotifyDevelopmentDelegate(ret);
  34. }
  35. ret->addChild(node);
  36. ccbReader->release();
  37. } catch (string str) {
  38. CCLOG("加载错误 %s", str.c_str());
  39. }
  40. return ret;
  41. }
  42. RUReboltLayer* RUReboltLayer::creatBatchReboltLayer(const std::string& fileName,unordered_set<string> plistSt,unordered_set<string> repleacPlistSt){
  43. RUReboltLayer* ret = RUReboltLayer::create();
  44. redream::REDReader* ccbReader = new redream::REDReader(NodeLoaderLibrary::getInstance());
  45. try {
  46. ccbReader->setPlist(plistSt,repleacPlistSt);
  47. ccbReader->setBatchNode(true);
  48. Node* node = ccbReader->readNodeGraphFromFile(fileName.c_str());
  49. redream::ReboltRedManager* rs = ccbReader->getReboltRedManager();
  50. if(rs) {
  51. ret->setReboltRedManger(rs);
  52. }
  53. REDReader::ReboltRedManagerMapPtr mgrs = ccbReader->getReboltRedManagerMapPtr();
  54. for(auto iter : *mgrs) {
  55. iter.second->setNotifyDevelopmentDelegate(ret);
  56. }
  57. ret->addChild(node);
  58. ccbReader->autorelease();
  59. } catch (string str) {
  60. CCLOG("加载错误 %s", str.c_str());
  61. }
  62. return ret;
  63. }
  64. RUReboltLayer* RUReboltLayer::creatBatchReboltLayer(const std::string& fileName,unordered_set<string> plistSt){
  65. RUReboltLayer* ret = RUReboltLayer::create();
  66. redream::REDReader* ccbReader = new redream::REDReader(NodeLoaderLibrary::getInstance());
  67. try {
  68. ccbReader->setPlist(plistSt,plistSt);
  69. ccbReader->setBatchNode(true);
  70. Node* node = ccbReader->readNodeGraphFromFile(fileName.c_str());
  71. redream::ReboltRedManager* rs = ccbReader->getReboltRedManager();
  72. if(rs) {
  73. ret->setReboltRedManger(rs);
  74. }
  75. REDReader::ReboltRedManagerMapPtr mgrs = ccbReader->getReboltRedManagerMapPtr();
  76. for(auto iter : *mgrs) {
  77. iter.second->setNotifyDevelopmentDelegate(ret);
  78. }
  79. ret->addChild(node);
  80. ccbReader->release();
  81. } catch (string str) {
  82. CCLOG("加载错误 %s", str.c_str());
  83. }
  84. return ret;
  85. }
  86. void RUReboltLayer::onNotifyDevelopment(redream::ReboltRedManager* reboltRedManager, redream::NotifyDevelopmentWaiter* waiter, std::string notify, std::string param, bool reboltIsWait, Node* outNode) {
  87. if(_onNotifyCallback){
  88. ReboltNotifyData reboltNotifyData;
  89. reboltNotifyData.reboltRedManager = reboltRedManager;
  90. reboltNotifyData.waiter = waiter;
  91. reboltNotifyData.notify = notify;
  92. reboltNotifyData.param = param;
  93. reboltNotifyData.reboltIsWait = reboltIsWait;
  94. reboltNotifyData.outNode = outNode;
  95. _onNotifyCallback(reboltNotifyData);
  96. }
  97. }
  98. std::string RUReboltLayer::runBehaviacWhitFunName(std::string name, std::map<std::string, bool> boolMap, std::map<std::string, std::string> stringMap) {
  99. if(_rs) {
  100. return _rs->runBehaviacWhitFunName(name, boolMap, stringMap);
  101. }
  102. CCASSERT(_rs, "没有设置ReboltRedManger");
  103. return "";
  104. }
  105. void RUReboltLayer::setReboltRedManger(redream::ReboltRedManager* rs) {
  106. _rs = rs;
  107. CC_SAFE_RETAIN(_rs);
  108. }
  109. void RUReboltLayer::setCoderDataVar(std::string key, std::string content) {
  110. CCASSERT(_rs, "请先setReboltRedManger");
  111. if(_rs) {
  112. _rs->setCoderDataVar(key, content);
  113. }
  114. }
  115. bool RUReboltLayer::hasBehaviacWithFuncName(std::string name) {
  116. auto treeMap = _rs->getTreeTypeNameMap();
  117. auto funNameIdMapIt = treeMap.find("func");
  118. if(funNameIdMapIt != treeMap.end()){
  119. map<std::string, std::string> funNameIdMap = funNameIdMapIt->second;
  120. auto nameIdIt = funNameIdMap.find(name);
  121. if(nameIdIt != funNameIdMap.end()){
  122. return true;
  123. }
  124. }
  125. return false;
  126. }
  127. void RUReboltLayer::registerOnNotify(const std::function<void(const ReboltNotifyData&)>& notifyCallback){
  128. _onNotifyCallback = notifyCallback;
  129. }
  130. void RUReboltLayer::registerOnExit(const std::function<void()>& func) {
  131. _onExitCb = func;
  132. }
  133. void RUReboltLayer::registerOnEnter(const std::function<void()>& func) {
  134. _onEnterCb = func;
  135. }
  136. void RUReboltLayer::onExit() {
  137. Layer::onExit();
  138. if(_onExitCb) {
  139. _onExitCb();
  140. }
  141. }
  142. void RUReboltLayer::onEnter() {
  143. Layer::onEnter();
  144. if(_onEnterCb) {
  145. _onEnterCb();
  146. }
  147. }
  148. NS_RU_END