173 lines
4.3 KiB
C#
173 lines
4.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using NBC;
|
|
// using Obi;
|
|
using UnityEngine;
|
|
|
|
namespace NBF
|
|
{
|
|
public enum LineType
|
|
{
|
|
Hand,
|
|
HandDouble,
|
|
Spinning,
|
|
SpinningFloat,
|
|
}
|
|
|
|
public class FLine : FGearBase
|
|
{
|
|
public LineType LineType;
|
|
|
|
[SerializeField] private bool isLureConnect;
|
|
[SerializeField] private RodLine rodLine;
|
|
|
|
/// <summary>
|
|
/// 主线
|
|
/// </summary>
|
|
[SerializeField] private Rope fishingRope;
|
|
|
|
/// <summary>
|
|
/// 浮漂和鱼钩线
|
|
/// </summary>
|
|
[SerializeField] private Rope bobberRope;
|
|
|
|
public LureController Lure;
|
|
public BobberController Bobber;
|
|
|
|
public JointPinchController PinchController;
|
|
|
|
|
|
public float LinelenghtDiferent;
|
|
|
|
protected override void OnInit()
|
|
{
|
|
var tipRb = Rod.Asset.LineConnectorRigidbody;
|
|
if (isLureConnect)
|
|
{
|
|
Lure.SetJoint(tipRb);
|
|
Lure.EnableCollision(false);
|
|
}
|
|
else
|
|
{
|
|
fishingRope.startAnchor = tipRb;
|
|
Bobber.SetJoint(tipRb);
|
|
Lure.SetJoint(Bobber.rbody);
|
|
Lure.gameObject.SetActive(true);
|
|
Lure.EnableCollision(false);
|
|
Lure.SetKinematic(false);
|
|
}
|
|
|
|
GetComponentsInChildren<Transform>(includeInactive: true).ToList().ForEach(delegate(Transform i)
|
|
{
|
|
i.gameObject.SetActive(true);
|
|
});
|
|
|
|
StartCoroutine(LureUseGravity());
|
|
if (isLureConnect)
|
|
{
|
|
fishingRope.Init(Rod);
|
|
}
|
|
else
|
|
{
|
|
fishingRope.Init(Rod);
|
|
bobberRope.Init(Rod);
|
|
}
|
|
|
|
// rodLine.GenerateLineRendererRope(guides.ToArray(), _LineThickness);
|
|
}
|
|
|
|
public void InitTest(Rigidbody tipRb)
|
|
{
|
|
if (isLureConnect)
|
|
{
|
|
Lure.SetJoint(tipRb);
|
|
Lure.EnableCollision(false);
|
|
}
|
|
else
|
|
{
|
|
fishingRope.startAnchor = tipRb;
|
|
Bobber.SetJoint(tipRb);
|
|
Lure.SetJoint(Bobber.rbody);
|
|
Lure.gameObject.SetActive(true);
|
|
Lure.EnableCollision(false);
|
|
Lure.SetKinematic(false);
|
|
}
|
|
|
|
GetComponentsInChildren<Transform>(includeInactive: true).ToList().ForEach(delegate(Transform i)
|
|
{
|
|
i.gameObject.SetActive(true);
|
|
});
|
|
|
|
StartCoroutine(LureUseGravity());
|
|
if (isLureConnect)
|
|
{
|
|
fishingRope.Init(Rod);
|
|
}
|
|
else
|
|
{
|
|
fishingRope.Init(Rod);
|
|
bobberRope.Init(Rod);
|
|
}
|
|
}
|
|
|
|
private IEnumerator LureUseGravity()
|
|
{
|
|
yield return 1;
|
|
Lure.gameObject.SetActive(false);
|
|
Lure.gameObject.SetActive(true);
|
|
yield return 1;
|
|
Lure.RBody.useGravity = true;
|
|
}
|
|
|
|
public void SetTargetLength(float value)
|
|
{
|
|
Log.Error($"SetObiRopeStretch={value}");
|
|
if (value > 3)
|
|
{
|
|
// value -= 0.2f;
|
|
}
|
|
|
|
fishingRope.SetTargetLength(value);
|
|
}
|
|
|
|
public void SetLureLength(float value)
|
|
{
|
|
Log.Error($"SetObiRopeStretch={value}");
|
|
bobberRope.SetTargetLength(value);
|
|
}
|
|
|
|
|
|
private void Update()
|
|
{
|
|
LinelenghtDiferent = GetLineDistance();
|
|
|
|
//非钓鱼状态
|
|
Rod.PlayerItem.Tension = Mathf.Clamp(LinelenghtDiferent, 0f, 0.05f);
|
|
}
|
|
|
|
#region Tension
|
|
|
|
private float GetLineDistance()
|
|
{
|
|
if (!Bobber.JointRb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 0;
|
|
|
|
//第一个节点到竿稍的位置-第一段鱼线长度
|
|
return Vector3.Distance(Bobber.transform.position, Bobber.JointRb.transform.position) -
|
|
fishingRope.GetCurrentLength();
|
|
}
|
|
|
|
public float GetTension(float weight)
|
|
{
|
|
return weight * GetLineDistance();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |