Heroes_of_Hiis/Assets/Oculus/Voice/Demo/Scripts/UIShapesDemo/Instructions.cs

183 lines
6.0 KiB
C#

using Facebook.WitAi;
using Facebook.WitAi.Data.Configuration;
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Oculus.Voice.Demo.UIShapesDemo
{
[ExecuteAlways]
public class Instructions : MonoBehaviour
{
internal enum Step
{
SetupWit = 0,
MissingServerToken,
MissingClientToken,
AddConfig,
AddVoiceExperiences,
SetConfig,
Ready
}
static readonly string[] steps = new string[]
{
"Create an application at https://wit.ai. You can import the \"shapes_demo - Wit.ai Config.zip\" in the Demo/Data directory to create it for you.\n\nConnect to the Wit.ai app by clicking Oculus>Voice SDK>Settings and copy the Server Access Token from the Wit.ai app's settings page.Next, create a new Wit configuration by clicking Create.",
"Copy the Server Access Token from the Wit.ai app's settings page and paste it in field found in Oculus/Voice SDK/Settings.",
"Wit configuration is missing a Client Access Token. Open the Wit configuration, expand Application Configuration, and click Refresh or paste a Client Access Token from your Wit.ai app settings page.",
"Create a Wit configuration by clicking Assets/Create/Voice SDK/Configuration.",
"The scene is missing the App Voice Experience component. Add it by clicking Assets/Create/Voice SDK/Add App Voice Experience to Scene.",
"The App Voice Experience GameObject is missing its Wit configuration. Set the configuration to begin trying voice commands.",
""
};
[SerializeField] private Text instructionText;
private Step currentStep = Step.Ready;
internal Step CurrentStep => currentStep;
internal string CurrentStepText => steps[(int) currentStep];
private void OnValidate()
{
UpdateStep();
}
private void OnEnable()
{
UpdateStep();
}
private void Update()
{
UpdateStep();
}
private void UpdateStep()
{
#if UNITY_EDITOR
var appVoiceExperience = FindObjectOfType<AppVoiceExperience>();
string[] guids = AssetDatabase.FindAssets("t:WitConfiguration");
if (guids.Length == 0)
{
currentStep = Step.SetupWit;
}
else if (!appVoiceExperience)
{
currentStep = Step.AddVoiceExperiences;
}
else if (!appVoiceExperience.RuntimeConfiguration.witConfiguration)
{
currentStep = Step.SetConfig;
appVoiceExperience.RuntimeConfiguration.witConfiguration =
AssetDatabase.LoadAssetAtPath<WitConfiguration>(
AssetDatabase.GUIDToAssetPath(guids[0]));
}
else if (!WitAuthUtility.IsServerTokenValid())
{
currentStep = Step.MissingServerToken;
}
else if (string.IsNullOrEmpty(appVoiceExperience.RuntimeConfiguration?.witConfiguration
.clientAccessToken))
{
currentStep = Step.MissingClientToken;
}
else
{
currentStep = Step.Ready;
}
instructionText.text = steps[(int) currentStep];
#endif
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(Instructions))]
public class InstructionManagerEditor : Editor
{
public override void OnInspectorGUI()
{
var instructions = (Instructions) target;
if (instructions.CurrentStep == Instructions.Step.Ready)
{
GUILayout.Label(
"Everything is ready. Press play to test activation via the Activate button.");
}
else
{
GUILayout.TextArea(instructions.CurrentStepText);
GUILayout.Space(32);
switch (instructions.CurrentStep)
{
case Instructions.Step.SetupWit:
SetupWitResources();
break;
case Instructions.Step.MissingServerToken:
MissingServerTokenResources();
break;
case Instructions.Step.MissingClientToken:
MissingClientTokenResources();
break;
}
}
}
private void MissingClientTokenResources()
{
GUILayout.Label("Resources", EditorStyles.boldLabel);
if (GUILayout.Button("Select Wit Config"))
{
Selection.activeObject = (FindObjectOfType<AppVoiceExperience>()
.RuntimeConfiguration.witConfiguration);
}
if (GUILayout.Button("Open Wit.ai"))
{
Application.OpenURL("https://wit.ai/apps");
}
}
private void MissingServerTokenResources()
{
GUILayout.Label("Resources", EditorStyles.boldLabel);
if (GUILayout.Button("Open Wit.ai"))
{
Application.OpenURL("https://wit.ai/apps");
}
}
private void SetupWitResources()
{
GUILayout.Label("Resources", EditorStyles.boldLabel);
if (GUILayout.Button("Open Wit.ai"))
{
Application.OpenURL("https://wit.ai/apps");
}
GUILayout.Label("Wit.ai Sample Application File");
GUILayout.BeginHorizontal();
if (GUILayout.Button("Open In Explorer"))
{
EditorUtility.RevealInFinder("Assets/Oculus/Voice/Demo/Data/");
}
if (GUILayout.Button("Copy Path"))
{
GUIUtility.systemCopyBuffer = Application.dataPath + "/Oculus/Voice/Demo/Data";
}
GUILayout.EndHorizontal();
}
}
#endif
}