12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using Unity.Burst;
- using Unity.Mathematics;
- using UnityEngine;
- namespace LitMotion
- {
- [BurstCompile]
- internal static class VibrationHelper
- {
- [BurstCompile]
- public static void EvaluateStrength(in float strength, in int frequency, in float dampingRatio, in float t, out float result)
- {
- if (t == 1f || t == 0f)
- {
- result = 0f;
- return;
- }
- float angularFrequency = (frequency - 0.5f) * math.PI;
- float dampingFactor = dampingRatio * frequency / (2f * math.PI);
- result = strength * math.pow(math.E, -dampingFactor * t) * math.cos(angularFrequency * t);
- }
- [BurstCompile]
- public static void EvaluateStrength(in Vector2 strength, in int frequency, in float dampingRatio, in float t, out Vector2 result)
- {
- if (t == 1f || t == 0f)
- {
- result = Vector2.zero;
- return;
- }
- float angularFrequency = (frequency - 0.5f) * math.PI;
- float dampingFactor = dampingRatio * frequency / (2f * math.PI);
- result = math.cos(angularFrequency * t) * math.pow(math.E, -dampingFactor * t) * strength;
- }
- [BurstCompile]
- public static void EvaluateStrength(in Vector3 strength, in int frequency, in float dampingRatio, in float t, out Vector3 result)
- {
- if (t == 1f || t == 0f)
- {
- result = Vector3.zero;
- return;
- }
- float angularFrequency = (frequency - 0.5f) * math.PI;
- float dampingFactor = dampingRatio * frequency / (2f * math.PI);
- result = math.cos(angularFrequency * t) * math.pow(math.E, -dampingFactor * t) * strength;
- }
- }
- }
|