FillGlobalConfig.hpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // FillGlobalConfig.hpp
  3. // auto_fill_jewel_v3
  4. //
  5. // Created by Red on 2024/11/25.
  6. // 从 config.json 读取全局盘子和宝石配置数据
  7. #ifndef FillGlobalConfig_hpp
  8. #define FillGlobalConfig_hpp
  9. #include <stdio.h>
  10. #include "contourdata.h"
  11. #include <string>
  12. using std::string;
  13. #include "ajson5.hpp"
  14. #include <unordered_map>
  15. using std::unordered_map;
  16. #include <vector>
  17. using std::vector;
  18. #define FILLGLOBALCONFIG_JEWELSIZE_SM 0
  19. #define FILLGLOBALCONFIG_JEWELSIZE_MD 1
  20. #define FILLGLOBALCONFIG_JEWELSIZE_LG 2
  21. #define FILLGLOBALCONFIG_DIFFCULTY_NORM 0
  22. #define FILLGLOBALCONFIG_DIFFCULTY_HARD1 1
  23. #define FILLGLOBALCONFIG_DIFFCULTY_HARD2 2
  24. #define FILLGLOBALCONFIG_PLATESIZE_SM 1
  25. #define FILLGLOBALCONFIG_PLATESIZE_MD 2
  26. #define FILLGLOBALCONFIG_PLATESIZE_LG 3
  27. struct FillGlobalConfig {
  28. //这个结构体似乎不用了
  29. struct ContourConfig {
  30. string _name;
  31. ContourData _contour ;
  32. } ;
  33. bool init(string filename) ;
  34. bool initJewelItems( string filename ) ;
  35. bool initLevelDatas( string filename ) ;
  36. bool initPlateItems( string filename ) ;
  37. //静态全局单例
  38. static FillGlobalConfig* getInstance() ;
  39. vector<ContourConfig> _plateContours ;
  40. vector<ContourConfig> _jewelContours ;
  41. ContourData* getContourDataByPngName(string& pngname) ;
  42. //宝石基本信息
  43. struct JewelItem {
  44. int _id ;
  45. string _category;
  46. string _jewelName;
  47. string _code1;
  48. string _code2;
  49. int _size ; // 0-SM 1-MD 2-LG
  50. float _scale;// 0.0-1.0
  51. string _pngName;
  52. string _yzName;
  53. string _contourName;
  54. float _bbWidth;
  55. float _bbHeight;
  56. string _etc; //备注信息
  57. };
  58. JewelItem* getJewelItemById(int jid){ return _mapJewelItems.find(jid)!=_mapJewelItems.end()?(&_mapJewelItems[jid]):nullptr; }
  59. int getJewelItemCount() { return _mapJewelItems.size() ; }
  60. //关卡组成数据
  61. struct LevelData {
  62. int _id ;
  63. int _subId ;
  64. int _difficulty;//难度 0-普通, 1-难 , 2-极难
  65. vector<int> _jewelIds ;
  66. vector<int> _cnts ;//宝石个数,读取的时候要把组数乘以3计算出宝石个数。
  67. } ;
  68. //levelId 是关卡主编号值, subIndex是子关卡的索引值(从0开始)
  69. LevelData* getLevelData(int levelId,int subIndex) { return (_mapLevelDatas.find(levelId)!=_mapLevelDatas.end())?(&_mapLevelDatas[levelId][subIndex]):nullptr; }
  70. int getSubLevelCount(int levelId) { return (_mapLevelDatas.find(levelId)!=_mapLevelDatas.end())?(_mapLevelDatas[levelId].size()):0; }
  71. int getLevelCount() { return _mapLevelDatas.size() ; }
  72. LevelData& getLevelDataByIndex(int index) { auto it = _mapLevelDatas.begin(); std::advance(it,index); return it->second[0] ;}
  73. //盘子基本信息
  74. struct PlateItem {
  75. int _id ;
  76. string _name;
  77. int _size ;// 0-MINI 1-SM 2-MD 3-LG
  78. string _pngName ;
  79. string _contourName;
  80. float _blx,_bly,_trx,_try ;// bl for bottom-left, tr for top-right.
  81. double _bigJewCap ;//大宝石容量
  82. float _bbwid,_bbhei ;//精灵图片尺寸
  83. string _etc ;
  84. } ;
  85. PlateItem* getPlateItemById(int pid){ return _mapPlateItems.find(pid)!=_mapPlateItems.end()?(&_mapPlateItems[pid]):nullptr; }
  86. int getPlateItemCount( int plateSzId ) { return (_mapPlateIdArray.find(plateSzId)!=_mapPlateIdArray.end())?(_mapPlateIdArray[plateSzId].size()):0; }
  87. PlateItem* getPlateItemBySzNIndex(int plateSzId,int index){ return (_mapPlateIdArray.find(plateSzId)!=_mapPlateIdArray.end())?( getPlateItemById(_mapPlateIdArray[plateSzId][index])):nullptr; }
  88. private:
  89. static FillGlobalConfig* _s_instance ;
  90. unordered_map<int, JewelItem> _mapJewelItems ;
  91. unordered_map<int, vector<LevelData> > _mapLevelDatas ;// key 为主关卡编号, vector<LevelData> 为子关卡数组
  92. unordered_map<int, PlateItem> _mapPlateItems ;
  93. unordered_map<int, vector<int> > _mapPlateIdArray; // key为小、中、大的整数编码值, value为该类型下面的盘子ID数组
  94. } ;
  95. #endif /* GlobalConfig_hpp */