Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/FloatingIceberg.cs
2026-03-04 09:37:33 +08:00

75 lines
1.9 KiB
C#

using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
[ExecuteInEditMode]
public class FloatingIceberg : MonoBehaviour
{
public WaterSurface targetSurface;
public float currentSpeedMultiplier = 1f;
public float selfRotationSpeed;
public Vector3 initialPosition;
public float initialScale = 0.25f;
public bool includeDeformers = true;
public bool clickToResetPosition;
private WaterSearchParameters searchParameters;
private WaterSearchResult searchResult;
private void Start()
{
Reset();
}
private void Update()
{
float num = 50f;
float num2 = 68f;
float num3 = 1f - Mathf.Clamp01((Mathf.Abs(base.transform.position.x) - num) / (num2 - num));
if (base.transform.position.x > 0f)
{
GetComponent<Renderer>().sharedMaterial.SetFloat("_Opacity", num3);
}
else
{
base.transform.localScale = Vector3.one * initialScale * num3;
}
if (base.transform.position.x < 0f - num2 || clickToResetPosition)
{
Reset();
}
if (selfRotationSpeed > 0f)
{
Vector3 localEulerAngles = base.transform.localEulerAngles;
localEulerAngles.y += selfRotationSpeed;
base.transform.localEulerAngles = localEulerAngles;
}
if (targetSurface != null)
{
searchParameters.startPositionWS = searchResult.candidateLocationWS;
searchParameters.targetPositionWS = base.transform.position;
searchParameters.error = 0.01f;
searchParameters.maxIterations = 8;
searchParameters.includeDeformation = includeDeformers;
searchParameters.excludeSimulation = false;
if (targetSurface.ProjectPointOnWaterSurface(searchParameters, out searchResult))
{
base.transform.position = searchResult.projectedPositionWS + searchResult.currentDirectionWS * currentSpeedMultiplier;
}
}
}
private void Reset()
{
base.transform.position = initialPosition;
base.transform.localScale = Vector3.one * initialScale;
clickToResetPosition = false;
}
}