//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using GameFramework.ObjectPool;
namespace GameFramework.Entity
{
internal sealed partial class EntityManager : GameFrameworkModule, IEntityManager
{
///
/// 实体实例对象。
///
private sealed class EntityInstanceObject : ObjectBase
{
private object m_EntityAsset;
private IEntityHelper m_EntityHelper;
public EntityInstanceObject()
{
m_EntityAsset = null;
m_EntityHelper = null;
}
public static EntityInstanceObject Create(string name, object entityAsset, object entityInstance, IEntityHelper entityHelper)
{
if (entityAsset == null)
{
throw new GameFrameworkException("Entity asset is invalid.");
}
if (entityHelper == null)
{
throw new GameFrameworkException("Entity helper is invalid.");
}
EntityInstanceObject entityInstanceObject = ReferencePool.Acquire();
entityInstanceObject.Initialize(name, entityInstance);
entityInstanceObject.m_EntityAsset = entityAsset;
entityInstanceObject.m_EntityHelper = entityHelper;
return entityInstanceObject;
}
public override void Clear()
{
base.Clear();
m_EntityAsset = null;
m_EntityHelper = null;
}
protected internal override void Release(bool isShutdown)
{
m_EntityHelper.ReleaseEntity(m_EntityAsset, Target);
}
}
}
}