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().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; } }