ConfigManager.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. export default class ConfigManager {
  2. private configKeys:Map<string,any>=new Map<string,any>();
  3. private configMap:Map<string,Map<any,any>>=new Map<string,Map<any,any>>();
  4. private configList:Map<string,any[]>=new Map<string,any[]>();
  5. private objConfigMap:Map<string,any>=new Map<string,any>();
  6. private jsonMap:Map<string,any>=new Map<string,any>();
  7. private __jsonAssets:cc.JsonAsset[];
  8. Init(configs:cc.JsonAsset[]):void{
  9. this.__jsonAssets=configs;
  10. }
  11. /**
  12. * 注册配置表的主KEY
  13. * @param configName
  14. * @param key
  15. */
  16. Register(configName:string,key:any="id"):void{
  17. this.configKeys.set(configName,key);
  18. }
  19. /**
  20. * 配置解码
  21. */
  22. Decode():void{
  23. let json:any;
  24. let list:any[];
  25. let map:Map<any,any>;
  26. let configKey:any;
  27. let configValue:any;
  28. this.__jsonAssets.forEach(jsonAsset => {
  29. json=jsonAsset.json;
  30. this.jsonMap.set(jsonAsset.name,jsonAsset);
  31. if(this.configKeys.has(jsonAsset.name)){
  32. configKey=this.configKeys.get(jsonAsset.name);
  33. }else{
  34. configKey="id";
  35. }
  36. if(json instanceof Array){
  37. list=[];
  38. map=new Map<any,any>();
  39. for (let index = 0; index < json.length; index++) {
  40. const item = json[index];
  41. if(Object.prototype.hasOwnProperty.call(item, configKey)){
  42. configValue=item[configKey];
  43. map.set(configValue,item);
  44. list.push(item);
  45. }else{
  46. //obj配置类型表
  47. if(json.length==1){
  48. this.objConfigMap.set(jsonAsset.name,item);
  49. }else{
  50. cc.log(jsonAsset.name+"主KEY不存在!");
  51. break;
  52. }
  53. }
  54. }
  55. }
  56. if(list&&list.length){
  57. this.configList.set(jsonAsset.name,list);
  58. }
  59. if(map&&map.size>0){
  60. this.configMap.set(jsonAsset.name,map);
  61. }
  62. });
  63. }
  64. /**
  65. * 获取obj配置中的数据
  66. * @param configName
  67. * @param key
  68. */
  69. GetConfigObjValue(configName:string,key:string):any{
  70. if(this.objConfigMap.has(configName)==false){
  71. throw new Error("找不到配置:"+configName);
  72. }
  73. let obj=this.objConfigMap.get(configName);
  74. if(Object.prototype.hasOwnProperty.call(obj,key)==false){
  75. throw new Error("配置表:"+configName+"没有"+key+"属性!");
  76. }
  77. return obj[key];
  78. }
  79. /**
  80. * 获取配置表中的某一项
  81. * @param configName
  82. * @param key
  83. */
  84. GetConfigItem(configName:string,key:any):any{
  85. let map:Map<any,any>=this.configMap.get(configName);
  86. if(map){
  87. return map.get(key);
  88. }
  89. return null;
  90. }
  91. /**
  92. * 获取配置列表
  93. * @param configName
  94. */
  95. GetConfigList(configName:string):any[]{
  96. return this.configList.get(configName);
  97. }
  98. /**
  99. * 直接获得原始配置数据
  100. * @param configName
  101. */
  102. GetConfig(configName:string):cc.JsonAsset{
  103. if(this.jsonMap.has(configName)==false){
  104. throw new Error("没找到配置数据:"+configName);
  105. }
  106. return this.jsonMap.get(configName);
  107. }
  108. /**
  109. * 单例
  110. */
  111. private static instance:ConfigManager;
  112. public static get single():ConfigManager{
  113. if(this.instance==null){
  114. this.instance=new ConfigManager();
  115. }
  116. return this.instance;
  117. }
  118. }