/****************************************************************************
* Copyright 2019 Nreal Techonology Limited. All rights reserved.
*
* This file is part of NRSDK.
*
* https://www.nreal.ai/
*
*****************************************************************************/
using System;
using UnityEngine;
using UnityEngine.UI;
namespace NRKernal.NRExamples
{
/// A controller information display user interface.
public class ControllerInfoDisplayUI : MonoBehaviour
{
/// The main information text.
public Text mainInfoText;
/// The extra information text.
public Text extraInfoText;
/// The extra information string.
private string m_ExtraInfoStr;
/// The maximum line.
private int m_MaxLine = 20;
/// The current debug hand.
private ControllerHandEnum m_CurrentDebugHand = ControllerHandEnum.Right;
private Transform m_CenterCamera;
private Transform CenterCamera
{
get
{
if (m_CenterCamera == null)
{
if (NRSessionManager.Instance.CenterCameraAnchor != null)
{
m_CenterCamera = NRSessionManager.Instance.CenterCameraAnchor;
}
else if (Camera.main != null)
{
m_CenterCamera = Camera.main.transform;
}
}
return m_CenterCamera;
}
}
/// Updates this object.
private void Update()
{
if (NRInput.GetAvailableControllersCount() < 2)
{
m_CurrentDebugHand = NRInput.DomainHand;
}
else
{
if (NRInput.GetButtonDown(ControllerHandEnum.Right, ControllerButton.TRIGGER))
{
m_CurrentDebugHand = ControllerHandEnum.Right;
}
else if (NRInput.GetButtonDown(ControllerHandEnum.Left, ControllerButton.TRIGGER))
{
m_CurrentDebugHand = ControllerHandEnum.Left;
}
}
if (NRInput.GetButtonDown(m_CurrentDebugHand, ControllerButton.TRIGGER))
AddExtraInfo("trigger_btn_down");
if (NRInput.GetButtonDown(m_CurrentDebugHand, ControllerButton.HOME))
AddExtraInfo("home_btn_down");
if (NRInput.GetButtonDown(m_CurrentDebugHand, ControllerButton.APP))
AddExtraInfo("app_btn_down");
if (NRInput.GetButtonUp(m_CurrentDebugHand, ControllerButton.TRIGGER))
AddExtraInfo("trigger_btn_up");
if (NRInput.GetButtonUp(m_CurrentDebugHand, ControllerButton.HOME))
AddExtraInfo("home_btn_up");
if (NRInput.GetButtonUp(m_CurrentDebugHand, ControllerButton.APP))
AddExtraInfo("app_btn_up");
FollowMainCam();
RefreshInfoTexts();
}
/// Follow main camera.
private void FollowMainCam()
{
transform.position = CenterCamera.position;
transform.rotation = CenterCamera.rotation;
}
/// Refresh information texts.
private void RefreshInfoTexts()
{
mainInfoText.text =
"controller count: " + NRInput.GetAvailableControllersCount().ToString() + "\n"
+ "type: " + NRInput.GetControllerType().ToString() + "\n"
+ "current debug hand: " + m_CurrentDebugHand.ToString() + "\n"
+ "position available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_POSITION).ToString() + "\n"
+ "rotation available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_ROTATION).ToString() + "\n"
+ "gyro available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_GYRO).ToString() + "\n"
+ "accel available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_ACCEL).ToString() + "\n"
+ "mag available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_MAG).ToString() + "\n"
+ "battery available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_BATTERY).ToString() + "\n"
+ "vibration available: " + NRInput.GetControllerAvailableFeature(ControllerAvailableFeature.CONTROLLER_AVAILABLE_FEATURE_HAPTIC_VIBRATE).ToString() + "\n"
+ "rotation: " + NRInput.GetRotation(m_CurrentDebugHand).ToString("F3") + "\n"
+ "position: " + NRInput.GetPosition(m_CurrentDebugHand).ToString("F3") + "\n"
+ "touch: " + NRInput.GetTouch(m_CurrentDebugHand).ToString("F3") + "\n"
+ "trigger button: " + NRInput.GetButton(m_CurrentDebugHand, ControllerButton.TRIGGER).ToString() + "\n"
+ "home button: " + NRInput.GetButton(m_CurrentDebugHand, ControllerButton.HOME).ToString() + "\n"
+ "app button: " + NRInput.GetButton(m_CurrentDebugHand, ControllerButton.APP).ToString() + "\n"
+ "grip button: " + NRInput.GetButton(m_CurrentDebugHand, ControllerButton.GRIP).ToString() + "\n"
+ "touchpad button: " + NRInput.GetButton(m_CurrentDebugHand, ControllerButton.TOUCHPAD_BUTTON).ToString() + "\n"
+ "gyro: " + NRInput.GetGyro(m_CurrentDebugHand).ToString("F3") + "\n"
+ "accel: " + NRInput.GetAccel(m_CurrentDebugHand).ToString("F3") + "\n"
+ "mag: " + NRInput.GetMag(m_CurrentDebugHand).ToString("F3") + "\n"
+ "battery: " + NRInput.GetControllerBattery(m_CurrentDebugHand);
extraInfoText.text = m_ExtraInfoStr;
//Debug.Log("istouching:" + NRInput.IsTouching() + " value:" + NRInput.GetTouch(m_CurrentDebugHand).ToString("F3"));
PrintInputState();
}
private void PrintInputState()
{
Debug.LogFormat("istouching:{0} getbutton app:{1} trigger:{2} home:{3} \n" +
"getbuttondown app:{4} trigger:{5} home:{6} \n" +
"getbuttonup app:{7} trigger:{8} home:{9} \n" +
"origin touch:[{10}] gettouch:{11}", NRInput.IsTouching(), NRInput.GetButton(ControllerButton.APP), NRInput.GetButton(ControllerButton.TRIGGER), NRInput.GetButton(ControllerButton.HOME)
, NRInput.GetButtonDown(ControllerButton.APP), NRInput.GetButtonDown(ControllerButton.TRIGGER), NRInput.GetButtonDown(ControllerButton.HOME)
, NRInput.GetButtonUp(ControllerButton.APP), NRInput.GetButtonUp(ControllerButton.TRIGGER), NRInput.GetButtonUp(ControllerButton.HOME)
, NRVirtualDisplayer.SystemButtonState.ToString(), NRInput.GetTouch(m_CurrentDebugHand).ToString("F3"));
}
/// Adds an extra information.
/// The information string.
private void AddExtraInfo(string infoStr)
{
if (string.IsNullOrEmpty(infoStr))
return;
if (string.IsNullOrEmpty(m_ExtraInfoStr))
m_ExtraInfoStr = infoStr;
else
m_ExtraInfoStr = m_ExtraInfoStr + Environment.NewLine + infoStr;
int count = m_ExtraInfoStr.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length;
if (count > m_MaxLine)
m_ExtraInfoStr = m_ExtraInfoStr.Substring(m_ExtraInfoStr.IndexOf(Environment.NewLine) + Environment.NewLine.Length);
}
}
}