ConfigHolder.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Fort23.UTool;
  5. namespace Fort23.GameData
  6. {
  7. public abstract class ConfigHolder
  8. {
  9. public bool IsChild { get; set; }
  10. public abstract Type ConfigType { get; }
  11. public abstract IConfig GetFirst();
  12. public abstract List<IConfig> GetAll();
  13. public abstract IConfig TryGet(int type);
  14. public abstract void SetConfig(List<IConfig> config);
  15. public abstract void AddChild(ConfigHolder child);
  16. // public abstract void Add
  17. public virtual void Init()
  18. {
  19. }
  20. }
  21. /// <summary>
  22. /// 管理所有的配置
  23. /// </summary>
  24. /// <typeparam name="T"></typeparam>
  25. [Serializable]
  26. public abstract class ConfigHolder<T> : ConfigHolder where T : IConfig
  27. {
  28. public List<T> configList;
  29. private Dictionary<int, IConfig> _dictionary;
  30. private List<ConfigHolder> _children;
  31. public override void Init()
  32. {
  33. _dictionary = new Dictionary<int, IConfig>();
  34. _children = new List<ConfigHolder>();
  35. foreach (var config in configList)
  36. {
  37. _dictionary.Add(config.GetID(), config);
  38. }
  39. }
  40. public override void AddChild(ConfigHolder child)
  41. {
  42. child.IsChild = true;
  43. _children.Add(child);
  44. }
  45. public override void SetConfig(List<IConfig> config)
  46. {
  47. if (configList != null)
  48. {
  49. return;
  50. }
  51. configList = new List<T>();
  52. for (int i = 0; i < config.Count; i++)
  53. {
  54. configList.Add((T)config[i]);
  55. }
  56. }
  57. public override Type ConfigType
  58. {
  59. get { return typeof(T); }
  60. }
  61. public override IConfig TryGet(int ID)
  62. {
  63. if (ID <= 0)
  64. {
  65. LogTool.Log($"在表{typeof(T)}中没有找到ID:{ID}");
  66. return null;
  67. }
  68. IConfig t;
  69. if (!_dictionary.TryGetValue(ID, out t))
  70. {
  71. for (int i = 0; i < _children.Count; i++)
  72. {
  73. IConfig config = _children[i].TryGet(ID);
  74. if (config != null)
  75. {
  76. return config;
  77. }
  78. }
  79. if (!IsChild)
  80. {
  81. LogTool.Log($"在表{typeof(T)}中没有找到ID:{ID}————{_dictionary.Count}");
  82. }
  83. return null;
  84. }
  85. return t;
  86. }
  87. public override List<IConfig> GetAll()
  88. {
  89. List<IConfig> configs = _dictionary.Values.ToList();
  90. for (int i = 0; i < _children.Count; i++)
  91. {
  92. configs.AddRange(_children[i].GetAll());
  93. }
  94. return configs;
  95. }
  96. public override IConfig GetFirst()
  97. {
  98. return _dictionary.Values.First();
  99. }
  100. }
  101. }