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(); var gameObject = PrefabsHelper.CreatePlayer(SceneSettings.Instance.Node); Unity = gameObject.GetComponent(); 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 = new Vector3(0, 1, 0); Unity.ModelAsset = modelObject.GetComponent(); 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(); 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 { protected override void Awake(PlayerView self) { self.Awake(); } } public class PlayerViewDestroySystem : DestroySystem { protected override void Destroy(PlayerView self) { self.Destroy(); } } public class PlayerViewUpdateSystem : UpdateSystem { protected override void Update(PlayerView self) { self.Update(); } } public class PlayerViewLateUpdateSystem : LateUpdateSystem { protected override void LateUpdate(PlayerView self) { self.LateUpdate(); } } }