using System; using System.Collections.Generic; using System.Text.Json; using Godot; namespace Config; public static partial class ExcelConfig { /// <summary> /// BuffPropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<BuffPropBase> BuffPropBase_List { get; private set; } /// <summary> /// BuffPropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, BuffPropBase> BuffPropBase_Map { get; private set; } /// <summary> /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<Sound> Sound_List { get; private set; } /// <summary> /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, Sound> Sound_Map { get; private set; } /// <summary> /// WeaponBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<WeaponBase> WeaponBase_List { get; private set; } /// <summary> /// WeaponBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, WeaponBase> WeaponBase_Map { get; private set; } /// <summary> /// ActivityMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<ActivityMaterial> ActivityMaterial_List { get; private set; } /// <summary> /// ActivityMaterial.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, ActivityMaterial> ActivityMaterial_Map { get; private set; } /// <summary> /// EditorObject.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<EditorObject> EditorObject_List { get; private set; } /// <summary> /// EditorObject.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, EditorObject> EditorObject_Map { get; private set; } /// <summary> /// AiAttackAttr.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<AiAttackAttr> AiAttackAttr_List { get; private set; } /// <summary> /// AiAttackAttr.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, AiAttackAttr> AiAttackAttr_Map { get; private set; } /// <summary> /// BulletBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<BulletBase> BulletBase_List { get; private set; } /// <summary> /// BulletBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, BulletBase> BulletBase_Map { get; private set; } /// <summary> /// ActivePropBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<ActivePropBase> ActivePropBase_List { get; private set; } /// <summary> /// ActivePropBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, ActivePropBase> ActivePropBase_Map { get; private set; } /// <summary> /// EnemyBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<EnemyBase> EnemyBase_List { get; private set; } /// <summary> /// EnemyBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, EnemyBase> EnemyBase_Map { get; private set; } /// <summary> /// ActivityBase.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<ActivityBase> ActivityBase_List { get; private set; } /// <summary> /// ActivityBase.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, ActivityBase> ActivityBase_Map { get; private set; } /// <summary> /// LiquidMaterial.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同 /// </summary> public static List<LiquidMaterial> LiquidMaterial_List { get; private set; } /// <summary> /// LiquidMaterial.xlsx表数据集合, 里 Map 形式存储, key 为 Id /// </summary> public static Dictionary<string, LiquidMaterial> LiquidMaterial_Map { get; private set; } private static bool _init = false; /// <summary> /// 初始化所有配置表数据 /// </summary> public static void Init() { if (_init) return; _init = true; _InitBuffPropBaseConfig(); _InitSoundConfig(); _InitWeaponBaseConfig(); _InitActivityMaterialConfig(); _InitEditorObjectConfig(); _InitAiAttackAttrConfig(); _InitBulletBaseConfig(); _InitActivePropBaseConfig(); _InitEnemyBaseConfig(); _InitActivityBaseConfig(); _InitLiquidMaterialConfig(); _InitBuffPropBaseRef(); _InitWeaponBaseRef(); _InitActivePropBaseRef(); _InitEnemyBaseRef(); _InitActivityBaseRef(); } private static void _InitBuffPropBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/BuffPropBase.json"); BuffPropBase_List = new List<BuffPropBase>(JsonSerializer.Deserialize<List<Ref_BuffPropBase>>(text)); BuffPropBase_Map = new Dictionary<string, BuffPropBase>(); foreach (var item in BuffPropBase_List) { BuffPropBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'BuffPropBase'失败!"); } } private static void _InitSoundConfig() { try { var text = _ReadConfigAsText("res://resource/config/Sound.json"); Sound_List = JsonSerializer.Deserialize<List<Sound>>(text); Sound_Map = new Dictionary<string, Sound>(); foreach (var item in Sound_List) { Sound_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'Sound'失败!"); } } private static void _InitWeaponBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/WeaponBase.json"); WeaponBase_List = new List<WeaponBase>(JsonSerializer.Deserialize<List<Ref_WeaponBase>>(text)); WeaponBase_Map = new Dictionary<string, WeaponBase>(); foreach (var item in WeaponBase_List) { WeaponBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'WeaponBase'失败!"); } } private static void _InitActivityMaterialConfig() { try { var text = _ReadConfigAsText("res://resource/config/ActivityMaterial.json"); ActivityMaterial_List = JsonSerializer.Deserialize<List<ActivityMaterial>>(text); ActivityMaterial_Map = new Dictionary<string, ActivityMaterial>(); foreach (var item in ActivityMaterial_List) { ActivityMaterial_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'ActivityMaterial'失败!"); } } private static void _InitEditorObjectConfig() { try { var text = _ReadConfigAsText("res://resource/config/EditorObject.json"); EditorObject_List = JsonSerializer.Deserialize<List<EditorObject>>(text); EditorObject_Map = new Dictionary<string, EditorObject>(); foreach (var item in EditorObject_List) { EditorObject_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'EditorObject'失败!"); } } private static void _InitAiAttackAttrConfig() { try { var text = _ReadConfigAsText("res://resource/config/AiAttackAttr.json"); AiAttackAttr_List = JsonSerializer.Deserialize<List<AiAttackAttr>>(text); AiAttackAttr_Map = new Dictionary<string, AiAttackAttr>(); foreach (var item in AiAttackAttr_List) { AiAttackAttr_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'AiAttackAttr'失败!"); } } private static void _InitBulletBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/BulletBase.json"); BulletBase_List = JsonSerializer.Deserialize<List<BulletBase>>(text); BulletBase_Map = new Dictionary<string, BulletBase>(); foreach (var item in BulletBase_List) { BulletBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'BulletBase'失败!"); } } private static void _InitActivePropBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/ActivePropBase.json"); ActivePropBase_List = new List<ActivePropBase>(JsonSerializer.Deserialize<List<Ref_ActivePropBase>>(text)); ActivePropBase_Map = new Dictionary<string, ActivePropBase>(); foreach (var item in ActivePropBase_List) { ActivePropBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'ActivePropBase'失败!"); } } private static void _InitEnemyBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/EnemyBase.json"); EnemyBase_List = new List<EnemyBase>(JsonSerializer.Deserialize<List<Ref_EnemyBase>>(text)); EnemyBase_Map = new Dictionary<string, EnemyBase>(); foreach (var item in EnemyBase_List) { EnemyBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'EnemyBase'失败!"); } } private static void _InitActivityBaseConfig() { try { var text = _ReadConfigAsText("res://resource/config/ActivityBase.json"); ActivityBase_List = new List<ActivityBase>(JsonSerializer.Deserialize<List<Ref_ActivityBase>>(text)); ActivityBase_Map = new Dictionary<string, ActivityBase>(); foreach (var item in ActivityBase_List) { ActivityBase_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'ActivityBase'失败!"); } } private static void _InitLiquidMaterialConfig() { try { var text = _ReadConfigAsText("res://resource/config/LiquidMaterial.json"); LiquidMaterial_List = JsonSerializer.Deserialize<List<LiquidMaterial>>(text); LiquidMaterial_Map = new Dictionary<string, LiquidMaterial>(); foreach (var item in LiquidMaterial_List) { LiquidMaterial_Map.Add(item.Id, item); } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化表'LiquidMaterial'失败!"); } } private static void _InitBuffPropBaseRef() { foreach (Ref_BuffPropBase item in BuffPropBase_List) { try { if (!string.IsNullOrEmpty(item.__Activity)) { item.Activity = ActivityBase_Map[item.__Activity]; } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化'BuffPropBase'引用其他表数据失败, 当前行id: " + item.Id); } } } private static void _InitWeaponBaseRef() { foreach (Ref_WeaponBase item in WeaponBase_List) { try { if (!string.IsNullOrEmpty(item.__Activity)) { item.Activity = ActivityBase_Map[item.__Activity]; } if (!string.IsNullOrEmpty(item.__Bullet)) { item.Bullet = BulletBase_Map[item.__Bullet]; } if (!string.IsNullOrEmpty(item.__Shell)) { item.Shell = ActivityBase_Map[item.__Shell]; } if (!string.IsNullOrEmpty(item.__ShootSound)) { item.ShootSound = Sound_Map[item.__ShootSound]; } if (!string.IsNullOrEmpty(item.__BeginReloadSound)) { item.BeginReloadSound = Sound_Map[item.__BeginReloadSound]; } if (!string.IsNullOrEmpty(item.__ReloadSound)) { item.ReloadSound = Sound_Map[item.__ReloadSound]; } if (!string.IsNullOrEmpty(item.__ReloadFinishSound)) { item.ReloadFinishSound = Sound_Map[item.__ReloadFinishSound]; } if (!string.IsNullOrEmpty(item.__BeLoadedSound)) { item.BeLoadedSound = Sound_Map[item.__BeLoadedSound]; } if (item.__OtherSoundMap != null) { item.OtherSoundMap = new Dictionary<string, Sound>(); foreach (var pair in item.__OtherSoundMap) { item.OtherSoundMap.Add(pair.Key, Sound_Map[pair.Value]); } } if (!string.IsNullOrEmpty(item.__AiAttackAttr)) { item.AiAttackAttr = AiAttackAttr_Map[item.__AiAttackAttr]; } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化'WeaponBase'引用其他表数据失败, 当前行id: " + item.Id); } } } private static void _InitActivePropBaseRef() { foreach (Ref_ActivePropBase item in ActivePropBase_List) { try { if (!string.IsNullOrEmpty(item.__Activity)) { item.Activity = ActivityBase_Map[item.__Activity]; } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化'ActivePropBase'引用其他表数据失败, 当前行id: " + item.Id); } } } private static void _InitEnemyBaseRef() { foreach (Ref_EnemyBase item in EnemyBase_List) { try { if (!string.IsNullOrEmpty(item.__Activity)) { item.Activity = ActivityBase_Map[item.__Activity]; } if (!string.IsNullOrEmpty(item.__BodyFragment)) { item.BodyFragment = ActivityBase_Map[item.__BodyFragment]; } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化'EnemyBase'引用其他表数据失败, 当前行id: " + item.Id); } } } private static void _InitActivityBaseRef() { foreach (Ref_ActivityBase item in ActivityBase_List) { try { if (!string.IsNullOrEmpty(item.__Material)) { item.Material = ActivityMaterial_Map[item.__Material]; } } catch (Exception e) { GD.PrintErr(e.ToString()); throw new Exception("初始化'ActivityBase'引用其他表数据失败, 当前行id: " + item.Id); } } } private static string _ReadConfigAsText(string path) { var file = FileAccess.Open(path, FileAccess.ModeFlags.Read); var asText = file.GetAsText(); file.Dispose(); return asText; } }