AniGameConfigParser.cpp 3.79 KB
//
//  AniGameConfigParser.cpp
//  SteveAndMaggieGame-mobile
//
//  Created by Katarzyna Kalinowska-Górska on 07/05/2019.
//

#include "cocos2d.h"
#include "AniGameConfigParser.h"
#include "AniJSONParseUtils.h"
#include "AniScalingUtils.h"
#include "AniSoundsRepo.h"
#include "AniAdventureScene.h"

AniGameConfigParser::AniGameConfigParser(std::string configFilePath){
    _configJson = new rapidjson::Document();
    auto jsonString = cocos2d::FileUtils::getInstance()->getStringFromFile(configFilePath);
    _configJson->Parse(jsonString.c_str());
}

AniGameConfigParser::~AniGameConfigParser(){
    delete _configJson;
}

AniSubGameScene* AniGameConfigParser::createGameScene(int gameId,std::string layoutFilePath){
    return createGameScene(gameId, parseGameType(), layoutFilePath);
}

std::string AniGameConfigParser::parseGameType(){
    if(AniJSONParseUtils::hasMemberString(*_configJson, "game_type")){
        return (*_configJson)["game_type"].GetString();
    }
    return "";
}

AniSubGameScene* AniGameConfigParser::createGameScene(int gameId, std::string gameType, std::string layoutFilePath){
    //TODO add if exists everyewhere
    AniSoundsRepo::soundsFolder = (AniJSONParseUtils::hasMemberString(*_configJson, "sounds_path")) ?
    (*_configJson)["sounds_path"].GetString() : "";
//    parseSoundInfoFile(AniSoundsRepo::soundsFolder, AniSoundsRepo::soundsFolder + "sounds_info.si", AniSoundsRepo::soundDurations);
    
    auto gamePropertiesJson = (*_configJson)["game_properties"].GetObject();
    
    if(gameType == "map"){
            return AniAdventureScene::create(gameId, layoutFilePath, [&](AniAdventureScene::GameConfig& gameConfig) {
                
                auto levelConfigs = gamePropertiesJson["level_info"].GetArray();
                for(const auto& levelJson : levelConfigs){
                    AniAdventureScene::LevelConfig levelConfig;
                    levelConfig.levelTime = levelJson["levelTime"].GetFloat();
                    gameConfig.levelConfigs.push_back(levelConfig);
                    }

                auto itemsJson = gamePropertiesJson["itemInfo"].GetArray();
                  for(int i = 0; i < itemsJson.Size(); ++i){
                      AniAdventureScene::FItem item;
                      item.itemId = itemsJson[i]["itemId"].GetInt();
                      item.mapAdvObjectName = itemsJson[i]["adventureObjectId"].GetString();
                      
   //                   std::string soundsfolder = gamePropertiesJson["sounds_path"].GetString();
                      if(itemsJson[i].HasMember("soundRequest")){
                          item.soundRequest = AniSoundsRepo::soundsFolder + itemsJson[i]["soundRequest"].GetString();
                          AniSoundsRepo::preloadSoundEffect(item.soundRequest);
                      }
                      
                      if(itemsJson[i].HasMember("soundNo")){
                          item.soundNo = AniSoundsRepo::soundsFolder + itemsJson[i]["soundNo"].GetString();
                          AniSoundsRepo::preloadSoundEffect(item.soundNo);
                      }
                      
                      if(itemsJson[i].HasMember("soundYes")){
                          item.soundConf = AniSoundsRepo::soundsFolder + itemsJson[i]["soundYes"].GetString();
                          AniSoundsRepo::preloadSoundEffect(item.soundConf);
                      }
                      
                      if(itemsJson[i].HasMember("soundTooLate")){
                          item.soundTooLate = AniSoundsRepo::soundsFolder + itemsJson[i]["soundTooLate"].GetString();
                          AniSoundsRepo::preloadSoundEffect(item.soundConf);
                      }
                      
                      gameConfig.items.push_back(item);
                  }
                });
       }
               
    return nullptr;
}