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