using System; using System.Collections.Generic; using Obi; using UFS3; using UnityEngine; public class FishingLineManager : MonoBehaviourSingleton { [SerializeField] private ObiSolver solverTemplate; [SerializeField] private FishingLine setSpinningObj; [SerializeField] private FishingLine setFloatLineObj; private FishingLine currentLine; [SerializeField] private ObiUpdater _ObiUpdater; public event Action OnFishingLineCreated; public void CreateLine(LineType lineType, List rodGuides, FishingSetController fishingSet) { _ObiUpdater.gameObject.SetActive(value: false); Rigidbody rodTipBone = fishingSet.AttachedRod.RodTipBone; _ = fishingSet.AttachedRod.transform; ObiSolver obiSolver = UnityEngine.Object.Instantiate(solverTemplate); obiSolver.transform.parent = base.transform; fishingSet.Solver = obiSolver; _ObiUpdater.gameObject.SetActive(value: true); _ObiUpdater.solvers.Add(obiSolver); obiSolver.gameObject.SetActive(value: true); switch (lineType) { case LineType.Spinning: Set(rodGuides, setSpinningObj, obiSolver.transform, rodTipBone); break; case LineType.Float: Set(rodGuides, setFloatLineObj, obiSolver.transform, rodTipBone); break; case LineType.Feeder: throw new NotImplementedException(); case LineType.Fly: throw new NotImplementedException(); case LineType.Ice: throw new NotImplementedException(); } } public static void KillSolver(ObiSolver solver) { if (!(MonoBehaviourSingleton.Instance == null)) { MonoBehaviourSingleton.Instance._ObiUpdater.solvers.Remove(solver); MonoBehaviourSingleton.Instance._ObiUpdater.gameObject.SetActive(value: false); UnityEngine.Object.Destroy(solver.gameObject); } } private void OnRodGearChanged(BaseItemData obj) { RodData rodData = (RodData)obj; if ((bool)rodData && (bool)rodData.AttachedLine) { Hide(); } else { Hide(); } } private void Set(List guides, FishingLine setLineObj, Transform parent, Rigidbody rodTip) { currentLine = UnityEngine.Object.Instantiate(setLineObj, parent); currentLine.Initialize(rodTip.transform, rodTip, guides); this.OnFishingLineCreated?.Invoke(currentLine); } private void Hide() { if ((bool)currentLine) { UnityEngine.Object.Destroy(currentLine.gameObject); } } }