60 lines
1.5 KiB
C#
60 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|