using System.Collections.Generic; namespace Gameplay.Unit.Data { public class UnitContainer { private List _unitList = new List(); private Dictionary _unitDict = new Dictionary(); public List unitList { get { return _unitList; } } public int count { get; private set; } public void Add(GameUnit unit) { var guid = unit.GetID(); if (_unitDict.ContainsKey(guid)) { DebugUtil.LogError("已存在相同guid的单位:{0}", guid); return; } _unitDict.Add(guid, unit); _unitList.Add(unit); count++; } public void Remove(GameUnit unit) { var guid = unit.GetID(); if (!_unitDict.ContainsKey(guid)) { DebugUtil.LogError("不存在相同guid的单位:{0}", guid); return; } _unitDict.Remove(guid); _unitList.Remove(unit); count--; } public void RemoveAt(int index) { if (index < 0 || index >= _unitList.Count) { DebugUtil.LogError("不存在相同index的单位:{0}", index); return; } var unit = _unitList[index]; _unitDict.Remove(unit.GetID()); _unitList.RemoveAt(index); count--; } public bool Contains(uint guid) { return _unitDict.ContainsKey(guid); } public GameUnit Search(uint guid) { if (_unitDict.TryGetValue(guid, out var unit)) { return unit; } DebugUtil.LogError("不存在指定guid的单位:{0}", guid); return null; } public GameUnit GetByIndex(int index) { if (index < 0 || index >= _unitList.Count) { DebugUtil.LogError("不存在指定index的单位:{0}", index); return null; } return _unitList[index]; } } }