33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using UnityEngine;
|
|
|
|
public class FishingFloatNodeBehaviour : FishingLineNodeBehaviour
|
|
{
|
|
[SerializeField] private Transform waterSurface;
|
|
[SerializeField] private float fallbackWaterHeight = 0f;
|
|
[SerializeField] private float surfaceOffset = 0f;
|
|
[SerializeField] [Min(0f)] private float buoyancy = 16f;
|
|
[SerializeField] [Range(0f, 1f)] private float waterDrag = 0.22f;
|
|
[SerializeField] [Min(0.01f)] private float fullBuoyancyDepth = 0.35f;
|
|
|
|
public override void Evaluate(ref FishingLineNodeInfluence influence, in FishingLineNodeContext context)
|
|
{
|
|
if (!BehaviourEnabled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
float surfaceY = waterSurface != null ? waterSurface.position.y : fallbackWaterHeight;
|
|
surfaceY += surfaceOffset;
|
|
|
|
float depth = surfaceY - context.Position.y;
|
|
if (depth <= 0f)
|
|
{
|
|
return;
|
|
}
|
|
|
|
float normalizedDepth = Mathf.Clamp01(depth / fullBuoyancyDepth);
|
|
influence.AdditionalAcceleration += Vector3.up * (buoyancy * normalizedDepth);
|
|
influence.ExtraDamping = Mathf.Max(influence.ExtraDamping, waterDrag);
|
|
}
|
|
}
|