#include "CCSpriteLoader.h" using namespace cocos2d; #include "2d/CustomMaterial.hpp" #define PROPERTY_FLIP "flip" #define PROPERTY_DISPLAYFRAME "displayFrame" #define PROPERTY_BLENDFUNC "blendFunc" #define PROPERTY_USE_MATERIAL "useMaterial" #define PROPERTY_MATERIAL_BALL "materialBall" namespace redream { void SpriteLoader::onHandlePropTypeSpriteFrame(Node * pNode, Node * pParent, const char * pPropertyName, SpriteFrame * pSpriteFrame, REDReader * ccbReader) { if(strcmp(pPropertyName, PROPERTY_DISPLAYFRAME) == 0) { if(pSpriteFrame != nullptr) { ((Sprite *)pNode)->setSpriteFrame(pSpriteFrame); } else { CCLOG("ERROR: SpriteFrame nullptr"); } } else { NodeLoader::onHandlePropTypeSpriteFrame(pNode, pParent, pPropertyName, pSpriteFrame, ccbReader); } } void SpriteLoader::onHandlePropTypeFlip(Node * pNode, Node * pParent, const char * pPropertyName, bool * pFlip, REDReader * ccbReader) { if(strcmp(pPropertyName, PROPERTY_FLIP) == 0) { ((Sprite *)pNode)->setFlippedX(pFlip[0]); ((Sprite *)pNode)->setFlippedY(pFlip[1]); } else { NodeLoader::onHandlePropTypeFlip(pNode, pParent, pPropertyName, pFlip, ccbReader); } } void SpriteLoader::onHandlePropTypeBlendFunc(Node * pNode, Node * pParent, const char * pPropertyName, BlendFunc pBlendFunc, REDReader * ccbReader) { if(strcmp(pPropertyName, PROPERTY_BLENDFUNC) == 0) { ((Sprite *)pNode)->setBlendFunc(pBlendFunc); } else { NodeLoader::onHandlePropTypeBlendFunc(pNode, pParent, pPropertyName, pBlendFunc, ccbReader); } } void SpriteLoader::onHandlePropTypeCheck(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, bool pCheck, REDReader * ccbReader) { if (strcmp(pPropertyName, PROPERTY_USE_MATERIAL) == 0) { ((Sprite*)pNode)->setMaterialEnable(pCheck); } else { NodeLoader::onHandlePropTypeCheck(pNode, pParent, pPropertyName, pCheck, ccbReader); } } void SpriteLoader::onHandlePropTypeMaterialBall(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * materialPath, std::map params, REDReader * ccbReader) { if (strcmp(pPropertyName, PROPERTY_MATERIAL_BALL) == 0) { auto sprite = (Sprite*) pNode; sprite->setCustomMaterial(materialPath); for (auto it = params.begin(); it != params.end(); it++) { sprite->getCustomMaterial()->setParamFloat(it->first, it->second); } } else { NodeLoader::onHandlePropTypeMaterialBall(pNode, pParent, pPropertyName, materialPath, params, ccbReader); } } }