156 lines
4.2 KiB
C#
156 lines
4.2 KiB
C#
using Fantasy.Async;
|
|
using Fantasy.Entitas;
|
|
using Fantasy.Entitas.Interface;
|
|
using NBF.Fishing2;
|
|
using NBF.Utils;
|
|
using UnityEngine;
|
|
|
|
namespace NBF
|
|
{
|
|
public class PlayerView : Entity
|
|
{
|
|
public Player Player { get; private set; }
|
|
|
|
public PlayerUnityComponent Unity { get; private set; }
|
|
|
|
#region 生命周期
|
|
|
|
public void Awake()
|
|
{
|
|
Player = GetParent<Player>();
|
|
var gameObject = PrefabsHelper.CreatePlayer(SceneSettings.Instance.Node);
|
|
Unity = gameObject.GetComponent<PlayerUnityComponent>();
|
|
Unity.Player = Player;
|
|
CreatePlayerModel();
|
|
if (Player.IsSelf)
|
|
{
|
|
CameraManager.Instance.SetFppLook(Unity);
|
|
}
|
|
|
|
Unity.transform.localPosition = new Vector3(484, 1, 422);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
}
|
|
|
|
public void LateUpdate()
|
|
{
|
|
Player.EyeAngle = GameUtils.GetVerticalAngle(Unity.transform, Unity.FppLook);
|
|
}
|
|
|
|
public void Destroy()
|
|
{
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 模型创建
|
|
|
|
private void CreatePlayerModel()
|
|
{
|
|
var modelObject = PrefabsHelper.CreatePlayer(Unity.Root, "Human_Male");
|
|
modelObject.transform.localPosition = Vector3.zero;
|
|
Unity.ModelAsset = modelObject.GetComponent<PlayerModelAsset>();
|
|
Unity.ModelAsset.SetPlayer(Unity.FppLook);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 物品切换
|
|
|
|
public async FTask ChangeItem(PlayerItemChangeEvent playerStateChangeEvent)
|
|
{
|
|
var prevItem = playerStateChangeEvent.PrevItem;
|
|
var currItem = playerStateChangeEvent.Item;
|
|
if (Player.IsChangeItemIng) return;
|
|
Player.IsChangeItemIng = true;
|
|
if (currItem == null)
|
|
{
|
|
//收起物品
|
|
await UnUseItem(prevItem);
|
|
}
|
|
else
|
|
{
|
|
// 先收起旧的物品
|
|
await UnUseItemConfirm(prevItem);
|
|
var handItem = Player.HandItem;
|
|
//拿起新物品
|
|
var itemType = handItem.ConfigID.GetItemType();
|
|
if (itemType == ItemType.Rod)
|
|
{
|
|
var itemView = handItem.GetOrAddComponent<PlayerItemView>();
|
|
await itemView.InitShow(handItem);
|
|
Unity.ModelAsset.PlayerAnimator.OnUseItem(itemView);
|
|
}
|
|
}
|
|
|
|
var stateView = Player.GetComponent<PlayerStateView>();
|
|
if (stateView != null && stateView.CurrentStateView is PlayerStageViewIdle playerStageViewIdle)
|
|
{
|
|
playerStageViewIdle.TakeLine();
|
|
}
|
|
|
|
Player.IsChangeItemIng = false;
|
|
}
|
|
|
|
#region 使用物品
|
|
|
|
public async FTask UnUseItem(PlayerItem item)
|
|
{
|
|
if (item == null) return;
|
|
if (Player.IsChangeItemIng) return;
|
|
Player.IsChangeItemIng = true;
|
|
await UnUseItemConfirm(item);
|
|
Player.IsChangeItemIng = false;
|
|
}
|
|
|
|
private async FTask UnUseItemConfirm(PlayerItem item)
|
|
{
|
|
if (item != null)
|
|
{
|
|
Unity.ModelAsset.PlayerAnimator.OnUnUseItem();
|
|
await FTask.Wait(Scene, 100);
|
|
}
|
|
|
|
Player.ReleaseItem(item);
|
|
await FTask.Wait(Scene, 450);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
|
|
public class PlayerViewAwakeSystem : AwakeSystem<PlayerView>
|
|
{
|
|
protected override void Awake(PlayerView self)
|
|
{
|
|
self.Awake();
|
|
}
|
|
}
|
|
|
|
public class PlayerViewDestroySystem : DestroySystem<PlayerView>
|
|
{
|
|
protected override void Destroy(PlayerView self)
|
|
{
|
|
self.Destroy();
|
|
}
|
|
}
|
|
|
|
public class PlayerViewUpdateSystem : UpdateSystem<PlayerView>
|
|
{
|
|
protected override void Update(PlayerView self)
|
|
{
|
|
self.Update();
|
|
}
|
|
}
|
|
|
|
public class PlayerViewLateUpdateSystem : LateUpdateSystem<PlayerView>
|
|
{
|
|
protected override void LateUpdate(PlayerView self)
|
|
{
|
|
self.LateUpdate();
|
|
}
|
|
}
|
|
} |