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