blob: 7710dc59bc465960c601013ecc8d6a8e25bc6d71 [file] [log] [blame]
using UnityEngine;
using System.Collections;
using Valve.VR;
public class KeyboardSample : MonoBehaviour
{
public UnityEngine.UI.InputField textEntry;
public bool minimalMode;
static bool keyboardShowing;
string text = "";
static KeyboardSample activeKeyboard = null;
// Use this for initialization
void Start ()
{
GetComponent<UIClicker>().Clicked += KeyboardDemo_Clicked;
}
void OnEnable()
{
SteamVR_Utils.Event.Listen("KeyboardCharInput", OnKeyboard);
SteamVR_Utils.Event.Listen("KeyboardClosed", OnKeyboardClosed);
}
private void OnKeyboard(object[] args)
{
if (activeKeyboard != this)
return;
Valve.VR.VREvent_t ev = (Valve.VR.VREvent_t)args[0];
VREvent_Keyboard_t keyboard = ev.data.keyboard;
byte[] inputBytes = new byte[] { keyboard.cNewInput0, keyboard.cNewInput1, keyboard.cNewInput2, keyboard.cNewInput3, keyboard.cNewInput4, keyboard.cNewInput5, keyboard.cNewInput6, keyboard.cNewInput7 };
int len = 0;
for (; inputBytes[len] != 0 && len < 7; len++) ;
string input = System.Text.Encoding.UTF8.GetString(inputBytes, 0, len);
if (minimalMode)
{
if (input == "\b")
{
if (text.Length > 0)
{
text = text.Substring(0, text.Length - 1);
}
}
else if (input == "\x1b")
{
// Close the keyboard
var vr = SteamVR.instance;
vr.overlay.HideKeyboard();
keyboardShowing = false;
}
else
{
text += input;
}
textEntry.text = text;
}
else
{
System.Text.StringBuilder textBuilder = new System.Text.StringBuilder(1024);
uint size = SteamVR.instance.overlay.GetKeyboardText(textBuilder, 1024);
text = textBuilder.ToString();
textEntry.text = text;
}
}
private void OnKeyboardClosed(object[] args)
{
if (activeKeyboard != this)
return;
keyboardShowing = false;
activeKeyboard = null;
}
private void KeyboardDemo_Clicked()
{
if(!keyboardShowing)
{
keyboardShowing = true;
activeKeyboard = this;
SteamVR.instance.overlay.ShowKeyboard(0, 0, "Description", 256, text, minimalMode, 0);
}
}
// Update is called once per frame
void Update ()
{
}
}