// // ScenarioObject.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 24.05.2017. // // #ifndef ScenarioObject_h #define ScenarioObject_h #include #include "ActionData.h" #include "json/document.h" #include #include class ActionParseDelegate; // weird, because the whole parser has been translated from JavaScript class ScenarioObject { public: std::string scenarioObjectName; std::string scenarioObjectClassName; ScenarioObject(){ _customData = NULL; _jsonValueStorage = NULL; scenarioObjectName = ""; scenarioObjectClassName = ""; }; virtual ~ScenarioObject(){ if(_jsonValueStorage){ delete _jsonValueStorage; } for(auto pair : _animations){ delete pair.second; } }; // virtual void callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate){ // // do nothing // }; virtual void callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate, std::function callback = [](){}){ // do nothing callback(); }; virtual void setProperty(std::string propertyName, const rapidjson::Value& newValue, ActionParseDelegate* parseDelegate) { // do nothing }; virtual std::string getPropertyAsString(std::string propertyName = ""){ if(propertyName == "objectName"){ return scenarioObjectName; } return "NULL"; }; virtual ScenarioObject* getScenarioObjectByName(std::string objectName){ return NULL; }; virtual void insertAnimationWithId(std::string animationId, const rapidjson::Value& animationData){ if(_animations.find(animationId) == _animations.end()){ rapidjson::Value* animationDataCopy = new rapidjson::Value(); animationDataCopy->CopyFrom(animationData, this->getJsonStorage()->GetAllocator()); _animations.insert({animationId, animationDataCopy}); } }; virtual const rapidjson::Value* getAnimationById(std::string animationId){ return _animations[animationId]; }; virtual void setCustomData(void* data){ _customData = data; }; virtual void* getCustomData(){ return _customData; }; virtual std::string getObjectName(){ return scenarioObjectName; }; virtual std::string getClassName(){ return scenarioObjectClassName; }; protected: rapidjson::Document* _jsonValueStorage; std::map _animations; void* _customData; rapidjson::Document* getJsonStorage(){ if(!_jsonValueStorage){ _jsonValueStorage = new rapidjson::Document(); } return _jsonValueStorage; }; }; #endif /* ScenarioObject_h */