// // GameConfigParser.cpp // SteveAndMaggieGame-mobile // // Created by Katarzyna Kalinowska-Górska on 07/05/2019. // #include "cocos2d.h" #include "GameConfigParser.h" #include "JSONParseUtils.h" #include "SubGameSceneShoot.h" #include "ScalingUtils.h" #include "SoundsRepo.h" GameConfigParser::GameConfigParser(std::string configFilePath){ _configJson = new rapidjson::Document(); auto jsonString = cocos2d::FileUtils::getInstance()->getStringFromFile(configFilePath); _configJson->Parse(jsonString.c_str()); } GameConfigParser::~GameConfigParser(){ delete _configJson; } SubGameScene* GameConfigParser::createGameScene(int gameId,std::string layoutFilePath){ return createGameScene(gameId, parseGameType(), layoutFilePath); } std::string GameConfigParser::parseGameType(){ if(JSONParseUtils::hasMemberString(*_configJson, "game_type")){ return (*_configJson)["game_type"].GetString(); } return ""; } SubGameScene* GameConfigParser::createGameScene(int gameId, std::string gameType, std::string layoutFilePath){ //TODO add if exists everyewhere SoundsRepo::soundsFolder = (JSONParseUtils::hasMemberString(*_configJson, "sounds_path")) ? (*_configJson)["sounds_path"].GetString() : ""; // parseSoundInfoFile(SoundsRepo::soundsFolder, SoundsRepo::soundsFolder + "sounds_info.si", SoundsRepo::soundDurations); auto gamePropertiesJson = (*_configJson)["game_properties"].GetObject(); if (gameType == "shoot"){ return SubGameSceneShoot::create(gameId, layoutFilePath, [&](SubGameSceneShoot::GameConfig& gameConfig){ gameConfig.lives = gamePropertiesJson["lives"].GetInt(); auto itemsJson = gamePropertiesJson["itemInfo"].GetArray(); for(int i = 0; i < itemsJson.Size(); ++i){ SubGameSceneShoot::SItem item; item.itemId = itemsJson[i]["itemId"].GetInt(); // itemsJson[i]["shelfIndex"].GetInt(); item.picFilePaths = JSONParseUtils::parseStringArray(itemsJson[i]["pictures"]); item.groupPictureNodeName = itemsJson[i]["groupNodeName"].GetString(); if(itemsJson[i].HasMember("splodgePicture")){ item.splodgePicFilePath = itemsJson[i]["splodgePicture"].GetString(); } // std::string soundsfolder = gamePropertiesJson["sounds_path"].GetString(); if(itemsJson[i].HasMember("soundRequest")){ item.soundRequest = SoundsRepo::soundsFolder + itemsJson[i]["soundRequest"].GetString(); SoundsRepo::preloadSoundEffect(item.soundRequest); } if(itemsJson[i].HasMember("soundNo")){ item.soundNo = SoundsRepo::soundsFolder + itemsJson[i]["soundNo"].GetString(); SoundsRepo::preloadSoundEffect(item.soundNo); } if(itemsJson[i].HasMember("soundYes")){ item.soundConf = SoundsRepo::soundsFolder + itemsJson[i]["soundYes"].GetString(); SoundsRepo::preloadSoundEffect(item.soundConf); } /// gameConfig.shelfItems[item.itemId] = item; } gameConfig.trolleyRect = ScalingUtils::getInstance().configureRect(JSONParseUtils::getRect(gamePropertiesJson["trolleySubRect"])); gameConfig.maggieRect = ScalingUtils::getInstance().configureRect(JSONParseUtils::getRect(gamePropertiesJson["maggieSubRect"])); gameConfig.steveRect = ScalingUtils::getInstance().configureRect(JSONParseUtils::getRect(gamePropertiesJson["steveSubRect"])); auto levelConfigs = gamePropertiesJson["level_info"].GetArray(); for(const auto& levelJson : levelConfigs){ SubGameSceneShoot::LevelConfig levelConfig; levelConfig.levelTime = levelJson["levelTime"].GetFloat(); levelConfig.trolleyTime = levelJson["trolleyTime"].GetFloat(); gameConfig.levelConfigs.push_back(levelConfig); } gameConfig.trolleyItemPoints = JSONParseUtils::parsePointArray(gamePropertiesJson["trolleyItemPoints"]); for(int i = 0; i < gameConfig.trolleyItemPoints.size(); ++i){ gameConfig.trolleyItemPoints.at(i) = ScalingUtils::getInstance().configurePoint(gameConfig.trolleyItemPoints.at(i)); } SoundsRepo::preloadAllShootGameSounds(); }); } return nullptr; }