mirror of
https://udrimavric.com/MAVRIC/Stratasys-450mc-VR.git
synced 2025-01-23 07:38:33 -05:00
86 lines
2.2 KiB
C#
86 lines
2.2 KiB
C#
using UnityEngine.Events;
|
|
|
|
namespace UnityEngine.XR.Content.Interaction
|
|
{
|
|
/// <summary>
|
|
/// Calls events for when the velocity of this objects breaks the begin and end threshold.
|
|
/// </summary>
|
|
[RequireComponent(typeof(Rigidbody))]
|
|
public class OnVelocity : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
[Tooltip("The speed that will trigger the begin event.")]
|
|
float m_BeginThreshold = 1.25f;
|
|
|
|
[SerializeField]
|
|
[Tooltip("The speed that will trigger the end event.")]
|
|
float m_EndThreshold = 0.25f;
|
|
|
|
[SerializeField]
|
|
[Tooltip("Event that triggers when speed meets the begin threshold.")]
|
|
UnityEvent m_OnBegin = new UnityEvent();
|
|
|
|
[SerializeField]
|
|
[Tooltip("Event that triggers when the speed dips below the end threshold.")]
|
|
UnityEvent m_OnEnd = new UnityEvent();
|
|
|
|
/// <summary>
|
|
/// Event that triggers when speed meets the begin threshold.
|
|
/// </summary>
|
|
public UnityEvent onBegin => m_OnBegin;
|
|
|
|
/// <summary>
|
|
/// Event that triggers when the speed dips below the end threshold.
|
|
/// </summary>
|
|
public UnityEvent onEnd => m_OnEnd;
|
|
|
|
Rigidbody m_RigidBody;
|
|
bool m_HasBegun;
|
|
|
|
void Awake()
|
|
{
|
|
m_RigidBody = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
CheckVelocity();
|
|
}
|
|
|
|
void CheckVelocity()
|
|
{
|
|
var speed = m_RigidBody.velocity.magnitude;
|
|
m_HasBegun = HasVelocityBegun(speed);
|
|
|
|
if (HasVelocityEnded(speed))
|
|
m_HasBegun = false;
|
|
}
|
|
|
|
bool HasVelocityBegun(float speed)
|
|
{
|
|
if (m_HasBegun)
|
|
return true;
|
|
|
|
var beginCheck = speed > m_BeginThreshold;
|
|
|
|
if (beginCheck)
|
|
m_OnBegin.Invoke();
|
|
|
|
return beginCheck;
|
|
}
|
|
|
|
bool HasVelocityEnded(float speed)
|
|
{
|
|
if (!m_HasBegun)
|
|
return false;
|
|
|
|
var endCheck = speed < m_EndThreshold;
|
|
|
|
if (endCheck)
|
|
m_OnEnd.Invoke();
|
|
|
|
return endCheck;
|
|
}
|
|
}
|
|
}
|