CCNodeLoader.cpp 74 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909
  1. #include "CCNodeLoader.h"
  2. #include "REDSelectorResolver.h"
  3. #include "REDMemberVariableAssigner.h"
  4. #include "REDAnimationManager.h"
  5. #include "CCNode+REDRelativePositioning.h"
  6. #include "deprecated/CCArray.h"
  7. #include "deprecated/CCString.h"
  8. #include "base/CCDirector.h"
  9. #include "renderer/CCTextureCache.h"
  10. #include "2d/CCSpriteFrameCache.h"
  11. #include "2d/CCAnimationCache.h"
  12. #include "platform/CCFileUtils.h"
  13. #include "rparticle/Datas/EditorDatas.h"
  14. #include "ui/UISlider.h"
  15. #include "RPRedAudio.hpp"
  16. #include "common/CocosConfig.h"
  17. using namespace std;
  18. using namespace cocos2d;
  19. using namespace cocos2d::ui;
  20. using namespace cocos2d::extension;
  21. namespace redream {
  22. Vec2 getAbsoluteScale(float mainScale, float additionalScale, float scaleX, float scaleY, unsigned int type)
  23. {
  24. float scaleXCoef = 1.0;
  25. float scaleYCoef = 1.0;
  26. if (type & static_cast<int>(ScaleType::MULTIPLY_RESOURCES_SCALE))
  27. {
  28. scaleXCoef *= REDReader::getResolutionScale();
  29. scaleYCoef *= REDReader::getResolutionScale();
  30. }
  31. if (type & static_cast<int>(ScaleType::MULTIPLY_MAIN_SCALE))
  32. {
  33. scaleXCoef *= mainScale;
  34. scaleYCoef *= mainScale;
  35. }
  36. if (type & static_cast<int>(ScaleType::MULTIPLY_ADDITION_SCALE_X))
  37. {
  38. scaleXCoef *= additionalScale;
  39. }
  40. if (type & static_cast<int>(ScaleType::MULTIPLY_ADDITION_SCALE_Y))
  41. {
  42. scaleYCoef *= additionalScale;
  43. }
  44. if (type & static_cast<int>(ScaleType::INVERT_SCALE))
  45. {
  46. scaleXCoef = 1.0f/scaleXCoef;
  47. scaleYCoef = 1.0f/scaleYCoef;
  48. }
  49. return Vec2(scaleX*scaleXCoef,scaleY*scaleYCoef);
  50. }
  51. float getAbsoluteScale(float mainScale, float additionalScale, float scale, unsigned int type)
  52. {
  53. float scaleCoef = REDReader::getResolutionScale();
  54. if (type & static_cast<int>(ScaleType::MULTIPLY_RESOURCES_SCALE))
  55. {
  56. scaleCoef *= REDReader::getResolutionScale();
  57. }
  58. if (type & static_cast<int>(ScaleType::MULTIPLY_MAIN_SCALE))
  59. {
  60. scaleCoef *= mainScale;
  61. }
  62. if (type & static_cast<int>(ScaleType::INVERT_SCALE))
  63. {
  64. scaleCoef = 1.0f/scaleCoef;
  65. }
  66. return scale * scaleCoef;
  67. }
  68. Vec2 getAbsolutePosition(float mainScale, float additionalScale, const Point &pt, PositionReferenceCorner corner, PositionUnit xUnit, PositionUnit yUnit, const Size &containerSize)
  69. {
  70. Point positionInPoints=Point(0,0);
  71. float x = 0;
  72. float y = 0;
  73. // Convert position to points
  74. if (xUnit == PositionUnit::POINTS) x = pt.x * REDReader::getResolutionScale();
  75. else if (xUnit == PositionUnit::UIPOINTS) x = pt.x * mainScale * REDReader::getResolutionScale();
  76. else if (xUnit == PositionUnit::NORMALIZED) x = pt.x * containerSize.width / 100;
  77. if (yUnit == PositionUnit::POINTS) y = pt.y * REDReader::getResolutionScale();
  78. else if (yUnit == PositionUnit::UIPOINTS) y = pt.y * mainScale * REDReader::getResolutionScale();
  79. else if (yUnit == PositionUnit::NORMALIZED) y = pt.y * containerSize.height / 100;
  80. // Account for reference corner
  81. //CCPositionReferenceCorner corner = type.corner;
  82. if (corner == PositionReferenceCorner::BOTTOMLEFT)
  83. {
  84. // Nothing needs to be done
  85. }
  86. else if (corner == PositionReferenceCorner::TOPLEFT)
  87. {
  88. // Reverse y-axis
  89. y = containerSize.height - y;
  90. }
  91. else if (corner == PositionReferenceCorner::TOPRIGHT)
  92. {
  93. // Reverse x-axis and y-axis
  94. x = containerSize.width - x;
  95. y = containerSize.height - y;
  96. }
  97. else if (corner == PositionReferenceCorner::BOTTOMRIGHT)
  98. {
  99. // Reverse x-axis
  100. x = containerSize.width - x;
  101. }
  102. positionInPoints.x = x;
  103. positionInPoints.y = y;
  104. return positionInPoints;
  105. }
  106. Size getAbsoluteSize(float mainScale, float additionalScale, const Size &contentSize, SizeUnit widthUnit, SizeUnit heightUnit, const Size &containerSize)
  107. {
  108. Size size = Size::ZERO;
  109. // Width
  110. if (widthUnit == SizeUnit::POINTS)
  111. {
  112. size.width = REDReader::getResolutionScale() * contentSize.width;
  113. }
  114. else if (widthUnit == SizeUnit::UIPOINTS)
  115. {
  116. size.width = REDReader::getResolutionScale() * mainScale * contentSize.width;
  117. }
  118. else if (widthUnit == SizeUnit::NORMALIZED)
  119. {
  120. size.width = contentSize.width * containerSize.width / 100;
  121. }
  122. else if (widthUnit == SizeUnit::INSETPOINTS)
  123. {
  124. size.width = containerSize.width - contentSize.width * REDReader::getResolutionScale();
  125. }
  126. else if (widthUnit == SizeUnit::INSETUIPOINTS)
  127. {
  128. size.width = containerSize.width - contentSize.width * REDReader::getResolutionScale() * mainScale;
  129. }
  130. // Height
  131. if (heightUnit == SizeUnit::POINTS)
  132. {
  133. size.height = REDReader::getResolutionScale() * contentSize.height;
  134. }
  135. else if (heightUnit == SizeUnit::UIPOINTS)
  136. {
  137. size.height = REDReader::getResolutionScale() * mainScale * contentSize.height;
  138. }
  139. else if (heightUnit == SizeUnit::NORMALIZED)
  140. {
  141. size.height = contentSize.height * containerSize.height / 100;
  142. }
  143. else if (heightUnit == SizeUnit::INSETPOINTS)
  144. {
  145. size.height = containerSize.height - contentSize.height * REDReader::getResolutionScale();
  146. }
  147. else if (heightUnit == SizeUnit::INSETUIPOINTS)
  148. {
  149. size.height = containerSize.height - contentSize.height * REDReader::getResolutionScale() * mainScale;
  150. }
  151. return size;
  152. }
  153. NodeLoader::NodeLoader()
  154. {
  155. }
  156. NodeLoader::~NodeLoader()
  157. {
  158. }
  159. ValueMap& NodeLoader::getCustomProperties()
  160. {
  161. return _customProperties;
  162. }
  163. Node * NodeLoader::loadNode(Node * pParent, REDReader * ccbReader)
  164. {
  165. Node * ccNode = this->createNode(pParent, ccbReader);
  166. //clear _customProperties, ready for load next node.
  167. _customProperties.clear();
  168. return ccNode;
  169. }
  170. void NodeLoader::parseProperties(Node * pNode, Node * pParent, REDReader * ccbReader, const RedreamInfo::Node& nodeProtobuf, std::string &reboltName, std::string &reboltId)
  171. {
  172. // int numRegularProps = ccbReader->readInt(false);
  173. // int numExturaProps = ccbReader->readInt(false);
  174. // int propertyCount = numRegularProps + numExturaProps;
  175. int numRegularProps = nodeProtobuf.property_size();
  176. for(int i = 0; i < numRegularProps; i++) {
  177. // bool isExtraProp = (i >= numRegularProps);
  178. // REDReader::PropertyType type = (REDReader::PropertyType)ccbReader->readInt(false);
  179. // std::string propertyName = ccbReader->readCachedString();
  180. auto& propertyProtobuf = nodeProtobuf.property(i);
  181. REDReader::PropertyType type = (REDReader::PropertyType)propertyProtobuf.type();
  182. std::string propertyName = ccbReader->readCachedString(propertyProtobuf.name());
  183. bool setProp = true;
  184. handleProperties(pNode, pParent, ccbReader, propertyName, type, propertyProtobuf.value(), setProp, reboltName, reboltId);
  185. }
  186. int numExturaProps = nodeProtobuf.customproperty_size();
  187. for (int i = 0; i < numExturaProps; i++) {
  188. auto& propertyProtobuf = nodeProtobuf.customproperty(i);
  189. REDReader::PropertyType type = (REDReader::PropertyType)propertyProtobuf.type();
  190. std::string propertyName = ccbReader->readCachedString(propertyProtobuf.name());
  191. bool setProp = true;
  192. // Forward properties for sub ccb files
  193. if (dynamic_cast<REDFile*>(pNode) != nullptr)
  194. {
  195. REDFile *ccbNode = (REDFile*)pNode;
  196. if (ccbNode->getREDFileNode())
  197. {
  198. pNode = ccbNode->getREDFileNode();
  199. // Skip properties that doesn't have a value to override
  200. __Array *extraPropsNames = (__Array*)pNode->getUserObject();
  201. Ref* pObj = nullptr;
  202. bool bFound = false;
  203. CCARRAY_FOREACH(extraPropsNames, pObj)
  204. {
  205. __String* pStr = static_cast<__String*>(pObj);
  206. if (0 == pStr->compare(propertyName.c_str()))
  207. {
  208. bFound = true;
  209. break;
  210. }
  211. }
  212. setProp &= bFound;
  213. }
  214. }
  215. else if (pNode == ccbReader->getAnimationManager()->getRootNode())
  216. {
  217. __Array *extraPropsNames = static_cast<__Array*>(pNode->getUserObject());
  218. if (! extraPropsNames)
  219. {
  220. extraPropsNames = __Array::create();
  221. pNode->setUserObject(extraPropsNames);
  222. }
  223. extraPropsNames->addObject(__String::create(propertyName));
  224. }
  225. handleProperties(pNode, pParent, ccbReader, propertyName, type, propertyProtobuf.value(), setProp, reboltName, reboltId);
  226. }
  227. }
  228. void NodeLoader::handleProperties(Node * pNode, Node * pParent, REDReader * ccbReader, const string& propertyName, REDReader::PropertyType type, const RedreamInfo::Value& valueProtobuf, bool setProp, std::string &reboltName, std::string &reboltId){
  229. switch(type)
  230. {
  231. case REDReader::PropertyType::POSITION:
  232. {
  233. Vec2 position = this->parsePropTypePosition(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  234. if (setProp)
  235. {
  236. this->onHandlePropTypePosition(pNode, pParent, propertyName.c_str(), position, ccbReader);
  237. }
  238. break;
  239. }
  240. case REDReader::PropertyType::POINT:
  241. {
  242. Vec2 point = this->parsePropTypePoint(pNode, pParent, ccbReader, valueProtobuf);
  243. if (setProp)
  244. {
  245. this->onHandlePropTypePoint(pNode, pParent, propertyName.c_str(), point, ccbReader);
  246. }
  247. break;
  248. }
  249. case REDReader::PropertyType::POINT_LOCK:
  250. {
  251. Vec2 pointLock = this->parsePropTypePointLock(pNode, pParent, ccbReader, valueProtobuf);
  252. if (setProp)
  253. {
  254. this->onHandlePropTypePointLock(pNode, pParent, propertyName.c_str(), pointLock, ccbReader);
  255. }
  256. break;
  257. }
  258. case REDReader::PropertyType::SIZE:
  259. {
  260. Size size = this->parsePropTypeSize(pNode, pParent, ccbReader, valueProtobuf);
  261. if(setProp) {
  262. this->onHandlePropTypeSize(pNode, pParent, propertyName.c_str(), size, ccbReader);
  263. }
  264. break;
  265. }
  266. case REDReader::PropertyType::SCALE_LOCK:
  267. {
  268. float * scaleLock = this->parsePropTypeScaleLock(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  269. if(setProp)
  270. {
  271. this->onHandlePropTypeScaleLock(pNode, pParent, propertyName.c_str(), scaleLock, ccbReader);
  272. }
  273. CC_SAFE_DELETE_ARRAY(scaleLock);
  274. break;
  275. }
  276. case REDReader::PropertyType::FLOAT:
  277. {
  278. float f = this->parsePropTypeFloat(pNode, pParent, ccbReader,valueProtobuf);
  279. if(setProp)
  280. {
  281. this->onHandlePropTypeFloat(pNode, pParent, propertyName.c_str(), f, ccbReader);
  282. }
  283. break;
  284. }
  285. case REDReader::PropertyType::FLOAT_XY:
  286. {
  287. float * xy = this->parsePropTypeFloatXY(pNode, pParent, ccbReader,valueProtobuf);
  288. if(setProp)
  289. {
  290. this->onHandlePropTypeFloatXY(pNode, pParent, propertyName.c_str(), xy, ccbReader);
  291. }
  292. CC_SAFE_DELETE_ARRAY(xy);
  293. break;
  294. }
  295. case REDReader::PropertyType::DEGREES:
  296. {
  297. float degrees = this->parsePropTypeDegrees(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  298. if(setProp)
  299. {
  300. this->onHandlePropTypeDegrees(pNode, pParent, propertyName.c_str(), degrees, ccbReader);
  301. }
  302. break;
  303. }
  304. case REDReader::PropertyType::FLOAT_SCALE:
  305. {
  306. float floatScale = this->parsePropTypeFloatScale(pNode, pParent, ccbReader, valueProtobuf);
  307. if(setProp)
  308. {
  309. this->onHandlePropTypeFloatScale(pNode, pParent, propertyName.c_str(), floatScale, ccbReader);
  310. }
  311. break;
  312. }
  313. case REDReader::PropertyType::INTEGER:
  314. {
  315. int integer = this->parsePropTypeInteger(pNode, pParent, ccbReader, valueProtobuf);
  316. if(setProp)
  317. {
  318. this->onHandlePropTypeInteger(pNode, pParent, propertyName.c_str(), integer, ccbReader);
  319. }
  320. break;
  321. }
  322. case REDReader::PropertyType::INTEGER_LABELED:
  323. {
  324. int integerLabeled = this->parsePropTypeIntegerLabeled(pNode, pParent, ccbReader, valueProtobuf);
  325. if(setProp)
  326. {
  327. this->onHandlePropTypeIntegerLabeled(pNode, pParent, propertyName.c_str(), integerLabeled, ccbReader);
  328. }
  329. break;
  330. }
  331. case REDReader::PropertyType::FLOAT_VAR:
  332. {
  333. float * floatVar = this->parsePropTypeFloatVar(pNode, pParent, ccbReader, valueProtobuf);
  334. if(setProp)
  335. {
  336. this->onHandlePropTypeFloatVar(pNode, pParent, propertyName.c_str(), floatVar, ccbReader);
  337. }
  338. CC_SAFE_DELETE_ARRAY(floatVar);
  339. break;
  340. }
  341. case REDReader::PropertyType::CHECK:
  342. {
  343. bool check = this->parsePropTypeCheck(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  344. if(setProp)
  345. {
  346. this->onHandlePropTypeCheck(pNode, pParent, propertyName.c_str(), check, ccbReader);
  347. }
  348. break;
  349. }
  350. case REDReader::PropertyType::SPRITEFRAME:
  351. {
  352. SpriteFrame * ccSpriteFrame = this->parsePropTypeSpriteFrame(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  353. if(setProp)
  354. {
  355. this->onHandlePropTypeSpriteFrame(pNode, pParent, propertyName.c_str(), ccSpriteFrame, ccbReader);
  356. }
  357. break;
  358. }
  359. case REDReader::PropertyType::ANIMATION:
  360. {
  361. int integer = this->parsePropTypeInteger(pNode, pParent, ccbReader, valueProtobuf);
  362. if(setProp)
  363. {
  364. this->onHandlePropTypeInteger(pNode, pParent, propertyName.c_str(), integer, ccbReader);
  365. }
  366. break;
  367. }
  368. case REDReader::PropertyType::TEXTURE:
  369. {
  370. //modify by djd 粒子支持plist大纹理,优先走大纹理找不到就走小图.
  371. SpriteFrame * ccSpriteFrame = this->parsePropTypeTexture2(pNode, pParent, ccbReader, valueProtobuf);
  372. if (ccSpriteFrame) {
  373. if(setProp)
  374. {
  375. this->onHandlePropTypeSpriteFrame(pNode, pParent, propertyName.c_str(), ccSpriteFrame, ccbReader);
  376. }
  377. }else{
  378. Texture2D * ccTexture2D = this->parsePropTypeTexture(pNode, pParent, ccbReader, valueProtobuf);
  379. if(setProp)
  380. {
  381. this->onHandlePropTypeTexture(pNode, pParent, propertyName.c_str(), ccTexture2D, ccbReader);
  382. }
  383. }
  384. break;
  385. }
  386. case REDReader::PropertyType::BYTE:
  387. {
  388. unsigned char byte = this->parsePropTypeByte(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  389. if(setProp)
  390. {
  391. this->onHandlePropTypeByte(pNode, pParent, propertyName.c_str(), byte, ccbReader);
  392. }
  393. break;
  394. }
  395. case REDReader::PropertyType::COLOR3:
  396. {
  397. Color3B color3B = this->parsePropTypeColor3(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  398. if(setProp)
  399. {
  400. this->onHandlePropTypeColor3(pNode, pParent, propertyName.c_str(), color3B, ccbReader);
  401. }
  402. break;
  403. }
  404. case REDReader::PropertyType::COLOR4F_VAR:
  405. {
  406. Color4F * color4FVar = this->parsePropTypeColor4FVar(pNode, pParent, ccbReader, valueProtobuf);
  407. if(setProp)
  408. {
  409. this->onHandlePropTypeColor4FVar(pNode, pParent, propertyName.c_str(), color4FVar, ccbReader);
  410. }
  411. CC_SAFE_DELETE_ARRAY(color4FVar);
  412. break;
  413. }
  414. case REDReader::PropertyType::FLIP:
  415. {
  416. bool * flip = this->parsePropTypeFlip(pNode, pParent, ccbReader, valueProtobuf);
  417. if(setProp) {
  418. this->onHandlePropTypeFlip(pNode, pParent, propertyName.c_str(), flip, ccbReader);
  419. }
  420. CC_SAFE_DELETE_ARRAY(flip);
  421. break;
  422. }
  423. case REDReader::PropertyType::BLEND_MODE:
  424. {
  425. BlendFunc blendFunc = this->parsePropTypeBlendFunc(pNode, pParent, ccbReader, valueProtobuf);
  426. if(setProp)
  427. {
  428. this->onHandlePropTypeBlendFunc(pNode, pParent, propertyName.c_str(), blendFunc, ccbReader);
  429. }
  430. break;
  431. }
  432. case REDReader::PropertyType::FNT_FILE:
  433. {
  434. std::string fntFile = ccbReader->getREDRootPath() + this->parsePropTypeFntFile(pNode, pParent, ccbReader, valueProtobuf);
  435. if(setProp)
  436. {
  437. this->onHandlePropTypeFntFile(pNode, pParent, propertyName.c_str(), fntFile.c_str(), ccbReader);
  438. }
  439. break;
  440. }
  441. case REDReader::PropertyType::FONT_TTF:
  442. {
  443. std::string fontTTF = this->parsePropTypeFontTTF(pNode, pParent, ccbReader, valueProtobuf);
  444. if(setProp) {
  445. this->onHandlePropTypeFontTTF(pNode, pParent, propertyName.c_str(), fontTTF.c_str(), ccbReader);
  446. }
  447. break;
  448. }
  449. case REDReader::PropertyType::STRING:
  450. {
  451. std::string string = this->parsePropTypeString(pNode, pParent, ccbReader, valueProtobuf);
  452. if(setProp) {
  453. this->onHandlePropTypeString(pNode, pParent, propertyName.c_str(), string.c_str(), ccbReader);
  454. }
  455. break;
  456. }
  457. case REDReader::PropertyType::TEXT:
  458. {
  459. std::string text = this->parsePropTypeText(pNode, pParent, propertyName.c_str(), ccbReader, valueProtobuf);
  460. if(setProp) {
  461. this->onHandlePropTypeText(pNode, pParent, propertyName.c_str(), text.c_str(), ccbReader);
  462. }
  463. break;
  464. }
  465. case REDReader::PropertyType::BLOCK:
  466. {
  467. BlockData * blockData = this->parsePropTypeBlock(pNode, pParent, ccbReader, valueProtobuf);
  468. if(setProp) {
  469. this->onHandlePropTypeBlock(pNode, pParent, propertyName.c_str(), blockData, ccbReader);
  470. }
  471. CC_SAFE_DELETE(blockData);
  472. break;
  473. }
  474. case REDReader::PropertyType::BLOCK_CONTROL:
  475. {
  476. BlockControlData * blockControlData = this->parsePropTypeBlockControl(pNode, pParent, ccbReader, valueProtobuf);
  477. if(setProp && blockControlData != nullptr) {
  478. this->onHandlePropTypeBlockControl(pNode, pParent, propertyName.c_str(), blockControlData, ccbReader);
  479. }
  480. CC_SAFE_DELETE(blockControlData);
  481. break;
  482. }
  483. case REDReader::PropertyType::RED_FILE:
  484. {
  485. Node * ccbFileNode = this->parsePropTypeREDFile(pNode, pParent, ccbReader, valueProtobuf, reboltName, reboltId);
  486. if(setProp) {
  487. this->onHandlePropTypeREDFile(pNode, pParent, propertyName.c_str(), ccbFileNode, ccbReader);
  488. }
  489. break;
  490. }
  491. case REDReader::PropertyType::SPINE_SKEL:
  492. {
  493. std::string skelFile = this->parsePropTypeSpineSkel(pNode, pParent, ccbReader, valueProtobuf);
  494. if(setProp) {
  495. this->onHandlePropTypeSpineSkel(pNode, pParent, propertyName.c_str(), skelFile.c_str(), ccbReader);
  496. }
  497. break;
  498. }
  499. case REDReader::PropertyType::SPINE_ATLAS:
  500. {
  501. std::string atlasFile = this->parsePropTypeSpineAtlas(pNode, pParent, ccbReader, valueProtobuf);
  502. if(setProp) {
  503. this->onHandlePropTypeSpineAtlas(pNode, pParent, propertyName.c_str(), atlasFile.c_str(), ccbReader);
  504. }
  505. break;
  506. }
  507. case REDReader::PropertyType::SPINE_SKELFRAME:
  508. {
  509. spine::SkeletonFrame frame = this->parsePropTypeSkelFrame(pNode, pParent, ccbReader,propertyName.c_str(), valueProtobuf);
  510. if(setProp) {
  511. this->onHandlePropTypeSkelFrame(pNode, pParent, propertyName.c_str(), frame, ccbReader);
  512. }
  513. break;
  514. }
  515. case REDReader::PropertyType::FRAME_SET:
  516. {
  517. vector<FramePath> frameSet = this->parsePropTypeFrameSet(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  518. if (setProp) {
  519. this->onHandlePropTypeFrameSet(pNode, pParent, propertyName.c_str(), frameSet, ccbReader);
  520. }
  521. break;
  522. }
  523. case REDReader::PropertyType::PERCENT:
  524. {
  525. int value = this->parsePropTypePercent(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  526. if (setProp) {
  527. this->onHandlePropTypePercent(pNode, pParent, propertyName.c_str(), value, ccbReader);
  528. }
  529. break;
  530. }
  531. case REDReader::PropertyType::COLOR4:
  532. {
  533. Color4B color4 = this->parsePropTypeColor4(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  534. if (setProp) {
  535. this->onHandlePropTypeColor4(pNode, pParent, propertyName.c_str(), color4, ccbReader);
  536. }
  537. break;
  538. }
  539. case REDReader::PropertyType::CALLBACKS:
  540. {
  541. CallbacksData * callbacksData = this->parsePropTypeCallbacks(pNode, pParent, ccbReader, valueProtobuf);
  542. if (setProp) {
  543. this->onHandlePropTypeCallbacks(pNode, pParent, propertyName.c_str(), callbacksData, ccbReader);
  544. }
  545. CC_SAFE_DELETE(callbacksData);
  546. break;
  547. }
  548. case REDReader::PropertyType::LOCALIZATION:
  549. {
  550. LocalizationModel model = this->parsePropTypeLocalization(pNode, pParent, ccbReader,propertyName.c_str(), valueProtobuf);
  551. if(setProp) {
  552. this->onHandlePropTypeLocalization(pNode, pParent, propertyName.c_str(), model, ccbReader);
  553. }
  554. break;
  555. }
  556. case REDReader::PropertyType::TABLE_VIEW_RED_FILE:
  557. {
  558. // 默认为3个
  559. vector<Node*> nodes;
  560. for (int i = 0; i < 3; i++) {
  561. Node * ccbFileNode = this->parsePropTypeREDFile(pNode, pParent, ccbReader, valueProtobuf, reboltName, reboltId);
  562. nodes.push_back(ccbFileNode);
  563. }
  564. if(setProp) {
  565. this->onHandlePropTypeTableviewRedFile(pNode, pParent, propertyName.c_str(), nodes, ccbReader);
  566. }
  567. break;
  568. }
  569. case REDReader::PropertyType::PB_VERTS_FILE:
  570. {
  571. std::string filePath = ccbReader->readCachedString(valueProtobuf.intvalue());
  572. if (setProp) {
  573. this->onHandlePropTypePbVertsFile(pNode, pParent, propertyName.c_str(), filePath, ccbReader);
  574. }
  575. break;
  576. }
  577. case REDReader::PropertyType::SeparatorCheck:
  578. {
  579. bool value = this->parsePropTypeSeparatorCheck(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  580. if(setProp)
  581. {
  582. this->onHandlePropTypeSeparatorCheck(pNode, pParent, propertyName.c_str(), value, ccbReader);
  583. }
  584. break;
  585. }
  586. case REDReader::PropertyType::MinMaxGradientData:
  587. {
  588. auto value = this->parsePropTypeMinMaxGradientData(pNode, pParent, ccbReader,propertyName.c_str(), valueProtobuf);
  589. if(setProp) {
  590. this->onHandlePropTypeMinMaxGradientData(pNode, pParent, propertyName.c_str(), value, ccbReader);
  591. }
  592. break;
  593. }
  594. case REDReader::PropertyType::MinMaxCurveData:
  595. {
  596. auto value = this->parsePropTypeMinMaxCurveData(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  597. if(setProp) {
  598. this->onHandlePropTypeMinMaxCurveData(pNode, pParent, propertyName.c_str(), value, ccbReader);
  599. }
  600. break;
  601. }
  602. case REDReader::PropertyType::EmissionData:
  603. {
  604. auto value = this->parsePropTypeEmissionData(pNode, pParent, ccbReader, propertyName.c_str(), valueProtobuf);
  605. if(setProp) {
  606. this->onHandlePropTypeEmissionData(pNode, pParent, propertyName.c_str(), value, ccbReader);
  607. }
  608. break;
  609. }
  610. case REDReader::PropertyType::FloatXYZ:
  611. {
  612. auto value = this->parsePropTypeFloatXYZ(pNode, pParent, ccbReader, valueProtobuf);
  613. if(setProp) {
  614. this->onHandlePropTypeFloatXYZ(pNode, pParent, propertyName.c_str(), value, ccbReader);
  615. }
  616. break;
  617. }
  618. case REDReader::PropertyType::MaterialFile:
  619. {
  620. auto value = this->parsePropTypeMaterialFile(pNode, pParent, ccbReader, valueProtobuf);
  621. if(setProp) {
  622. this->onHandlePropTypeMaterialFile(pNode, pParent, propertyName.c_str(), value.c_str(), ccbReader);
  623. }
  624. break;
  625. }
  626. case REDReader::PropertyType::MATERIAL_BALL:
  627. {
  628. auto value = this->parsePropTypeMaterialBall(pNode, pParent, ccbReader, valueProtobuf);
  629. if (setProp) {
  630. this->onHandlePropTypeMaterialBall(pNode, pParent, propertyName.c_str(), value.materialPath.c_str(), value.params, ccbReader);
  631. }
  632. break;
  633. }
  634. case REDReader::PropertyType::BAKE_DATA_FILE:
  635. {
  636. std::string dateFile = ccbReader->readCachedString(valueProtobuf.intvalue());
  637. if (setProp) {
  638. this->onHandlePropTypeBakeDataFile(pNode, pParent, propertyName.c_str(), dateFile.c_str(), ccbReader);
  639. }
  640. break;
  641. }
  642. case REDReader::PropertyType::BAKE_ANIMATION:
  643. {
  644. auto bakeAnimation = this->parsePropTypeBakeAnimation(pNode, pParent, ccbReader, valueProtobuf);
  645. if (setProp) {
  646. this->onHandlePropTypeBakeAnimation(pNode, pParent, propertyName.c_str(), bakeAnimation.animationName.c_str(), bakeAnimation.elapsedTime, bakeAnimation.loop, ccbReader);
  647. }
  648. break;
  649. }
  650. case REDReader::PropertyType::POLYGON_FILE:
  651. {
  652. std::string filePath = ccbReader->readCachedString(valueProtobuf.intvalue());
  653. if (setProp) {
  654. this->onHandlePropTypePolygonFile(pNode, pParent, propertyName.c_str(), filePath, ccbReader);
  655. }
  656. break;
  657. }
  658. case REDReader::PropertyType::WISE:
  659. {
  660. WiseEventData wiseEventData = this->parsePropTypeWise(pNode, pParent, ccbReader, valueProtobuf);
  661. if (setProp) {
  662. this->onHandlePropTypeWise(pNode, pParent, propertyName.c_str(), wiseEventData, ccbReader);
  663. }
  664. break;
  665. }
  666. default:
  667. {
  668. string redFileName = ccbReader->getAnimationManager()->getREDFileName();
  669. string err = StringUtils::format("文件【%s】reboltName【%s】无法解析的属性类型【%d】",redFileName.c_str(), reboltName.c_str(), (int)type);
  670. throw err;
  671. ASSERT_FAIL_UNEXPECTED_PROPERTYTYPE(static_cast<int>(type));
  672. break;
  673. }
  674. }
  675. }
  676. Vec2 NodeLoader::parsePropTypePosition(Node * pNode, Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  677. {
  678. auto& containerSize = ccbReader->getAnimationManager()->getContainerSize(pParent);
  679. auto& positionProtobuf = valueProtobuf.position();
  680. PositionDescription position;
  681. position.pos.x = positionProtobuf.x();
  682. position.pos.y = positionProtobuf.y();
  683. position.referenceCorner = static_cast<PositionReferenceCorner>(positionProtobuf.referencecorner());
  684. position.xUnits = static_cast<PositionUnit>(positionProtobuf.xunits());
  685. position.yUnits = static_cast<PositionUnit>(positionProtobuf.yunits());
  686. Vec2 pos = getAbsolutePosition(1.0f, 1.0f, position.pos, position.referenceCorner, position.xUnits, position.yUnits, containerSize);
  687. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  688. {
  689. ValueVector vec;
  690. vec.push_back(Value(position.pos.x));
  691. vec.push_back(Value(position.pos.y));
  692. vec.push_back(Value((int)position.referenceCorner));
  693. vec.push_back(Value((int)position.xUnits));
  694. vec.push_back(Value((int)position.yUnits));
  695. ccbReader->getAnimationManager()->setBaseValue(Value(vec), pNode, pPropertyName);
  696. }
  697. return pos;
  698. }
  699. Vec2 NodeLoader::parsePropTypePoint(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  700. {
  701. // float x = ccbReader->readFloat();
  702. // float y = ccbReader->readFloat();
  703. auto& vec2 = valueProtobuf.vec2();
  704. float x = vec2.x();
  705. float y = vec2.y();
  706. return Vec2(x, y);
  707. }
  708. Vec2 NodeLoader::parsePropTypePointLock(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  709. // float x = ccbReader->readFloat();
  710. // float y = ccbReader->readFloat();
  711. auto& vec2 = valueProtobuf.vec2();
  712. float x = vec2.x();
  713. float y = vec2.y();
  714. return Vec2(x, y);
  715. }
  716. //SizeDescription parsePropTypeSizeInner(REDReader * ccbReader)
  717. //{
  718. // SizeDescription ret;
  719. // ret.size.width = ccbReader->readFloat();
  720. // ret.size.height = ccbReader->readFloat();
  721. // ret.widthUnits = static_cast<SizeUnit>(ccbReader->readInt(false));
  722. // ret.heightUnits = static_cast<SizeUnit>(ccbReader->readInt(false));
  723. //
  724. // return ret;
  725. //}
  726. Size NodeLoader::parsePropTypeSize(Node * /*pNode*/, Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  727. auto& containerSize = ccbReader->getAnimationManager()->getContainerSize(pParent);
  728. auto& sizeProtobuf = valueProtobuf.size();
  729. SizeDescription size;
  730. size.size.width = sizeProtobuf.width();
  731. size.size.height = sizeProtobuf.height();
  732. size.widthUnits = static_cast<SizeUnit>(sizeProtobuf.widthunits());
  733. size.heightUnits = static_cast<SizeUnit>(sizeProtobuf.heightunits());
  734. Size sizeAb = getAbsoluteSize(1.0f, 1.0f, size.size, size.widthUnits, size.heightUnits, containerSize);
  735. return sizeAb;// Size(width, height);
  736. }
  737. float * NodeLoader::parsePropTypeFloatXY(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  738. // float x = ccbReader->readFloat();
  739. // float y = ccbReader->readFloat();
  740. auto& vec2 = valueProtobuf.vec2();
  741. float x = vec2.x();
  742. float y = vec2.y();
  743. float * floatXY = new (std::nothrow) float[2];
  744. floatXY[0] = x;
  745. floatXY[1] = y;
  746. return floatXY;
  747. }
  748. float * NodeLoader::parsePropTypeScaleLock(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  749. // float x = ccbReader->readFloat();
  750. // float y = ccbReader->readFloat();
  751. auto& vec2 = valueProtobuf.vec2();
  752. float x = vec2.x();
  753. float y = vec2.y();
  754. REDReader::ScaleType type = REDReader::ScaleType::ABSOLUTE;
  755. setRelativeScale(pNode, x, y, type, pPropertyName);
  756. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  757. {
  758. ValueVector baseValue;
  759. baseValue.push_back(Value(x));
  760. baseValue.push_back(Value(y));
  761. baseValue.push_back(Value((int)type));
  762. ccbReader->getAnimationManager()->setBaseValue(Value(baseValue), pNode, pPropertyName);
  763. }
  764. // if (type == REDReader::ScaleType::MULTIPLY_RESOLUTION)
  765. // {
  766. // x *= ccbReader->getResolutionScale();
  767. // y *= ccbReader->getResolutionScale();
  768. // }
  769. float * scaleLock = new (std::nothrow) float[2];
  770. scaleLock[0] = x;
  771. scaleLock[1] = y;
  772. return scaleLock;
  773. }
  774. float NodeLoader::parsePropTypeFloat(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  775. // return ccbReader->readFloat();
  776. return valueProtobuf.floatvalue();
  777. }
  778. float NodeLoader::parsePropTypeDegrees(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  779. // float ret = ccbReader->readFloat();
  780. float ret = valueProtobuf.floatvalue();
  781. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  782. {
  783. ccbReader->getAnimationManager()->setBaseValue(Value(ret), pNode, pPropertyName);
  784. }
  785. return ret;
  786. }
  787. float NodeLoader::parsePropTypeFloatScale(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  788. {
  789. // float f = ccbReader->readFloat();
  790. float f = valueProtobuf.floatvalue();
  791. // REDReader::ScaleType type = static_cast<REDReader::ScaleType>(ccbReader->readInt(false));
  792. // if(type == REDReader::ScaleType::MULTIPLY_RESOLUTION)
  793. // {
  794. // f *= ccbReader->getResolutionScale();
  795. // }
  796. return f;
  797. }
  798. int NodeLoader::parsePropTypeInteger(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  799. {
  800. // return ccbReader->readInt(true);
  801. return valueProtobuf.intvalue();
  802. }
  803. int NodeLoader::parsePropTypeIntegerLabeled(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  804. {
  805. // return ccbReader->readInt(true);
  806. return valueProtobuf.intvalue();
  807. }
  808. float * NodeLoader::parsePropTypeFloatVar(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  809. {
  810. // float f = ccbReader->readFloat();
  811. // float fVar = ccbReader->readFloat();
  812. auto& vec2 = valueProtobuf.vec2();
  813. float f = vec2.x();
  814. float fVar = vec2.y();
  815. float * arr = new (std::nothrow) float[2];
  816. arr[0] = f;
  817. arr[1] = fVar;
  818. return arr;
  819. }
  820. bool NodeLoader::parsePropTypeCheck(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  821. {
  822. // bool ret = ccbReader->readBool();
  823. bool ret = valueProtobuf.boolvalue();
  824. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  825. {
  826. ccbReader->getAnimationManager()->setBaseValue(Value(ret), pNode, pPropertyName);
  827. }
  828. return ret;
  829. }
  830. SpriteFrame * NodeLoader::parsePropTypeSpriteFrame(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  831. {
  832. // std::string spriteSheet = ccbReader->readCachedString();
  833. // std::string spriteFile = ccbReader->readCachedString();
  834. auto& spriteFrameProtobuf = valueProtobuf.spriteframe();
  835. std::string spriteSheet = ccbReader->readCachedString(spriteFrameProtobuf.spritesheet());
  836. std::string spriteFile = ccbReader->readCachedString(spriteFrameProtobuf.spritefile());
  837. SpriteFrame *spriteFrame = nullptr;
  838. if (!spriteFile.empty())
  839. {
  840. spriteFrame = ccbReader->getSpriteFrameByName(spriteFile, spriteSheet,true);
  841. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  842. {
  843. ccbReader->getAnimationManager()->setObject(spriteFrame, pNode, pPropertyName);
  844. ccbReader->getAnimationManager()->addSpriteFrameForNode(pNode, pPropertyName,spriteFile,spriteSheet);
  845. }
  846. }
  847. return spriteFrame;
  848. }
  849. Texture2D * NodeLoader::parsePropTypeTexture(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  850. // std::string spriteFile = ccbReader->getREDRootPath() + ccbReader->readCachedString();
  851. std::string spriteFile = ccbReader->getREDRootPath() + ccbReader->readCachedString(valueProtobuf.intvalue());
  852. if (!spriteFile.empty())
  853. {
  854. return Director::getInstance()->getTextureCache()->addImage(spriteFile);
  855. }
  856. else
  857. {
  858. return nullptr;
  859. }
  860. }
  861. SpriteFrame * NodeLoader::parsePropTypeTexture2(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  862. // std::string spriteFile = ccbReader->readCachedString();
  863. std::string spriteFile = ccbReader->readCachedString(valueProtobuf.intvalue());
  864. SpriteFrame *spriteFrame = nullptr;
  865. if (!spriteFile.empty())
  866. {
  867. spriteFrame = ccbReader->getSpriteFrameByName(spriteFile, "",true);
  868. }
  869. return spriteFrame;
  870. }
  871. unsigned char NodeLoader::parsePropTypeByte(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  872. {
  873. // unsigned char ret = ccbReader->readByte();
  874. unsigned char ret = valueProtobuf.intvalue();
  875. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  876. {
  877. ccbReader->getAnimationManager()->setBaseValue(Value(ret), pNode, pPropertyName);
  878. }
  879. return ret;
  880. }
  881. Color3B NodeLoader::parsePropTypeColor3(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  882. // unsigned char r = ccbReader->readByte();
  883. // unsigned char g = ccbReader->readByte();
  884. // unsigned char b = ccbReader->readByte();
  885. auto& color3 = valueProtobuf.color3();
  886. unsigned char r = color3.r();
  887. unsigned char g = color3.g();
  888. unsigned char b = color3.b();
  889. Color3B color(r, g, b);
  890. ValueMap colorMap;
  891. colorMap["r"] = r;
  892. colorMap["g"] = g;
  893. colorMap["b"] = b;
  894. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  895. {
  896. ccbReader->getAnimationManager()->setBaseValue(Value(colorMap), pNode, pPropertyName);
  897. }
  898. return color;
  899. }
  900. Color4F * NodeLoader::parsePropTypeColor4FVar(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  901. // float red = ccbReader->readFloat();
  902. // float green = ccbReader->readFloat();
  903. // float blue = ccbReader->readFloat();
  904. // float alpha = ccbReader->readFloat();
  905. // float redVar = ccbReader->readFloat();
  906. // float greenVar = ccbReader->readFloat();
  907. // float blueVar = ccbReader->readFloat();
  908. // float alphaVar = ccbReader->readFloat();
  909. auto& color4var = valueProtobuf.color4fvar();
  910. float red = color4var.red();
  911. float green = color4var.green();
  912. float blue = color4var.blue();
  913. float alpha = color4var.alpha();
  914. float redVar = color4var.redvar();
  915. float greenVar = color4var.greenvar();
  916. float blueVar = color4var.bluevar();
  917. float alphaVar = color4var.alphavar();
  918. Color4F * colors = new (std::nothrow) Color4F[2];
  919. colors[0].r = red;
  920. colors[0].g = green;
  921. colors[0].b = blue;
  922. colors[0].a = alpha;
  923. colors[1].r = redVar;
  924. colors[1].g = greenVar;
  925. colors[1].b = blueVar;
  926. colors[1].a = alphaVar;
  927. return colors;
  928. }
  929. bool * NodeLoader::parsePropTypeFlip(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  930. // bool flipX = ccbReader->readBool();
  931. // bool flipY = ccbReader->readBool();
  932. auto& flipProtobuf = valueProtobuf.flip();
  933. bool flipX = flipProtobuf.flipx();
  934. bool flipY = flipProtobuf.flipy();
  935. bool * arr = new (std::nothrow) bool[2];
  936. arr[0] = flipX;
  937. arr[1] = flipY;
  938. return arr;
  939. }
  940. BlendFunc NodeLoader::parsePropTypeBlendFunc(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  941. {
  942. // int source = ccbReader->readInt(false);
  943. // int destination = ccbReader->readInt(false);
  944. auto& blendmodeProtobuf = valueProtobuf.mode();
  945. int source = blendmodeProtobuf.source();
  946. int destination = blendmodeProtobuf.destination();
  947. BlendFunc blendFunc;
  948. blendFunc.src = source;
  949. blendFunc.dst = destination;
  950. return blendFunc;
  951. }
  952. std::string NodeLoader::parsePropTypeFntFile(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  953. {
  954. // return ccbReader->readCachedString();
  955. return ccbReader->readCachedString(valueProtobuf.intvalue());
  956. }
  957. std::string NodeLoader::parsePropTypeString(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  958. // return ccbReader->readCachedString();
  959. return ccbReader->readCachedString(valueProtobuf.intvalue());
  960. }
  961. std::string NodeLoader::parsePropTypeText(Node *pNode, Node * /*pParent*/, const char *pPropertyName, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  962. // return ccbReader->readCachedString();
  963. std::string ret = ccbReader->readCachedString(valueProtobuf.intvalue());
  964. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  965. {
  966. ccbReader->getAnimationManager()->setBaseValue(Value(ret), pNode, pPropertyName);
  967. }
  968. return ret;
  969. }
  970. std::string NodeLoader::parsePropTypeFontTTF(Node * /*pNode*/, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  971. // std::string fontTTF = ccbReader->readCachedString();
  972. std::string fontTTF = ccbReader->readCachedString(valueProtobuf.intvalue());
  973. // String * ttfEnding = String::create(".ttf");
  974. // TODO: Fix me if it is wrong
  975. /* If the fontTTF comes with the ".ttf" extension, prepend the absolute path.
  976. * System fonts come without the ".ttf" extension and do not need the path prepended. */
  977. /*
  978. if(REDReader::endsWith(REDReader::toLowerCase(fontTTF), ttfEnding)){
  979. fontTTF = REDReader::concat(ccbReader->getREDRootPath(), fontTTF);
  980. }
  981. */
  982. return fontTTF;
  983. }
  984. BlockData * NodeLoader::parsePropTypeBlock(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  985. {
  986. // std::string selectorName = ccbReader->readCachedString();
  987. // REDReader::TargetType selectorTarget = static_cast<REDReader::TargetType>(ccbReader->readInt(false));
  988. auto& blockProtobuf = valueProtobuf.block();
  989. std::string selectorName = ccbReader->readCachedString(blockProtobuf.selectorname());
  990. REDReader::TargetType selectorTarget = static_cast<REDReader::TargetType>(blockProtobuf.selectortarget());
  991. if(selectorTarget != REDReader::TargetType::NONE)
  992. {
  993. Ref* target = nullptr;
  994. if(!ccbReader->isJSControlled())
  995. {
  996. if(selectorTarget == REDReader::TargetType::DOCUMENT_ROOT)
  997. {
  998. target = ccbReader->getAnimationManager()->getRootNode();
  999. }
  1000. else if(selectorTarget == REDReader::TargetType::OWNER)
  1001. {
  1002. target = ccbReader->getOwner();
  1003. }
  1004. if(target != nullptr)
  1005. {
  1006. if(!selectorName.empty())
  1007. {
  1008. SEL_MenuHandler selMenuHandler = 0;
  1009. REDSelectorResolver * targetAsREDSelectorResolver = dynamic_cast<REDSelectorResolver *>(target);
  1010. if(targetAsREDSelectorResolver != nullptr)
  1011. {
  1012. selMenuHandler = targetAsREDSelectorResolver->onResolveREDCCMenuItemSelector(target, selectorName.c_str());
  1013. }
  1014. if(selMenuHandler == 0)
  1015. {
  1016. REDSelectorResolver * ccbSelectorResolver = ccbReader->getREDSelectorResolver();
  1017. if(ccbSelectorResolver != nullptr)
  1018. {
  1019. selMenuHandler = ccbSelectorResolver->onResolveREDCCMenuItemSelector(target, selectorName.c_str());
  1020. }
  1021. }
  1022. if(selMenuHandler == 0) {
  1023. CCLOG("Skipping selector '%s' since no REDSelectorResolver is present.", selectorName.c_str());
  1024. } else {
  1025. BlockData * blockData = new (std::nothrow) BlockData();
  1026. blockData->mSELMenuHandler = selMenuHandler;
  1027. blockData->_target = target;
  1028. return blockData;
  1029. }
  1030. } else {
  1031. CCLOG("Unexpected empty selector.");
  1032. }
  1033. } else {
  1034. CCLOG("Unexpected nullptr target for selector.");
  1035. }
  1036. }
  1037. else
  1038. {
  1039. if (selectorTarget == REDReader::TargetType::DOCUMENT_ROOT)
  1040. {
  1041. ccbReader->addDocumentCallbackNode(pNode);
  1042. ccbReader->addDocumentCallbackName(selectorName);
  1043. // Since there isn't a Control::EventType::NONE, add a TOUCH_DOWN type as a placeholder.
  1044. ccbReader->addDocumentCallbackControlEvents(Control::EventType::TOUCH_DOWN);
  1045. }
  1046. else if (selectorTarget == REDReader::TargetType::OWNER)
  1047. {
  1048. ccbReader->addOwnerCallbackNode(pNode);
  1049. ccbReader->addOwnerCallbackName(selectorName);
  1050. // Since there isn't a Control::EventType::NONE, add a TOUCH_DOWN type as a placeholder.
  1051. ccbReader->addOwnerCallbackControlEvents(Control::EventType::TOUCH_DOWN);
  1052. }
  1053. }
  1054. }
  1055. return nullptr;
  1056. }
  1057. BlockControlData * NodeLoader::parsePropTypeBlockControl(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1058. {
  1059. // std::string selectorName = ccbReader->readCachedString();
  1060. // REDReader::TargetType selectorTarget = static_cast<REDReader::TargetType>(ccbReader->readInt(false));
  1061. // int controlEvents = ccbReader->readInt(false);
  1062. auto& blockControlProtobuf = valueProtobuf.block_control();
  1063. std::string selectorName = ccbReader->readCachedString(blockControlProtobuf.selectorname());
  1064. REDReader::TargetType selectorTarget = static_cast<REDReader::TargetType>(blockControlProtobuf.selectortarget());
  1065. int controlEvents = blockControlProtobuf.controlevents();
  1066. if(selectorTarget != REDReader::TargetType::NONE)
  1067. {
  1068. Ref* target = nullptr;
  1069. if(selectorTarget == REDReader::TargetType::DOCUMENT_ROOT)
  1070. {
  1071. target = ccbReader->getAnimationManager()->getRootNode();
  1072. }
  1073. else if(selectorTarget == REDReader::TargetType::OWNER)
  1074. {
  1075. target = ccbReader->getOwner();
  1076. }
  1077. if(target != nullptr)
  1078. {
  1079. if(!selectorName.empty())
  1080. {
  1081. Control::Handler selControlHandler = 0;
  1082. REDSelectorResolver * targetAsREDSelectorResolver = dynamic_cast<REDSelectorResolver *>(target);
  1083. if(targetAsREDSelectorResolver != nullptr)
  1084. {
  1085. selControlHandler = targetAsREDSelectorResolver->onResolveREDCCControlSelector(target, selectorName.c_str());
  1086. }
  1087. if(selControlHandler == 0)
  1088. {
  1089. REDSelectorResolver * ccbSelectorResolver = ccbReader->getREDSelectorResolver();
  1090. if(ccbSelectorResolver != nullptr)
  1091. {
  1092. selControlHandler = ccbSelectorResolver->onResolveREDCCControlSelector(target, selectorName.c_str());
  1093. }
  1094. }
  1095. if(selControlHandler == 0)
  1096. {
  1097. CCLOG("Skipping selector '%s' since no REDSelectorResolver is present.", selectorName.c_str());
  1098. }
  1099. else
  1100. {
  1101. BlockControlData * blockControlData = new (std::nothrow) BlockControlData();
  1102. blockControlData->mSELControlHandler = selControlHandler;
  1103. blockControlData->_target = target;
  1104. blockControlData->mControlEvents = (Control::EventType)controlEvents;
  1105. return blockControlData;
  1106. }
  1107. } else {
  1108. CCLOG("Unexpected empty selector.");
  1109. }
  1110. } else {
  1111. CCLOG("Unexpected nullptr target for selector.");
  1112. }
  1113. }
  1114. return nullptr;
  1115. }
  1116. Node * NodeLoader::parsePropTypeREDFile(Node * /*pNode*/, Node * pParent, REDReader * pREDReader, const RedreamInfo::Value& valueProtobuf, std::string &reboltName, std::string &reboltId) {
  1117. // std::string ccbFileName = pREDReader->getREDRootPath() + pREDReader->readCachedString();
  1118. std::string ccbFileName = pREDReader->getREDRootPath() + pREDReader->readCachedString(valueProtobuf.intvalue());
  1119. /* Change path extension to .ccbi. */
  1120. std::string ccbFileWithoutPathExtension = REDReader::deletePathExtension(ccbFileName.c_str());
  1121. ccbFileName = ccbFileWithoutPathExtension + ".redream";
  1122. // Load sub file
  1123. std::string path = FileUtils::getInstance()->fullPathForFilename(ccbFileName);
  1124. //add by songqingyu
  1125. bool isBatchRedream = false;
  1126. //如果是batchredream则加载batchredream
  1127. if (path.empty()) {
  1128. ccbFileName = ccbFileWithoutPathExtension + ".batchredream";
  1129. path = FileUtils::getInstance()->fullPathForFilename(ccbFileName);
  1130. isBatchRedream = true;
  1131. }
  1132. auto dataPtr = std::make_shared<Data>(FileUtils::getInstance()->getDataFromFile(path));
  1133. REDReader * reader = new (std::nothrow) REDReader(pREDReader);
  1134. // reader->autorelease();
  1135. reader->getAnimationManager()->setRootContainerSize(pParent->getContentSize());
  1136. reader->_isBatchNode = isBatchRedream;
  1137. //add by djd
  1138. reader->getAnimationManager()->setREDFileName(ccbFileName);
  1139. reader->_data = dataPtr;
  1140. reader->_bytes = dataPtr->getBytes();
  1141. reader->_currentByte = 0;
  1142. reader->_currentBit = 0;
  1143. CC_SAFE_RETAIN(pREDReader->_owner);
  1144. reader->_owner = pREDReader->_owner;
  1145. reader->getAnimationManager()->_owner = reader->_owner;
  1146. // The assignments below are done in the REDReader constructor.
  1147. // reader->_ownerOutletNames = pREDReader->_ownerOutletNames;
  1148. // reader->_ownerOutletNodes = pREDReader->_ownerOutletNodes;
  1149. // reader->_ownerOutletNodes->retain();
  1150. // reader->_ownerCallbackNames = pREDReader->_ownerCallbackNames;
  1151. // reader->_ownerCallbackNodes = pREDReader->_ownerCallbackNodes;
  1152. // reader->_ownerCallbackNodes->retain();
  1153. Node * ccbFileNode = reader->readFileWithCleanUp(false, pREDReader->getAnimationManagers(), pREDReader->getReboltRedManagerMapPtr(), [pREDReader, reader, reboltId, pParent](){
  1154. // 开始处理rebolt相关的逻辑,设置路径
  1155. ReboltRedManager* selfReboltManger = reader->getReboltRedManager();
  1156. vector<RootReboltManger> selfRootReboltMangetVec;
  1157. selfRootReboltMangetVec.clear();
  1158. if(selfReboltManger != nullptr){
  1159. ReboltRedManager* pReboltManger = pREDReader->getReboltRedManager();
  1160. if(pReboltManger != nullptr){
  1161. vector<RootReboltManger> pRootReboltMangetVec = pReboltManger->getRootRedMangers();
  1162. // CCLOG("zml ------");
  1163. for(int i = 0 ; i < pRootReboltMangetVec.size(); i++){
  1164. RootReboltManger rrm = pRootReboltMangetVec[i];
  1165. RootReboltManger retRrm;
  1166. retRrm.rootRedManger = rrm.rootRedManger;
  1167. // CCLOG("zml--------- %s---%s", rrm.selfPath.c_str(), reboltId.c_str());
  1168. if(rrm.rootRedManger->getRootNode() == pREDReader->getAnimationManager()->getRootNode()){
  1169. retRrm.selfPath = reboltId;
  1170. // CCLOG("zml %s", retRrm.selfPath.c_str());
  1171. } else {
  1172. retRrm.selfPath = rrm.selfPath + "::" + reboltId;
  1173. // CCLOG("zml %s", retRrm.selfPath.c_str());
  1174. }
  1175. selfRootReboltMangetVec.push_back(retRrm);
  1176. rrm.rootRedManger->onAssignREDReboltRedManagerReboltPath(rrm.rootRedManger, retRrm.selfPath.c_str(), selfReboltManger);
  1177. }
  1178. }
  1179. selfReboltManger->setRootRedMangers(selfRootReboltMangetVec);
  1180. }
  1181. // 结束处理rebolt相关的逻辑,设置路径
  1182. });
  1183. if (ccbFileNode && reader->getAnimationManager()->getAutoPlaySequenceId() != -1)
  1184. {
  1185. // Auto play animations
  1186. reader->getAnimationManager()->runAnimationsForSequenceIdTweenDuration(reader->getAnimationManager()->getAutoPlaySequenceId(), 0);
  1187. }
  1188. reader->release();
  1189. return ccbFileNode;
  1190. }
  1191. std::string NodeLoader::parsePropTypeSpineSkel(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1192. {
  1193. // std::string file = ccbReader->readCachedString();
  1194. // return file;
  1195. return ccbReader->readCachedString(valueProtobuf.intvalue());
  1196. }
  1197. std::string NodeLoader::parsePropTypeSpineAtlas(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1198. {
  1199. // std::string file = ccbReader->readCachedString();
  1200. // return file;
  1201. return ccbReader->readCachedString(valueProtobuf.intvalue());
  1202. }
  1203. spine::SkeletonFrame NodeLoader::parsePropTypeSkelFrame(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1204. {
  1205. // std::string animation = ccbReader->readCachedString();
  1206. // float progress = ccbReader->readFloat();
  1207. // bool loop = ccbReader->readBool();
  1208. auto& skelFrameProtobuf = valueProtobuf.skelframe();
  1209. std::string animation = ccbReader->readCachedString(skelFrameProtobuf.animation());
  1210. float progress = skelFrameProtobuf.progress();
  1211. bool loop = skelFrameProtobuf.loop();
  1212. spine::SkeletonFrame frame;
  1213. frame.animation = animation;
  1214. frame.progress = progress;
  1215. frame.loop = loop;
  1216. ValueMap frameMap;
  1217. frameMap["animation"] = animation;
  1218. frameMap["progress"] = progress;
  1219. frameMap["loop"] = loop;
  1220. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  1221. {
  1222. ccbReader->getAnimationManager()->setBaseValue(Value(frameMap), pNode, pPropertyName);
  1223. }
  1224. return frame;
  1225. }
  1226. vector<FramePath> NodeLoader::parsePropTypeFrameSet(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  1227. vector<FramePath> frameSet;
  1228. auto& frameSetProtobuf = valueProtobuf.frameset();
  1229. for (int i = 0; i < frameSetProtobuf.frames_size(); ++i)
  1230. {
  1231. auto& frameProtobuf = frameSetProtobuf.frames(i);
  1232. std::string spriteSheet = ccbReader->readCachedString(frameProtobuf.spritesheet());
  1233. std::string spriteFile = ccbReader->readCachedString(frameProtobuf.spritefile());
  1234. FramePath framePath;
  1235. if (!spriteFile.empty())
  1236. {
  1237. if (CocosConfig::getIgnoreCCBPath())
  1238. {
  1239. framePath.path = spriteFile;
  1240. framePath.texType = FramePath::TextureResType::LOCAL;
  1241. }
  1242. else
  1243. {
  1244. if (spriteSheet.empty())
  1245. {
  1246. framePath.path = ccbReader->getREDRootPath() + spriteFile;
  1247. framePath.texType = FramePath::TextureResType::LOCAL;
  1248. }
  1249. else
  1250. {
  1251. SpriteFrameCache * frameCache = SpriteFrameCache::getInstance();
  1252. spriteSheet = ccbReader->getREDRootPath() + spriteSheet;
  1253. // Load the sprite sheet only if it is not loaded
  1254. if (ccbReader->getLoadedSpriteSheet().find(spriteSheet) == ccbReader->getLoadedSpriteSheet().end())
  1255. {
  1256. frameCache->addSpriteFramesWithFile(spriteSheet);
  1257. ccbReader->getLoadedSpriteSheet().insert(spriteSheet);
  1258. }
  1259. framePath.path = spriteFile;
  1260. framePath.texType = FramePath::TextureResType::PLIST;
  1261. }
  1262. }
  1263. }
  1264. else
  1265. {
  1266. framePath.path = "";
  1267. framePath.texType = FramePath::TextureResType::LOCAL;
  1268. }
  1269. frameSet.push_back(framePath);
  1270. }
  1271. return frameSet;
  1272. }
  1273. int NodeLoader::parsePropTypePercent(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  1274. return valueProtobuf.percent().value();
  1275. }
  1276. CallbacksData * NodeLoader::parsePropTypeCallbacks(Node * pNode, Node * /*pParent*/, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1277. {
  1278. auto& blockControlProtobuf = valueProtobuf.callbacks();
  1279. std::string selectorName = ccbReader->readCachedString(blockControlProtobuf.selectorname());
  1280. REDReader::TargetType selectorTarget = static_cast<REDReader::TargetType>(blockControlProtobuf.selectortarget());
  1281. if(selectorTarget != REDReader::TargetType::NONE)
  1282. {
  1283. if(!ccbReader->isJSControlled())
  1284. {
  1285. Ref* target = nullptr;
  1286. if(selectorTarget == REDReader::TargetType::DOCUMENT_ROOT)
  1287. {
  1288. target = ccbReader->getAnimationManager()->getRootNode();
  1289. }
  1290. else if(selectorTarget == REDReader::TargetType::OWNER)
  1291. {
  1292. target = ccbReader->getOwner();
  1293. }
  1294. if(target != nullptr)
  1295. {
  1296. if(!selectorName.empty())
  1297. {
  1298. CallbacksData * callbacksData = new (std::nothrow) CallbacksData();
  1299. callbacksData->selectorName = selectorName;
  1300. callbacksData->_target = target;
  1301. return callbacksData;
  1302. } else {
  1303. CCLOG("Unexpected empty selector.");
  1304. }
  1305. } else {
  1306. CCLOG("Unexpected nullptr target for selector.");
  1307. }
  1308. }
  1309. else
  1310. {
  1311. if(selectorTarget == REDReader::TargetType::DOCUMENT_ROOT)
  1312. {
  1313. ccbReader->addDocumentCallbackNode(pNode);
  1314. ccbReader->addDocumentCallbackName(selectorName);
  1315. }
  1316. else
  1317. {
  1318. ccbReader->addOwnerCallbackNode(pNode);
  1319. ccbReader->addOwnerCallbackName(selectorName);
  1320. }
  1321. }
  1322. }
  1323. return nullptr;
  1324. }
  1325. LocalizationModel NodeLoader::parsePropTypeLocalization(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf) {
  1326. LocalizationModel ret;
  1327. auto localization = valueProtobuf.localization();
  1328. ret.isLocalization = localization.islocalization();
  1329. ret.isCustom = localization.iscustom();
  1330. ret.customFilePath = localization.customfilepath();
  1331. ret.key = localization.key();
  1332. return ret;
  1333. }
  1334. static cocos2d::Color3B readColor3(const RedreamInfo::Color3& color3)
  1335. {
  1336. return Color3B(color3.r(), color3.g(), color3.b());
  1337. }
  1338. static cocos2d::Color4B readColor4(const RedreamInfo::Color4& color4)
  1339. {
  1340. return Color4B(color4.r(), color4.g(), color4.b(), color4.a());
  1341. }
  1342. static RRP::AnimationCurveData readAnimationCurveData(const RedreamInfo::AnimationCurveData& dataProtobuf)
  1343. {
  1344. RRP::AnimationCurveData data(dataProtobuf.preinfinity(), dataProtobuf.postinfinity());
  1345. for (auto& kf : dataProtobuf.curve())
  1346. {
  1347. data.m_Curve.push_back(RRP::KeyframeData(kf.time(), kf.value(), kf.inslope(), kf.outslope()));
  1348. }
  1349. return data;
  1350. }
  1351. static RRP::GradientNEWData readGradientNEWData(const RedreamInfo::GradientNEWData& dataProtobuf)
  1352. {
  1353. RRP::GradientNEWData data;
  1354. for (auto& colorProtobuf : dataProtobuf.color()){
  1355. data.m_Color.push_back(RRP::Color3BData(colorProtobuf.time(), readColor3(colorProtobuf.color())));
  1356. }
  1357. for (auto& alphaProtobuf : dataProtobuf.alpha()){
  1358. data.m_Alpha.push_back(RRP::AlphaData(alphaProtobuf.time(), alphaProtobuf.alpha()));
  1359. }
  1360. return data;
  1361. }
  1362. cocos2d::Color4B NodeLoader::parsePropTypeColor4(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1363. {
  1364. auto color = readColor4(valueProtobuf.color4());
  1365. ValueMap colorMap;
  1366. colorMap["r"] = color.r;
  1367. colorMap["g"] = color.g;
  1368. colorMap["b"] = color.b;
  1369. colorMap["a"] = color.a;
  1370. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  1371. {
  1372. ccbReader->getAnimationManager()->setBaseValue(Value(colorMap), pNode, pPropertyName);
  1373. }
  1374. return color;
  1375. }
  1376. bool NodeLoader::parsePropTypeSeparatorCheck(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1377. {
  1378. bool ret = valueProtobuf.boolvalue();
  1379. if (ccbReader->getAnimatedProperties()->find(pPropertyName) != ccbReader->getAnimatedProperties()->end())
  1380. {
  1381. ccbReader->getAnimationManager()->setBaseValue(Value(ret), pNode, pPropertyName);
  1382. }
  1383. return ret;
  1384. }
  1385. RRP::MinMaxGradientData NodeLoader::parsePropTypeMinMaxGradientData(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1386. {
  1387. auto& data = valueProtobuf.minmaxgradientdata();
  1388. return RRP::MinMaxGradientData((RRP::MinMaxGradientState) data.minmaxstate(), readColor4(data.mincolor()), readColor4(data.maxcolor()), readGradientNEWData(data.mingradient()), readGradientNEWData(data.maxgradient()));
  1389. }
  1390. RRP::MinMaxCurveData NodeLoader::parsePropTypeMinMaxCurveData(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1391. {
  1392. auto& data = valueProtobuf.minmaxcurvedata();
  1393. return RRP::MinMaxCurveData((RRP::MinMaxCurveState) data.minmaxstate(), data.scalar(), readAnimationCurveData(data.mincurve()), readAnimationCurveData(data.maxcurve()));
  1394. }
  1395. RRP::EmissionData NodeLoader::parsePropTypeEmissionData(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const char *pPropertyName, const RedreamInfo::Value& valueProtobuf)
  1396. {
  1397. auto& data = valueProtobuf.emissiondata();
  1398. RRP::EmissionData emissionData;
  1399. for (auto& burstData : data.burstdata()) {
  1400. emissionData.burstData.push_back(RRP::BurstData(burstData.bursttime(), burstData.burstparticlecount()));
  1401. }
  1402. return emissionData;
  1403. }
  1404. float * NodeLoader::parsePropTypeFloatXYZ(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1405. {
  1406. auto& vec3 = valueProtobuf.vec3();
  1407. float * floatXYZ = new (std::nothrow) float[3];
  1408. floatXYZ[0] = vec3.x();
  1409. floatXYZ[1] = vec3.y();
  1410. floatXYZ[2] = vec3.z();
  1411. return floatXYZ;
  1412. }
  1413. std::string NodeLoader::parsePropTypeMaterialFile(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf)
  1414. {
  1415. return ccbReader->readCachedString(valueProtobuf.intvalue());
  1416. }
  1417. MaterialBall NodeLoader::parsePropTypeMaterialBall(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  1418. MaterialBall ball;
  1419. ball.materialPath = valueProtobuf.materialball().materialballpath();
  1420. auto params = valueProtobuf.materialball().params();
  1421. for (auto it = params.begin(); it != params.end(); it++) {
  1422. auto key = it->first;
  1423. auto value = it->second;
  1424. ball.params.insert({key, value});
  1425. }
  1426. return ball;
  1427. }
  1428. BakeAnimation NodeLoader::parsePropTypeBakeAnimation(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf) {
  1429. BakeAnimation bakeAnimation;
  1430. bakeAnimation.animationName = valueProtobuf.bakeanimation().animationname();
  1431. bakeAnimation.elapsedTime = valueProtobuf.bakeanimation().elapsedtime();
  1432. bakeAnimation.loop = valueProtobuf.bakeanimation().loop();
  1433. return bakeAnimation;
  1434. }
  1435. WiseEventData NodeLoader::parsePropTypeWise(cocos2d::Node * pNode, cocos2d::Node * pParent, REDReader * ccbReader, const RedreamInfo::Value& valueProtobuf){
  1436. WiseEventData wiseEventData;
  1437. wiseEventData.wiseBnkPath = valueProtobuf.wise().bnkfile();
  1438. wiseEventData.wiseEventName = valueProtobuf.wise().eventname();
  1439. wiseEventData.wiseForcePost = valueProtobuf.wise().forcepost();
  1440. if (wiseEventData.wiseEventName.size()) {
  1441. const auto & param_vec = valueProtobuf.wise().params();
  1442. for(auto param : param_vec){
  1443. redprotocol::AudioParam param_obj_tmp;
  1444. param_obj_tmp.name = param.key();
  1445. param_obj_tmp.fValue1 = param.value();
  1446. param_obj_tmp.fValue2 = 0.f;
  1447. param_obj_tmp.fValue3 = 100.f;
  1448. wiseEventData.audioParams.push_back(std::move(param_obj_tmp));
  1449. }
  1450. }
  1451. return wiseEventData;
  1452. }
  1453. void NodeLoader::onHandlePropTypePosition(Node * pNode, Node * /*pParent*/, const char* pPropertyName, Vec2 pPosition, REDReader * /*ccbReader*/) {
  1454. if(strcmp(pPropertyName, PROPERTY_POSITION) == 0) {
  1455. pNode->setPosition(pPosition);
  1456. } else {
  1457. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1458. }
  1459. }
  1460. void NodeLoader::onHandlePropTypePoint(Node * pNode, Node * /*pParent*/, const char* pPropertyName, Vec2 pPoint, REDReader * /*ccbReader*/) {
  1461. if(strcmp(pPropertyName, PROPERTY_ANCHORPOINT) == 0) {
  1462. pNode->setAnchorPoint(pPoint);
  1463. } else {
  1464. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1465. }
  1466. }
  1467. void NodeLoader::onHandlePropTypePointLock(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, Vec2 /*pPointLock*/, REDReader * /*ccbReader*/) {
  1468. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1469. }
  1470. void NodeLoader::onHandlePropTypeSize(Node * pNode, Node * /*pParent*/, const char* pPropertyName, Size pSize, REDReader * /*ccbReader*/) {
  1471. if(strcmp(pPropertyName, PROPERTY_CONTENTSIZE) == 0) {
  1472. pNode->setContentSize(pSize);
  1473. } else {
  1474. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1475. }
  1476. }
  1477. void NodeLoader::onHandlePropTypeFloatXY(Node * pNode, Node * /*pParent*/, const char* pPropertyName, float * pFloat, REDReader * /*ccbReader*/) {
  1478. if(strcmp(pPropertyName, PROPERTY_SKEW) == 0) {
  1479. pNode->setSkewX(pFloat[0]);
  1480. pNode->setSkewY(pFloat[1]);
  1481. } else {
  1482. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1483. }
  1484. }
  1485. void NodeLoader::onHandlePropTypeScaleLock(Node * pNode, Node * /*pParent*/, const char* pPropertyName, float * pScaleLock, REDReader * /*ccbReader*/) {
  1486. if(strcmp(pPropertyName, PROPERTY_SCALE) == 0) {
  1487. pNode->setScaleX(pScaleLock[0]);
  1488. pNode->setScaleY(pScaleLock[1]);
  1489. } else {
  1490. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1491. }
  1492. }
  1493. void NodeLoader::onHandlePropTypeFloat(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, float pFloat, REDReader * /*ccbReader*/) {
  1494. // ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1495. // It may be a custom property, add it to custom property dictionary.
  1496. _customProperties[pPropertyName] = Value(pFloat);
  1497. }
  1498. void NodeLoader::onHandlePropTypeDegrees(Node * pNode, Node * /*pParent*/, const char* pPropertyName, float pDegrees, REDReader * /*ccbReader*/) {
  1499. if(strcmp(pPropertyName, PROPERTY_ROTATION) == 0) {
  1500. pNode->setRotation(pDegrees);
  1501. } else if(strcmp(pPropertyName, PROPERTY_ROTATIONX) == 0) {
  1502. pNode->setRotationSkewX(pDegrees);
  1503. } else if(strcmp(pPropertyName, PROPERTY_ROTATIONY) == 0) {
  1504. pNode->setRotationSkewY(pDegrees);
  1505. }
  1506. else {
  1507. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1508. }
  1509. }
  1510. void NodeLoader::onHandlePropTypeFloatScale(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, float /*pFloatScale*/, REDReader * /*ccbReader*/) {
  1511. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1512. }
  1513. void NodeLoader::onHandlePropTypeInteger(Node * pNode, Node * /*pParent*/, const char* pPropertyName, int pInteger, REDReader * /*ccbReader*/) {
  1514. if(strcmp(pPropertyName, PROPERTY_TAG) == 0) {
  1515. pNode->setTag(pInteger);
  1516. } else {
  1517. // ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1518. // It may be a custom property, add it to custom property dictionary.
  1519. _customProperties[pPropertyName] = Value(pInteger);
  1520. }
  1521. }
  1522. void NodeLoader::onHandlePropTypeIntegerLabeled(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, int /*pIntegerLabeled*/, REDReader * /*ccbReader*/) {
  1523. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1524. }
  1525. void NodeLoader::onHandlePropTypeFloatVar(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, float * /*pFloatVar*/, REDReader * /*ccbReader*/) {
  1526. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1527. }
  1528. void NodeLoader::onHandlePropTypeCheck(Node * pNode, Node * /*pParent*/, const char* pPropertyName, bool pCheck, REDReader * /*ccbReader*/) {
  1529. if(strcmp(pPropertyName, PROPERTY_VISIBLE) == 0) {
  1530. pNode->setVisible(pCheck);
  1531. } else if(strcmp(pPropertyName, PROPERTY_IGNOREANCHORPOINTFORPOSITION) == 0) {
  1532. pNode->setIgnoreAnchorPointForPosition(pCheck);
  1533. }else if(strcmp(pPropertyName, PROPERTY_CASCADEOPACITYENABLED) == 0){
  1534. pNode->setCascadeOpacityEnabled(pCheck);
  1535. }else if(strcmp(pPropertyName, PROPERTY_CASCADECOLORENABLED) == 0){
  1536. pNode->setCascadeColorEnabled(pCheck);
  1537. } else {
  1538. //ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1539. // It may be a custom property, add it to custom property dictionary.
  1540. _customProperties[pPropertyName] = Value(pCheck);
  1541. }
  1542. }
  1543. void NodeLoader::onHandlePropTypeSpriteFrame(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, SpriteFrame * /*pSpriteFrame*/, REDReader * /*ccbReader*/) {
  1544. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1545. }
  1546. void NodeLoader::onHandlePropTypeAnimation(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, Animation * /*pAnimation*/, REDReader * /*ccbReader*/) {
  1547. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1548. }
  1549. void NodeLoader::onHandlePropTypeTexture(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, Texture2D * /*pTexture2D*/, REDReader * /*ccbReader*/) {
  1550. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1551. }
  1552. void NodeLoader::onHandlePropTypeByte(Node * pNode, Node * /*pParent*/, const char* pPropertyName, unsigned char pByte, REDReader * /*ccbReader*/) {
  1553. if(strcmp(pPropertyName, PROPERTY_OPACITY) == 0) {
  1554. pNode->setOpacity(pByte);
  1555. }else{
  1556. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1557. }
  1558. }
  1559. void NodeLoader::onHandlePropTypeColor3(Node * pNode, Node * /*pParent*/, const char* pPropertyName, Color3B pColor3B, REDReader * /*ccbReader*/) {
  1560. if(strcmp(pPropertyName, PROPERTY_COLOR) == 0) {
  1561. pNode->setColor(pColor3B);
  1562. } else {
  1563. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1564. }
  1565. }
  1566. void NodeLoader::onHandlePropTypeColor4FVar(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, Color4F * /*pColor4FVar*/, REDReader * /*ccbReader*/) {
  1567. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1568. }
  1569. void NodeLoader::onHandlePropTypeFlip(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, bool * /*pFlip*/, REDReader * /*ccbReader*/) {
  1570. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1571. }
  1572. void NodeLoader::onHandlePropTypeBlendFunc(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, BlendFunc /*pBlendFunc*/, REDReader * /*ccbReader*/) {
  1573. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1574. }
  1575. void NodeLoader::onHandlePropTypeFntFile(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char* /*pFntFile*/, REDReader * /*ccbReader*/) {
  1576. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1577. }
  1578. void NodeLoader::onHandlePropTypeString(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char * pString, REDReader * /*ccbReader*/) {
  1579. // ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1580. // It may be a custom property, add it to custom property dictionary.
  1581. _customProperties[pPropertyName] = Value(pString);
  1582. }
  1583. void NodeLoader::onHandlePropTypeText(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char * /*pText*/, REDReader * /*ccbReader*/) {
  1584. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1585. }
  1586. void NodeLoader::onHandlePropTypeFontTTF(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char * /*pFontTTF*/, REDReader * /*ccbReader*/) {
  1587. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1588. }
  1589. void NodeLoader::onHandlePropTypeBlock(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, BlockData * /*pBlockData*/, REDReader * /*ccbReader*/) {
  1590. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1591. }
  1592. void NodeLoader::onHandlePropTypeBlockControl(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, BlockControlData * /*pBlockControlData*/, REDReader * /*ccbReader*/) {
  1593. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1594. }
  1595. void NodeLoader::onHandlePropTypeREDFile(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, Node * /*pREDFileNode*/, REDReader * /*ccbReader*/) {
  1596. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1597. }
  1598. void NodeLoader::onHandlePropTypeSpineSkel(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char * /*pSkel*/, REDReader * /*ccbReader*/) {
  1599. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1600. }
  1601. void NodeLoader::onHandlePropTypeSpineAtlas(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, const char * /*pAtlas*/, REDReader * /*ccbReader*/) {
  1602. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1603. }
  1604. void NodeLoader::onHandlePropTypeSkelFrame(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, spine::SkeletonFrame /*pSkeFrame*/, REDReader * /*ccbReader*/) {
  1605. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1606. }
  1607. void NodeLoader::onHandlePropTypeFrameSet(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, vector<FramePath> /*pFrameSet*/, REDReader * /*ccbReader*/) {
  1608. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1609. }
  1610. void NodeLoader::onHandlePropTypePercent(cocos2d::Node * /*pNode*/, cocos2d::Node * /*pParent*/, const char* pPropertyName, int /*pValue*/, REDReader * /*ccbReader*/) {
  1611. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1612. }
  1613. void NodeLoader::onHandlePropTypeColor4(cocos2d::Node * /*pNode*/, cocos2d::Node * /*pParent*/, const char* pPropertyName, Color4B /*pColor4*/, REDReader * /*ccbReader*/) {
  1614. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1615. }
  1616. void NodeLoader::onHandlePropTypeCallbacks(Node * /*pNode*/, Node * /*pParent*/, const char* pPropertyName, CallbacksData * /*pCallbacksData*/, REDReader * /*ccbReader*/) {
  1617. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1618. }
  1619. void NodeLoader::onHandlePropTypeLocalization(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, LocalizationModel pModel, REDReader * ccbReader) {
  1620. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1621. }
  1622. void NodeLoader::onHandlePropTypeSeparatorCheck(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, bool check, REDReader * ccbReader)
  1623. {
  1624. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1625. }
  1626. void NodeLoader::onHandlePropTypeMinMaxGradientData(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, RRP::MinMaxGradientData& minMaxGradientData, REDReader * ccbReader)
  1627. {
  1628. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1629. }
  1630. void NodeLoader::onHandlePropTypeMinMaxCurveData(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, RRP::MinMaxCurveData& minMaxCurveData, REDReader * ccbReader)
  1631. {
  1632. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1633. }
  1634. void NodeLoader::onHandlePropTypeEmissionData(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, RRP::EmissionData& emissionData, REDReader * ccbReader)
  1635. {
  1636. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1637. }
  1638. void NodeLoader::onHandlePropTypeFloatXYZ(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, float * pFloatVar, REDReader * ccbReader)
  1639. {
  1640. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1641. }
  1642. void NodeLoader::onHandlePropTypeMaterialFile(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * materialFile, REDReader * ccbReader)
  1643. {
  1644. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1645. }
  1646. void NodeLoader::onHandlePropTypeTableviewRedFile(cocos2d::Node * pNode, cocos2d::Node * pParent, const char * pPropertyName, std::vector<cocos2d::Node*> pREDFileNodes, REDReader * ccbReader) {
  1647. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1648. }
  1649. void NodeLoader::onHandlePropTypePbVertsFile(cocos2d::Node * pNode, cocos2d::Node * pParent, const char * pPropertyName, const std::string& filePath, REDReader * ccbReader) {
  1650. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1651. }
  1652. void NodeLoader::onHandlePropTypeMaterialBall(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * materialPath, std::map<std::string, float> params, REDReader * ccbReader) {
  1653. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1654. }
  1655. void NodeLoader::onHandlePropTypeBakeDataFile(cocos2d::Node *pNode, cocos2d::Node *pParent, const char *pPropertyName, const char *dataFile, REDReader *ccbReader) {
  1656. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1657. }
  1658. void NodeLoader::onHandlePropTypeBakeAnimation(cocos2d::Node *pNode, cocos2d::Node *pParent, const char *pPropertyName, const char *animationName, float elapsedTime, bool loop, REDReader *ccbReader) {
  1659. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1660. }
  1661. void NodeLoader::onHandlePropTypePolygonFile(cocos2d::Node* pNode, cocos2d::Node* pParent, const char* pPropertyName, const std::string& filePath, REDReader* ccbReader) {
  1662. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1663. }
  1664. void NodeLoader::onHandlePropTypeWise(cocos2d::Node* pNode, cocos2d::Node* pParent, const char* pPropertyName, const WiseEventData& wiseEventData, REDReader* ccbReader){
  1665. ASSERT_FAIL_UNEXPECTED_PROPERTY(pPropertyName);
  1666. }
  1667. }//namespace