LMQT/Assets/TouchScript/Editor/InputSources/StandardInputEditor.cs
2024-12-10 09:03:45 +08:00

136 lines
5.1 KiB
C#

/*
* @author Valentin Simonov / http://va.lent.in/
*/
using TouchScript.InputSources;
using UnityEditor;
using UnityEngine;
using TouchScript.Editor.EditorUI;
namespace TouchScript.Editor.InputSources
{
[CustomEditor(typeof (StandardInput), true)]
internal sealed class StandardInputEditor : InputSourceEditor
{
public static readonly GUIContent TEXT_GENERAL_HEADER = new GUIContent("General", "General settings.");
public static readonly GUIContent TEXT_WINDOWS_HEADER = new GUIContent("Windows", "Windows specific settings.");
public static readonly GUIContent TEXT_WEBGL_HEADER = new GUIContent("WebGL", "WebGL specific settings.");
public static readonly GUIContent TEXT_EMULATE_MOUSE = new GUIContent("Emulate Second Mouse Pointer", "If selected, you can press ALT to make a stationary mouse pointer. This is used to simulate multi-touch.");
public static readonly GUIContent TEXT_WINDOWS_API = new GUIContent("Select which touch API to use:\n - Windows 8 — new WM_POINTER API,\n - Windows 7 — old WM_TOUCH API,\n - Unity — Unity's WM_TOUCH implementation,\n - None — no touch.");
public static readonly GUIContent TEXT_WINDOWS8 = new GUIContent("Windows 8+ API");
public static readonly GUIContent TEXT_WINDOWS7 = new GUIContent("Windows 7 API");
public static readonly GUIContent TEXT_WINDOWS8_MOUSE = new GUIContent("Enable Mouse on Windows 8+");
public static readonly GUIContent TEXT_WINDOWS7_MOUSE = new GUIContent("Enable Mouse on Windows 7");
public static readonly GUIContent TEXT_UWP_MOUSE = new GUIContent("Enable Mouse on UWP");
public static readonly GUIContent TEXT_HELP = new GUIContent("This component gathers input data from various devices like touch, mouse and pen on all platforms.");
private SerializedProperty basicEditor;
private SerializedProperty windows8Touch, windows7Touch, webGLTouch, windows8Mouse,
windows7Mouse, universalWindowsMouse, emulateSecondMousePointer;
private SerializedProperty generalProps, windowsProps, webglProps;
private StandardInput instance;
protected override void OnEnable()
{
base.OnEnable();
instance = target as StandardInput;
basicEditor = serializedObject.FindProperty("basicEditor");
windows8Touch = serializedObject.FindProperty("windows8API");
windows7Touch = serializedObject.FindProperty("windows7API");
webGLTouch = serializedObject.FindProperty("webGLTouch");
windows8Mouse = serializedObject.FindProperty("windows8Mouse");
windows7Mouse = serializedObject.FindProperty("windows7Mouse");
universalWindowsMouse = serializedObject.FindProperty("universalWindowsMouse");
emulateSecondMousePointer = serializedObject.FindProperty("emulateSecondMousePointer");
generalProps = serializedObject.FindProperty("generalProps");
windowsProps = serializedObject.FindProperty("windowsProps");
webglProps = serializedObject.FindProperty("webglProps");
}
public override void OnInspectorGUI()
{
#if UNITY_5_6_OR_NEWER
serializedObject.UpdateIfRequiredOrScript();
#else
serializedObject.UpdateIfDirtyOrScript();
#endif
GUILayout.Space(5);
if (basicEditor.boolValue)
{
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(emulateSecondMousePointer, TEXT_EMULATE_MOUSE);
if (EditorGUI.EndChangeCheck())
{
instance.EmulateSecondMousePointer = emulateSecondMousePointer.boolValue;
}
if (GUIElements.BasicHelpBox(TEXT_HELP))
{
basicEditor.boolValue = false;
Repaint();
}
}
else
{
drawGeneral();
drawWindows();
drawWebGL();
}
serializedObject.ApplyModifiedProperties();
base.OnInspectorGUI();
}
private void drawGeneral()
{
var display = GUIElements.Header(TEXT_GENERAL_HEADER, generalProps);
if (display)
{
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(emulateSecondMousePointer, TEXT_EMULATE_MOUSE);
if (EditorGUI.EndChangeCheck())
{
instance.EmulateSecondMousePointer = emulateSecondMousePointer.boolValue;
}
EditorGUI.indentLevel--;
}
}
private void drawWindows()
{
var display = GUIElements.Header(TEXT_WINDOWS_HEADER, windowsProps);
if (display)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(windows8Touch, TEXT_WINDOWS8);
EditorGUILayout.PropertyField(windows7Touch, TEXT_WINDOWS7);
EditorGUILayout.LabelField(TEXT_WINDOWS_API, GUIElements.HelpBox);
EditorGUILayout.PropertyField(windows8Mouse, TEXT_WINDOWS8_MOUSE);
EditorGUILayout.PropertyField(windows7Mouse, TEXT_WINDOWS7_MOUSE);
EditorGUILayout.PropertyField(universalWindowsMouse, TEXT_UWP_MOUSE);
EditorGUI.indentLevel--;
}
}
private void drawWebGL()
{
var display = GUIElements.Header(TEXT_WEBGL_HEADER, webglProps);
if (display)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(webGLTouch);
EditorGUI.indentLevel--;
}
}
}
}