// // FillGlobalConfig.hpp // auto_fill_jewel_v3 // // Created by Red on 2024/11/25. // 从 config.json 读取全局盘子和宝石配置数据 #ifndef FillGlobalConfig_hpp #define FillGlobalConfig_hpp #include #include "contourdata.h" #include using std::string; #include "ajson5.hpp" #include using std::unordered_map; #include using std::vector; #define FILLGLOBALCONFIG_JEWELSIZE_SM 0 #define FILLGLOBALCONFIG_JEWELSIZE_MD 1 #define FILLGLOBALCONFIG_JEWELSIZE_LG 2 #define FILLGLOBALCONFIG_DIFFCULTY_NORM 0 #define FILLGLOBALCONFIG_DIFFCULTY_HARD1 1 #define FILLGLOBALCONFIG_DIFFCULTY_HARD2 2 #define FILLGLOBALCONFIG_PLATESIZE_SM 1 #define FILLGLOBALCONFIG_PLATESIZE_MD 2 #define FILLGLOBALCONFIG_PLATESIZE_LG 3 struct FillGlobalConfig { //这个结构体似乎不用了 struct ContourConfig { string _name; ContourData _contour ; } ; bool init(string filename) ; bool initJewelItems( string filename ) ; bool initLevelDatas( string filename ) ; bool initPlateItems( string filename ) ; //静态全局单例 static FillGlobalConfig* getInstance() ; vector _plateContours ; vector _jewelContours ; ContourData* getContourDataByPngName(string& pngname) ; //宝石基本信息 struct JewelItem { int _id ; string _category; string _jewelName; string _code1; string _code2; int _size ; // 0-SM 1-MD 2-LG float _scale;// 0.0-1.0 string _pngName; string _yzName; string _contourName; float _bbWidth; float _bbHeight; string _etc; //备注信息 }; JewelItem* getJewelItemById(int jid){ return _mapJewelItems.find(jid)!=_mapJewelItems.end()?(&_mapJewelItems[jid]):nullptr; } int getJewelItemCount() { return _mapJewelItems.size() ; } //关卡组成数据 struct LevelData { int _id ; int _subId ; int _difficulty;//难度 0-普通, 1-难 , 2-极难 vector _jewelIds ; vector _cnts ;//宝石个数,读取的时候要把组数乘以3计算出宝石个数。 } ; //levelId 是关卡主编号值, subIndex是子关卡的索引值(从0开始) LevelData* getLevelData(int levelId,int subIndex) { return (_mapLevelDatas.find(levelId)!=_mapLevelDatas.end())?(&_mapLevelDatas[levelId][subIndex]):nullptr; } int getSubLevelCount(int levelId) { return (_mapLevelDatas.find(levelId)!=_mapLevelDatas.end())?(_mapLevelDatas[levelId].size()):0; } int getLevelCount() { return _mapLevelDatas.size() ; } LevelData& getLevelDataByIndex(int index) { auto it = _mapLevelDatas.begin(); std::advance(it,index); return it->second[0] ;} //盘子基本信息 struct PlateItem { int _id ; string _name; int _size ;// 0-MINI 1-SM 2-MD 3-LG string _pngName ; string _contourName; float _blx,_bly,_trx,_try ;// bl for bottom-left, tr for top-right. double _bigJewCap ;//大宝石容量 float _bbwid,_bbhei ;//精灵图片尺寸 string _etc ; } ; PlateItem* getPlateItemById(int pid){ return _mapPlateItems.find(pid)!=_mapPlateItems.end()?(&_mapPlateItems[pid]):nullptr; } int getPlateItemCount( int plateSzId ) { return (_mapPlateIdArray.find(plateSzId)!=_mapPlateIdArray.end())?(_mapPlateIdArray[plateSzId].size()):0; } PlateItem* getPlateItemBySzNIndex(int plateSzId,int index){ return (_mapPlateIdArray.find(plateSzId)!=_mapPlateIdArray.end())?( getPlateItemById(_mapPlateIdArray[plateSzId][index])):nullptr; } private: static FillGlobalConfig* _s_instance ; unordered_map _mapJewelItems ; unordered_map > _mapLevelDatas ;// key 为主关卡编号, vector 为子关卡数组 unordered_map _mapPlateItems ; unordered_map > _mapPlateIdArray; // key为小、中、大的整数编码值, value为该类型下面的盘子ID数组 } ; #endif /* GlobalConfig_hpp */