69 lines
2.0 KiB
C#
69 lines
2.0 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 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 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];
|
|
}
|
|
}
|
|
}
|