//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 loyalsoft. All rights reserved.
// Homepage: http://www.game7000.com/
// Feedback: http://www.game7000.com/
//------------------------------------------------------------
using System.Collections.Generic;
namespace GameFramework.Entity
{
internal sealed partial class EntityManager : GameFrameworkModule, IEntityManager
{
///
/// 实体信息。
///
private sealed class EntityInfo : IReference
{
private IEntity m_Entity;
private EntityStatus m_Status;
private IEntity m_ParentEntity;
private List m_ChildEntities;
public EntityInfo()
{
m_Entity = null;
m_Status = EntityStatus.Unknown;
m_ParentEntity = null;
m_ChildEntities = new List();
}
public IEntity Entity
{
get
{
return m_Entity;
}
}
public EntityStatus Status
{
get
{
return m_Status;
}
set
{
m_Status = value;
}
}
public IEntity ParentEntity
{
get
{
return m_ParentEntity;
}
set
{
m_ParentEntity = value;
}
}
public int ChildEntityCount
{
get
{
return m_ChildEntities.Count;
}
}
public static EntityInfo Create(IEntity entity)
{
if (entity == null)
{
throw new GameFrameworkException("Entity is invalid.");
}
EntityInfo entityInfo = ReferencePool.Acquire();
entityInfo.m_Entity = entity;
entityInfo.m_Status = EntityStatus.WillInit;
return entityInfo;
}
public void Clear()
{
m_Entity = null;
m_Status = EntityStatus.Unknown;
m_ParentEntity = null;
m_ChildEntities.Clear();
}
public IEntity GetChildEntity()
{
return m_ChildEntities.Count > 0 ? m_ChildEntities[0] : null;
}
public IEntity[] GetChildEntities()
{
return m_ChildEntities.ToArray();
}
public void GetChildEntities(List results)
{
if (results == null)
{
throw new GameFrameworkException("Results is invalid.");
}
results.Clear();
foreach (IEntity childEntity in m_ChildEntities)
{
results.Add(childEntity);
}
}
public void AddChildEntity(IEntity childEntity)
{
if (m_ChildEntities.Contains(childEntity))
{
throw new GameFrameworkException("Can not add child entity which is already exist.");
}
m_ChildEntities.Add(childEntity);
}
public void RemoveChildEntity(IEntity childEntity)
{
if (!m_ChildEntities.Remove(childEntity))
{
throw new GameFrameworkException("Can not remove child entity which is not exist.");
}
}
}
}
}