65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace Watermelon
|
||
|
|
{
|
||
|
|
[System.Serializable]
|
||
|
|
public class HapticHandler
|
||
|
|
{
|
||
|
|
[SerializeField] float duration = 0.1f;
|
||
|
|
|
||
|
|
[Slider(0.0f, 1.0f)]
|
||
|
|
[SerializeField] float intensity = 0.0f;
|
||
|
|
|
||
|
|
[SerializeField] bool advancedSettings;
|
||
|
|
|
||
|
|
[ShowIf("advancedSettings")]
|
||
|
|
[SerializeField] float minDelay;
|
||
|
|
|
||
|
|
[ShowIf("advancedSettings")]
|
||
|
|
[SerializeField] bool dynamicIntensity;
|
||
|
|
[ShowIf("advancedSettings")]
|
||
|
|
[SerializeField] DuoFloat intensityRange = new DuoFloat(0.2f, 1.0f);
|
||
|
|
[ShowIf("advancedSettings")]
|
||
|
|
[SerializeField] int intensitySteps = 10;
|
||
|
|
[ShowIf("advancedSettings")]
|
||
|
|
[SerializeField] float intensityResetTime = 1.0f;
|
||
|
|
|
||
|
|
private float lastPlayedTime = float.MinValue;
|
||
|
|
|
||
|
|
private int currentIntensityStep;
|
||
|
|
private float lastIntensityStepTime;
|
||
|
|
|
||
|
|
public void Play()
|
||
|
|
{
|
||
|
|
if (advancedSettings)
|
||
|
|
{
|
||
|
|
if (Time.timeSinceLevelLoad < lastPlayedTime + minDelay) return;
|
||
|
|
|
||
|
|
lastPlayedTime = Time.timeSinceLevelLoad;
|
||
|
|
|
||
|
|
if (dynamicIntensity)
|
||
|
|
{
|
||
|
|
currentIntensityStep++;
|
||
|
|
|
||
|
|
if (Time.timeSinceLevelLoad > lastIntensityStepTime)
|
||
|
|
currentIntensityStep = 0;
|
||
|
|
|
||
|
|
lastIntensityStepTime = Time.timeSinceLevelLoad + intensityResetTime;
|
||
|
|
|
||
|
|
Haptic.Play(duration, intensityRange.Lerp((float)currentIntensityStep / intensitySteps));
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
Haptic.Play(duration, intensity);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
Haptic.Play(duration, intensity);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|