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

95 lines
2.5 KiB
C#
Raw Normal View History

2023-12-14 14:42:27 +08:00
using System.Collections.Generic;
namespace Gameplay.Unit.Data
{
public class UnitContainer
{
2023-12-15 15:12:01 +08:00
private readonly List<GameUnit> _unitList = new List<GameUnit>();
private readonly Dictionary<uint, GameUnit> _unitDict = new Dictionary<uint, GameUnit>();
2023-12-14 14:42:27 +08:00
2023-12-14 19:10:53 +08:00
public List<GameUnit> unitList
{
get
{
return _unitList;
}
}
public int count { get; private set; }
2023-12-14 14:42:27 +08:00
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++;
2023-12-25 19:00:08 +08:00
_OnAdd(unit);
}
protected virtual void _OnAdd(GameUnit unit)
{
2023-12-14 14:42:27 +08:00
}
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--;
2023-12-25 19:00:08 +08:00
_OnRemove(unit);
}
protected virtual void _OnRemove(GameUnit unit)
{
2023-12-14 14:42:27 +08:00
}
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--;
2023-12-25 19:00:08 +08:00
_OnRemove(unit);
2023-12-14 14:42:27 +08:00
}
2023-12-14 19:10:53 +08:00
public bool Contains(uint guid)
{
return _unitDict.ContainsKey(guid);
}
2023-12-14 14:42:27 +08:00
public GameUnit Search(uint guid)
{
if (_unitDict.TryGetValue(guid, out var unit))
{
return unit;
}
2023-12-14 15:31:46 +08:00
DebugUtil.LogError("不存在指定guid的单位:{0}", guid);
2023-12-14 14:42:27 +08:00
return null;
}
public GameUnit GetByIndex(int index)
{
if (index < 0 || index >= _unitList.Count) {
2023-12-14 15:31:46 +08:00
DebugUtil.LogError("不存在指定index的单位:{0}", index);
2023-12-14 14:42:27 +08:00
return null;
}
return _unitList[index];
}
}
}