// // ToyLayoutParser.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 16.05.2017. // // #ifndef ToyLayoutParser_h #define ToyLayoutParser_h #include "json/document.h" #include "ToyLayoutObject.h" #include "ToyScenarioObject.h" class ToyLayoutViewInterface { public: virtual void addLayer(cocos2d::Layer*){ } virtual void addObject(std::string objectName, cocos2d::Node* object){ } virtual void addToyScenarioObject(std::string objectName, ToyScenarioObject* object){ } virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType){ return false; } virtual void setupBackgroundMusic(std::string backgroundMusicPath){ } virtual ToyScenarioObject* getObjectByName(std::string objectName){ return NULL; } }; class ToyLayoutParser { public: static ToyLayoutParser& getInstance() { static ToyLayoutParser instance; return instance; } std::string loadJSONFromFile(const std::string& jsonFilePath); void loadLayoutFromJSONFile(const std::string& jsonFilePath, ToyLayoutViewInterface* scene); void loadLayoutFromDownloadedJSONFile(const std::string& jsonFilePath, ToyLayoutViewInterface* scene); void loadLayoutFromJSONString(const std::string& jsonString, ToyLayoutViewInterface* scene); private: ToyLayoutParser() { _parsedDocument = NULL; } CC_DISALLOW_COPY_AND_ASSIGN(ToyLayoutParser); rapidjson::Document* _parsedDocument; float _savedBgStretchScale; void parseChildObjects(ToyLayoutViewInterface* scene, rapidjson::Value& nodeData, cocos2d::Node* createdNode, std::string objectLayoutsFolder = "", std::string resFolder = "", std::string altResFolder = "", bool isTopLayer = false); cocos2d::Node* parseObject(ToyLayoutViewInterface* 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 /* ToyLayoutParser_h */