using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace Passer.Humanoid { /// /// Sets preferences for \ref Humanoid "Humanoid Control" /// /// /// The preferences can be accessed by the Edit->Preferences... menu. /// /// \image html HumanoidPreferences.png /// /// * SteamVR Support, enables support for SteamVR devices beyound Unity XR (VR, Plus, Pro) /// * Vive Tracker Support, enables support for Vive Trackers (Plus, Pro) /// * Leap Motion Support, enables support for Leap Motion (Plus, Pro) /// * Kinect 1 Support, enables support for Microsoft Kinect 360/Kinect for Windows (Plus, Pro) /// * Kinect 2 Support, enables support for Microsoft Kinect 2 (Plus, Pro) /// * Azure Kinect Support, enables support for Azure Kinect (Plus, Pro) /// * Orbbec Astra Support, enables support for Orbbec Astra (Plus, Pro) /// * Hydra Support, enables support for Razer Hydra (Pro) /// * Tobii Support, enables support for Tobii desktop eye tracking (Pro) /// * Perception Neuron Support, enables support for Perception Neuron (Pro) /// * OptiTrack Support, enables support for OptiTrack (Pro) /// * Antilatency Support, enables support for Antilatency (Pro) /// /// * The Testing Visitor selects which Visitor Scene will be used when a Site is started in Play mode. /// [System.Serializable] public class HumanoidPreferences : ScriptableObject { public static bool help = false; public const string settingsPath = "Assets/Passer/Humanoid/HumanoidPreferences.asset"; public Configuration configuration; internal static HumanoidPreferences GetOrCreateSettings() { string humanoidPath = Configuration_Editor.FindHumanoidFolder(); humanoidPath = humanoidPath.Substring(0, humanoidPath.Length - 1); // strip last / humanoidPath = humanoidPath.Substring(0, humanoidPath.LastIndexOf('/') + 1); // strip Scripts; string settingsPath = "Assets" + humanoidPath + "HumanoidPreferences.asset"; HumanoidPreferences settings = AssetDatabase.LoadAssetAtPath(settingsPath); SerializedObject serializedSettings = new SerializedObject(settings); if (settings == null) { settings = CreateInstance(); AssetDatabase.CreateAsset(settings, settingsPath); } if (settings.configuration == null) { string configurationString = EditorPrefs.GetString("HumanoidConfigurationKey", "DefaultConfiguration"); Configuration configuration = Configuration_Editor.LoadConfiguration(configurationString); if (configuration == null) { configurationString = "DefaultConfiguration"; Configuration_Editor.LoadConfiguration(configurationString); if (configuration == null) { Debug.Log("Created new Default Configuration"); // Create new Default Configuration configuration = CreateInstance(); string path = "Assets" + humanoidPath + configurationString + ".asset"; AssetDatabase.CreateAsset(configuration, path); AssetDatabase.SaveAssets(); } } SerializedProperty configurationProp = serializedSettings.FindProperty("configuration"); configurationProp.objectReferenceValue = configuration; EditorUtility.SetDirty(settings); } serializedSettings.ApplyModifiedProperties(); return (HumanoidPreferences)serializedSettings.targetObject;//settings; } internal static SerializedObject GetOrCreateSerializedSettings() { string humanoidPath = Configuration_Editor.FindHumanoidFolder(); humanoidPath = humanoidPath.Substring(0, humanoidPath.Length - 1); // strip last / humanoidPath = humanoidPath.Substring(0, humanoidPath.LastIndexOf('/') + 1); // strip Scripts; string settingsPath = "Assets" + humanoidPath + "HumanoidPreferences.asset"; HumanoidPreferences settings = AssetDatabase.LoadAssetAtPath(settingsPath); if (settings == null) { Debug.Log("Created new Settings"); settings = CreateInstance(); AssetDatabase.CreateAsset(settings, settingsPath); } if (settings.configuration == null) { Debug.Log("Settings Configuration is not set"); string configurationString = "DefaultConfiguration"; Configuration configuration = Configuration_Editor.LoadConfiguration(configurationString); if (configuration == null) { configurationString = "DefaultConfiguration"; Configuration_Editor.LoadConfiguration(configurationString); if (configuration == null) { Debug.Log("Created new Default Configuration"); // Create new Default Configuration configuration = CreateInstance(); string path = "Assets" + humanoidPath + configurationString + ".asset"; AssetDatabase.CreateAsset(configuration, path); AssetDatabase.SaveAssets(); } } settings.configuration = configuration; } SerializedObject serializedSettings = new SerializedObject(settings); return serializedSettings; } } static class HumanoidPreferencesIMGUIRegister { public static bool reload; [SettingsProvider] public static SettingsProvider CreateHumanoidSettingsProvider() { var provider = new SettingsProvider("Preferences/HumanoidControlSettings", SettingsScope.User) { label = "Humanoid Control", guiHandler = (searchContext) => { SerializedObject serializedSettings = HumanoidPreferences.GetOrCreateSerializedSettings(); SerializedProperty configurationProp = serializedSettings.FindProperty("configuration"); Configuration oldConfiguration = (Configuration)configurationProp.objectReferenceValue; configurationProp.objectReferenceValue = EditorGUILayout.ObjectField("Configuration", configurationProp.objectReferenceValue, typeof(Configuration), false); SerializedObject serializedConfiguration = new SerializedObject(configurationProp.objectReferenceValue); bool anyChanged = false; anyChanged |= (configurationProp.objectReferenceValue != oldConfiguration); anyChanged |= Configuration_Editor.ConfigurationGUI(serializedConfiguration); serializedConfiguration.ApplyModifiedProperties(); serializedSettings.ApplyModifiedProperties(); Configuration_Editor.CheckExtensions((Configuration)configurationProp.objectReferenceValue); if (reload) { reload = false; #if hUNET OnLoadHumanoidPlayerUnet.CheckHumanoidPlayer(); #endif #if hPHOTON1 || hPHOTON2 OnLoadHumanoidPlayerPun.CheckHumanoidPlayer(); #endif #if hBOLT OnLoadHumanoidPlayerBolt.CheckHumanoidPlayer(); #endif #if hMIRROR OnLoadHumanoidPlayerMirror.CheckHumanoidPlayer(); #endif } }, keywords = new HashSet( new[] { "Humanoid", "Oculus", "SteamVR" } ) }; return provider; } } }