2025-05-15 16:25:40 +02:00

121 lines
5.0 KiB
C#

using System;
using System.Linq;
using UnityEditor;
namespace VRUIP
{
public class VRUIPMenu
{
// CONSTS -------------------------------------------------------------
private const string OculusSettingPath = "VRUIP/Target Framework/Oculus Integration";
private const string MetaSDKSettingPath = "VRUIP/Target Framework/Meta SDK";
private const string XRITKSettingPath = "VRUIP/Target Framework/XR Interaction Toolkit";
private const string UnityEditorSettingPath = "VRUIP/Target Framework/Unity Editor";
public const string SettingPrefKey = "vruip_tf";
// DEFINE SYMBOLS
private const string DefineOculus = "OCULUS_INTEGRATION";
private const string DefineXRITK = "XR_ITK";
private const string DefineMetaSDK = "META_SDK";
// EDITOR PREFS -------------------------------------------------------------
private static VRUIPManager.TargetFramework TargetFramework
{
get => EditorUtil.StringToTargetFramework(EditorPrefs.GetString(SettingPrefKey));
set => EditorPrefs.SetString(SettingPrefKey, EditorUtil.TargetFrameworkToString(value));
}
// MENU FUNCTIONS -------------------------------------------------------------
[MenuItem(OculusSettingPath)]
private static void SetOculus()
{
TargetFramework = VRUIPManager.TargetFramework.OculusIntegration;
SetupDefines();
}
[MenuItem(MetaSDKSettingPath)]
private static void SetMetaSDK()
{
TargetFramework = VRUIPManager.TargetFramework.MetaSDK;
SetupDefines();
}
[MenuItem(XRITKSettingPath)]
private static void SetXRITK()
{
TargetFramework = VRUIPManager.TargetFramework.XRInteractionToolkit;
SetupDefines();
}
[MenuItem(UnityEditorSettingPath)]
private static void SetUnityEditor()
{
TargetFramework = VRUIPManager.TargetFramework.UnityEditorTesting;
SetupDefines();
}
// VALIDATION FUNCTIONS -------------------------------------------------------------
[MenuItem(OculusSettingPath, true)]
private static bool ValidateOculus()
{
Menu.SetChecked(OculusSettingPath, TargetFramework == VRUIPManager.TargetFramework.OculusIntegration);
return true;
}
[MenuItem(MetaSDKSettingPath, true)]
private static bool ValidateMetaSDK()
{
Menu.SetChecked(MetaSDKSettingPath, TargetFramework == VRUIPManager.TargetFramework.MetaSDK);
return true;
}
[MenuItem(XRITKSettingPath, true)]
private static bool ValidateXRITK()
{
Menu.SetChecked(XRITKSettingPath, TargetFramework == VRUIPManager.TargetFramework.XRInteractionToolkit);
return true;
}
[MenuItem(UnityEditorSettingPath, true)]
private static bool ValidateUnityEditor()
{
Menu.SetChecked(UnityEditorSettingPath, TargetFramework == VRUIPManager.TargetFramework.UnityEditorTesting);
return true;
}
// OTHER FUNCTIONS -------------------------------------------------------------
private static void SetupDefines()
{
var targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
if (TargetFramework == VRUIPManager.TargetFramework.OculusIntegration)
{
PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup, out var defines);
if (defines.Contains(DefineOculus)) return;
PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, new[] { DefineOculus });
}
else if (TargetFramework == VRUIPManager.TargetFramework.MetaSDK)
{
PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup, out var defines);
if (defines.Contains(DefineMetaSDK)) return;
PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, new[] { DefineMetaSDK });
}
else if (TargetFramework == VRUIPManager.TargetFramework.XRInteractionToolkit)
{
PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup, out var defines);
if (defines.Contains(DefineXRITK)) return;
PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, new[] { DefineXRITK });
}
else if (TargetFramework == VRUIPManager.TargetFramework.UnityEditorTesting)
{
PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup, out var defines);
if (defines.Length == 0) return;
if (defines.Contains(DefineOculus) || defines.Contains(DefineXRITK) || defines.Contains(DefineMetaSDK))
{
PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, Array.Empty<string>());
}
}
}
}
}