summaryrefslogtreecommitdiff
path: root/Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs')
-rw-r--r--Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs253
1 files changed, 253 insertions, 0 deletions
diff --git a/Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs b/Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs
new file mode 100644
index 0000000..fa6fdad
--- /dev/null
+++ b/Assets/Samples/XR Interaction Toolkit/3.1.2/XR Device Simulator/XRDeviceSimulator/Scripts/XRDeviceSimulatorControllerUI.cs
@@ -0,0 +1,253 @@
+using UnityEngine.InputSystem;
+using UnityEngine.UI;
+using UnityEngine.XR.Interaction.Toolkit.Inputs.Simulation;
+
+namespace UnityEngine.XR.Interaction.Toolkit.Samples.DeviceSimulator
+{
+ [RequireComponent(typeof(XRDeviceSimulatorUI))]
+ class XRDeviceSimulatorControllerUI : MonoBehaviour
+ {
+ [Header("General")]
+
+ [SerializeField]
+ Image m_ControllerImage;
+
+ [SerializeField]
+ Image m_ControllerOverlayImage;
+
+ [Header("Primary Button")]
+
+ [SerializeField]
+ Image m_PrimaryButtonImage;
+
+ [SerializeField]
+ Text m_PrimaryButtonText;
+
+ [SerializeField]
+ Image m_PrimaryButtonIcon;
+
+ [Header("Secondary Button")]
+
+ [SerializeField]
+ Image m_SecondaryButtonImage;
+
+ [SerializeField]
+ Text m_SecondaryButtonText;
+
+ [SerializeField]
+ Image m_SecondaryButtonIcon;
+
+ [Header("Trigger")]
+
+ [SerializeField]
+ Image m_TriggerButtonImage;
+
+ [SerializeField]
+ Text m_TriggerButtonText;
+
+ [SerializeField]
+ Image m_TriggerButtonIcon;
+
+ [Header("Grip")]
+
+ [SerializeField]
+ Image m_GripButtonImage;
+
+ [SerializeField]
+ Text m_GripButtonText;
+
+ [SerializeField]
+ Image m_GripButtonIcon;
+
+ [Header("Thumbstick")]
+
+ [SerializeField]
+ Image m_ThumbstickButtonImage;
+
+ [SerializeField]
+ Text m_ThumbstickButtonText;
+
+ [SerializeField]
+ Image m_ThumbstickButtonIcon;
+
+ [Header("Menu")]
+
+ [SerializeField]
+ Image m_MenuButtonImage;
+
+ [SerializeField]
+ Text m_MenuButtonText;
+
+ [SerializeField]
+ Image m_MenuButtonIcon;
+
+ XRDeviceSimulatorUI m_MainUIManager;
+
+ bool m_PrimaryButtonActivated;
+ bool m_SecondaryButtonActivated;
+ bool m_TriggerActivated;
+ bool m_GripActivated;
+ bool m_MenuActivated;
+ bool m_XAxisTranslateActivated;
+ bool m_YAxisTranslateActivated;
+
+ protected void Awake()
+ {
+ m_MainUIManager = GetComponent<XRDeviceSimulatorUI>();
+ }
+
+ internal void Initialize(XRDeviceSimulator simulator)
+ {
+ m_PrimaryButtonText.text = simulator.primaryButtonAction.action.controls[0].displayName;
+ m_SecondaryButtonText.text = simulator.secondaryButtonAction.action.controls[0].displayName;
+ m_GripButtonText.text = simulator.gripAction.action.controls[0].displayName;
+ m_TriggerButtonText.text = simulator.triggerAction.action.controls[0].displayName;
+ m_MenuButtonText.text = simulator.menuAction.action.controls[0].displayName;
+
+ var disabledImgColor = m_MainUIManager.disabledColor;
+ m_ThumbstickButtonImage.color = disabledImgColor;
+ m_ControllerImage.color = m_MainUIManager.disabledDeviceColor;
+ m_ControllerOverlayImage.color = disabledImgColor;
+ }
+
+ internal void SetAsActiveController(bool active, XRDeviceSimulator simulator, bool isRestingHand = false)
+ {
+ var controls = isRestingHand ?
+ simulator.restingHandAxis2DAction.action.controls :
+ simulator.axis2DAction.action.controls;
+
+ m_ThumbstickButtonText.text = $"{controls[0].displayName}, {controls[1].displayName}, {controls[2].displayName}, {controls[3].displayName}";
+
+ UpdateButtonVisuals(active, m_PrimaryButtonIcon, m_PrimaryButtonText, simulator.primaryButtonAction.action.controls[0]);
+ UpdateButtonVisuals(active, m_SecondaryButtonIcon, m_SecondaryButtonText, simulator.secondaryButtonAction.action.controls[0]);
+ UpdateButtonVisuals(active, m_TriggerButtonIcon, m_TriggerButtonText, simulator.triggerAction.action.controls[0]);
+ UpdateButtonVisuals(active, m_GripButtonIcon, m_GripButtonText, simulator.gripAction.action.controls[0]);
+ UpdateButtonVisuals(active, m_MenuButtonIcon, m_MenuButtonText, simulator.menuAction.action.controls[0]);
+ UpdateButtonVisuals(active || isRestingHand, m_ThumbstickButtonIcon, m_ThumbstickButtonText, simulator.axis2DAction.action.controls[0]);
+
+ if (active)
+ {
+ UpdateButtonColor(m_PrimaryButtonImage, m_PrimaryButtonActivated);
+ UpdateButtonColor(m_SecondaryButtonImage, m_SecondaryButtonActivated);
+ UpdateButtonColor(m_TriggerButtonImage, m_TriggerActivated);
+ UpdateButtonColor(m_GripButtonImage, m_GripActivated);
+ UpdateButtonColor(m_MenuButtonImage, m_MenuActivated);
+ UpdateButtonColor(m_ThumbstickButtonImage, m_XAxisTranslateActivated || m_YAxisTranslateActivated);
+
+ m_ControllerImage.color = m_MainUIManager.deviceColor;
+ m_ControllerOverlayImage.color = m_MainUIManager.enabledColor;
+ }
+ else
+ {
+ UpdateDisableControllerButton(m_PrimaryButtonActivated, m_PrimaryButtonImage, m_PrimaryButtonIcon, m_PrimaryButtonText);
+ UpdateDisableControllerButton(m_SecondaryButtonActivated, m_SecondaryButtonImage, m_SecondaryButtonIcon, m_SecondaryButtonText);
+ UpdateDisableControllerButton(m_TriggerActivated, m_TriggerButtonImage, m_TriggerButtonIcon, m_TriggerButtonText);
+ UpdateDisableControllerButton(m_GripActivated, m_GripButtonImage, m_GripButtonIcon, m_GripButtonText);
+ UpdateDisableControllerButton(m_MenuActivated, m_MenuButtonImage, m_MenuButtonIcon, m_MenuButtonText);
+
+ if (!isRestingHand)
+ UpdateDisableControllerButton(m_XAxisTranslateActivated || m_YAxisTranslateActivated, m_ThumbstickButtonImage, m_ThumbstickButtonIcon, m_ThumbstickButtonText);
+ else
+ m_ThumbstickButtonImage.color = m_MainUIManager.buttonColor;
+
+ m_ControllerImage.color = m_MainUIManager.disabledDeviceColor;
+ m_ControllerOverlayImage.color = m_MainUIManager.disabledColor;
+ }
+ }
+
+ // This function keeps the button selected color active if the key if hold when the controller is disabled.
+ // Other buttons are disabled to avoid adding extra noise.
+ void UpdateDisableControllerButton(bool active, Image button, Image buttonIcon, Text buttonText)
+ {
+ if (active)
+ {
+ var tmpColor = m_MainUIManager.selectedColor;
+ tmpColor.a = 0.5f;
+ button.color = tmpColor;
+ buttonText.gameObject.SetActive(true);
+ buttonIcon.gameObject.SetActive(true);
+ }
+ else
+ {
+ button.color = m_MainUIManager.disabledButtonColor;
+ buttonText.gameObject.SetActive(false);
+ buttonIcon.gameObject.SetActive(false);
+ }
+ }
+
+ void UpdateButtonVisuals(bool active, Image buttonIcon, Text buttonText, InputControl control)
+ {
+ buttonText.gameObject.SetActive(active);
+ buttonIcon.gameObject.SetActive(active);
+
+ var color = active ? m_MainUIManager.enabledColor : m_MainUIManager.disabledColor;
+ buttonText.color = color;
+ buttonIcon.color = color;
+
+ buttonIcon.transform.localScale = Vector3.one;
+ buttonIcon.sprite = m_MainUIManager.GetInputIcon(control);
+ switch (control.name)
+ {
+ case "leftButton":
+ buttonText.text = "L Mouse";
+ buttonIcon.color = Color.white;
+ buttonIcon.transform.localScale = new Vector3(-1f, 1f, 1f);
+ break;
+ case "rightButton":
+ buttonText.text = "R Mouse";
+ buttonIcon.color = Color.white;
+ break;
+ default:
+ buttonIcon.sprite = m_MainUIManager.keyboardSprite;
+ break;
+ }
+ }
+
+ void UpdateButtonColor(Image image, bool activated)
+ {
+ image.color = activated ? m_MainUIManager.selectedColor : m_MainUIManager.buttonColor;
+ }
+
+ internal void OnPrimaryButton(bool activated)
+ {
+ m_PrimaryButtonActivated = activated;
+ UpdateButtonColor(m_PrimaryButtonImage, activated);
+ }
+
+ internal void OnSecondaryButton(bool activated)
+ {
+ m_SecondaryButtonActivated = activated;
+ UpdateButtonColor(m_SecondaryButtonImage, activated);
+ }
+
+ internal void OnTrigger(bool activated)
+ {
+ m_TriggerActivated = activated;
+ UpdateButtonColor(m_TriggerButtonImage, activated);
+ }
+
+ internal void OnGrip(bool activated)
+ {
+ m_GripActivated = activated;
+ UpdateButtonColor(m_GripButtonImage, activated);
+ }
+
+ internal void OnMenu(bool activated)
+ {
+ m_MenuActivated = activated;
+ UpdateButtonColor(m_MenuButtonImage, activated);
+ }
+
+ internal void OnXAxisTranslatePerformed(bool activated)
+ {
+ m_XAxisTranslateActivated = activated;
+ UpdateButtonColor(m_ThumbstickButtonImage, activated);
+ }
+
+ internal void OnZAxisTranslatePerformed(bool activated)
+ {
+ m_YAxisTranslateActivated = activated;
+ UpdateButtonColor(m_ThumbstickButtonImage, activated);
+ }
+ }
+}