Blame view

ios/Runner/Wowgame/Classes/game_food/GameConfigParser.cpp 4.69 KB
cb213901   xiaoyu   添加一个游戏的源码和编译选项
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
91
92
93
94
95
96
97
98
99
100
101
  //
  //  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;
  }