// // AniLayoutParser.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 16.05.2017. // // #ifndef AniLayoutParser_h #define AniLayoutParser_h #include "json/document.h" #include "AniLayoutObject.h" #include "AniScenarioObject.h" class AniLayoutViewInterface { public: virtual void addLayer(cocos2d::Layer*){ } virtual void addObject(std::string objectName, cocos2d::Node* object){ } virtual void addAniScenarioObject(std::string objectName, AniScenarioObject* object){ } virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType){ return false; } virtual void setupBackgroundMusic(std::string backgroundMusicPath){ } virtual AniScenarioObject* getObjectByName(std::string objectName){ return NULL; } }; class AniLayoutParser { public: static AniLayoutParser& getInstance() { static AniLayoutParser instance; return instance; } void loadLayoutFromJSONFile(const std::string& jsonFilePath, AniLayoutViewInterface* scene); void loadLayoutFromDownloadedJSONFile(const std::string& jsonFilePath, AniLayoutViewInterface* scene); void loadLayoutFromJSONString(const std::string& jsonString, AniLayoutViewInterface* scene); private: AniLayoutParser() { _parsedDocument = NULL; } CC_DISALLOW_COPY_AND_ASSIGN(AniLayoutParser); rapidjson::Document* _parsedDocument; float _savedBgStretchScale; void parseChildObjects(AniLayoutViewInterface* scene, rapidjson::Value& nodeData, cocos2d::Node* createdNode, std::string objectLayoutsFolder = "", std::string resFolder = "", std::string altResFolder = "", bool isTopLayer = false); cocos2d::Node* parseObject(AniLayoutViewInterface* scene, rapidjson::Value& nodeData, cocos2d::Node* parentNode, std::string objectLayoutsFolder = "", std::string resFolder = "", std::string altResFolder = "", bool isTopLayer = false); const rapidjson::Value* getValueForKey(std::string key, const rapidjson::Value& mainNodeData); }; #endif /* AniLayoutParser_h */