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