using System.Collections.Generic;
using System.Linq;
using MongoDB.Bson.Serialization.Attributes;
namespace Base
{
///
/// 父子层级信息
///
public class ChildrenComponent: Component
{
[BsonIgnore]
public Unit Parent { get; private set; }
private readonly Dictionary idChildren = new Dictionary();
[BsonIgnore]
public int Count
{
get
{
return this.idChildren.Count;
}
}
public void Add(Unit unit)
{
unit.GetComponent().Parent = this.Owner;
this.idChildren.Add(unit.Id, unit);
}
public Unit Get(long id)
{
Unit unit = null;
this.idChildren.TryGetValue(id, out unit);
return unit;
}
public Unit[] GetChildren()
{
return this.idChildren.Values.ToArray();
}
private void Remove(Unit unit)
{
this.idChildren.Remove(unit.Id);
unit.Dispose();
}
public void Remove(long id)
{
Unit unit;
if (!this.idChildren.TryGetValue(id, out unit))
{
return;
}
this.Remove(unit);
}
public override void Dispose()
{
if (this.Id == 0)
{
return;
}
base.Dispose();
foreach (Unit entity in this.idChildren.Values.ToArray())
{
entity.Dispose();
}
this.Parent?.GetComponent().Remove(this.Id);
}
}
public static partial class ChildrenHelper
{
public static void Add(this Unit unit, Unit child)
{
unit.GetComponent().Add(child);
}
public static void Remove(this Unit unit, long id)
{
unit.GetComponent().Remove(id);
}
}
}