Replace UltimateXR with HurricaneVR
This commit is contained in:
117
Assets/HurricaneVR/TechDemo/Scripts/DemoKeypad.cs
Normal file
117
Assets/HurricaneVR/TechDemo/Scripts/DemoKeypad.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
using HurricaneVR.Framework.Components;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace HurricaneVR.TechDemo.Scripts
|
||||
{
|
||||
public class DemoKeypad : MonoBehaviour
|
||||
{
|
||||
public UnityEvent Unlocked = new UnityEvent();
|
||||
|
||||
public string Code;
|
||||
public TextMeshPro Display;
|
||||
public string Entry = "";
|
||||
public bool ForceUnlock;
|
||||
|
||||
public int Index => Entry?.Length ?? 0;
|
||||
|
||||
public int MaxLength => Code?.Length ?? 0;
|
||||
|
||||
private bool _unlocked;
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
var buttons = GetComponentsInChildren<DemoKeypadButton>();
|
||||
var colliders = GetComponentsInChildren<Collider>();
|
||||
|
||||
foreach (var keyCollider in colliders)
|
||||
{
|
||||
foreach (var ourCollider in GetComponents<Collider>())
|
||||
{
|
||||
Physics.IgnoreCollision(ourCollider, keyCollider);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < buttons.Length; i++)
|
||||
{
|
||||
var button = buttons[i];
|
||||
button.ButtonDown.AddListener(OnButtonDown);
|
||||
if (i >= 0 && i <= 9)
|
||||
{
|
||||
button.Key = i.ToString()[0];
|
||||
}
|
||||
else if (i == 10)
|
||||
{
|
||||
button.Key = '<';
|
||||
}
|
||||
else if (i == 11)
|
||||
{
|
||||
button.Key = '+';
|
||||
}
|
||||
|
||||
if (button.TextMeshPro)
|
||||
{
|
||||
button.TextMeshPro.text = button.Key.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
Entry = "";
|
||||
if (Display)
|
||||
{
|
||||
Display.text = Entry.PadLeft(MaxLength, '*');
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Update()
|
||||
{
|
||||
if (ForceUnlock)
|
||||
{
|
||||
ForceUnlock = false;
|
||||
|
||||
Unlock();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnButtonDown(HVRPhysicsButton button)
|
||||
{
|
||||
var keyPadButton = button as DemoKeypadButton;
|
||||
|
||||
if (keyPadButton.Key == '<')
|
||||
{
|
||||
if (Entry.Length > 0)
|
||||
{
|
||||
Entry = Entry.Substring(0, Entry.Length - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (keyPadButton.Key == '+')
|
||||
{
|
||||
if (Code == Entry)
|
||||
{
|
||||
Unlock();
|
||||
}
|
||||
}
|
||||
else if (Index >= 0 && Index < MaxLength)
|
||||
{
|
||||
Entry += keyPadButton.Key;
|
||||
}
|
||||
|
||||
if (Display)
|
||||
{
|
||||
Display.text = Entry.PadLeft(MaxLength, '*');
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void Unlock()
|
||||
{
|
||||
if (!_unlocked)
|
||||
Unlocked.Invoke();
|
||||
_unlocked = true;
|
||||
Debug.Log($"unlocked!");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user