Newer
Older
DungeonShooting / DungeonShooting_Godot / src / config / ExcelConfig.cs
@小李xl 小李xl on 28 Nov 2023 12 KB 将将液体材质抽成配置表
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.Json;
  4. using Godot;
  5.  
  6. namespace Config;
  7.  
  8. public static partial class ExcelConfig
  9. {
  10. /// <summary>
  11. /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  12. /// </summary>
  13. public static List<ActivityBase> ActivityBase_List { get; private set; }
  14. /// <summary>
  15. /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  16. /// </summary>
  17. public static Dictionary<string, ActivityBase> ActivityBase_Map { get; private set; }
  18.  
  19. /// <summary>
  20. /// ActivityMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  21. /// </summary>
  22. public static List<ActivityMaterial> ActivityMaterial_List { get; private set; }
  23. /// <summary>
  24. /// ActivityMaterial.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  25. /// </summary>
  26. public static Dictionary<string, ActivityMaterial> ActivityMaterial_Map { get; private set; }
  27.  
  28. /// <summary>
  29. /// AiAttackAttr.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  30. /// </summary>
  31. public static List<AiAttackAttr> AiAttackAttr_List { get; private set; }
  32. /// <summary>
  33. /// AiAttackAttr.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  34. /// </summary>
  35. public static Dictionary<string, AiAttackAttr> AiAttackAttr_Map { get; private set; }
  36.  
  37. /// <summary>
  38. /// BulletBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  39. /// </summary>
  40. public static List<BulletBase> BulletBase_List { get; private set; }
  41. /// <summary>
  42. /// BulletBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  43. /// </summary>
  44. public static Dictionary<string, BulletBase> BulletBase_Map { get; private set; }
  45.  
  46. /// <summary>
  47. /// EnemyBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  48. /// </summary>
  49. public static List<EnemyBase> EnemyBase_List { get; private set; }
  50. /// <summary>
  51. /// EnemyBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  52. /// </summary>
  53. public static Dictionary<string, EnemyBase> EnemyBase_Map { get; private set; }
  54.  
  55. /// <summary>
  56. /// LiquidMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  57. /// </summary>
  58. public static List<LiquidMaterial> LiquidMaterial_List { get; private set; }
  59. /// <summary>
  60. /// LiquidMaterial.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  61. /// </summary>
  62. public static Dictionary<string, LiquidMaterial> LiquidMaterial_Map { get; private set; }
  63.  
  64. /// <summary>
  65. /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  66. /// </summary>
  67. public static List<Sound> Sound_List { get; private set; }
  68. /// <summary>
  69. /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  70. /// </summary>
  71. public static Dictionary<string, Sound> Sound_Map { get; private set; }
  72.  
  73. /// <summary>
  74. /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
  75. /// </summary>
  76. public static List<WeaponBase> WeaponBase_List { get; private set; }
  77. /// <summary>
  78. /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id
  79. /// </summary>
  80. public static Dictionary<string, WeaponBase> WeaponBase_Map { get; private set; }
  81.  
  82.  
  83. private static bool _init = false;
  84. /// <summary>
  85. /// 初始化所有配置表数据
  86. /// </summary>
  87. public static void Init()
  88. {
  89. if (_init) return;
  90. _init = true;
  91.  
  92. _InitActivityBaseConfig();
  93. _InitActivityMaterialConfig();
  94. _InitAiAttackAttrConfig();
  95. _InitBulletBaseConfig();
  96. _InitEnemyBaseConfig();
  97. _InitLiquidMaterialConfig();
  98. _InitSoundConfig();
  99. _InitWeaponBaseConfig();
  100.  
  101. _InitActivityBaseRef();
  102. _InitEnemyBaseRef();
  103. _InitWeaponBaseRef();
  104. }
  105. private static void _InitActivityBaseConfig()
  106. {
  107. try
  108. {
  109. var text = _ReadConfigAsText("res://resource/config/ActivityBase.json");
  110. ActivityBase_List = new List<ActivityBase>(JsonSerializer.Deserialize<List<Ref_ActivityBase>>(text));
  111. ActivityBase_Map = new Dictionary<string, ActivityBase>();
  112. foreach (var item in ActivityBase_List)
  113. {
  114. ActivityBase_Map.Add(item.Id, item);
  115. }
  116. }
  117. catch (Exception e)
  118. {
  119. GD.PrintErr(e.ToString());
  120. throw new Exception("初始化表'ActivityBase'失败!");
  121. }
  122. }
  123. private static void _InitActivityMaterialConfig()
  124. {
  125. try
  126. {
  127. var text = _ReadConfigAsText("res://resource/config/ActivityMaterial.json");
  128. ActivityMaterial_List = JsonSerializer.Deserialize<List<ActivityMaterial>>(text);
  129. ActivityMaterial_Map = new Dictionary<string, ActivityMaterial>();
  130. foreach (var item in ActivityMaterial_List)
  131. {
  132. ActivityMaterial_Map.Add(item.Id, item);
  133. }
  134. }
  135. catch (Exception e)
  136. {
  137. GD.PrintErr(e.ToString());
  138. throw new Exception("初始化表'ActivityMaterial'失败!");
  139. }
  140. }
  141. private static void _InitAiAttackAttrConfig()
  142. {
  143. try
  144. {
  145. var text = _ReadConfigAsText("res://resource/config/AiAttackAttr.json");
  146. AiAttackAttr_List = JsonSerializer.Deserialize<List<AiAttackAttr>>(text);
  147. AiAttackAttr_Map = new Dictionary<string, AiAttackAttr>();
  148. foreach (var item in AiAttackAttr_List)
  149. {
  150. AiAttackAttr_Map.Add(item.Id, item);
  151. }
  152. }
  153. catch (Exception e)
  154. {
  155. GD.PrintErr(e.ToString());
  156. throw new Exception("初始化表'AiAttackAttr'失败!");
  157. }
  158. }
  159. private static void _InitBulletBaseConfig()
  160. {
  161. try
  162. {
  163. var text = _ReadConfigAsText("res://resource/config/BulletBase.json");
  164. BulletBase_List = JsonSerializer.Deserialize<List<BulletBase>>(text);
  165. BulletBase_Map = new Dictionary<string, BulletBase>();
  166. foreach (var item in BulletBase_List)
  167. {
  168. BulletBase_Map.Add(item.Id, item);
  169. }
  170. }
  171. catch (Exception e)
  172. {
  173. GD.PrintErr(e.ToString());
  174. throw new Exception("初始化表'BulletBase'失败!");
  175. }
  176. }
  177. private static void _InitEnemyBaseConfig()
  178. {
  179. try
  180. {
  181. var text = _ReadConfigAsText("res://resource/config/EnemyBase.json");
  182. EnemyBase_List = new List<EnemyBase>(JsonSerializer.Deserialize<List<Ref_EnemyBase>>(text));
  183. EnemyBase_Map = new Dictionary<string, EnemyBase>();
  184. foreach (var item in EnemyBase_List)
  185. {
  186. EnemyBase_Map.Add(item.Id, item);
  187. }
  188. }
  189. catch (Exception e)
  190. {
  191. GD.PrintErr(e.ToString());
  192. throw new Exception("初始化表'EnemyBase'失败!");
  193. }
  194. }
  195. private static void _InitLiquidMaterialConfig()
  196. {
  197. try
  198. {
  199. var text = _ReadConfigAsText("res://resource/config/LiquidMaterial.json");
  200. LiquidMaterial_List = JsonSerializer.Deserialize<List<LiquidMaterial>>(text);
  201. LiquidMaterial_Map = new Dictionary<string, LiquidMaterial>();
  202. foreach (var item in LiquidMaterial_List)
  203. {
  204. LiquidMaterial_Map.Add(item.Id, item);
  205. }
  206. }
  207. catch (Exception e)
  208. {
  209. GD.PrintErr(e.ToString());
  210. throw new Exception("初始化表'LiquidMaterial'失败!");
  211. }
  212. }
  213. private static void _InitSoundConfig()
  214. {
  215. try
  216. {
  217. var text = _ReadConfigAsText("res://resource/config/Sound.json");
  218. Sound_List = JsonSerializer.Deserialize<List<Sound>>(text);
  219. Sound_Map = new Dictionary<string, Sound>();
  220. foreach (var item in Sound_List)
  221. {
  222. Sound_Map.Add(item.Id, item);
  223. }
  224. }
  225. catch (Exception e)
  226. {
  227. GD.PrintErr(e.ToString());
  228. throw new Exception("初始化表'Sound'失败!");
  229. }
  230. }
  231. private static void _InitWeaponBaseConfig()
  232. {
  233. try
  234. {
  235. var text = _ReadConfigAsText("res://resource/config/WeaponBase.json");
  236. WeaponBase_List = new List<WeaponBase>(JsonSerializer.Deserialize<List<Ref_WeaponBase>>(text));
  237. WeaponBase_Map = new Dictionary<string, WeaponBase>();
  238. foreach (var item in WeaponBase_List)
  239. {
  240. WeaponBase_Map.Add(item.Id, item);
  241. }
  242. }
  243. catch (Exception e)
  244. {
  245. GD.PrintErr(e.ToString());
  246. throw new Exception("初始化表'WeaponBase'失败!");
  247. }
  248. }
  249.  
  250. private static void _InitActivityBaseRef()
  251. {
  252. foreach (Ref_ActivityBase item in ActivityBase_List)
  253. {
  254. try
  255. {
  256. if (!string.IsNullOrEmpty(item.__Material))
  257. {
  258. item.Material = ActivityMaterial_Map[item.__Material];
  259. }
  260.  
  261. }
  262. catch (Exception e)
  263. {
  264. GD.PrintErr(e.ToString());
  265. throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id);
  266. }
  267. }
  268. }
  269. private static void _InitEnemyBaseRef()
  270. {
  271. foreach (Ref_EnemyBase item in EnemyBase_List)
  272. {
  273. try
  274. {
  275. if (!string.IsNullOrEmpty(item.__Activity))
  276. {
  277. item.Activity = ActivityBase_Map[item.__Activity];
  278. }
  279.  
  280. }
  281. catch (Exception e)
  282. {
  283. GD.PrintErr(e.ToString());
  284. throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id);
  285. }
  286. }
  287. }
  288. private static void _InitWeaponBaseRef()
  289. {
  290. foreach (Ref_WeaponBase item in WeaponBase_List)
  291. {
  292. try
  293. {
  294. if (!string.IsNullOrEmpty(item.__Activity))
  295. {
  296. item.Activity = ActivityBase_Map[item.__Activity];
  297. }
  298.  
  299. if (!string.IsNullOrEmpty(item.__Bullet))
  300. {
  301. item.Bullet = BulletBase_Map[item.__Bullet];
  302. }
  303.  
  304. if (!string.IsNullOrEmpty(item.__Shell))
  305. {
  306. item.Shell = ActivityBase_Map[item.__Shell];
  307. }
  308.  
  309. if (!string.IsNullOrEmpty(item.__ShootSound))
  310. {
  311. item.ShootSound = Sound_Map[item.__ShootSound];
  312. }
  313.  
  314. if (!string.IsNullOrEmpty(item.__BeginReloadSound))
  315. {
  316. item.BeginReloadSound = Sound_Map[item.__BeginReloadSound];
  317. }
  318.  
  319. if (!string.IsNullOrEmpty(item.__ReloadSound))
  320. {
  321. item.ReloadSound = Sound_Map[item.__ReloadSound];
  322. }
  323.  
  324. if (!string.IsNullOrEmpty(item.__ReloadFinishSound))
  325. {
  326. item.ReloadFinishSound = Sound_Map[item.__ReloadFinishSound];
  327. }
  328.  
  329. if (!string.IsNullOrEmpty(item.__BeLoadedSound))
  330. {
  331. item.BeLoadedSound = Sound_Map[item.__BeLoadedSound];
  332. }
  333.  
  334. if (item.__OtherSoundMap != null)
  335. {
  336. item.OtherSoundMap = new Dictionary<string, Sound>();
  337. foreach (var pair in item.__OtherSoundMap)
  338. {
  339. item.OtherSoundMap.Add(pair.Key, Sound_Map[pair.Value]);
  340. }
  341. }
  342.  
  343. if (!string.IsNullOrEmpty(item.__AiUseAttribute))
  344. {
  345. item.AiUseAttribute = WeaponBase_Map[item.__AiUseAttribute];
  346. }
  347.  
  348. if (!string.IsNullOrEmpty(item.__AiAttackAttr))
  349. {
  350. item.AiAttackAttr = AiAttackAttr_Map[item.__AiAttackAttr];
  351. }
  352.  
  353. }
  354. catch (Exception e)
  355. {
  356. GD.PrintErr(e.ToString());
  357. throw new Exception("初始化'WeaponBase'引用其他表数据失败, 当前行id: " + item.Id);
  358. }
  359. }
  360. }
  361. private static string _ReadConfigAsText(string path)
  362. {
  363. var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
  364. var asText = file.GetAsText();
  365. file.Dispose();
  366. return asText;
  367. }
  368. }