// // ToyGameConfigParser.cpp // SteveAndMaggieGame-mobile // // Created by Katarzyna Kalinowska-Górska on 07/05/2019. // #include "cocos2d.h" #include "ToyGameConfigParser.h" #include "ToyJSONParseUtils.h" #include "ToySubGameSceneTapNCatch.h" #include "ToySoundsRepo.h" ToyGameConfigParser::ToyGameConfigParser(std::string configFilePath){ _configJson = new rapidjson::Document(); auto jsonString = cocos2d::FileUtils::getInstance()->getStringFromFile(configFilePath); _configJson->Parse(jsonString.c_str()); } ToyGameConfigParser::~ToyGameConfigParser(){ delete _configJson; } ToySubGameScene* ToyGameConfigParser::createGameScene(int gameId,std::string layoutFilePath){ return createGameScene(gameId, parseGameType(), layoutFilePath); } std::string ToyGameConfigParser::parseGameType(){ if(ToyJSONParseUtils::hasMemberString(*_configJson, "game_type")){ return (*_configJson)["game_type"].GetString(); } return ""; } ToySubGameScene* ToyGameConfigParser::createGameScene(int gameId, std::string gameType, std::string layoutFilePath){ //TODO add if exists everyewhere // ToySoundsRepo::soundsFolder = (ToyJSONParseUtils::hasMemberString(*_configJson, "sounds_path")) ? // (*_configJson)["sounds_path"].GetString() : ""; // parseSoundInfoFile(ToySoundsRepo::soundsFolder, ToySoundsRepo::soundsFolder + "sounds_info.si", ToySoundsRepo::soundDurations); auto gamePropertiesJson = (*_configJson)["game_properties"].GetObject(); ToySubGameScene::CommonConfig commonConfig; // if(ToyJSONParseUtils::hasMemberArray(gamePropertiesJson, "itemPictureFilePaths")){ //<-- something's wrong with this code commonConfig.itemPicturePaths = ToyJSONParseUtils::parseStringArray(gamePropertiesJson["itemPictureFilePaths"]); // } commonConfig.screenPadding = gamePropertiesJson["screen_padding"].GetInt(); commonConfig.maxSecondsInactivity = gamePropertiesJson["max_seconds_inactivity"].GetInt(); commonConfig.lives = gamePropertiesJson["lives"].GetInt(); commonConfig.maxItemsAtATime = gamePropertiesJson["max_items_at_a_time"].GetInt(); if (gameType == "tap_n_catch"){ return ToySubGameSceneTapNCatch::create(gameId, layoutFilePath, commonConfig, [&](ToySubGameSceneTapNCatch::GameConfig& gameConfig){ auto scale = 1/cocos2d::Director::getInstance()->getContentScaleFactor(); auto levelConfigs = gamePropertiesJson["level_info"].GetArray(); for(const auto& levelJson : levelConfigs){ ToySubGameSceneTapNCatch::LevelConfig levelConfig; levelConfig.updateTimeInterval = levelJson["updateTimeInterval"].GetFloat(); levelConfig.maxItemsFrac = levelJson["maxItemsFrac"].GetFloat(); levelConfig.itemDisappearProbLim = levelJson["itemDisappearProbLim"].GetFloat(); gameConfig.levelConfigs.push_back(levelConfig); } // gameConfig.obstacles = ToyJSONParseUtils::parseRectArray(gamePropertiesJson["obstacles"]); gameConfig.staticItems = gamePropertiesJson["static_items"].GetInt()*scale; gameConfig.levelTimeSeconds = gamePropertiesJson["levelTimeSeconds"].GetFloat(); gameConfig.levelsPerLevel = gamePropertiesJson["levelsPerLevel"].GetInt(); }); } return nullptr; }