163 lines
5.1 KiB
C#
163 lines
5.1 KiB
C#
// ***********************************************************************
|
|
// Assembly : Unity
|
|
// Author : Kimch
|
|
// Created : 2019-06-01
|
|
// Description : 实体表现类
|
|
// Last Modified By :
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
// <copyright file= "EntityView" company="DefaultCompany"></copyright>
|
|
// <summary></summary>
|
|
// ***********************************************************************
|
|
|
|
using F.ObjectPool;
|
|
using UnityEngine;
|
|
|
|
namespace G
|
|
{
|
|
public class EntityView : System.IDisposable
|
|
{
|
|
private readonly Entity _entity;
|
|
|
|
/// <summary>
|
|
/// 所属实体
|
|
/// </summary>
|
|
public Entity entity
|
|
{
|
|
get { return _entity; }
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public bool initSuccess
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public GameObject gameObject
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Transform transform
|
|
{
|
|
get { return gameObject.transform; }
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Renderer mainRenderer
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
#region Method
|
|
|
|
public EntityView(Entity entity)
|
|
{
|
|
_entity = entity;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async void Init(System.Action callback)
|
|
{
|
|
var entityType = _entity.entityType;
|
|
switch (entityType)
|
|
{
|
|
case EntityType.Minion:
|
|
var minionItem = ItemProxy.Instance.GetStaticItem<ItemMinion>(_entity.itemId);
|
|
var minionPrefab = await AssetProxy.Instance.TryGetAssetAsync<GameObject>(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<ItemBoss>(_entity.itemId);
|
|
var bossPrefab = await AssetProxy.Instance.TryGetAssetAsync<GameObject>(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<GameObject>(chaPrefabName, EntityManager.ASSET_POOL_NAME).Task;
|
|
gameObject = Object.Instantiate(chaPrefab, playerEntity.transform);
|
|
gameObject.SetActive(true);
|
|
gameObject.AddComponent<Cha_AnimationEvent>();
|
|
//playerEntity.SetModel(gameObject);
|
|
mainRenderer = gameObject.GetComponentInChildren<SkinnedMeshRenderer>();
|
|
callback?.Invoke();
|
|
break;
|
|
case EntityType.Pet:
|
|
var petEntity = (EntityPet)_entity;
|
|
var petPrefab = await AssetProxy.Instance.TryGetAssetAsync<GameObject>(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
|
|
}
|
|
}
|