1
0
mirror of https://github.com/xiaopeng12138/MaiDXR.git synced 2024-12-19 04:15:53 +01:00
MaiDXR/Assets/Oculus/VR/Editor/OVRPlatformToolSettings.cs

601 lines
14 KiB
C#
Raw Normal View History

2022-08-20 21:35:57 +02:00
/*
* 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.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEditor;
using UnityEngine;
namespace Assets.Oculus.VR.Editor
{
#if UNITY_EDITOR
[UnityEditor.InitializeOnLoad]
#endif
public sealed class OVRPlatformToolSettings : ScriptableObject
{
private const string DEFAULT_RELEASE_CHANNEL = "Alpha";
static OVRPlatformToolSettings()
{
// BuildPipeline.isBuildingPlayer cannot be called in a static constructor
// Run Update once to call TryInitialize then remove delegate
EditorApplication.update += Update;
}
static void Update()
{
// Initialize the instance only if a build is not currently running.
TryInitialize();
// Stop running Update
EditorApplication.update -= Update;
}
public static string AppID
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_AppID" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_AppID" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_AppID" + (int)Instance.targetPlatform, value);
}
}
}
public static string ReleaseNote
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_ReleaseNote" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_ReleaseNote" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_ReleaseNote" + (int)Instance.targetPlatform, value);
}
}
}
public static string ReleaseChannel
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_ReleaseChannel" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_ReleaseChannel" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_ReleaseChannel" + (int)Instance.targetPlatform, value);
}
}
}
public static string ApkBuildPath
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_ApkBuildPath" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_ApkBuildPath" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_ApkBuildPath" + (int)Instance.targetPlatform, value);
}
}
}
public static string ObbFilePath
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_ObbFilePath" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_ObbFilePath" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_ObbFilePath" + (int)Instance.targetPlatform, value);
}
}
}
public static string AssetsDirectory
{
get
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None &&
EditorPrefs.HasKey("OVRPlatformToolSettings_AssetsDirectory" + (int)Instance.targetPlatform))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_AssetsDirectory" + (int)Instance.targetPlatform);
}
else
{
return "";
}
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
EditorPrefs.SetString("OVRPlatformToolSettings_AssetsDirectory" + (int)Instance.targetPlatform, value);
}
}
}
public static string RiftBuildDirectory
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftBuildDirectory"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_RiftBuildDirectory");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_RiftBuildDirectory", value);
}
}
public static string RiftBuildVersion
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftBuildVersion"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_RiftBuildVersion");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_RiftBuildVersion", value);
}
}
public static string RiftLaunchFile
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftLaunchFile"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_RiftLaunchFile");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_RiftLaunchFile", value);
}
}
public static string RiftLaunchParams
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftLaunchParams"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_RiftLaunchParams");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_RiftLaunchParams", value);
}
}
public static string Rift2DLaunchFile
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_Rift2DLaunchFile"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_Rift2DLaunchFile");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_Rift2DLaunchFile", value);
}
}
public static string Rift2DLaunchParams
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_Rift2DLaunchParams"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_Rift2DLaunchParams");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_Rift2DLaunchParams", value);
}
}
public static bool RiftFirewallException
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftFirewallException"))
{
return EditorPrefs.GetBool("OVRPlatformToolSettings_RiftFirewallException");
}
else
{
return false;
}
}
set
{
EditorPrefs.SetBool("OVRPlatformToolSettings_RiftFirewallException", value);
}
}
public static OVRPlatformTool.GamepadType RiftGamepadEmulation
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_RiftGamepadEmulation"))
{
return (OVRPlatformTool.GamepadType)EditorPrefs.GetInt("OVRPlatformToolSettings_RiftGamepadEmulation");
}
else
{
return OVRPlatformTool.GamepadType.OFF;
}
}
set
{
EditorPrefs.SetInt("OVRPlatformToolSettings_RiftGamepadEmulation", (int)value);
}
}
public static List<RedistPackage> RiftRedistPackages
{
get { return Instance.riftRedistPackages; }
set { Instance.riftRedistPackages = value; }
}
public static string LanguagePackDirectory
{
get { return Instance.languagePackDirectory; }
set { Instance.languagePackDirectory = value; }
}
public static List<AssetConfig> AssetConfigs
{
get
{
return Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None ? Instance.assetConfigs[(int)Instance.targetPlatform].configList : new List<AssetConfig>();
}
set
{
if (Instance.targetPlatform < OVRPlatformTool.TargetPlatform.None)
{
Instance.assetConfigs[(int)Instance.targetPlatform].configList = value;
}
}
}
public static OVRPlatformTool.TargetPlatform TargetPlatform
{
get { return Instance.targetPlatform; }
set { Instance.targetPlatform = value; }
}
public static bool RunOvrLint
{
get { return Instance.runOvrLint; }
set { Instance.runOvrLint = value; }
}
public static bool UploadDebugSymbols
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_UploadDebugSymbols"))
{
return EditorPrefs.GetBool("OVRPlatformToolSettings_UploadDebugSymbols");
}
else
{
return true;
}
}
set
{
EditorPrefs.SetBool("OVRPlatformToolSettings_UploadDebugSymbols", value);
}
}
public static string DebugSymbolsDirectory
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_DebugSymbolsDirectory"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_DebugSymbolsDirectory");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_DebugSymbolsDirectory", value);
}
}
public static bool UploadDebugSymbolsOnly
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_UploadDebugSymbolsOnly"))
{
return EditorPrefs.GetBool("OVRPlatformToolSettings_UploadDebugSymbolsOnly");
}
else
{
return false;
}
}
set
{
EditorPrefs.SetBool("OVRPlatformToolSettings_UploadDebugSymbolsOnly", value);
}
}
public static string BuildID
{
get
{
if (EditorPrefs.HasKey("OVRPlatformToolSettings_BuildID"))
{
return EditorPrefs.GetString("OVRPlatformToolSettings_BuildID");
}
else
{
return "";
}
}
set
{
EditorPrefs.SetString("OVRPlatformToolSettings_BuildID", value);
}
}
[SerializeField]
private List<RedistPackage> riftRedistPackages;
[SerializeField]
private string languagePackDirectory = "";
[SerializeField]
private AssetConfigList[] assetConfigs = new AssetConfigList[(int)OVRPlatformTool.TargetPlatform.None];
[SerializeField]
private OVRPlatformTool.TargetPlatform targetPlatform = OVRPlatformTool.TargetPlatform.None;
[SerializeField]
private bool runOvrLint = true;
public static bool TryInitialize()
{
// If not initialized and Build Player is current running, UnityEditor.AssetDatabase.CreateAsset
// is unsafe to call and will cause a crash. Only load the resource if it already exists.
if (instance == null && BuildPipeline.isBuildingPlayer)
{
instance = Resources.Load<OVRPlatformToolSettings>("OVRPlatformToolSettings");
return instance != null;
}
// Otherwise create/load the resource instance normally.
return Instance != null;
}
private static OVRPlatformToolSettings instance;
public static OVRPlatformToolSettings Instance
{
get
{
if (instance == null)
{
instance = Resources.Load<OVRPlatformToolSettings>("OVRPlatformToolSettings");
if (instance == null)
{
if (BuildPipeline.isBuildingPlayer)
{
// UnityEditor.AssetDatabase.CreateAsset is unsafe to call during a build and
// may cause a crash.
// This should be rare as the asset is created in the static constructor and should
// usually exist.
throw new UnityEditor.Build.BuildFailedException(
"Cannot create OVRPlatformToolSettings asset while building.");
}
instance = ScriptableObject.CreateInstance<OVRPlatformToolSettings>();
string properPath = System.IO.Path.Combine(UnityEngine.Application.dataPath, "Resources");
if (!System.IO.Directory.Exists(properPath))
{
UnityEditor.AssetDatabase.CreateFolder("Assets", "Resources");
}
string fullPath = System.IO.Path.Combine(
System.IO.Path.Combine("Assets", "Resources"),
"OVRPlatformToolSettings.asset"
);
UnityEditor.AssetDatabase.CreateAsset(instance, fullPath);
// Initialize cross platform default values for the new instance of OVRPlatformToolSettings here
if (instance != null)
{
for (int i = 0; i < (int)OVRPlatformTool.TargetPlatform.None; i++)
{
EditorPrefs.SetString("OVRPlatformToolSettings_ReleaseChannel" + i, DEFAULT_RELEASE_CHANNEL);
instance.assetConfigs[i] = new AssetConfigList();
}
instance.riftRedistPackages = new List<RedistPackage>();
}
}
}
return instance;
}
set
{
instance = value;
}
}
}
// Wrapper for asset config list so that it can be serialized properly
[System.Serializable]
public class AssetConfigList
{
public List<AssetConfig> configList;
public AssetConfigList()
{
configList = new List<AssetConfig>();
}
}
[System.Serializable]
public class AssetConfig
{
public enum AssetType
{
DEFAULT,
STORE,
LANGUAGE_PACK,
};
public string name;
public bool required;
public AssetType type;
public string sku;
private bool foldout;
public AssetConfig(string assetName)
{
name = assetName;
}
public bool GetFoldoutState()
{
return foldout;
}
public void SetFoldoutState(bool state)
{
foldout = state;
}
}
[System.Serializable]
public class RedistPackage
{
public bool include = false;
public string name;
public string id;
public RedistPackage(string pkgName, string pkgId)
{
name = pkgName;
id = pkgId;
}
}
}