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