GameConfigParser.cpp 4.69 KB
//
//  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;
}