// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2019-06-01
// Description : 实体表现类
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using F.ObjectPool;
using UnityEngine;
namespace G
{
public class EntityView : System.IDisposable
{
private readonly Entity _entity;
///
/// 所属实体
///
public Entity entity
{
get { return _entity; }
}
///
///
///
public bool initSuccess
{
get;
private set;
}
///
///
///
public GameObject gameObject
{
get;
private set;
}
///
///
///
public Transform transform
{
get { return gameObject.transform; }
}
///
///
///
public Renderer mainRenderer
{
get;
private set;
}
#region Method
public EntityView(Entity entity)
{
_entity = entity;
}
///
///
///
///
public async void Init(System.Action callback)
{
var entityType = _entity.entityType;
switch (entityType)
{
case EntityType.Minion:
var minionItem = ItemProxy.Instance.GetStaticItem(_entity.itemId);
var minionPrefab = await AssetProxy.Instance.TryGetAssetAsync(minionItem.assets.ToLower(), EntityManager.ASSET_POOL_NAME).Task;
gameObject = SpawnPool.Spawn(minionPrefab, Vector3.zero, Vector3.zero, _entity.transform);
callback?.Invoke();
break;
case EntityType.Boss:
var bossItem = ItemProxy.Instance.GetStaticItem(_entity.itemId);
var bossPrefab = await AssetProxy.Instance.TryGetAssetAsync(bossItem.assets.ToLower(), EntityManager.ASSET_POOL_NAME).Task;
gameObject = SpawnPool.Spawn(bossPrefab, Vector3.zero, Vector3.zero, _entity.transform);
callback?.Invoke();
break;
case EntityType.MainPlayer:
var playerEntity = (EntityPlayer)_entity;
//var chaSkin = PlayerProxy.Instance.GetCurrentChaSkin();
//int skinIndex = chaSkin != null ? Mathf.Clamp(chaSkin.id - 2000 + 1, 1, 4) : 1;
var chaPrefabName = PlayerProxy.Instance.GetCurrentChaModel();
var chaPrefab = await AssetProxy.Instance.TryGetAssetAsync(chaPrefabName, EntityManager.ASSET_POOL_NAME).Task;
gameObject = Object.Instantiate(chaPrefab, playerEntity.transform);
gameObject.SetActive(true);
gameObject.AddComponent();
//playerEntity.SetModel(gameObject);
mainRenderer = gameObject.GetComponentInChildren();
callback?.Invoke();
break;
case EntityType.Pet:
var petEntity = (EntityPet)_entity;
var petPrefab = await AssetProxy.Instance.TryGetAssetAsync(petEntity.petAsset, EntityManager.ASSET_POOL_NAME).Task;
gameObject = Object.Instantiate(petPrefab, petEntity.transform);
gameObject.SetActive(true);
callback?.Invoke();
break;
default:
callback?.Invoke();
break;
}
this.initSuccess = true;
}
public void Disappear()
{
if (gameObject)
gameObject.SetActive(false);
}
public void Appear()
{
if (gameObject)
gameObject.SetActive(true);
}
public void OnUpdate(float deltaTime)
{
}
#endregion
#region IDisposable Support
// 添加此代码以正确实现可处置模式。
public void Dispose()
{
switch (_entity.entityType)
{
case EntityType.Minion:
case EntityType.Boss:
if (gameObject)
{
SpawnPool.Despawn(gameObject);
gameObject = null;
}
break;
default:
break;
}
}
#endregion
}
}