using OctoCore.Components; using UnityEngine; namespace OctoCore { public class OctoPlayerSpeedArea : MonoBehaviour { [System.Serializable] public class Settings { public float MinRadius = 1; public float MaxRadius = 4; [Space(10)] public float MinSpeedMultiplier = 0; public float MaxSpeedMultiplier = 1; [Space(10)] public AnimationCurve SpeedCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); } [SerializeField] private Settings _settings; void OnDrawGizmos() { #if UNITY_EDITOR UnityEditor.Handles.color = Color.cyan; UnityEditor.Handles.matrix = transform.localToWorldMatrix; UnityEditor.Handles.DrawWireDisc(Vector3.zero, Vector3.up, _settings.MinRadius); UnityEditor.Handles.DrawWireDisc(Vector3.zero, Vector3.up, _settings.MaxRadius); #endif } void Start() { } void Update() { if (!OctoPlayer.Instance) return; float dist = Vector3.Distance(transform.position, OctoPlayer.Instance.transform.position); if (dist < _settings.MaxRadius) { float t = Mathf.InverseLerp(_settings.MinRadius, _settings.MaxRadius, dist); float speedMultiplier = Mathf.Lerp(_settings.MinSpeedMultiplier, _settings.MaxSpeedMultiplier, t); OctoPlayer.Instance.SetSppedMultiplier(speedMultiplier); } } } }