ToyGameConfigParser.cpp 3.33 KB
//
//  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;
}