Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

188 lines
5.1 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System;
#if UNITY_EDITOR
[UnityEditor.InitializeOnLoad]
#endif
public class OVRConfig : ScriptableObject
{
[SerializeField]
private string androidSDKPath = "";
[SerializeField]
private string gradlePath = "";
[SerializeField]
private string jdkPath = "";
private static OVRConfig instance;
public static OVRConfig Instance
{
get
{
if (instance == null)
{
instance = Resources.Load<OVRConfig>("OVRConfig");
if (instance == null)
{
instance = ScriptableObject.CreateInstance<OVRConfig>();
string resourcePath = Path.Combine(UnityEngine.Application.dataPath, "Resources");
if (!Directory.Exists(resourcePath))
{
UnityEditor.AssetDatabase.CreateFolder("Assets", "Resources");
}
string fullPath = Path.Combine(Path.Combine("Assets", "Resources"), "OVRBuildConfig.asset");
UnityEditor.AssetDatabase.CreateAsset(instance, fullPath);
}
}
return instance;
}
set
{
instance = value;
}
}
// Returns the path to the base directory of the Android SDK
public string GetAndroidSDKPath(bool throwError = true)
{
#if UNITY_2019_1_OR_NEWER
// Check for use of embedded path or user defined
bool useEmbedded = EditorPrefs.GetBool("SdkUseEmbedded");
if (useEmbedded)
{
androidSDKPath = Path.Combine(BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None), "SDK");
}
else
#endif
{
androidSDKPath = EditorPrefs.GetString("AndroidSdkRoot");
}
androidSDKPath = androidSDKPath.Replace("/", "\\");
// Validate sdk path and notify user if path does not exist.
if (!Directory.Exists(androidSDKPath))
{
androidSDKPath = Environment.GetEnvironmentVariable("ANDROID_SDK_ROOT");
if (!string.IsNullOrEmpty(androidSDKPath))
{
return androidSDKPath;
}
if (throwError)
{
EditorUtility.DisplayDialog("Android SDK not Found",
"Android SDK not found. Please ensure that the path is set correctly in (Edit -> Preferences -> External Tools) or that the Untiy Android module is installed correctly.",
"Ok");
}
return string.Empty;
}
EditorUtility.SetDirty(Instance);
return androidSDKPath;
}
// Returns the path to the gradle-launcher-*.jar
public string GetGradlePath(bool throwError = true)
{
string libPath = "";
#if UNITY_2019_1_OR_NEWER
// Check for use of embedded path or user defined
bool useEmbedded = EditorPrefs.GetBool("GradleUseEmbedded");
if (useEmbedded)
{
libPath = Path.Combine(BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None), "Tools\\gradle\\lib");
}
else
{
libPath = Path.Combine(EditorPrefs.GetString("GradlePath"), "lib");
}
#else
libPath = Path.Combine(EditorApplication.applicationContentsPath, "PlaybackEngines\\AndroidPlayer\\Tools\\gradle\\lib");
#endif
libPath = libPath.Replace("/", "\\");
if (!string.IsNullOrEmpty(libPath) && Directory.Exists(libPath))
{
string[] gradleJar = Directory.GetFiles(libPath, "gradle-launcher-*.jar");
if (gradleJar.Length == 1)
{
gradlePath = gradleJar[0];
}
}
// Validate gradle path and notify user if path does not exist.
if (!File.Exists(gradlePath))
{
if (throwError)
{
EditorUtility.DisplayDialog("Gradle not Found",
"Gradle not found. Please ensure that the path is set correctly in (Edit -> Preferences -> External Tools) or that the Untiy Android module is installed correctly.",
"Ok");
}
return string.Empty;
}
EditorUtility.SetDirty(Instance);
return gradlePath;
}
// Returns path to the Java executable in the JDK
public string GetJDKPath(bool throwError = true)
{
#if UNITY_EDITOR_WIN
// Check for use of embedded path or user defined
bool useEmbedded = EditorPrefs.GetBool("JdkUseEmbedded");
string exePath = "";
if (useEmbedded)
{
#if UNITY_2019_1_OR_NEWER
exePath = Path.Combine(BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None), "Tools\\OpenJDK\\Windows\\bin");
#else
exePath = Path.Combine(EditorApplication.applicationContentsPath, "PlaybackEngines\\AndroidPlayer\\Tools\\OpenJDK\\Windows\\bin");
#endif
}
else
{
exePath = Path.Combine(EditorPrefs.GetString("JdkPath"), "bin");
}
jdkPath = Path.Combine(exePath, "java.exe");
jdkPath = jdkPath.Replace("/", "\\");
// Validate gradle path and notify user if path does not exist.
if (!File.Exists(jdkPath))
{
// Check the enviornment variable as a backup to see if the JDK is there.
string javaHome = Environment.GetEnvironmentVariable("JAVA_HOME");
if(!string.IsNullOrEmpty(javaHome))
{
jdkPath = Path.Combine(javaHome, "bin\\java.exe");
if(File.Exists(jdkPath))
{
EditorUtility.SetDirty(Instance);
return jdkPath;
}
}
if (throwError)
{
EditorUtility.DisplayDialog("JDK not Found",
"JDK not found. Please ensure that the path is set correctly in (Edit -> Preferences -> External Tools) or that the Untiy Android module is installed correctly.",
"Ok");
}
return string.Empty;
}
#endif
EditorUtility.SetDirty(Instance);
return jdkPath;
}
}