Add RumbleManager for enhanced player feedback and integrate with existing systems
This commit is contained in:
37
Assets/Scripts/Infrastructure/Unity/RumbleManager.cs
Normal file
37
Assets/Scripts/Infrastructure/Unity/RumbleManager.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace Infrastructure.Unity
|
||||
{
|
||||
public class RumbleManager : MonoBehaviour
|
||||
{
|
||||
private Coroutine _rumbleCoroutine;
|
||||
|
||||
public void Pulse(float lowFrequency, float highFrequency, float duration)
|
||||
{
|
||||
if (Gamepad.current == null) return;
|
||||
|
||||
if (_rumbleCoroutine != null) StopCoroutine(_rumbleCoroutine);
|
||||
|
||||
_rumbleCoroutine = StartCoroutine(RumbleRoutine(lowFrequency, highFrequency, duration));
|
||||
}
|
||||
|
||||
public void PulseLight() => Pulse(0.1f, 0.2f, 0.1f);
|
||||
public void PulseMedium() => Pulse(0.4f, 0.5f, 0.2f);
|
||||
public void PulseHeavy() => Pulse(0.8f, 1.0f, 0.3f);
|
||||
|
||||
private IEnumerator RumbleRoutine(float low, float high, float duration)
|
||||
{
|
||||
Gamepad.current.SetMotorSpeeds(low, high);
|
||||
yield return new WaitForSeconds(duration);
|
||||
Gamepad.current.SetMotorSpeeds(0f, 0f);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (Gamepad.current != null)
|
||||
Gamepad.current.SetMotorSpeeds(0f, 0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user