// // BasicGardenMapAdventureObjectMapper.cpp // WattsenglishFoodApp // // Created by Katarzyna Kalinowska-Górska on 21/03/2020. // #include "AniJSONParseUtils.h" #include "BasicGardenMapAdventureObjectMapper.h" #include "MapAdventureObjectPickupItem.h" #include "MapAdventureObjectSlide.h" #include "MapAdventureObjectLadder.h" #include "MapAdventureObjectLog.h" IMapAdventureObject* BasicGardenMapAdventureObjectMapper::createObject(const rapidjson::Value& p_mapObjectData, IMapAdventureImageObjectLinker* p_linker) { IMapAdventureObject* mapObject = nullptr; std::string mapObjectClassName = "MapAdventureObject"; if(AniJSONParseUtils::hasMemberString(p_mapObjectData, "adventureObjectType")){ mapObjectClassName = p_mapObjectData["adventureObjectType"].GetString(); } return createObjectFromTypeName(mapObjectClassName, p_mapObjectData, p_linker); } IMapAdventureObject* BasicGardenMapAdventureObjectMapper::createObjectFromTypeName(const std::string& p_objectTypeName, const rapidjson::Value& p_mapObjectData, IMapAdventureImageObjectLinker* p_linker){ IMapAdventureObject* mapObject = nullptr; if(p_objectTypeName == "Slide"){ mapObject = new MapAdventureObjectSlide(p_mapObjectData); } else if(p_objectTypeName == "PickUpItem"){ auto associatedMapImageObjectName = p_mapObjectData["mapImageObjectName"].GetString(); auto associatedMapImageObject = p_linker->getMapImageObject(associatedMapImageObjectName); mapObject = new MapAdventureObjectPickupItem(p_mapObjectData, associatedMapImageObject); } else if(p_objectTypeName == "Ladder"){ auto associatedMapImageObjectName = p_mapObjectData["mapImageObjectName"].GetString(); IMapImageObject* hintObject = nullptr; if(p_mapObjectData.HasMember("hintMapImageObjectName")){ hintObject = p_linker->getMapImageObject(p_mapObjectData["hintMapImageObjectName"].GetString()); } auto associatedMapImageObject = p_linker->getMapImageObject(associatedMapImageObjectName); mapObject = new MapAdventureObjectLadder(p_mapObjectData, associatedMapImageObject, hintObject); } else if(p_objectTypeName == "Log"){ IMapImageObject* hintObject = nullptr; if(p_mapObjectData.HasMember("hintMapImageObjectName")){ hintObject = p_linker->getMapImageObject(p_mapObjectData["hintMapImageObjectName"].GetString()); } auto associatedMapImageObjectName = p_mapObjectData["mapImageObjectName"].GetString(); auto associatedMapImageObject = p_linker->getMapImageObject(associatedMapImageObjectName); mapObject = new MapAdventureObjectLog(p_mapObjectData, associatedMapImageObject, hintObject); } assert(mapObject != nullptr && "BasicGardenMapAdventureObjectMapper: failed to create object"); return mapObject; }