Files
Bachelor-Arbeit-Thomas-Wichert/Assets/Oculus/VR/Editor/OVRProjectSetup/OVRProjectSetupSettingsProvider.cs
2025-07-21 09:11:14 +02:00

160 lines
5.5 KiB
C#

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Globalization;
using UnityEditor;
using UnityEngine.UIElements;
internal class OVRProjectSetupSettingsProvider : SettingsProvider
{
public enum Origins
{
Settings,
Menu,
Icon,
Console
}
public enum Interaction
{
None,
WentToDocumentation,
WentToSource,
Fixed,
Ignored
}
[MenuItem("Oculus/Tools/Project Setup Tool", false, 1)]
static void OpenProjectSetupTool()
{
OpenSettingsWindow(Origins.Menu);
}
public const string SettingsName = "Oculus";
public static readonly string SettingsPath = $"Project/{SettingsName}";
private OVRProjectSetupDrawer _ovrProjectSetupDrawer;
private OVRProjectSetupDrawer OvrProjectSetupDrawer => _ovrProjectSetupDrawer ??= new OVRProjectSetupDrawer();
private static Origins? _lastOrigin = null;
private static Interaction _lastInteraction = Interaction.None;
private static bool _activated = false;
public static double OpenTimestamp { get; set; }
public static double TimeSpent => EditorApplication.timeSinceStartup - OpenTimestamp;
public static OVRTelemetryMarker? InteractionFlowEvent { get; set; }
[SettingsProvider]
public static SettingsProvider CreateProjectValidationSettingsProvider()
{
return new OVRProjectSetupSettingsProvider(SettingsPath, SettingsScope.Project);
}
internal static void SetNewInteraction(Interaction interaction)
{
if (interaction > _lastInteraction)
{
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Interact);
_lastInteraction = interaction;
}
}
internal static void ResetInteraction()
{
InteractionFlowEvent = null;
_lastInteraction = Interaction.None;
_lastOrigin = null;
_activated = false;
OpenTimestamp = 0.0;
}
private OVRProjectSetupSettingsProvider(string path,
SettingsScope scopes)
: base(path, scopes)
{
}
public override void OnActivate(string searchContext, VisualElement rootElement)
{
if (!_activated)
{
OpenTimestamp = EditorApplication.timeSinceStartup;
_activated = true;
_lastOrigin = _lastOrigin ?? Origins.Settings;
OVRTelemetry.Start(OVRProjectSetupTelemetryEvent.EventTypes.Open)
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.BuildTargetGroup,
EditorUserBuildSettings.selectedBuildTargetGroup.ToString())
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString())
.Send();
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Open)
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString());
}
}
public override void OnDeactivate()
{
if (TimeSpent < 0.1)
{
// Ignore the entire interaction as it was too short to be meaningful
return;
}
if (_activated)
{
OVRTelemetry.Start(OVRProjectSetupTelemetryEvent.EventTypes.Close)
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.BuildTargetGroup,
EditorUserBuildSettings.selectedBuildTargetGroup.ToString())
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Origin, _lastOrigin.ToString())
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.TimeSpent,
TimeSpent.ToString(CultureInfo.InvariantCulture))
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Interaction, _lastInteraction.ToString())
.Send();
InteractionFlowEvent = InteractionFlowEvent?.AddPoint(OVRProjectSetupTelemetryEvent.MarkerPoints.Close)
.AddAnnotation(OVRProjectSetupTelemetryEvent.AnnotationTypes.Interaction, _lastInteraction.ToString())
.Send();
ResetInteraction();
}
}
public override void OnTitleBarGUI()
{
base.OnTitleBarGUI();
OvrProjectSetupDrawer.OnTitleBarGUI();
}
public override void OnGUI(string searchContext)
{
base.OnGUI(searchContext);
OvrProjectSetupDrawer.OnGUI();
}
public static void OpenSettingsWindow(Origins origin)
{
_lastOrigin = origin;
var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
EditorUserBuildSettings.selectedBuildTargetGroup = buildTargetGroup;
SettingsService.OpenProjectSettings(SettingsPath);
}
}