75 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|