86 lines
2.8 KiB
C#
86 lines
2.8 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.Serialization;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
|
|
namespace _PROJECT.NewHandPresence
|
|
{
|
|
public class XRControllerHintController : MonoBehaviour
|
|
{
|
|
public ControllerInformationScriptableObject controllerInformation;
|
|
public GameObject turnControl, smoothLocomotionControl, teleportControl;
|
|
// List due to Vive Wands having 2 grip buttons
|
|
public List<GameObject> gripControls;
|
|
public Billboard billboard;
|
|
[HideInInspector] public XRBaseController xrBaseController;
|
|
|
|
private int _defaultLayer, _outLineLayer;
|
|
private List<GameObject> _currentControls;
|
|
|
|
private void Start()
|
|
{
|
|
_defaultLayer = LayerMask.NameToLayer("Default");
|
|
_outLineLayer = LayerMask.NameToLayer("Outlined Objects");
|
|
_currentControls = new List<GameObject>();
|
|
billboard.HideHint();
|
|
}
|
|
|
|
private void ShowHint(GameObject control, string text)
|
|
{
|
|
control.layer = _outLineLayer;
|
|
billboard.ShowHint(text);
|
|
billboard.SetLineTarget(control);
|
|
_currentControls.Add(control);
|
|
}
|
|
|
|
private void ShowHints(List<GameObject> controls, string text)
|
|
{
|
|
controls.ForEach(control => control.layer = _outLineLayer);
|
|
billboard.ShowHint(text);
|
|
_currentControls.AddRange(controls);
|
|
}
|
|
|
|
|
|
public void HideHint()
|
|
{
|
|
_currentControls?.ForEach(control => control.layer = _defaultLayer);
|
|
_currentControls?.Clear();
|
|
billboard.HideHint();
|
|
}
|
|
|
|
public void ShowTurnHint()
|
|
{
|
|
if (turnControl == null) return;
|
|
ShowHint(turnControl, controllerInformation.turnHintText);
|
|
VibrateController();
|
|
}
|
|
|
|
public void ShowSmoothLocomotionHint()
|
|
{
|
|
if (smoothLocomotionControl == null) return;
|
|
ShowHint(smoothLocomotionControl, controllerInformation.moveHintText);
|
|
VibrateController();
|
|
}
|
|
|
|
public void ShowTeleportHint()
|
|
{
|
|
if (teleportControl == null) return;
|
|
ShowHint(teleportControl, controllerInformation.teleportStartHintText);
|
|
VibrateController();
|
|
}
|
|
|
|
public void ShowGripHint()
|
|
{
|
|
if (gripControls.Count == 0) return;
|
|
ShowHints(gripControls, controllerInformation.gripHintText);
|
|
VibrateController();
|
|
}
|
|
|
|
private void VibrateController()
|
|
{
|
|
if (xrBaseController == null) return;
|
|
xrBaseController.SendHapticImpulse(controllerInformation.vibrationStrength, controllerInformation.vibrationDuration);
|
|
}
|
|
}
|
|
} |