diff --git a/Assets/Scripts/Fishing/Gear/FGear.cs b/Assets/Scripts/Fishing/Gear/FGear.cs deleted file mode 100644 index e936a7ffb..000000000 --- a/Assets/Scripts/Fishing/Gear/FGear.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -namespace NBF -{ - public class FGear : MonoBehaviour - { - } -} \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Gear/FTackle.cs b/Assets/Scripts/Fishing/Gear/FTackle.cs new file mode 100644 index 000000000..6015b7e31 --- /dev/null +++ b/Assets/Scripts/Fishing/Gear/FTackle.cs @@ -0,0 +1,223 @@ +using System.Collections; +using Fantasy; +using UnityEngine; + +namespace NBF +{ + /// + /// 钓组 + /// + public class FTackle : MonoBehaviour + { + private ItemInfo _itemInfo; + + public static FTackle Create(ItemInfo itemInfo) + { + var root = SceneSettings.Instance.GearNode; + var obj = new GameObject($"Rod_{itemInfo.ConfigId}").AddComponent(); + obj.transform.SetParent(root.transform); + obj.transform.localPosition = Vector3.zero; + obj.transform.localRotation = Quaternion.identity; + obj.transform.localScale = Vector3.one; + return obj; + } + + public IEnumerator Show(ItemInfo itemInfo) + { + _itemInfo = itemInfo; + yield return 1; + + // var parent = GearParent; + // parent.position = Player.transform.position; + // + // var data = Player.Data.currentGear; + // var rodConfig = data.rod.Config; + // var cloneObj = rodConfig.Instantiate(parent, Vector3.zero, Player.MainArm.RodContainer.rotation); + // if (cloneObj == null) + // { + // yield break; + // } + // + // Rod = cloneObj.GetComponent(); + // if (Rod == null) + // { + // Rod = cloneObj.AddComponent(); + // } + // + // + // if (Rod) + // { + // Rod.transform.localPosition = Vector3.zero; + // Rod.transform.rotation = Player.MainArm.RodContainer.rotation; + // + // if (rodConfig.ring > 0) + // { + // var ringConfig = GameRings.Get(rodConfig.ring); + // var ringObject = ringConfig.Instantiate(Rod.transform); + // ringObject.SetActive(false); + // Rod.SetRing(ringObject.GetComponent()); + // } + // } + // else + // { + // yield break; + // } + // + // if (data.line != null) + // { + // var linePrefab = data.line.Config.Instantiate(parent); + // Line = linePrefab.GetComponent(); + // } + // + // if (data.reel != null) + // { + // var reelPrefab = data.reel.Config.Create(parent); + // Reel = reelPrefab.GetComponent(); + // } + // + // if (data.bobber != null) + // { + // var bobberPrefab = data.bobber.Config.Create(parent); + // Bobber = bobberPrefab.GetComponent(); + // } + // + // if (data.hook != null) + // { + // var hookPrefab = data.hook.Config.Create(parent); + // Hook = hookPrefab.GetComponent(); + // } + // + // if (data.bait != null) + // { + // var baitPrefab = data.bait.Config.Create(parent); + // + // if (baitPrefab.TryGetComponent(out var bait)) + // { + // Bait = bait; + // } + // } + // + // if (data.lure != null) + // { + // var baitPrefab = data.lure.Config.Create(parent); + // if (baitPrefab.TryGetComponent(out var lure)) + // { + // Lure = lure; + // } + // } + // + // + // if (data.weight != null) + // { + // var weightPrefab = data.weight.Config.Instantiate(parent); + // Weight = weightPrefab.GetComponent(); + // } + // + // Debug.LogError("CreateOrHideGear"); + // yield return 1; + // Rod.Initialize(Player, data.rod); + // Rod.CreateFishingHandler(); + // + // if (Line) + // { + // Line.Initialize(Player, data.line); + // + // + // if ((bool)Rod.lineHandler.obiRopeSegment_1) + // { + // Rod.lineHandler.obiRopeSegment_1.GetComponent().material = + // Line.lineMat; + // } + // + // if ((bool)Rod.lineHandler.obiRopeSegment_2) + // { + // Rod.lineHandler.obiRopeSegment_2.GetComponent().material = + // Line.lineMat; + // } + // + // if ((bool)Rod.lineHandler.obiRopeSegment_3) + // { + // Rod.lineHandler.obiRopeSegment_3.GetComponent().material = + // Line.lineMat; + // } + // } + // + // if (Reel) + // { + // // Reel.maxReelStrength = data.reel.Config.strength; + // // Reel.reelingSpeed = 0.5f; //slotsEquip.reel.currentSpeed; + // Reel.reelingDrag = 0.699f; //slotsEquip.reel.currentDrag; + // Reel.transform.SetParent(Rod.rodAsset.ReelConnector); + // Reel.transform.localPosition = Vector3.zero; + // Reel.transform.localEulerAngles = Vector3.zero; + // // Reel.reelAsset.szpulaObject.GetComponent().material = Line.szpulaMat; + // Reel.Initialize(Player, data.reel); + // } + // + // if (Bobber) + // { + // Bobber.floatDisplacement = data.bobber.Config.displacement; + // // if ((double)slotsEquip.ffloat.lastSetGroundValue > 0.2) + // // { + // // Bobber.newDeepth = slotsEquip.ffloat.lastSetGroundValue; + // // } + // + // Bobber.newDeepth = 0.5f; + // + // Bobber.Initialize(Player, data.bobber); + // Bobber.transform.position = Rod.lineHandler.LineConnector_1.transform.position; + // Bobber.gameObject.GetComponent().connectedBody = + // Rod.lineHandler.LineConnector_1.GetComponent(); + // } + // + // + // if (Hook) + // { + // Hook.Initialize(Player, data.hook); + // + // Hook.transform.position = Rod.lineHandler.LineConnector_2.transform.position; + // Hook.transform.rotation = Rod.lineHandler.LineConnector_2.transform.rotation; // 确保旋转也同步 + // var target = Rod.lineHandler.LineConnector_2.GetComponent(); + // var joint = Hook.gameObject.GetComponent(); + // // // 关键设置:关闭自动锚点计算,手动设置锚点 + // // joint.autoConfigureConnectedAnchor = false; + // // joint.anchor = Vector3.zero; // 以 Hook 自身中心为锚点 + // // joint.connectedAnchor = Vector3.zero; // 以目标物体的中心为锚点 + // joint.connectedBody = target; + // // // 强制物理引擎立即更新变换(避免1帧延迟) + // // Physics.SyncTransforms(); + // // joint.autoConfigureConnectedAnchor = false; + // // joint.anchor = Vector3.zero; + // // joint.connectedAnchor = Vector3.zero; + // Rod.LureHookWaterDisplacement = Hook.GetComponent(); + // } + // + // if (Bait) + // { + // Bait.Initialize(Player, data.bait); + // Bait.transform.position = Hook.hookAsset.baitConnector.position; + // Bait.transform.SetParent(Hook.hookAsset.baitConnector); + // } + // + // if (Lure) + // { + // Lure.Initialize(Player, data.bait); + // Lure.transform.position = Rod.lineHandler.LineConnector_1.transform.position; + // Lure.gameObject.GetComponent().connectedBody = + // Rod.lineHandler.LineConnector_1.GetComponent(); + // Rod.LureHookWaterDisplacement = Lure.GetComponent(); + // } + // + // if (Weight) + // { + // Weight.weight = data.weight.Config.weight; + // Weight.Initialize(Player, data.weight); + // } + } + + public IEnumerator Remove() + { + yield return 1; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Gear/FGear.cs.meta b/Assets/Scripts/Fishing/Gear/FTackle.cs.meta similarity index 100% rename from Assets/Scripts/Fishing/Gear/FGear.cs.meta rename to Assets/Scripts/Fishing/Gear/FTackle.cs.meta diff --git a/Assets/Scripts/Fishing/Player/FPlayer.Input.cs b/Assets/Scripts/Fishing/Player/FPlayer.Input.cs index 901b24195..28834db39 100644 --- a/Assets/Scripts/Fishing/Player/FPlayer.Input.cs +++ b/Assets/Scripts/Fishing/Player/FPlayer.Input.cs @@ -1,4 +1,5 @@ using NBC; +using NBF.Utils; using UnityEngine; using UnityEngine.InputSystem; @@ -48,6 +49,11 @@ namespace NBF { var index = int.Parse(action.Replace(InputDef.Player.QuickStarts, string.Empty)); Log.Info($"快速使用===={index}"); + var item = RoleModel.Instance.GetSlotItem(index - 1); + if (item != null) + { + Game.Instance.StartCoroutine(UseItem(item)); + } } } diff --git a/Assets/Scripts/Fishing/Player/FPlayer.cs b/Assets/Scripts/Fishing/Player/FPlayer.cs index 87db3ea4e..6775258e5 100644 --- a/Assets/Scripts/Fishing/Player/FPlayer.cs +++ b/Assets/Scripts/Fishing/Player/FPlayer.cs @@ -1,8 +1,11 @@ using System; +using System.Collections; +using System.Collections.Generic; using ECM2; using ECM2.Examples.FirstPerson; using Fantasy; using NBF.Fishing2; +using NBF.Utils; using UnityEngine; using UnityEngine.InputSystem; @@ -23,6 +26,9 @@ namespace NBF public FPlayerData Data { get; private set; } + public readonly List Tackles = new List(); + public FTackle HandTackle { get; private set; } + protected override void OnAwake() { Character = gameObject.GetComponent(); @@ -48,7 +54,6 @@ namespace NBF RemoveInputEvent(); } - #region 角色模型 @@ -62,5 +67,29 @@ namespace NBF } #endregion + + #region 使用物品 + + public IEnumerator UseItem(ItemInfo item) + { + var itemType = item?.ConfigId.GetItemType(); + if (itemType == ItemType.Rod) + { + if (HandTackle) + { + yield return HandTackle.Remove(); + Tackles.Remove(HandTackle); + HandTackle = null; + } + + //判断旧的是否要收回 + var tackle = FTackle.Create(item); + HandTackle = tackle; + yield return tackle.Show(item); + Tackles.Add(tackle); + } + } + + #endregion } } \ No newline at end of file diff --git a/Assets/Scripts/Init.cs b/Assets/Scripts/Init.cs index ad622f2c3..d92cb2539 100644 --- a/Assets/Scripts/Init.cs +++ b/Assets/Scripts/Init.cs @@ -1,12 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading.Tasks; -using FairyGUI; -using Fantasy.Async; -using NBC; -using NBF.Fishing2; -using UnityEngine; +using UnityEngine; using UnityEngine.Video; namespace NBF diff --git a/Assets/Scripts/Model/RoleModel.cs b/Assets/Scripts/Model/RoleModel.cs index 3ce2f00cc..0249128f0 100644 --- a/Assets/Scripts/Model/RoleModel.cs +++ b/Assets/Scripts/Model/RoleModel.cs @@ -35,9 +35,8 @@ namespace NBF Info = response.RoleInfo; } - #endregion - + #region 背包 public readonly List Items = new List(); @@ -131,6 +130,7 @@ namespace NBF return ret; } + #region 数据操作 diff --git a/Fishing2.sln.DotSettings.user b/Fishing2.sln.DotSettings.user index 2bc83cd89..910c9efdf 100644 --- a/Fishing2.sln.DotSettings.user +++ b/Fishing2.sln.DotSettings.user @@ -34,6 +34,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded