Files
Fishing2/Assets/Scripts/Fishing/New/View/Player/PlayerView.cs
2026-03-15 22:52:49 +08:00

150 lines
3.9 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);
}
}
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();
}
}
}