123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Fort23.UTool;
- namespace Fort23.GameData
- {
- public abstract class ConfigHolder
- {
- public bool IsChild { get; set; }
- public abstract Type ConfigType { get; }
- public abstract IConfig GetFirst();
- public abstract List<IConfig> GetAll();
- public abstract IConfig TryGet(int type);
- public abstract void SetConfig(List<IConfig> config);
- public abstract void AddChild(ConfigHolder child);
- // public abstract void Add
- public virtual void Init()
- {
- }
- }
- /// <summary>
- /// 管理所有的配置
- /// </summary>
- /// <typeparam name="T"></typeparam>
- [Serializable]
- public abstract class ConfigHolder<T> : ConfigHolder where T : IConfig
- {
- public List<T> configList;
- private Dictionary<int, IConfig> _dictionary;
- private List<ConfigHolder> _children;
- public override void Init()
- {
- _dictionary = new Dictionary<int, IConfig>();
- _children = new List<ConfigHolder>();
- foreach (var config in configList)
- {
- _dictionary.Add(config.GetID(), config);
- }
- }
- public override void AddChild(ConfigHolder child)
- {
- child.IsChild = true;
- _children.Add(child);
- }
- public override void SetConfig(List<IConfig> config)
- {
- if (configList != null)
- {
- return;
- }
- configList = new List<T>();
- for (int i = 0; i < config.Count; i++)
- {
- configList.Add((T)config[i]);
- }
- }
- public override Type ConfigType
- {
- get { return typeof(T); }
- }
- public override IConfig TryGet(int ID)
- {
- if (ID <= 0)
- {
- LogTool.Log($"在表{typeof(T)}中没有找到ID:{ID}");
- return null;
- }
- IConfig t;
- if (!_dictionary.TryGetValue(ID, out t))
- {
- for (int i = 0; i < _children.Count; i++)
- {
- IConfig config = _children[i].TryGet(ID);
- if (config != null)
- {
- return config;
- }
- }
- if (!IsChild)
- {
- LogTool.Log($"在表{typeof(T)}中没有找到ID:{ID}————{_dictionary.Count}");
- }
- return null;
- }
- return t;
- }
- public override List<IConfig> GetAll()
- {
- List<IConfig> configs = _dictionary.Values.ToList();
- for (int i = 0; i < _children.Count; i++)
- {
- configs.AddRange(_children[i].GetAll());
- }
- return configs;
- }
- public override IConfig GetFirst()
- {
- return _dictionary.Values.First();
- }
- }
- }
|