using UnityEngine;
using UnityEngine.InputSystem;

namespace DocCodeSamples.Tests
{
    internal class GamepadHapticsExample : MonoBehaviour
    {
        bool hapticsArePaused = false;

        void Update()
        {
            var gamepad = Gamepad.current;

            // No gamepad connected, no need to continue.
            if (gamepad == null)
                return;

            float leftTrigger = gamepad.leftTrigger.ReadValue();
            float rightTrigger = gamepad.rightTrigger.ReadValue();

            // Only set motor speeds if haptics were not paused and if trigger is actuated.
            // Both triggers must be actuated past 0.2f to start haptics.
            if (!hapticsArePaused &&
                (gamepad.leftTrigger.IsActuated() || gamepad.rightTrigger.IsActuated()))
                gamepad.SetMotorSpeeds(
                    leftTrigger < 0.2f ? 0.0f : leftTrigger,
                    rightTrigger < 0.2f ? 0.0f : rightTrigger);

            // Toggle haptics "playback" when "Button South" is pressed.
            // Notice that if you release the triggers after pausing,
            // and press the button again, haptics will resume.
            if (gamepad.buttonSouth.wasPressedThisFrame)
            {
                if (hapticsArePaused)
                    gamepad.ResumeHaptics();
                else
                    gamepad.PauseHaptics();

                hapticsArePaused = !hapticsArePaused;
            }

            // Notice that if you release the triggers after pausing,
            // and press the Start button, haptics will be reset.
            if (gamepad.startButton.wasPressedThisFrame)
                gamepad.ResetHaptics();
        }
    }
}