AniGameConfigParser.cpp
3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//
// 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;
}