/* * 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 UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; [InitializeOnLoad] internal static class OVRProjectSetupUpdater { private static readonly string EnabledSettingItemName = "BackgroundChecks"; private static readonly string EnabledSettingItemLabel = "Background Checks"; internal static OVRProjectSetupSettingBool Enabled; public static readonly OVRProjectSetupSettingBool ShowLogsOnlyOnce = new OVRProjectSetupOnlyOnceSettingBool("ShowLogsOnlyOnce"); private static readonly double StatusUpdateWatchdogTimer = 5.0; private static double _lastStatusUpdate; internal static void SetupTemporaryRegistry() { Enabled = new OVRProjectSetupConstSettingBool(OVRProjectSetupUpdater.EnabledSettingItemName, false, OVRProjectSetupUpdater.EnabledSettingItemLabel); } internal static void RestoreRegistry() { Enabled = new OVRProjectSetupProjectSettingBool(OVRProjectSetupUpdater.EnabledSettingItemName, true, OVRProjectSetupUpdater.EnabledSettingItemLabel); } static OVRProjectSetupUpdater() { EditorSceneManager.sceneOpened += OnEditorSceneManagerSceneOpened; EditorApplication.update += WatchdogUpdate; } private static void WatchdogUpdate() { var currentTime = EditorApplication.timeSinceStartup; if (currentTime - _lastStatusUpdate > StatusUpdateWatchdogTimer) { Update(); } } private static void OnEditorSceneManagerSceneOpened(Scene scene, OpenSceneMode mode) { Update(); } private static void Update() { ResetWatchdog(); if (!Enabled.Value) { return; } if (EditorApplication.isPlayingOrWillChangePlaymode) { return; } if (OVRProjectSetup.ProcessorQueue.Busy) { return; } var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget); var logOption = (OVRProjectSetup.AllowLogs.Value || ShowLogsOnlyOnce.Value) ? OVRProjectSetup.LogMessages.Summary : OVRProjectSetup.LogMessages.Disabled; OVRProjectSetup.UpdateTasks(buildTargetGroup, logMessages: logOption, blocking: false, onCompleted: OnUpdateCompleted); } private static void OnUpdateCompleted(OVRConfigurationTaskProcessor processor) { if (processor.Type == OVRConfigurationTaskProcessor.ProcessorType.Updater) { ResetWatchdog(); } } private static void ResetWatchdog() { _lastStatusUpdate = EditorApplication.timeSinceStartup; } }