NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Unit/Data/UnitContainer.cs

82 lines
2.2 KiB
C#

using System.Collections.Generic;
namespace Gameplay.Unit.Data
{
public class UnitContainer
{
private List<GameUnit> _unitList = new List<GameUnit>();
private Dictionary<uint, GameUnit> _unitDict = new Dictionary<uint, GameUnit>();
public List<GameUnit> 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];
}
}
}