diff --git a/Assets/Scripts/Fishing/New/Data/Item/PlayerItem.cs b/Assets/Scripts/Fishing/New/Data/Item/PlayerItem.cs index f2cddc2a0..14e2ad757 100644 --- a/Assets/Scripts/Fishing/New/Data/Item/PlayerItem.cs +++ b/Assets/Scripts/Fishing/New/Data/Item/PlayerItem.cs @@ -2,13 +2,14 @@ using Fantasy; using Fantasy.Entitas; using NBF.Utils; +using UnityEngine; namespace NBF { /// /// 玩家物品 /// - public abstract class PlayerItem : Entity + public class PlayerItem : Entity { public Player Owner; @@ -17,11 +18,47 @@ namespace NBF /// public int ConfigID; + public List BindItems = new List(); - public virtual void Init(Player player, ItemInfo bindInfo) + #region Rod专属 + + /// + /// 线长度 + /// + public float LineLength = 1.5f; + + /// + /// 浮漂线长度 + /// + public float FloatLength = 0.5f; + + private float _tension; + + /// + /// 拉力 + /// + public float Tension + { + get => _tension; + private set + { + if (!Mathf.Approximately(_tension, value)) + { + _tension = value; + // OnTensionChanged?.Invoke(_tension); + } + } + } + + #endregion + + + public void Init(Player player, int configId, List bindItems) { Owner = player; - ConfigID = bindInfo.ConfigId; + ConfigID = configId; + BindItems.Clear(); + BindItems.AddRange(bindItems); // var itemType = bindInfo.Item.GetItemType(); // if (itemType == ItemType.Rod) // { diff --git a/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs b/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs deleted file mode 100644 index 6bb33c0c7..000000000 --- a/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using Fantasy; -using Fantasy.Entitas; - -namespace NBF -{ - public class PlayerItemRod : PlayerItem - { - public override void Init(Player player, ItemInfo bindInfo) - { - //var binds = RoleModel.Instance.GetBindItems(item.Id); - base.Init(player, bindInfo); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs.meta b/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs.meta deleted file mode 100644 index 05a2ff96b..000000000 --- a/Assets/Scripts/Fishing/New/Data/Item/PlayerItemRod.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9e0846296bef4505868010bfe1eee1e3 -timeCreated: 1773124278 \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/Data/Player.cs b/Assets/Scripts/Fishing/New/Data/Player.cs index f1824cbba..5a9a85a5e 100644 --- a/Assets/Scripts/Fishing/New/Data/Player.cs +++ b/Assets/Scripts/Fishing/New/Data/Player.cs @@ -103,18 +103,13 @@ namespace NBF ItemChangeEvent(prevItem); } - public void UseItem(ItemInfo item) + public void UseItem(int configId, List bindItems) { var prevItem = HandItem; - var itemType = item.ConfigId.GetItemType(); - if (itemType == ItemType.Rod) - { - var playerItemRod = Create(Scene); - playerItemRod.Init(this, item); - Items[playerItemRod.Id] = playerItemRod; - HandItemId = playerItemRod.Id; - } - + var playerItemRod = Create(Scene); + playerItemRod.Init(this, configId, bindItems); + Items[playerItemRod.Id] = playerItemRod; + HandItemId = playerItemRod.Id; ItemChangeEvent(prevItem); } diff --git a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs b/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs deleted file mode 100644 index 2504634e6..000000000 --- a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Fantasy.Async; -using UnityEngine; - -namespace NBF -{ - public class PlayerItemRodView : PlayerItemView - { - public RodAsset RodAsset; - - public override async FTask InitShow(PlayerItem item) - { - Item = item; - var itemConfig = Game.Tables.TbItem.Get(Item.ConfigID); - RodAsset = itemConfig.InstantiateAndComponent(SceneSettings.Instance.GearNode, Vector3.zero, - Quaternion.identity); - - // await Rod.InitRod(Item); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs.meta b/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs.meta deleted file mode 100644 index 331fb3a0c..000000000 --- a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemRodView.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 77390e0ed53847f3b190ffc0d9f1319a -timeCreated: 1773124629 \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemView.cs b/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemView.cs index 918da1040..5b951ba87 100644 --- a/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemView.cs +++ b/Assets/Scripts/Fishing/New/View/Player/Item/PlayerItemView.cs @@ -7,21 +7,22 @@ namespace NBF /// /// 玩家物品视图组件 /// - public abstract class PlayerItemView : Entity + public class PlayerItemView : Entity { public PlayerItem Item { get; protected set; } + /// + /// 竿子 + /// + public FRod Rod { get; private set; } - public abstract FTask InitShow(PlayerItem item); - - // public async FTask InitShow() - // { - // // Item = GetParent(); - // var itemConfig = Game.Tables.TbItem.Get(Item.ConfigID); - // // Rod = itemConfig.InstantiateAndComponent(SceneSettings.Instance.GearNode, Vector3.zero, - // // Quaternion.identity); - // - // // await Rod.InitRod(Item); - // } + public async FTask InitShow(PlayerItem item) + { + Item = item; + var itemConfig = Game.Tables.TbItem.Get(Item.ConfigID); + Rod = itemConfig.InstantiateAndComponent(SceneSettings.Instance.GearNode, Vector3.zero, + Quaternion.identity); + await Rod.InitRod(Item); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/View/Player/PlayerInput.cs b/Assets/Scripts/Fishing/New/View/Player/PlayerInput.cs index 55b08f399..aaf6d63c1 100644 --- a/Assets/Scripts/Fishing/New/View/Player/PlayerInput.cs +++ b/Assets/Scripts/Fishing/New/View/Player/PlayerInput.cs @@ -1,4 +1,6 @@ -using Fantasy; +using System.Collections.Generic; +using System.Linq; +using Fantasy; using Fantasy.Entitas; using Fantasy.Entitas.Interface; using UnityEngine; @@ -90,7 +92,9 @@ namespace NBF var item = RoleModel.Instance.GetSlotItem(index - 1); if (item != null) { - Player.UseItem(item); + List children = RoleModel.Instance.GetBindItems(item.Id); + List bindItems = children.Select(itemInfo => itemInfo.ConfigId).ToList(); + Player.UseItem(item.ConfigId, bindItems); } } } diff --git a/Assets/Scripts/Fishing/New/View/Player/PlayerView.cs b/Assets/Scripts/Fishing/New/View/Player/PlayerView.cs index 78bcc8f11..33e188c0d 100644 --- a/Assets/Scripts/Fishing/New/View/Player/PlayerView.cs +++ b/Assets/Scripts/Fishing/New/View/Player/PlayerView.cs @@ -79,7 +79,7 @@ namespace NBF var itemType = handItem.ConfigID.GetItemType(); if (itemType == ItemType.Rod) { - var itemView = handItem.GetOrAddComponent(); + var itemView = handItem.GetOrAddComponent(); await itemView.InitShow(handItem); Unity.ModelAsset.PlayerAnimator.OnUseItem(itemView); } diff --git a/Assets/Scripts/Fishing/New/View/Player/Tackle/FHandItem.cs b/Assets/Scripts/Fishing/New/View/Player/Tackle/FHandItem.cs index 1b6920cb7..0e8a5a1ad 100644 --- a/Assets/Scripts/Fishing/New/View/Player/Tackle/FHandItem.cs +++ b/Assets/Scripts/Fishing/New/View/Player/Tackle/FHandItem.cs @@ -2,8 +2,8 @@ namespace NBF { - public class FHandItem : MonoBehaviour + public abstract class FHandItem : MonoBehaviour { - public int ConfigId; + public abstract int ConfigId { get; } } } \ No newline at end of file diff --git a/Assets/Scripts/Fishing/New/View/Player/Tackle/FRod.cs b/Assets/Scripts/Fishing/New/View/Player/Tackle/FRod.cs index 996d86404..2295455dd 100644 --- a/Assets/Scripts/Fishing/New/View/Player/Tackle/FRod.cs +++ b/Assets/Scripts/Fishing/New/View/Player/Tackle/FRod.cs @@ -14,7 +14,10 @@ namespace NBF { private float _tension; - + public PlayerItem PlayerItem; + + public override int ConfigId => PlayerItem?.ConfigID ?? 0; + /// /// 可用的 /// @@ -126,123 +129,122 @@ namespace NBF public async FTask InitRod(PlayerItem playerItem) { - // ConfigId = itemBindInfo.Item; - // // Player = player; - // - // var playerView = player.GetComponent(); - // - // var playerViewUnity = playerView.Unity; - // - // transform.localPosition = Vector3.zero; - // transform.localRotation = Quaternion.identity; - // transform.localScale = Vector3.one; - // SceneSettings.Instance.GearNode.position = playerViewUnity.transform.position; - // yield return 1; - // var obj = new GameObject($"rod_{ConfigId}"); - // obj.transform.SetParent(SceneSettings.Instance.GearNode); - // // obj.transform.SetParent(player.transform); - // // obj.transform.localPosition = Vector3.zero; - // obj.transform.position = playerViewUnity.transform.position; - // obj.transform.rotation = playerViewUnity.transform.rotation; - // obj.transform.localScale = Vector3.one; - // GearRoot = obj.transform; - // - // var parent = GearRoot; - // - // // List children = RoleModel.Instance.GetBindItems(itemInfo.Id); - // - // - // CreateFishingHandler(); - // yield return 1; //等待1帧 - // // children.Sort(); - // foreach (var childConfigId in itemBindInfo.BindItems) - // { - // var itemType = childConfigId.GetItemType(); - // var config = Game.Tables.TbItem.Get(childConfigId); - // if (itemType == ItemType.Reel) - // { - // Reel = config.InstantiateAndComponent(Asset.ReelConnector, Vector3.zero, - // Quaternion.identity); - // Reel.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Bobber) - // { - // Bobber = config.InstantiateAndComponent(parent, Vector3.zero, - // Quaternion.identity); - // Bobber.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Hook) - // { - // Hook = config.InstantiateAndComponent(parent, Vector3.zero, - // Quaternion.identity); - // Hook.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Bait) - // { - // Bait = config.InstantiateAndComponent(parent, Vector3.zero, - // Quaternion.identity); - // Bait.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Lure) - // { - // Lure = config.InstantiateAndComponent(parent, Vector3.zero, - // Quaternion.identity); - // Lure.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Weight) - // { - // Weight = config.InstantiateAndComponent(parent, Vector3.zero, - // Quaternion.identity); - // Weight.SetItemConfigId(childConfigId); - // } - // else if (itemType == ItemType.Line) - // { - // // lineItemInfo = child; - // } - // } - // - // yield return 1; - // if (Reel) - // { - // Reel.reelingDrag = 0.699f; - // Reel.transform.SetParent(Asset.ReelConnector); - // Reel.transform.localPosition = Vector3.zero; - // Reel.transform.localEulerAngles = Vector3.zero; - // Reel.Init(this); - // } - // - // if (Bobber) - // { - // Bobber.Init(this); - // } - // - // if (Hook) - // { - // Hook.Init(this); - // } - // - // if (Bait) - // { - // Bait.Init(this); - // } - // - // if (Lure) - // { - // Lure.Init(this); - // } - // - // if (Weight) - // { - // Weight.Init(this); - // } - // - // yield return 1; //等待1帧 - // - // transform.SetParent(playerViewUnity.ModelAsset.RodRoot); - // transform.localPosition = Vector3.zero; - // transform.rotation = playerViewUnity.ModelAsset.RodRoot.rotation; - // - // Usable = true; + PlayerItem = playerItem; + + var playerView = playerItem.Owner.GetComponent(); + + var playerViewUnity = playerView.Unity; + + transform.localPosition = Vector3.zero; + transform.localRotation = Quaternion.identity; + transform.localScale = Vector3.one; + SceneSettings.Instance.GearNode.position = playerViewUnity.transform.position; + await FTask.WaitFrame(playerView.Scene); //等待1帧 + + var obj = new GameObject($"rod_{ConfigId}"); + obj.transform.SetParent(SceneSettings.Instance.GearNode); + // obj.transform.SetParent(player.transform); + // obj.transform.localPosition = Vector3.zero; + obj.transform.position = playerViewUnity.transform.position; + obj.transform.rotation = playerViewUnity.transform.rotation; + obj.transform.localScale = Vector3.one; + GearRoot = obj.transform; + + var parent = GearRoot; + + // List children = RoleModel.Instance.GetBindItems(itemInfo.Id); + + CreateFishingHandler(); + await FTask.WaitFrame(playerView.Scene); //等待1帧 + // children.Sort(); + foreach (var childConfigId in playerItem.BindItems) + { + var itemType = childConfigId.GetItemType(); + var config = Game.Tables.TbItem.Get(childConfigId); + if (itemType == ItemType.Reel) + { + Reel = config.InstantiateAndComponent(Asset.ReelConnector, Vector3.zero, + Quaternion.identity); + Reel.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Bobber) + { + Bobber = config.InstantiateAndComponent(parent, Vector3.zero, + Quaternion.identity); + Bobber.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Hook) + { + Hook = config.InstantiateAndComponent(parent, Vector3.zero, + Quaternion.identity); + Hook.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Bait) + { + Bait = config.InstantiateAndComponent(parent, Vector3.zero, + Quaternion.identity); + Bait.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Lure) + { + Lure = config.InstantiateAndComponent(parent, Vector3.zero, + Quaternion.identity); + Lure.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Weight) + { + Weight = config.InstantiateAndComponent(parent, Vector3.zero, + Quaternion.identity); + Weight.SetItemConfigId(childConfigId); + } + else if (itemType == ItemType.Line) + { + // lineItemInfo = child; + } + } + + await FTask.WaitFrame(playerView.Scene); //等待1帧 + if (Reel) + { + Reel.reelingDrag = 0.699f; + Reel.transform.SetParent(Asset.ReelConnector); + Reel.transform.localPosition = Vector3.zero; + Reel.transform.localEulerAngles = Vector3.zero; + Reel.Init(this); + } + + if (Bobber) + { + Bobber.Init(this); + } + + if (Hook) + { + Hook.Init(this); + } + + if (Bait) + { + Bait.Init(this); + } + + if (Lure) + { + Lure.Init(this); + } + + if (Weight) + { + Weight.Init(this); + } + + await FTask.WaitFrame(playerView.Scene); //等待1帧 + + transform.SetParent(playerViewUnity.ModelAsset.RodRoot); + transform.localPosition = Vector3.zero; + transform.rotation = playerViewUnity.ModelAsset.RodRoot.rotation; + + Usable = true; } @@ -286,11 +288,6 @@ namespace NBF Line = obj.GetComponent(); Line.transform.position = Asset.lineConnector.position; Line.Init(this); - - // var obiSolver = solver.GetComponent(); - // obiSolver.parameters.ambientWind = Vector3.zero; - // obiSolver.wind. - // obiSolver.simulateWhenInvisible } }