diff --git a/HoloBot/Assets/HoloToolkit.meta b/HoloBot/Assets/HoloToolkit.meta new file mode 100644 index 0000000..d3448e9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5a7c0a4f12cac724ebe0214e2392fb36 +folderAsset: yes +timeCreated: 1494566565 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build.meta b/HoloBot/Assets/HoloToolkit/Build.meta new file mode 100644 index 0000000..e6578aa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6b6f13a11bfa1c4f97b91ef1c37829a +folderAsset: yes +timeCreated: 1466615023 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor.meta b/HoloBot/Assets/HoloToolkit/Build/Editor.meta new file mode 100644 index 0000000..5752db0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eb16359da8d1ac447a8795ea2b7b2a8f +folderAsset: yes +timeCreated: 1466615024 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs new file mode 100644 index 0000000..608b90f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs @@ -0,0 +1,446 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; +using System.Collections; +using System.Net; +using System; +using System.IO; +using System.Collections.Generic; + +namespace HoloToolkit.Unity +{ + /// + /// Function used to communicate with the device through the REST API + /// + public class BuildDeployPortal + { + // Consts + public const float TimeOut = 6.0f; + public const int TimeoutMS = (int)(TimeOut * 1000.0f); + public const float MaxWaitTime = 20.0f; + + public static readonly string kAPI_ProcessQuery = @"http://{0}/api/resourcemanager/processes"; + public static readonly string kAPI_PackagesQuery = @"http://{0}/api/appx/packagemanager/packages"; + public static readonly string kAPI_InstallQuery = @"http://{0}/api/app/packagemanager/package"; + public static readonly string kAPI_InstallStatusQuery = @"http://{0}/api/app/packagemanager/state"; + public static readonly string kAPI_AppQuery = @"http://{0}/api/taskmanager/app"; + public static readonly string kAPI_FileQuery = @"http://{0}/api/filesystem/apps/file"; + + // Enums + public enum AppInstallStatus + { + Invalid, + Installing, + InstallSuccess, + InstallFail + } + + // Classes & Structs + public struct ConnectInfo + { + public ConnectInfo(string ip, string user, string password) + { + IP = ip; + User = user; + Password = password; + } + + public string IP; + public string User; + public string Password; + } + [Serializable] + public class AppDetails + { + public string Name; + public string PackageFamilyName; + public string PackageFullName; + public int PackageOrigin; + public string PackageRelativeId; + public string Publisher; + } + [Serializable] + public class AppList + { + public AppDetails[] InstalledPackages; + } + [Serializable] + public class ProcessDesc + { + public float CPUUsage; + public string ImageName; + public float PageFileUsage; + public int PrivateWorkingSet; + public int ProcessId; + public int SessionId; + public string UserName; + public int VirtualSize; + public int WorkingSetSize; + } + [Serializable] + public class ProcessList + { + public ProcessDesc[] Processes; + } + [Serializable] + public class InstallStatus + { + public int Code; + public string CodeText; + public string Reason; + public bool Success; + } + [Serializable] + public class Response + { + public string Reason; + } + private class TimeoutWebClient : WebClient + { + protected override WebRequest GetWebRequest(Uri uri) + { + WebRequest lWebRequest = base.GetWebRequest(uri); + lWebRequest.Timeout = BuildDeployPortal.TimeoutMS; + ((HttpWebRequest)lWebRequest).ReadWriteTimeout = BuildDeployPortal.TimeoutMS; + return lWebRequest; + } + } + + // Functions + public static bool IsAppInstalled(string packageFamilyName, ConnectInfo connectInfo) + { + // Look at the device for a matching app name (if not there, then not installed) + return (QueryAppDetails(packageFamilyName, connectInfo) != null); + } + + public static bool IsAppRunning(string appName, ConnectInfo connectInfo) + { + using (var client = new TimeoutWebClient()) + { + client.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + string query = string.Format(kAPI_ProcessQuery, connectInfo.IP); + string procListJSON = client.DownloadString(query); + + ProcessList procList = JsonUtility.FromJson(procListJSON); + for (int i = 0; i < procList.Processes.Length; ++i) + { + string procName = procList.Processes[i].ImageName; + if (procName.Contains(appName)) + { + return true; + } + } + } + return false; + } + + public static AppInstallStatus GetInstallStatus(ConnectInfo connectInfo) + { + using (var client = new TimeoutWebClient()) + { + client.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + string query = string.Format(kAPI_InstallStatusQuery, connectInfo.IP); + string statusJSON = client.DownloadString(query); + InstallStatus status = JsonUtility.FromJson(statusJSON); + + if (status == null) + { + return AppInstallStatus.Installing; + } + else if (status.Success == false) + { + Debug.LogError(status.Reason + "(" + status.CodeText + ")"); + return AppInstallStatus.InstallFail; + } + return AppInstallStatus.InstallSuccess; + } + } + + public static AppDetails QueryAppDetails(string packageFamilyName, ConnectInfo connectInfo) + { + using (var client = new TimeoutWebClient()) + { + client.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + string query = string.Format(kAPI_PackagesQuery, connectInfo.IP); + string appListJSON = client.DownloadString(query); + + AppList appList = JsonUtility.FromJson(appListJSON); + for (int i = 0; i < appList.InstalledPackages.Length; ++i) + { + string thisAppName = appList.InstalledPackages[i].PackageFamilyName; + if (thisAppName.Equals(packageFamilyName, StringComparison.OrdinalIgnoreCase)) + { + return appList.InstalledPackages[i]; + } + } + } + return null; + } + + public static bool InstallApp(string appFullPath, ConnectInfo connectInfo, bool waitForDone = true) + { + try + { + // Calc the cert and dep paths + string fileName = Path.GetFileName(appFullPath); + string certFullPath = Path.ChangeExtension(appFullPath, ".cer"); + string certName = Path.GetFileName(certFullPath); + string depPath = Path.GetDirectoryName(appFullPath) + @"\Dependencies\x86\"; + + // Post it using the REST API + WWWForm form = new WWWForm(); + + // APPX file + FileStream stream = new FileStream(appFullPath, FileMode.Open, FileAccess.Read, FileShare.Read); + BinaryReader reader = new BinaryReader(stream); + form.AddBinaryData(fileName, reader.ReadBytes((int)reader.BaseStream.Length), fileName); + stream.Close(); + + // CERT file + stream = new FileStream(certFullPath, FileMode.Open, FileAccess.Read, FileShare.Read); + reader = new BinaryReader(stream); + form.AddBinaryData(certName, reader.ReadBytes((int)reader.BaseStream.Length), certName); + stream.Close(); + + // Dependencies + FileInfo[] depFiles = (new DirectoryInfo(depPath)).GetFiles(); + foreach (FileInfo dep in depFiles) + { + stream = new FileStream(dep.FullName, FileMode.Open, FileAccess.Read, FileShare.Read); + reader = new BinaryReader(stream); + string depFilename = Path.GetFileName(dep.FullName); + form.AddBinaryData(depFilename, reader.ReadBytes((int)reader.BaseStream.Length), depFilename); + stream.Close(); + } + + // Credentials + Dictionary headers = form.headers; + headers["Authorization"] = "Basic " + EncodeTo64(connectInfo.User + ":" + connectInfo.Password); + + // Unity places an extra quote in the content-type boundary parameter that the device portal doesn't care for, remove it + if (headers.ContainsKey("Content-Type")) + { + headers["Content-Type"] = headers["Content-Type"].Replace("\"", ""); + } + + // Query + string query = string.Format(kAPI_InstallQuery, connectInfo.IP); + query += "?package=" + WWW.EscapeURL(fileName); + WWW www = new WWW(query, form.data, headers); + DateTime queryStartTime = DateTime.Now; + while (!www.isDone && + ((DateTime.Now - queryStartTime).TotalSeconds < TimeOut)) + { + System.Threading.Thread.Sleep(10); + } + + // Give it a short time before checking + System.Threading.Thread.Sleep(250); + + // Report + if (www.isDone) + { + if (!string.IsNullOrEmpty(www.error)) + { + Debug.LogError(www.error); + } + else if (!string.IsNullOrEmpty(www.text)) + { + Debug.Log(JsonUtility.FromJson(www.text).Reason); + } + else + { + Debug.LogWarning("Completed with null response string"); + } + } + + // Wait for done (if requested) + DateTime waitStartTime = DateTime.Now; + while (waitForDone && + ((DateTime.Now - waitStartTime).TotalSeconds < MaxWaitTime)) + { + AppInstallStatus status = GetInstallStatus(connectInfo); + if (status == AppInstallStatus.InstallSuccess) + { + Debug.Log("Install Successful!"); + break; + } + else if (status == AppInstallStatus.InstallFail) + { + Debug.LogError("Install Failed!"); + break; + } + + // Wait a bit and we'll ask again + System.Threading.Thread.Sleep(1000); + } + } + catch (System.Exception ex) + { + Debug.LogError(ex.ToString()); + return false; + } + + return true; + } + + public static bool UninstallApp(string packageFamilyName, ConnectInfo connectInfo) + { + try + { + // Find the app description + AppDetails appDetails = QueryAppDetails(packageFamilyName, connectInfo); + if (appDetails == null) + { + Debug.LogError(string.Format("Application '{0}' not found", packageFamilyName)); + return false; + } + + // Setup the command + string query = string.Format(kAPI_InstallQuery, connectInfo.IP); + query += "?package=" + WWW.EscapeURL(appDetails.PackageFullName); + + // Use HttpWebRequest for a delete query + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query); + request.Timeout = TimeoutMS; + request.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + request.Method = "DELETE"; + using (HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse()) + { + Debug.Log("Response = " + httpResponse.StatusDescription); + httpResponse.Close(); + } + } + catch (System.Exception ex) + { + Debug.LogError(ex.ToString()); + return false; + } + + return true; + } + + public static bool LaunchApp(string packageFamilyName, ConnectInfo connectInfo) + { + // Find the app description + AppDetails appDetails = QueryAppDetails(packageFamilyName, connectInfo); + if (appDetails == null) + { + Debug.LogError("Appliation not found"); + return false; + } + + // Setup the command + string query = string.Format(kAPI_AppQuery, connectInfo.IP); + query += "?appid=" + WWW.EscapeURL(EncodeTo64(appDetails.PackageRelativeId)); + query += "&package=" + WWW.EscapeURL(EncodeTo64(appDetails.PackageFamilyName)); + + // Use HttpWebRequest + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query); + request.Timeout = TimeoutMS; + request.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + request.Method = "POST"; + + // Query + using (HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse()) + { + Debug.Log("Response = " + httpResponse.StatusDescription); + httpResponse.Close(); + } + + return true; + } + + public static bool KillApp(string packageFamilyName, ConnectInfo connectInfo) + { + try + { + // Find the app description + AppDetails appDetails = QueryAppDetails(packageFamilyName, connectInfo); + if (appDetails == null) + { + Debug.LogError("Appliation not found"); + return false; + } + + // Setup the command + string query = string.Format(kAPI_AppQuery, connectInfo.IP); + query += "?package=" + WWW.EscapeURL(EncodeTo64(appDetails.PackageFullName)); + + // And send it across + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query); + request.Timeout = TimeoutMS; + request.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + request.Method = "DELETE"; + using (HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse()) + { + Debug.Log("Response = " + httpResponse.StatusDescription); + httpResponse.Close(); + } + } + catch (System.Exception ex) + { + Debug.LogError(ex.ToString()); + return false; + } + + return true; + } + + public static bool DeviceLogFile_View(string packageFamilyName, ConnectInfo connectInfo) + { + using (var client = new TimeoutWebClient()) + { + client.Credentials = new NetworkCredential(connectInfo.User, connectInfo.Password); + try + { + // Setup + string logFile = Application.temporaryCachePath + @"/deviceLog.txt"; + + // Get the app details... + AppDetails appDetails = QueryAppDetails(packageFamilyName, connectInfo); + if (appDetails == null) + { + Debug.LogError("Application not found on target device (" + packageFamilyName + ")"); + return false; + } + + // Download the file + string query = string.Format(kAPI_FileQuery, connectInfo.IP); + query += "?knownfolderid=LocalAppData"; + query += "&filename=UnityPlayer.log"; + query += "&packagefullname=" + appDetails.PackageFullName; + query += "&path=%5C%5CTempState"; + client.DownloadFile(query, logFile); + + // Open it up in default text editor + System.Diagnostics.Process.Start(logFile); + } + catch (System.Exception ex) + { + Debug.LogError(ex.ToString()); + return false; + } + } + + return true; + } + + // Helpers + static string EncodeTo64(string toEncode) + { + byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode); + string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); + return returnValue; + } + static string DecodeFrom64(string encodedData) + { + byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); + string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes); + return returnValue; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs.meta new file mode 100644 index 0000000..99ba73b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPortal.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 09ea77b2be8b62b4a9c86c123cd5ddbe +timeCreated: 1466615025 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs new file mode 100644 index 0000000..64ca831 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs @@ -0,0 +1,102 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + + public static class BuildDeployPrefs + { + // Constants + private const string EditorPrefs_BuildDir = "BuildDeployWindow_BuildDir"; + private const string EditorPrefs_BuildConfig = "BuildDeployWindow_BuildConfig"; + private const string EditorPrefs_ForceRebuild = "BuildDeployWindow_ForceBuild"; + private const string EditorPrefs_IncrementBuildVersion = "BuildDeployWindow_IncrementBuildVersion"; + private const string EditorPrefs_MSBuildVer = "BuildDeployWindow_MSBuildVer"; + private const string EditorPrefs_TargetIPs = "BuildDeployWindow_DestIPs"; + private const string EditorPrefs_DeviceUser = "BuildDeployWindow_DeviceUser"; + private const string EditorPrefs_DevicePwd = "BuildDeployWindow_DevicePwd"; + private const string EditorPrefs_FullReinstall = "BuildDeployWindow_FullReinstall"; + + public static string BuildDirectory + { + get { return GetEditorPref(EditorPrefs_BuildDir, "WindowsStoreApp"); } + set { EditorPrefs.SetString(EditorPrefs_BuildDir, value); } + } + public static string AbsoluteBuildDirectory + { + get { return Path.GetFullPath(Path.Combine(Path.Combine(Application.dataPath, ".."), BuildDirectory)); } + } + public static string MsBuildVersion + { + get { return GetEditorPref(EditorPrefs_MSBuildVer, BuildDeployTools.DefaultMSBuildVersion); } + set { EditorPrefs.SetString(EditorPrefs_MSBuildVer, value); } + } + public static string BuildConfig + { + get { return GetEditorPref(EditorPrefs_BuildConfig, "Debug"); } + set { EditorPrefs.SetString(EditorPrefs_BuildConfig, value); } + } + public static bool ForceRebuild + { + get { return GetEditorPref(EditorPrefs_ForceRebuild, false); } + set { EditorPrefs.SetBool(EditorPrefs_ForceRebuild, value); } + } + public static bool IncrementBuildVersion + { + get { return GetEditorPref(EditorPrefs_IncrementBuildVersion, true); } + set { EditorPrefs.SetBool(EditorPrefs_IncrementBuildVersion, value); } + } + public static string TargetIPs + { + get { return GetEditorPref(EditorPrefs_TargetIPs, "127.0.0.1"); } + set { EditorPrefs.SetString(EditorPrefs_TargetIPs, value); } + } + public static string DeviceUser + { + get { return GetEditorPref(EditorPrefs_DeviceUser, ""); } + set { EditorPrefs.SetString(EditorPrefs_DeviceUser, value); } + } + public static string DevicePassword + { + get { return GetEditorPref(EditorPrefs_DevicePwd, ""); } + set { EditorPrefs.SetString(EditorPrefs_DevicePwd, value); } + } + public static bool FullReinstall + { + get { return GetEditorPref(EditorPrefs_FullReinstall, true); } + set { EditorPrefs.SetBool(EditorPrefs_FullReinstall, value); } + } + + private static string GetEditorPref(string key, string defaultValue) + { + if (EditorPrefs.HasKey(key)) + { + return EditorPrefs.GetString(key); + } + else + { + EditorPrefs.SetString(key, defaultValue); + return defaultValue; + } + } + + private static bool GetEditorPref(string key, bool defaultValue) + { + if (EditorPrefs.HasKey(key)) + { + return EditorPrefs.GetBool(key); + } + else + { + EditorPrefs.SetBool(key, defaultValue); + return defaultValue; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs.meta new file mode 100644 index 0000000..69935eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployPrefs.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6762008b7153ae94ab1f370faf6bbca0 +timeCreated: 1468891604 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs new file mode 100644 index 0000000..3ad960b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs @@ -0,0 +1,187 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.IO; +using System.Xml; +using System.Linq; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using System.Xml.Linq; + +namespace HoloToolkit.Unity +{ + /// + /// Contains utility functions for building for the device + /// + public class BuildDeployTools + { + // Consts + public static readonly string DefaultMSBuildVersion = "14.0"; + + // Functions + public static bool BuildSLN(string buildDirectory, bool showConfDlg = true) + { + // Use BuildSLNUtilities to create the SLN + bool buildSuccess = false; + BuildSLNUtilities.PerformBuild(new BuildSLNUtilities.BuildInfo() + { + // These properties should all match what the Standalone.proj file specifies + OutputDirectory = buildDirectory, + Scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(scene => scene.path), + BuildTarget = BuildTarget.WSAPlayer, + WSASdk = WSASDK.UWP, + WSAUWPBuildType = WSAUWPBuildType.D3D, + + // Configure a post build action that will compile the generated solution + PostBuildAction = (buildInfo, buildError) => + { + if (!string.IsNullOrEmpty(buildError)) + { + EditorUtility.DisplayDialog(PlayerSettings.productName + " WindowsStoreApp Build Failed!", buildError, "OK"); + } + else + { + if (showConfDlg) + { + EditorUtility.DisplayDialog(PlayerSettings.productName, "Build Complete", "OK"); + } + buildSuccess = true; + } + } + }); + + return buildSuccess; + } + + public static string CalcMSBuildPath(string msBuildVersion) + { + using (Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(string.Format(@"Software\Microsoft\MSBuild\ToolsVersions\{0}", msBuildVersion))) + { + if (key == null) + { + return null; + } + string msBuildBinFolder = key.GetValue("MSBuildToolsPath") as string; + string msBuildPath = Path.Combine(msBuildBinFolder, "msbuild.exe"); + return msBuildPath; + } + } + + public static bool BuildAppxFromSolution(string productName, string msBuildVersion, bool forceRebuildAppx, string buildConfig, string buildDirectory, bool incrementVersion) + { + // Get and validate the msBuild path... + string vs = CalcMSBuildPath(msBuildVersion); + if (!File.Exists(vs)) + { + Debug.LogError("MSBuild.exe is missing or invalid (path=" + vs + "). Note that the default version is " + DefaultMSBuildVersion); + return false; + } + + // Get the path to the NuGet tool + string unity = Path.GetDirectoryName(EditorApplication.applicationPath); + string nugetPath = Path.Combine(unity, @"Data\PlaybackEngines\MetroSupport\Tools\NuGet.exe"); + string storePath = Path.GetFullPath(Path.Combine(Path.Combine(Application.dataPath, ".."), buildDirectory)); + string solutionProjectPath = Path.GetFullPath(Path.Combine(storePath, productName + @".sln")); + + // Before building, need to run a nuget restore to generate a json.lock file. Failing to do + // this breaks the build in VS RTM + var nugetPInfo = new System.Diagnostics.ProcessStartInfo(); + nugetPInfo.FileName = nugetPath; + nugetPInfo.WorkingDirectory = buildDirectory; + nugetPInfo.UseShellExecute = false; + nugetPInfo.Arguments = @"restore " + PlayerSettings.productName + "/project.json"; + using (var nugetP = new System.Diagnostics.Process()) + { + Debug.Log(nugetPath + " " + nugetPInfo.Arguments); + nugetP.StartInfo = nugetPInfo; + nugetP.Start(); + nugetP.WaitForExit(); + } + + // Ensure that the generated .appx version increments by modifying + // Package.appxmanifest + if (incrementVersion) + { + IncrementPackageVersion(); + } + + // Now do the actual build + var pinfo = new System.Diagnostics.ProcessStartInfo(); + pinfo.FileName = vs; + pinfo.UseShellExecute = false; + string buildType = forceRebuildAppx ? "Rebuild" : "Build"; + pinfo.Arguments = string.Format("\"{0}\" /t:{2} /p:Configuration={1} /p:Platform=x86", solutionProjectPath, buildConfig, buildType); + var p = new System.Diagnostics.Process(); + + Debug.Log(vs + " " + pinfo.Arguments); + p.StartInfo = pinfo; + p.Start(); + + p.WaitForExit(); + if (p.ExitCode == 0) + { + Debug.Log("APPX build succeeded!"); + } + else + { + Debug.LogError("MSBuild error (code = " + p.ExitCode + ")"); + } + + if (p.ExitCode != 0) + { + EditorUtility.DisplayDialog(PlayerSettings.productName + " build Failed!", "Failed to build appx from solution. Error code: " + p.ExitCode, "OK"); + return false; + } + else + { + // Build succeeded. Allow user to install build on remote PC + BuildDeployWindow.OpenWindow(); + return true; + } + } + + private static void IncrementPackageVersion() + { + // Find the manifest, assume the one we want is the first one + string[] manifests = Directory.GetFiles(BuildDeployPrefs.AbsoluteBuildDirectory, "Package.appxmanifest", SearchOption.AllDirectories); + if (manifests.Length == 0) + { + Debug.LogError("Unable to find Package.appxmanifest file for build (in path - " + BuildDeployPrefs.AbsoluteBuildDirectory + ")"); + return; + } + string manifest = manifests[0]; + + XElement rootNode = XElement.Load(manifest); + XNamespace ns = rootNode.GetDefaultNamespace(); + var identityNode = rootNode.Element(ns + "Identity"); + if (identityNode == null) + { + Debug.LogError("Package.appxmanifest for build (in path - " + BuildDeployPrefs.AbsoluteBuildDirectory + ") is missing an node"); + return; + } + + // We use XName.Get instead of string -> XName implicit conversion because + // when we pass in the string "Version", the program doesn't find the attribute. + // Best guess as to why this happens is that implicit string conversion doesn't set the namespace to empty + var versionAttr = identityNode.Attribute(XName.Get("Version")); + if (versionAttr == null) + { + Debug.LogError("Package.appxmanifest for build (in path - " + BuildDeployPrefs.AbsoluteBuildDirectory + ") is missing a version attribute in the node."); + return; + } + + // Assume package version always has a '.'. + // According to https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx + // Package versions are always of the form Major.Minor.Build.Revision + var version = new Version(versionAttr.Value); + var newVersion = new Version(version.Major, version.Minor, version.Build, version.Revision + 1); + + versionAttr.Value = newVersion.ToString(); + rootNode.Save(manifest); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs.meta new file mode 100644 index 0000000..25928f3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployTools.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bc185db46b00c9840b977f9e46183160 +timeCreated: 1466615028 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs new file mode 100644 index 0000000..fc2d280 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs @@ -0,0 +1,719 @@ +// +// Copyright (c) @jevertt +// Copyright (c) Rafael Rivera +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System.IO; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.Net; +using System; +using System.Xml; + +namespace HoloToolkit.Unity +{ + /// + /// Build window - supports SLN creation, APPX from SLN, Deploy on device, and misc helper utilities associated with the build/deploy/test iteration loop + /// Requires the device to be set in developer mode & to have secure connections disabled (in the security tab in the device portal) + /// + public class BuildDeployWindow : EditorWindow + { + private const float GUISectionOffset = 10.0f; + private const string GUIHorizSpacer = " "; + private const float UpdateBuildsPeriod = 1.0f; + + // Properties + private bool ShouldOpenSLNBeEnabled { get { return !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory); } } + private bool ShouldBuildSLNBeEnabled { get { return !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory); } } + private bool ShouldBuildAppxBeEnabled + { + get { return + !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory) && + !string.IsNullOrEmpty(BuildDeployPrefs.MsBuildVersion) && + !string.IsNullOrEmpty(BuildDeployPrefs.BuildConfig); } + } + private bool ShouldLaunchAppBeEnabled + { + get { return !string.IsNullOrEmpty(BuildDeployPrefs.TargetIPs) && !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory); } + } + private bool ShouldWebPortalBeEnabled + { + get { return !string.IsNullOrEmpty(BuildDeployPrefs.TargetIPs) && !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory); } + } + private bool ShouldLogViewBeEnabled + { + get { return !string.IsNullOrEmpty(BuildDeployPrefs.TargetIPs) && !string.IsNullOrEmpty(BuildDeployPrefs.BuildDirectory); } + } + private bool LocalIPsOnly { get { return true; } } + + // Privates + private List builds = new List(); + private float timeLastUpdatedBuilds = 0.0f; + + // Functions + [MenuItem("HoloToolkit/Build Window", false, 0)] + public static void OpenWindow() + { + BuildDeployWindow window = GetWindow("Build Window") as BuildDeployWindow; + if (window != null) + { + window.Show(); + } + } + + void OnEnable() + { + Setup(); + } + + private void Setup() + { + this.titleContent = new GUIContent("Build Window"); + this.minSize = new Vector2(600, 200); + + UpdateXdeStatus(); + UpdateBuilds(); + } + + private void UpdateXdeStatus() + { + XdeGuestLocator.FindGuestAddressAsync(); + } + + private void OnGUI() + { + GUILayout.Space(GUISectionOffset); + + // Setup + int buttonWidth_Quarter = Screen.width / 4; + int buttonWidth_Half = Screen.width / 2; + int buttonWidth_Full = Screen.width - 25; + string appName = PlayerSettings.productName; + + // Build section + GUILayout.BeginVertical(); + GUILayout.Label("SLN"); + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + // Build directory (and save setting, if it's changed) + string curBuildDirectory = BuildDeployPrefs.BuildDirectory; + string newBuildDirectory = EditorGUILayout.TextField(GUIHorizSpacer + "Build directory", curBuildDirectory); + if (newBuildDirectory != curBuildDirectory) + { + BuildDeployPrefs.BuildDirectory = newBuildDirectory; + curBuildDirectory = newBuildDirectory; + } + + // Build SLN button + using (new EditorGUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUI.enabled = ShouldOpenSLNBeEnabled; + if (GUILayout.Button("Open SLN", GUILayout.Width(buttonWidth_Quarter))) + { + // Open SLN + string slnFilename = Path.Combine(curBuildDirectory, PlayerSettings.productName + ".sln"); + if (File.Exists(slnFilename)) + { + FileInfo slnFile = new FileInfo(slnFilename); + System.Diagnostics.Process.Start(slnFile.FullName); + } + else if (EditorUtility.DisplayDialog("Solution Not Found", "We couldn't find the solution. Would you like to Build it?", "Yes, Build", "No")) + { + // Build SLN + EditorApplication.delayCall += () => { BuildDeployTools.BuildSLN(curBuildDirectory); }; + } + } + GUI.enabled = ShouldBuildSLNBeEnabled; + if (GUILayout.Button("Build Visual Studio SLN", GUILayout.Width(buttonWidth_Half))) + { + // Build SLN + EditorApplication.delayCall += () => { BuildDeployTools.BuildSLN(curBuildDirectory); }; + } + GUI.enabled = true; + } + + // Build & Run button... + using (new EditorGUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + GUI.enabled = ShouldBuildSLNBeEnabled; + if (GUILayout.Button("Build SLN, Build APPX, then Install", GUILayout.Width(buttonWidth_Half))) + { + // Build SLN + EditorApplication.delayCall += () => { BuildAndRun(appName); }; + } + GUI.enabled = true; + } + + // Appx sub-section + GUILayout.BeginVertical(); + GUILayout.Label("APPX"); + + // MSBuild Ver (and save setting, if it's changed) + string curMSBuildVer = BuildDeployPrefs.MsBuildVersion; + string newMSBuildVer = EditorGUILayout.TextField(GUIHorizSpacer + "MSBuild Version", curMSBuildVer); + if (newMSBuildVer != curMSBuildVer) + { + BuildDeployPrefs.MsBuildVersion = newMSBuildVer; + curMSBuildVer = newMSBuildVer; + } + + // Build config (and save setting, if it's changed) + string curBuildConfig = BuildDeployPrefs.BuildConfig; + string newBuildConfig = EditorGUILayout.TextField(GUIHorizSpacer + "Build Configuration", curBuildConfig); + if (newBuildConfig != curBuildConfig) + { + BuildDeployPrefs.BuildConfig = newBuildConfig; + curBuildConfig = newBuildConfig; + } + + // Build APPX button + using (new EditorGUILayout.HorizontalScope()) + { + GUILayout.FlexibleSpace(); + + float previousLabelWidth = EditorGUIUtility.labelWidth; + + // Force rebuild + EditorGUIUtility.labelWidth = 50; + bool curForceRebuildAppx = BuildDeployPrefs.ForceRebuild; + bool newForceRebuildAppx = EditorGUILayout.Toggle("Rebuild", curForceRebuildAppx); + if (newForceRebuildAppx != curForceRebuildAppx) + { + BuildDeployPrefs.ForceRebuild = newForceRebuildAppx; + curForceRebuildAppx = newForceRebuildAppx; + } + + // Increment version + EditorGUIUtility.labelWidth = 110; + bool curIncrementVersion = BuildDeployPrefs.IncrementBuildVersion; + bool newIncrementVersion = EditorGUILayout.Toggle("Increment version", curIncrementVersion); + if (newIncrementVersion != curIncrementVersion) { + BuildDeployPrefs.IncrementBuildVersion = newIncrementVersion; + curIncrementVersion = newIncrementVersion; + } + + // Restore previous label width + EditorGUIUtility.labelWidth = previousLabelWidth; + + // Build APPX + GUI.enabled = ShouldBuildAppxBeEnabled; + if (GUILayout.Button("Build APPX from SLN", GUILayout.Width(buttonWidth_Half))) + { + BuildDeployTools.BuildAppxFromSolution(appName, curMSBuildVer, curForceRebuildAppx, curBuildConfig, curBuildDirectory, curIncrementVersion); + } + GUI.enabled = true; + } + GUILayout.EndVertical(); + GUILayout.EndVertical(); + + GUILayout.Space(GUISectionOffset); + + // Deploy section + GUILayout.BeginVertical(); + GUILayout.Label("Deploy"); + + // Target IPs (and save setting, if it's changed) + string curTargetIps = BuildDeployPrefs.TargetIPs; + if (!LocalIPsOnly) + { + string newTargetIPs = EditorGUILayout.TextField( + new GUIContent(GUIHorizSpacer + "IP Address(es)", "IP(s) of target devices (e.g. 127.0.0.1;10.11.12.13)"), + curTargetIps); + + if (newTargetIPs != curTargetIps) + { + BuildDeployPrefs.TargetIPs = newTargetIPs; + curTargetIps = newTargetIPs; + } + } + else + { + var locatorIsSearching = XdeGuestLocator.IsSearching; + var locatorHasData = XdeGuestLocator.HasData; + var xdeGuestIpAddress = XdeGuestLocator.GuestIpAddress; + + // Queue up a repaint if we're still busy, or we'll get stuck + // in a disabled state. + + if (locatorIsSearching) + { + Repaint(); + } + + var addressesToPresent = new List(); + addressesToPresent.Add("127.0.0.1"); + + if (!locatorIsSearching && locatorHasData) + { + addressesToPresent.Add(xdeGuestIpAddress.ToString()); + } + + var previouslySavedAddress = addressesToPresent.IndexOf(curTargetIps); + if (previouslySavedAddress == -1) + { + previouslySavedAddress = 0; + } + + EditorGUILayout.BeginHorizontal(); + + if (locatorIsSearching && !locatorHasData) + { + GUI.enabled = false; + } + + var selectedAddressIndex = EditorGUILayout.Popup(GUIHorizSpacer + "IP Address", previouslySavedAddress, addressesToPresent.ToArray()); + + if (GUILayout.Button(locatorIsSearching ? "Searching" : "Refresh", GUILayout.Width(buttonWidth_Quarter))) + { + UpdateXdeStatus(); + } + + GUI.enabled = true; + EditorGUILayout.EndHorizontal(); + + var selectedAddress = addressesToPresent[selectedAddressIndex]; + + if (curTargetIps != selectedAddress && !locatorIsSearching) + { + BuildDeployPrefs.TargetIPs = selectedAddress; + } + } + + // Username/Password (and save seeings, if changed) + string curUsername = BuildDeployPrefs.DeviceUser; + string newUsername = EditorGUILayout.TextField(GUIHorizSpacer + "Username", curUsername); + string curPassword = BuildDeployPrefs.DevicePassword; + string newPassword = EditorGUILayout.PasswordField(GUIHorizSpacer + "Password", curPassword); + bool curFullReinstall = BuildDeployPrefs.FullReinstall; + bool newFullReinstall = EditorGUILayout.Toggle( + new GUIContent(GUIHorizSpacer + "Uninstall first", "Uninstall application before installing"), curFullReinstall); + if ((newUsername != curUsername) || + (newPassword != curPassword) || + (newFullReinstall != curFullReinstall)) + { + BuildDeployPrefs.DeviceUser = newUsername; + BuildDeployPrefs.DevicePassword = newPassword; + BuildDeployPrefs.FullReinstall = newFullReinstall; + + curUsername = newUsername; + curPassword = newPassword; + curFullReinstall = newFullReinstall; + } + + // Build list (with install buttons) + if (this.builds.Count == 0) + { + GUILayout.Label(GUIHorizSpacer + "*** No builds found in build directory", EditorStyles.boldLabel); + } + else + { + foreach (var fullBuildLocation in this.builds) + { + int lastBackslashIndex = fullBuildLocation.LastIndexOf("\\"); + + var directoryDate = Directory.GetLastWriteTime(fullBuildLocation).ToString("yyyy/MM/dd HH:mm:ss"); + string packageName = fullBuildLocation.Substring(lastBackslashIndex + 1); + + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(GUISectionOffset + 15); + if (GUILayout.Button("Install", GUILayout.Width(120.0f))) + { + string thisBuildLocation = fullBuildLocation; + string[] IPlist = ParseIPList(curTargetIps); + EditorApplication.delayCall += () => + { + InstallAppOnDevicesList(thisBuildLocation, curFullReinstall, IPlist); + }; + } + GUILayout.Space(5); + GUILayout.Label(packageName + " (" + directoryDate + ")"); + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.Separator(); + } + GUILayout.EndVertical(); + + GUILayout.Space(GUISectionOffset); + + // Utilities section + GUILayout.BeginVertical(); + GUILayout.Label("Utilities"); + + // Open web portal + using (new EditorGUILayout.HorizontalScope()) + { + GUI.enabled = ShouldWebPortalBeEnabled; + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Open Device Portal", GUILayout.Width(buttonWidth_Full))) + { + OpenWebPortalForIPs(curTargetIps); + } + GUI.enabled = true; + } + + // Launch app.. + using (new EditorGUILayout.HorizontalScope()) + { + GUI.enabled = ShouldLaunchAppBeEnabled; + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Launch Application", GUILayout.Width(buttonWidth_Full))) + { + // If already running, kill it (button is a toggle) + if (IsAppRunning_FirstIPCheck(appName, curTargetIps)) + { + KillAppOnIPs(curTargetIps); + } + else + { + LaunchAppOnIPs(curTargetIps); + } + } + GUI.enabled = true; + } + + // Log file + using (new EditorGUILayout.HorizontalScope()) + { + GUI.enabled = ShouldLogViewBeEnabled; + GUILayout.FlexibleSpace(); + if (GUILayout.Button("View Log File", GUILayout.Width(buttonWidth_Full))) + { + OpenLogFileForIPs(curTargetIps); + } + GUI.enabled = true; + } + + // Uninstall... + using (new EditorGUILayout.HorizontalScope()) + { + GUI.enabled = ShouldLogViewBeEnabled; + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Uninstall Application", GUILayout.Width(buttonWidth_Full))) + { + string[] IPlist = ParseIPList(curTargetIps); + EditorApplication.delayCall += () => + { + UninstallAppOnDevicesList(IPlist); + }; + } + GUI.enabled = true; + } + GUILayout.EndVertical(); + } + + void BuildAndRun(string appName) + { + // First build SLN + if (!BuildDeployTools.BuildSLN(BuildDeployPrefs.BuildDirectory, false)) + { + return; + } + + // Next, APPX + if (!BuildDeployTools.BuildAppxFromSolution( + appName, + BuildDeployPrefs.MsBuildVersion, + BuildDeployPrefs.ForceRebuild, + BuildDeployPrefs.BuildConfig, + BuildDeployPrefs.BuildDirectory, + BuildDeployPrefs.IncrementBuildVersion)) + { + return; + } + + // Next, Install + string fullBuildLocation = CalcMostRecentBuild(); + string[] IPlist = ParseIPList(BuildDeployPrefs.TargetIPs); + InstallAppOnDevicesList(fullBuildLocation, BuildDeployPrefs.FullReinstall, IPlist); + } + + private string CalcMostRecentBuild() + { + UpdateBuilds(); + DateTime mostRecent = DateTime.MinValue; + string mostRecentBuild = ""; + foreach (var fullBuildLocation in this.builds) + { + DateTime directoryDate = Directory.GetLastWriteTime(fullBuildLocation); + if (directoryDate > mostRecent) + { + mostRecentBuild = fullBuildLocation; + mostRecent = directoryDate; + } + } + return mostRecentBuild; + } + + private string CalcPackageFamilyName() + { + // Find the manifest + string[] manifests = Directory.GetFiles(BuildDeployPrefs.AbsoluteBuildDirectory, "Package.appxmanifest", SearchOption.AllDirectories); + if (manifests.Length == 0) + { + Debug.LogError("Unable to find manifest file for build (in path - " + BuildDeployPrefs.AbsoluteBuildDirectory + ")"); + return ""; + } + string manifest = manifests[0]; + + // Parse it + using (XmlTextReader reader = new XmlTextReader(manifest)) + { + while (reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + if (reader.Name.Equals("identity", StringComparison.OrdinalIgnoreCase)) + { + while (reader.MoveToNextAttribute()) + { + if (reader.Name.Equals("name", StringComparison.OrdinalIgnoreCase)) + { + return reader.Value; + } + } + } + break; + } + } + } + + Debug.LogError("Unable to find PackageFamilyName in manifest file (" + manifest + ")"); + return ""; + } + + private void InstallAppOnDevicesList(string buildPath, bool uninstallBeforeInstall, string[] targetList) + { + string packageFamilyName = CalcPackageFamilyName(); + if (string.IsNullOrEmpty(packageFamilyName)) + { + return; + } + + for (int i = 0; i < targetList.Length; i++) + { + try + { + bool completedUninstall = false; + string IP = FinalizeIP(targetList[i]); + if (BuildDeployPrefs.FullReinstall && + BuildDeployPortal.IsAppInstalled(packageFamilyName, new BuildDeployPortal.ConnectInfo(IP, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword))) + { + EditorUtility.DisplayProgressBar("Installing on devices", "Uninstall (" + IP + ")", (float)i / (float)targetList.Length); + if (!UninstallApp(packageFamilyName, IP)) + { + Debug.LogError("Uninstall failed - skipping install (" + IP + ")"); + continue; + } + completedUninstall = true; + } + EditorUtility.DisplayProgressBar("Installing on devices", "Install (" + IP + ")", (float)(i + (completedUninstall ? 0.5f : 0.0f)) / (float)targetList.Length); + InstallApp(buildPath, packageFamilyName, IP); + } + catch (Exception ex) + { + Debug.LogError(ex.ToString()); + } + } + EditorUtility.ClearProgressBar(); + } + + private bool InstallApp(string buildPath, string appName, string targetDevice) + { + // Get the appx path + FileInfo[] files = (new DirectoryInfo(buildPath)).GetFiles("*.appx"); + files = (files.Length == 0) ? (new DirectoryInfo(buildPath)).GetFiles("*.appxbundle") : files; + if (files.Length == 0) + { + Debug.LogError("No APPX found in folder build folder (" + buildPath + ")"); + return false; + } + + // Connection info + var connectInfo = new BuildDeployPortal.ConnectInfo(targetDevice, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword); + + // Kick off the install + Debug.Log("Installing build on: " + targetDevice); + return BuildDeployPortal.InstallApp(files[0].FullName, connectInfo); + } + + private void UninstallAppOnDevicesList(string[] targetList) + { + string packageFamilyName = CalcPackageFamilyName(); + if (string.IsNullOrEmpty(packageFamilyName)) + { + return; + } + + try + { + for (int i = 0; i < targetList.Length; i++) + { + string IP = FinalizeIP(targetList[i]); + EditorUtility.DisplayProgressBar("Uninstalling application", "Uninstall (" + IP + ")", (float)i / (float)targetList.Length); + UninstallApp(packageFamilyName, IP); + } + } + catch (Exception ex) + { + Debug.LogError(ex.ToString()); + } + EditorUtility.ClearProgressBar(); + } + + private bool UninstallApp(string packageFamilyName, string targetDevice) + { + // Connection info + var connectInfo = new BuildDeployPortal.ConnectInfo(targetDevice, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword); + + // Kick off the install + Debug.Log("Uninstall build: " + targetDevice); + return BuildDeployPortal.UninstallApp(packageFamilyName, connectInfo); + } + + private void UpdateBuilds() + { + this.builds.Clear(); + + try + { + List appPackageDirectories = new List(); + string[] buildList = Directory.GetDirectories(BuildDeployPrefs.AbsoluteBuildDirectory); + foreach (string appBuild in buildList) + { + string appPackageDirectory = appBuild + @"\AppPackages"; + if (Directory.Exists(appPackageDirectory)) + { + appPackageDirectories.AddRange(Directory.GetDirectories(appPackageDirectory)); + } + } + IEnumerable selectedDirectories = + from string directory in appPackageDirectories + orderby Directory.GetLastWriteTime(directory) descending + select Path.GetFullPath(directory); + this.builds.AddRange(selectedDirectories); + } + catch (DirectoryNotFoundException) + { + } + + timeLastUpdatedBuilds = Time.realtimeSinceStartup; + } + + void Update() + { + if ((Time.realtimeSinceStartup - timeLastUpdatedBuilds) > UpdateBuildsPeriod) + { + UpdateBuilds(); + } + } + + public static string[] ParseIPList(string IPs) + { + string[] IPlist = { }; + + if (IPs == null || IPs == "") + return IPlist; + + string[] separators = { ";", " " }; + IPlist = IPs.Split(separators, System.StringSplitOptions.RemoveEmptyEntries); + return IPlist; + } + + static string FinalizeIP(string ip) + { + // If it's local, add the port + if (ip == "127.0.0.1") + { + ip += ":10080"; + } + return ip; + } + + public static void OpenWebPortalForIPs(string IPs) + { + string[] ipList = ParseIPList(IPs); + for (int i = 0; i < ipList.Length; i++) + { + string url = string.Format("http://{0}", FinalizeIP(ipList[i])); + + // Run the process + System.Diagnostics.Process.Start(url); + } + } + + bool IsAppRunning_FirstIPCheck(string appName, string targetIPs) + { + // Just pick the first one and use it... + string[] IPlist = ParseIPList(targetIPs); + if (IPlist.Length > 0) + { + string targetIP = FinalizeIP(IPlist[0]); + return BuildDeployPortal.IsAppRunning( + appName, new BuildDeployPortal.ConnectInfo(targetIP, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword)); + } + return false; + } + + void LaunchAppOnIPs(string targetIPs) + { + string packageFamilyName = CalcPackageFamilyName(); + if (string.IsNullOrEmpty(packageFamilyName)) + { + return; + } + + string[] IPlist = ParseIPList(targetIPs); + for (int i = 0; i < IPlist.Length; i++) + { + string targetIP = FinalizeIP(IPlist[i]); + Debug.Log("Launch app on: " + targetIP); + BuildDeployPortal.LaunchApp( + packageFamilyName, new BuildDeployPortal.ConnectInfo(targetIP, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword)); + } + } + + void KillAppOnIPs(string targetIPs) + { + string packageFamilyName = CalcPackageFamilyName(); + if (string.IsNullOrEmpty(packageFamilyName)) + { + return; + } + + string[] IPlist = ParseIPList(targetIPs); + for (int i = 0; i < IPlist.Length; i++) + { + string targetIP = FinalizeIP(IPlist[i]); + Debug.Log("Kill app on: " + targetIP); + BuildDeployPortal.KillApp( + packageFamilyName, new BuildDeployPortal.ConnectInfo(targetIP, BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword)); + } + } + + public void OpenLogFileForIPs(string IPs) + { + string packageFamilyName = CalcPackageFamilyName(); + if (string.IsNullOrEmpty(packageFamilyName)) + { + return; + } + + string[] ipList = ParseIPList(IPs); + for (int i = 0; i < ipList.Length; i++) + { + // Use the Device Portal REST API + BuildDeployPortal.DeviceLogFile_View( + packageFamilyName, new BuildDeployPortal.ConnectInfo(FinalizeIP(ipList[i]), BuildDeployPrefs.DeviceUser, BuildDeployPrefs.DevicePassword)); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs.meta new file mode 100644 index 0000000..07864ba --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildDeployWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6d8b4a3eedcdf774bbc71cc2a08da79f +timeCreated: 1466615027 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs new file mode 100644 index 0000000..30022b6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs @@ -0,0 +1,517 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Xml; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Class containing various utility methods to build a WSA solution from a Unity project. + /// + public static class BuildSLNUtilities + { + public class CopyDirectoryInfo + { + public string Source { get; set; } + public string Destination { get; set; } + public string Filter { get; set; } + public bool Recursive { get; set; } + + public CopyDirectoryInfo() + { + Source = null; + Destination = null; + Filter = "*"; + Recursive = false; + } + } + + public class BuildInfo + { + public string OutputDirectory { get; set; } + public IEnumerable Scenes { get; set; } + public IEnumerable CopyDirectories { get; set; } + + public Action PreBuildAction { get; set; } + public Action PostBuildAction { get; set; } + + public BuildOptions BuildOptions { get; set; } + + // EditorUserBuildSettings + public BuildTarget BuildTarget { get; set; } + + public WSASDK? WSASdk { get; set; } + + public WSAUWPBuildType? WSAUWPBuildType { get; set; } + + public Boolean? WSAGenerateReferenceProjects { get; set; } + + public ColorSpace? ColorSpace { get; set; } + public bool IsCommandLine { get; set; } + public string BuildSymbols { get; private set; } + + public BuildInfo() + { + BuildSymbols = string.Empty; + } + + public void AppendSymbols(params string[] symbol) + { + this.AppendSymbols((IEnumerable)symbol); + } + + public void AppendSymbols(IEnumerable symbols) + { + string[] toAdd = symbols.Except(this.BuildSymbols.Split(';')) + .Where(sym => !string.IsNullOrEmpty(sym)).ToArray(); + + if (!toAdd.Any()) + { + return; + } + + if (!String.IsNullOrEmpty(this.BuildSymbols)) + { + this.BuildSymbols += ";"; + } + + this.BuildSymbols += String.Join(";", toAdd); + } + + public bool HasAnySymbols(params string[] symbols) + { + return this.BuildSymbols.Split(';').Intersect(symbols).Any(); + } + + public bool HasConfigurationSymbol() + { + return HasAnySymbols( + BuildSLNUtilities.BuildSymbolDebug, + BuildSLNUtilities.BuildSymbolRelease, + BuildSLNUtilities.BuildSymbolMaster); + } + + public static IEnumerable RemoveConfigurationSymbols(string symbolstring) + { + return symbolstring.Split(';').Except(new[] + { + BuildSLNUtilities.BuildSymbolDebug, + BuildSLNUtilities.BuildSymbolRelease, + BuildSLNUtilities.BuildSymbolMaster + }); + } + + public bool HasAnySymbols(IEnumerable symbols) + { + return this.BuildSymbols.Split(';').Intersect(symbols).Any(); + } + } + + // Build configurations. Exactly one of these should be defined for any given build. + public const string BuildSymbolDebug = "DEBUG"; + public const string BuildSymbolRelease = "RELEASE"; + public const string BuildSymbolMaster = "MASTER"; + + /// + /// Event triggered when a build starts. + /// + public static event Action BuildStarted; + + /// + /// Event triggered when a build completes. + /// + public static event Action BuildCompleted; + + public static void PerformBuild(BuildInfo buildInfo) + { + BuildTargetGroup buildTargetGroup = GetGroup(buildInfo.BuildTarget); + string oldBuildSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup); + if (!string.IsNullOrEmpty(oldBuildSymbols)) + { + if (buildInfo.HasConfigurationSymbol()) + { + buildInfo.AppendSymbols(BuildInfo.RemoveConfigurationSymbols(oldBuildSymbols)); + } + else + { + buildInfo.AppendSymbols(oldBuildSymbols.Split(';')); + } + } + + if ((buildInfo.BuildOptions & BuildOptions.Development) == BuildOptions.Development) + { + if (!buildInfo.HasConfigurationSymbol()) + { + buildInfo.AppendSymbols(BuildSLNUtilities.BuildSymbolDebug); + } + } + + if (buildInfo.HasAnySymbols(BuildSLNUtilities.BuildSymbolDebug)) + { + buildInfo.BuildOptions |= BuildOptions.Development | BuildOptions.AllowDebugging; + } + + if (buildInfo.HasAnySymbols(BuildSLNUtilities.BuildSymbolRelease)) + { + //Unity automatically adds the DEBUG symbol if the BuildOptions.Development flag is + //specified. In order to have debug symbols and the RELEASE symbole we have to + //inject the symbol Unity relies on to enable the /debug+ flag of csc.exe which is "DEVELOPMENT_BUILD" + buildInfo.AppendSymbols("DEVELOPMENT_BUILD"); + } + + var oldBuildTarget = EditorUserBuildSettings.activeBuildTarget; + EditorUserBuildSettings.SwitchActiveBuildTarget(buildInfo.BuildTarget); + + var oldWSASDK = EditorUserBuildSettings.wsaSDK; + if (buildInfo.WSASdk.HasValue) + { + EditorUserBuildSettings.wsaSDK = buildInfo.WSASdk.Value; + } + + WSAUWPBuildType? oldWSAUWPBuildType = null; + if (EditorUserBuildSettings.wsaSDK == WSASDK.UWP) + { + oldWSAUWPBuildType = EditorUserBuildSettings.wsaUWPBuildType; + if (buildInfo.WSAUWPBuildType.HasValue) + { + EditorUserBuildSettings.wsaUWPBuildType = buildInfo.WSAUWPBuildType.Value; + } + } + + var oldWSAGenerateReferenceProjects = EditorUserBuildSettings.wsaGenerateReferenceProjects; + if (buildInfo.WSAGenerateReferenceProjects.HasValue) + { + EditorUserBuildSettings.wsaGenerateReferenceProjects = buildInfo.WSAGenerateReferenceProjects.Value; + } + + var oldColorSpace = PlayerSettings.colorSpace; + if (buildInfo.ColorSpace.HasValue) + { + PlayerSettings.colorSpace = buildInfo.ColorSpace.Value; + } + + if (buildInfo.BuildSymbols != null) + { + PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, buildInfo.BuildSymbols); + } + + string buildError = "Error"; + try + { + // For the WSA player, Unity builds into a target directory. + // For other players, the OutputPath parameter indicates the + // path to the target executable to build. + if (buildInfo.BuildTarget == BuildTarget.WSAPlayer) + { + Directory.CreateDirectory(buildInfo.OutputDirectory); + } + + OnPreProcessBuild(buildInfo); + buildError = BuildPipeline.BuildPlayer( + buildInfo.Scenes.ToArray(), + buildInfo.OutputDirectory, + buildInfo.BuildTarget, + buildInfo.BuildOptions); + + if (buildError.StartsWith("Error")) + { + throw new Exception(buildError); + } + } + finally + { + OnPostProcessBuild(buildInfo, buildError); + + PlayerSettings.colorSpace = oldColorSpace; + PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, oldBuildSymbols); + + EditorUserBuildSettings.wsaSDK = oldWSASDK; + + if (oldWSAUWPBuildType.HasValue) + { + EditorUserBuildSettings.wsaUWPBuildType = oldWSAUWPBuildType.Value; + } + + EditorUserBuildSettings.wsaGenerateReferenceProjects = oldWSAGenerateReferenceProjects; + + EditorUserBuildSettings.SwitchActiveBuildTarget(oldBuildTarget); + } + } + + public static void ParseBuildCommandLine(ref BuildInfo buildInfo) + { + string[] arguments = System.Environment.GetCommandLineArgs(); + + buildInfo.IsCommandLine = true; + + for (int i = 0; i < arguments.Length; ++i) + { + // Can't use -buildTarget which is something Unity already takes as an argument for something. + if (string.Equals(arguments[i], "-duskBuildTarget", StringComparison.InvariantCultureIgnoreCase)) + { + buildInfo.BuildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), arguments[++i]); + } + else if (string.Equals(arguments[i], "-wsaSDK", StringComparison.InvariantCultureIgnoreCase)) + { + string wsaSdkArg = arguments[++i]; + + buildInfo.WSASdk = (WSASDK)Enum.Parse(typeof(WSASDK), wsaSdkArg); + } + else if (string.Equals(arguments[i], "-wsaUWPBuildType", StringComparison.InvariantCultureIgnoreCase)) + { + + buildInfo.WSAUWPBuildType = (WSAUWPBuildType)Enum.Parse(typeof(WSAUWPBuildType), arguments[++i]); + } + else if (string.Equals(arguments[i], "-wsaGenerateReferenceProjects", StringComparison.InvariantCultureIgnoreCase)) + { + buildInfo.WSAGenerateReferenceProjects = Boolean.Parse(arguments[++i]); + } + else if (string.Equals(arguments[i], "-buildOutput", StringComparison.InvariantCultureIgnoreCase)) + { + buildInfo.OutputDirectory = arguments[++i]; + } + else if (string.Equals(arguments[i], "-buildDesc", StringComparison.InvariantCultureIgnoreCase)) + { + ParseBuildDescriptionFile(arguments[++i], ref buildInfo); + } + else if (string.Equals(arguments[i], "-unityBuildSymbols", StringComparison.InvariantCultureIgnoreCase)) + { + string newBuildSymbols = arguments[++i]; + buildInfo.AppendSymbols(newBuildSymbols.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); + } + } + } + + public static void PerformBuild_CommandLine() + { + BuildInfo buildInfo = new BuildInfo() + { + // Use scenes from the editor build settings. + Scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(scene => scene.path), + }; + + ParseBuildCommandLine(ref buildInfo); + + PerformBuild(buildInfo); + } + + public static void ParseBuildDescriptionFile(string filename, ref BuildInfo buildInfo) + { + Debug.Log(string.Format(CultureInfo.InvariantCulture, "Build: Using \"{0}\" as build description", filename)); + + // Parse the XML file + XmlTextReader reader = new XmlTextReader(filename); + + while (reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + if (string.Equals(reader.Name, "SceneList", StringComparison.InvariantCultureIgnoreCase)) + { + // Set the scenes we want to build + buildInfo.Scenes = ReadSceneList(reader); + } + else if (string.Equals(reader.Name, "CopyList", StringComparison.InvariantCultureIgnoreCase)) + { + // Set the directories we want to copy + buildInfo.CopyDirectories = ReadCopyList(reader); + } + break; + } + } + } + + private static BuildTargetGroup GetGroup(BuildTarget buildTarget) + { + switch (buildTarget) + { + case BuildTarget.WSAPlayer: + return BuildTargetGroup.WSA; + case BuildTarget.StandaloneWindows: + case BuildTarget.StandaloneWindows64: + return BuildTargetGroup.Standalone; + default: + return BuildTargetGroup.Unknown; + } + } + + private static IEnumerable ReadSceneList(XmlTextReader reader) + { + List result = new List(); + while (reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + if (string.Equals(reader.Name, "Scene", StringComparison.InvariantCultureIgnoreCase)) + { + while (reader.MoveToNextAttribute()) + { + if (string.Equals(reader.Name, "Name", StringComparison.InvariantCultureIgnoreCase)) + { + result.Add(reader.Value); + Debug.Log(string.Format(CultureInfo.InvariantCulture, "Build: Adding scene \"{0}\"", reader.Value)); + } + } + } + break; + + case XmlNodeType.EndElement: + if (string.Equals(reader.Name, "SceneList", StringComparison.InvariantCultureIgnoreCase)) + return result; + break; + } + } + + return result; + } + + private static IEnumerable ReadCopyList(XmlTextReader reader) + { + List result = new List(); + while (reader.Read()) + { + switch (reader.NodeType) + { + case XmlNodeType.Element: + if (string.Equals(reader.Name, "Copy", StringComparison.InvariantCultureIgnoreCase)) + { + string source = null; + string dest = null; + string filter = null; + bool recursive = false; + + while (reader.MoveToNextAttribute()) + { + if (string.Equals(reader.Name, "Source", StringComparison.InvariantCultureIgnoreCase)) + { + source = reader.Value; + } + else if (string.Equals(reader.Name, "Destination", StringComparison.InvariantCultureIgnoreCase)) + { + dest = reader.Value; + } + else if (string.Equals(reader.Name, "Recursive", StringComparison.InvariantCultureIgnoreCase)) + { + recursive = System.Convert.ToBoolean(reader.Value); + } + else if (string.Equals(reader.Name, "Filter", StringComparison.InvariantCultureIgnoreCase)) + { + filter = reader.Value; + } + } + + if (source != null) + { + // Either the file specifies the Destination as well, or else CopyDirectory will use Source for Destination + CopyDirectoryInfo info = new CopyDirectoryInfo(); + info.Source = source; + if (dest != null) + { + info.Destination = dest; + } + + if (filter != null) + { + info.Filter = filter; + } + + info.Recursive = recursive; + + Debug.Log(string.Format(CultureInfo.InvariantCulture, @"Build: Adding {0}copy ""{1}\{2}"" => ""{3}""", info.Recursive ? "Recursive " : "", info.Source, info.Filter, info.Destination ?? info.Source)); + + result.Add(info); + } + } + break; + + case XmlNodeType.EndElement: + if (string.Equals(reader.Name, "CopyList", StringComparison.InvariantCultureIgnoreCase)) + return result; + break; + } + } + + return result; + } + + public static void CopyDirectory(string sourceDirectoryPath, string destinationDirectoryPath, CopyDirectoryInfo directoryInfo) + { + sourceDirectoryPath = Path.Combine(sourceDirectoryPath, directoryInfo.Source); + destinationDirectoryPath = Path.Combine(destinationDirectoryPath, directoryInfo.Destination ?? directoryInfo.Source); + + Debug.Log(string.Format(CultureInfo.InvariantCulture, @"{0} ""{1}\{2}"" to ""{3}""", directoryInfo.Recursive ? "Recursively copying" : "Copying", sourceDirectoryPath, directoryInfo.Filter, destinationDirectoryPath)); + + foreach (string sourceFilePath in Directory.GetFiles(sourceDirectoryPath, directoryInfo.Filter, directoryInfo.Recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)) + { + string destinationFilePath = sourceFilePath.Replace(sourceDirectoryPath, destinationDirectoryPath); + try + { + Directory.CreateDirectory(Path.GetDirectoryName(destinationFilePath)); + if (File.Exists(destinationFilePath)) + { + File.SetAttributes(destinationFilePath, FileAttributes.Normal); + } + File.Copy(sourceFilePath, destinationFilePath, true); + File.SetAttributes(destinationFilePath, FileAttributes.Normal); + } + catch (Exception exception) + { + Debug.LogError(string.Format(CultureInfo.InvariantCulture, "Failed to copy \"{0}\" to \"{1}\" with \"{2}\"", sourceFilePath, destinationFilePath, exception)); + } + } + } + + private static void OnPreProcessBuild(BuildInfo buildInfo) + { + // Raise the global event for listeners + BuildStarted.RaiseEvent(buildInfo); + + // Call the pre-build action, if any + if (buildInfo.PreBuildAction != null) + { + buildInfo.PreBuildAction(buildInfo); + } + } + + private static void OnPostProcessBuild(BuildInfo buildInfo, string buildError) + { + if (string.IsNullOrEmpty(buildError)) + { + if (buildInfo.CopyDirectories != null) + { + string inputProjectDirectoryPath = GetProjectPath(); + string outputProjectDirectoryPath = Path.Combine(GetProjectPath(), buildInfo.OutputDirectory); + foreach (var directory in buildInfo.CopyDirectories) + { + CopyDirectory(inputProjectDirectoryPath, outputProjectDirectoryPath, directory); + } + } + } + + // Raise the global event for listeners + BuildCompleted.RaiseEvent(buildInfo, buildError); + + // Call the post-build action, if any + if (buildInfo.PostBuildAction != null) + { + buildInfo.PostBuildAction(buildInfo, buildError); + } + } + + private static string GetProjectPath() + { + return Path.GetDirectoryName(Path.GetFullPath(Application.dataPath)); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs.meta new file mode 100644 index 0000000..d8ccbe5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/BuildSLNUtilities.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b404a9703a0c1784b9c8f2de897cae3b +timeCreated: 1466615028 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs new file mode 100644 index 0000000..b1d4805 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs @@ -0,0 +1,20 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using HoloToolkit.Unity; + +/// +/// Implements functionality for building HoloLens applications +/// +public static class HoloToolkitCommands +{ + /// + /// Do a build configured for the HoloLens, returns the error from BuildPipeline.BuildPlayer + /// + public static bool BuildSLN() + { + return BuildDeployTools.BuildSLN(BuildDeployPrefs.BuildDirectory, false); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs.meta new file mode 100644 index 0000000..d407d7d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/HoloToolkitCommands.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 85636330e25a7ac4c81b19530c5b8282 +timeCreated: 1464366824 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs b/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs new file mode 100644 index 0000000..79ba22f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs @@ -0,0 +1,150 @@ +// +// Copyright (c) Microsoft Corporation +// Copyright (c) Rafael Rivera +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Threading; + +namespace HoloToolkit.Unity +{ + public static class XdeGuestLocator + { + [StructLayout(LayoutKind.Sequential, Pack = 4)] + struct XdePeerHostIdentifier + { + public Guid GuestDiscoveryGUID; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + public byte[] GuestMACAddress; + public int PeerDiscoveryPort; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + struct XdePeerGuestIdentifier + { + public Guid GuestDiscoveryGUID; + public int GuestTcpPort; + public int GuestSvcVersion; + } + + public static bool IsSearching { get; private set; } + public static bool HasData { get; private set; } + public static IPAddress GuestIpAddress { get; private set; } + + static XdeGuestLocator() + { + HasData = false; + IsSearching = false; + } + + public static void FindGuestAddressAsync() + { + if (IsSearching) + return; + + ThreadPool.QueueUserWorkItem((_) => + { + IsSearching = true; + HasData = false; + GuestIpAddress = IPAddress.None; + + var internalSwitchAddressInfo = GetInternalSwitchAddressInfo(); + if (internalSwitchAddressInfo != null) + { + using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) + { + try + { + // Bind to next available UDP port for a listen operation + socket.Blocking = true; + socket.ReceiveTimeout = (int)TimeSpan.FromSeconds(5).TotalMilliseconds; + + socket.Bind(new IPEndPoint(internalSwitchAddressInfo.Address, 0)); + var localPort = (socket.LocalEndPoint as IPEndPoint).Port; + + // Send out a probe to 'devices' connected to the internal switch + // listening on port 3553 (Microsoft Device Emulator specific) + var broadcastAddress = GetBroadcastAddressForAddress(internalSwitchAddressInfo.Address, internalSwitchAddressInfo.IPv4Mask); + var broadcastTarget = new IPEndPoint(broadcastAddress, 3553); + + // + // WORKAROUND: We don't have easy access to WMI to go querying + // for virtual machine information so we just cover finding + // the first 255 potential candidates xx 00 - xx FF. + // + // It sounds like a lot but we're talking super tiny + // payloads on an internal interface. It's very fast. + // + for (int i = 0; i <= 0xFF; i++) + { + var probe = GenerateProbe(localPort, i); + socket.SendTo(probe, broadcastTarget); + } + + // Return the endpoint information for the first 'device' that replies + // (we don't necessarily care about the returned identifier info) + var responseBytes = new byte[Marshal.SizeOf(typeof(XdePeerGuestIdentifier))]; + + EndPoint guestEndpoint = new IPEndPoint(broadcastAddress, 0); + + socket.ReceiveFrom(responseBytes, ref guestEndpoint); + GuestIpAddress = (guestEndpoint as IPEndPoint).Address; + HasData = true; + } + catch (SocketException) + { + // Do nothing, our probe went unanswered or failed + } + } + } + + IsSearching = false; + }); + } + + private static UnicastIPAddressInformation GetInternalSwitchAddressInfo() + { + var internalSwitch = GetInternalNetworkSwitchInterface(); + return internalSwitch.GetIPProperties().UnicastAddresses.Where(a => a.Address.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault(); + } + + private static NetworkInterface GetInternalNetworkSwitchInterface() + { + return NetworkInterface.GetAllNetworkInterfaces().Where(i => i.Name.Contains("Windows Phone Emulator")).FirstOrDefault(); + } + + private static IPAddress GetBroadcastAddressForAddress(IPAddress address, IPAddress mask) + { + var addressInt = BitConverter.ToInt32(address.GetAddressBytes(), 0); + var maskInt = BitConverter.ToInt32(mask.GetAddressBytes(), 0); + return new IPAddress(BitConverter.GetBytes((addressInt | ~maskInt))); + } + + private static byte[] GenerateProbe(int port, int machineIndex) + { + var identifier = new XdePeerHostIdentifier(); + identifier.PeerDiscoveryPort = port; + identifier.GuestDiscoveryGUID = new Guid("{963ef858-2efe-4eb4-8d2d-fed5408e6441}"); + identifier.GuestMACAddress = new byte[] { 0x02, 0xDE, 0xDE, 0xDE, 0xDE, (byte)machineIndex }; + + return GetStructureBytes(identifier); + } + + private static byte[] GetStructureBytes(object obj) + { + var bytes = new byte[Marshal.SizeOf(obj)]; + + var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned); + Marshal.StructureToPtr(obj, handle.AddrOfPinnedObject(), false); + handle.Free(); + + return bytes; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs.meta b/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs.meta new file mode 100644 index 0000000..ccb6283 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/Editor/XdeGuestLocator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 05d1324a6d6a0d248848b4042ad6d6bf +timeCreated: 1471035499 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Build/README.md b/HoloBot/Assets/HoloToolkit/Build/README.md new file mode 100644 index 0000000..eb24e00 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/README.md @@ -0,0 +1,20 @@ +## [Build]() +Build and deploy automation window for building your VS solution, APPX, installing, launching, and getting the log file (and other related functionality). Requires that the device has been paired with the Editor PC & that the device is connected locally and/or the HTTPS requirement has been disabled in the device portal's security tab. + +### [Editor](Editor) + +#### BuildDeployPortal.cs +Interface function with the device (REST API utility functions) + +#### BuildDeployTools.cs +Supports building the APPX from the SLN + +#### BuildSLNUtilities.cs +Supports building the project SLN + +#### BuildDeployWindow.cs +Editor UI for the window and event functions + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/Build/README.md.meta b/HoloBot/Assets/HoloToolkit/Build/README.md.meta new file mode 100644 index 0000000..10597bf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Build/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f2ca3e609a009d42a94ea2ff016c6d5 +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform.meta new file mode 100644 index 0000000..e9a8d57 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fda2aad5b5c133648a67aea343382f86 +folderAsset: yes +timeCreated: 1460485043 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md b/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md new file mode 100644 index 0000000..c5a78eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md @@ -0,0 +1,2 @@ +## [CrossPlatform]() +Wrapper scripts for Win32 and WinRT APIs in a single API call that works in the Unity editor and in a UWP application. diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md.meta new file mode 100644 index 0000000..98107e1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d783ff4004151e94ab8c4d4762ffb611 +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts.meta new file mode 100644 index 0000000..f6bfc70 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3d81668a4e43f244086c21406427364b +folderAsset: yes +timeCreated: 1461620414 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs new file mode 100644 index 0000000..e99837b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_METRO && !UNITY_EDITOR + +using System; + +namespace System.Runtime.InteropServices +{ + [ComVisible (true)] + public struct HandleRef + { + object wrapper; + IntPtr handle; + + public HandleRef (object wrapper, IntPtr handle) + { + this.wrapper = wrapper; + this.handle = handle; + } + + public IntPtr Handle + { + get { return handle; } + } + + public object Wrapper + { + get { return wrapper; } + } + + public static explicit operator IntPtr (HandleRef value) + { + return value.Handle; + } + + public static IntPtr ToIntPtr(HandleRef value) + { + return value.Handle; + } + } +} + +#endif \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs.meta new file mode 100644 index 0000000..c32a09b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/MetroHandleRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 500e1009ee758464a99d024a7119653a +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection.meta new file mode 100644 index 0000000..08c0258 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bdeaecb2c7be32b4189a79a9406b9665 +folderAsset: yes +timeCreated: 1455735875 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs new file mode 100644 index 0000000..a311f0e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs @@ -0,0 +1,205 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit +{ +#if UNITY_METRO && !UNITY_EDITOR + + using System; + using System.Collections.Generic; + using System.Linq; + using System.Reflection; + using System.Text; + + public static class ReflectionExtensions + { + public static EventInfo GetEvent(this Type type, string eventName) + { + return type.GetRuntimeEvent(eventName); + } + + public static MethodInfo GetMethod(this Type type, string methodName) + { + return GetMethod(type, methodName, (BindingFlags)0x0); + } + + public static MethodInfo GetMethod(this Type type, string methodName, BindingFlags flags) + { + var result = type.GetTypeInfo().GetDeclaredMethod(methodName); + if (((flags & BindingFlags.FlattenHierarchy) != 0) && result == null) + { + var baseType = type.GetBaseType(); + if (baseType != null) + { + return GetMethod(baseType, methodName, flags); + } + } + + return result; + } + + public static MethodInfo GetMethod(this Type type, string methodName, BindingFlags bindingAttr, Object binder, Type[] parameters, Object[] modifiers) + { + var result = type.GetTypeInfo().GetDeclaredMethod(methodName); + if (result == null) + { + var baseType = type.GetBaseType(); + if (baseType != null) + { + return GetMethod(baseType, methodName, bindingAttr, binder, parameters, modifiers); + } + } + + return result; + } + + public static MethodInfo GetMethod(this Type type, string methodName, Type[] parameters) + { + return GetMethods(type).Where(m => m.Name == methodName).FirstOrDefault( + m => + { + var types = m.GetParameters().Select(p => p.ParameterType).ToArray(); + if (types.Length == parameters.Length) + { + for (int idx = 0; idx < types.Length; idx++) + { + if (types[idx] != parameters[idx]) + { + return false; + } + } + + return true; + } + else + { + return false; + } + } + ); + } + + public static IEnumerable GetMethods(this Type type) + { + return GetMethods(type, (BindingFlags)0x0); + } + + public static IEnumerable GetMethods(this Type type, BindingFlags flags) + { + return type.GetTypeInfo().GetMethods(flags); + } + + public static IEnumerable GetMethods(this TypeInfo type) + { + return GetMethods(type, (BindingFlags)0x0); + } + + public static IEnumerable GetMethods(this TypeInfo type, BindingFlags flags) + { + return type.DeclaredMethods; + } + + public static IEnumerable GetFields(this Type type) + { + return GetFields(type, (BindingFlags)0x0); + } + + public static IEnumerable GetFields(this Type type, BindingFlags flags) + { + return type.GetTypeInfo().DeclaredFields; + } + + public static FieldInfo GetField(this Type type, string fieldName) + { + return type.GetRuntimeField(fieldName); + } + + public static IEnumerable GetProperties(this Type type, BindingFlags flags) + { + return type.GetTypeInfo().DeclaredProperties; + } + + public static PropertyInfo GetProperty(this Type type, string propertyName) + { + return GetProperty(type, propertyName, (BindingFlags)0x0); + } + + public static PropertyInfo GetProperty(this Type type, string propertyName, BindingFlags flags) + { + return type.GetRuntimeProperty (propertyName); + } + + public static PropertyInfo GetProperty(this Type type, string propertyName, Type returnType) + { + return type.GetRuntimeProperty (propertyName); + } + + public static IEnumerable GetTypes(this Assembly assembly) + { + return assembly.DefinedTypes; + } + + public static bool IsSubclassOf(this Type type, Type c) + { + return type.GetTypeInfo().IsSubclassOf(c); + } + + public static bool IsAssignableFrom(this Type type, Type c) + { + return type.IsAssignableFrom(c.GetTypeInfo()); + } + + public static bool IsEnum(this Type type) + { + return type.GetTypeInfo().IsEnum; + } + + public static bool IsValueType(this Type type) + { + return type.GetTypeInfo().IsValueType; + } + + public static bool IsAssignableFrom(this Type type, TypeInfo typeInfo) + { + return type.GetTypeInfo().IsAssignableFrom(typeInfo); + } + + public static object[] GetCustomAttributes(this Type type, bool inherit) + { + return type.GetTypeInfo().GetCustomAttributes(inherit).ToArray(); + } + + public static object[] GetCustomAttributes(this Type type, Type attributeType, bool inherit) + { + return type.GetTypeInfo().GetCustomAttributes(attributeType, inherit).ToArray(); + } + } +#else + + using System; + + public static class ReflectionExtensions + { + public static Type GetTypeInfo(this Type type) + { + return type; + } + + public static Type AsType(this Type type) + { + return type; + } + + public static bool IsEnum(this Type type) + { + return type.IsEnum; + } + + public static bool IsValueType(this Type type) + { + return type.IsValueType; + } + } + +#endif +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs.meta new file mode 100644 index 0000000..64eafe2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/ReflectionExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c2b96480b1495240abdd386973208bc +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs new file mode 100644 index 0000000..b427f9f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +public static class TypeUtils +{ + public static Type GetBaseType(this Type type) + { +#if UNITY_METRO && !UNITY_EDITOR + return type.GetTypeInfo().BaseType; +#else + return type.BaseType; +#endif + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs.meta new file mode 100644 index 0000000..b3fe204 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/Reflection/TypeUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9c0c186978d78cd47b7b1ab5eebef190 +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs new file mode 100644 index 0000000..3de8007 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_METRO && !UNITY_EDITOR +namespace System +{ + public class SystemException : Exception + { + public SystemException() {} + public SystemException(string message) : base(message) {} + public SystemException(string message, Exception innerException) : base(message, innerException) {} + } +} +#endif \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs.meta b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs.meta new file mode 100644 index 0000000..c5aa5db --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/CrossPlatform/Scripts/SystemException.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21fa6729dce79604cb2e68a4e4975f31 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input.meta b/HoloBot/Assets/HoloToolkit/Input.meta new file mode 100644 index 0000000..f00e2db --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 12e2218b44bb5d046b63543ecbec9320 +folderAsset: yes +timeCreated: 1455735874 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations.meta b/HoloBot/Assets/HoloToolkit/Input/Animations.meta new file mode 100644 index 0000000..95aee71 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4f8cd12149a6a44daed964307564cf4 +folderAsset: yes +timeCreated: 1469491980 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor.meta b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor.meta new file mode 100644 index 0000000..08ffadf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 012e902635965e648a446fdb85fbc0bc +folderAsset: yes +timeCreated: 1471370056 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim new file mode 100644 index 0000000..2519162 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim @@ -0,0 +1,557 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CursorIdleAnim + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.2, y: 0.12, z: 0.12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.2, y: 0.12, z: 0.12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.2, y: 0.12, z: 0.12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.2, y: 0.12, z: 0.12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 1e-12, y: 1, z: 1e-12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 1e-12, y: 1, z: 1e-12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer/group_right_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 1e-12, y: 1, z: 1e-12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer/group_left_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 1e-12, y: 1, z: 1e-12} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer/group_top_joint_inner + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 3710432714 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 126587603 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 465560934 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 1727328515 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 3874640233 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 959005715 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 2642251072 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 666372584 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.2 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.2 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.2 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.2 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1e-12 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim.meta b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim.meta new file mode 100644 index 0000000..938612a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleAnim.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 723e3cf6cbe716d48a51b519af6c3d12 +timeCreated: 1469492030 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim new file mode 100644 index 0000000..b2ed197 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim @@ -0,0 +1,557 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CursorIdleRingAnim + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer/group_right_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer/group_left_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer/group_top_joint_inner + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 3710432714 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 126587603 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 465560934 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 1727328515 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 3874640233 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 959005715 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 2642251072 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 666372584 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim.meta b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim.meta new file mode 100644 index 0000000..08eb3bf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorIdleRingAnim.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2839abb4143744c42a5a03638402bf3d +timeCreated: 1469492812 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller new file mode 100644 index 0000000..d8704e2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller @@ -0,0 +1,395 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CursorSimple + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: CursorState + m_Type: 3 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Waiting + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107000012411608062} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &1101000010828608862 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 6 + m_ConditionEvent: CursorState + m_EventTreshold: 1 + - m_ConditionMode: 2 + m_ConditionEvent: Waiting + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000011207584938} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000011440333832 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 6 + m_ConditionEvent: CursorState + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000011207584938} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.16698036 + m_TransitionOffset: 0.009568994 + m_ExitTime: 0.33066684 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 2 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000011538347200 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Waiting + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000014076186502} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.15724894 + m_TransitionOffset: 0.022260668 + m_ExitTime: 0.32865316 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000011595753820 +AnimatorStateTransition: + m_ObjectHideFlags: 3 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000010278683378} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000011596768198 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 7 + m_ConditionEvent: CursorState + m_EventTreshold: 0 + - m_ConditionMode: 7 + m_ConditionEvent: CursorState + m_EventTreshold: 1 + - m_ConditionMode: 7 + m_ConditionEvent: CursorState + m_EventTreshold: 4 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000010278683378} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.15544242 + m_TransitionOffset: 0.019172242 + m_ExitTime: 0.17148435 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 2 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000011705696456 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 6 + m_ConditionEvent: CursorState + m_EventTreshold: 4 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000011207584938} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.19568625 + m_TransitionOffset: 0.00000029802337 + m_ExitTime: 0.3163139 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000012715224120 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 7 + m_ConditionEvent: CursorState + m_EventTreshold: 0 + - m_ConditionMode: 7 + m_ConditionEvent: CursorState + m_EventTreshold: 1 + - m_ConditionMode: 2 + m_ConditionEvent: Waiting + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000010278683378} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000013083093568 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 6 + m_ConditionEvent: CursorState + m_EventTreshold: 1 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000011207584938} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.1 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000013631508342 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 6 + m_ConditionEvent: CursorState + m_EventTreshold: 0 + - m_ConditionMode: 2 + m_ConditionEvent: Waiting + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000011207584938} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101000014013473872 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Waiting + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102000014076186502} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.14526263 + m_TransitionOffset: 0.0000004768374 + m_ExitTime: 0.31158686 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &1102000010278683378 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Ring_Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101000011538347200} + - {fileID: 1101000011440333832} + - {fileID: 1101000011705696456} + - {fileID: 1101000013083093568} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 2839abb4143744c42a5a03638402bf3d, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102000011207584938 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Dot_Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101000011596768198} + - {fileID: 1101000014013473872} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 723e3cf6cbe716d48a51b519af6c3d12, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102000014076186502 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Waiting + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101000012715224120} + - {fileID: 1101000013631508342} + - {fileID: 1101000010828608862} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 7caf8d0b09b859b4ea5102f8bd5c21f5, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &1107000012411608062 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102000011207584938} + m_Position: {x: 144, y: 276, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102000010278683378} + m_Position: {x: 528, y: 276, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102000014076186502} + m_Position: {x: 324, y: 144, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 240, y: -60, z: 0} + m_EntryPosition: {x: 84, y: 144, z: 0} + m_ExitPosition: {x: 240, y: 0, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102000011207584938} diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller.meta b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller.meta new file mode 100644 index 0000000..cd0eec1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorSimple.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f41b1c17f75cab40b11bb814443f19c +timeCreated: 1478109884 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim new file mode 100644 index 0000000..70988c3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim @@ -0,0 +1,874 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CursorWaitingAnim + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: -0, y: 0, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + - time: 0.25 + value: {x: -0, y: 90, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + - time: 0.5 + value: {x: -0, y: 180, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + - time: 0.75 + value: {x: -0, y: 270, z: 0} + inSlope: {x: 0, y: 360.03345, z: 0} + outSlope: {x: 0, y: 360.03345, z: 0} + tangentMode: 0 + - time: 1 + value: {x: -0, y: 360.01672, z: 0} + inSlope: {x: 0, y: 360.0669, z: 0} + outSlope: {x: 0, y: 360.0669, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.25, y: 0.34, z: 0.34} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_right/group_right_joint_outer/group_right_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_left/group_left_joint_outer/group_left_joint_inner + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: 0.4, y: 1, z: 0.4} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: group_top/group_top_joint_outer/group_top_joint_inner + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.r + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.751724 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.g + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.b + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.a + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - path: 0 + attribute: 4 + script: {fileID: 0} + classID: 4 + customType: 14 + isPPtrCurve: 0 + - path: 3710432714 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 126587603 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 465560934 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 1727328515 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 3874640233 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 959005715 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 2642251072 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 666372584 + attribute: 3 + script: {fileID: 0} + classID: 4 + customType: 0 + isPPtrCurve: 0 + - path: 479252526 + attribute: 1303350129 + script: {fileID: 0} + classID: 137 + customType: 22 + isPPtrCurve: 0 + - path: 479252526 + attribute: 1571785585 + script: {fileID: 0} + classID: 137 + customType: 22 + isPPtrCurve: 0 + - path: 479252526 + attribute: 1840221041 + script: {fileID: 0} + classID: 137 + customType: 22 + isPPtrCurve: 0 + - path: 479252526 + attribute: 2108656497 + script: {fileID: 0} + classID: 137 + customType: 22 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: -0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.25 + value: -0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.5 + value: -0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.75 + value: -0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 1 + value: -0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 360 + outSlope: 360 + tangentMode: 10 + - time: 0.25 + value: 90 + inSlope: 360 + outSlope: 360 + tangentMode: 10 + - time: 0.5 + value: 180 + inSlope: 360 + outSlope: 360 + tangentMode: 10 + - time: 0.75 + value: 270 + inSlope: 360.03345 + outSlope: 360.03345 + tangentMode: 10 + - time: 1 + value: 360.01672 + inSlope: 360.0669 + outSlope: 360.0669 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.25 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.5 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 0.75 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + - time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.34 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_bottom/group_bottom_joint_outer/group_bottom_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_right/group_right_joint_outer/group_right_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_left/group_left_joint_outer/group_left_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.4 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: group_top/group_top_joint_outer/group_top_joint_inner + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.r + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0.751724 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.g + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.b + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._Color.a + path: group_top/mesh_top + classID: 137 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim.meta b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim.meta new file mode 100644 index 0000000..c72abc8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Animations/Cursor/CursorWaitingAnim.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7caf8d0b09b859b4ea5102f8bd5c21f5 +timeCreated: 1469555750 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials.meta b/HoloBot/Assets/HoloToolkit/Input/Materials.meta new file mode 100644 index 0000000..7f36a85 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e3fe1de8ee419a4fb5485ac62ee16a4 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat b/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat new file mode 100644 index 0000000..94e5199 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat @@ -0,0 +1,204 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: CursorMaterial + m_Shader: {fileID: 4800000, guid: 51c87b08c4bd5cd4eabce20953fbe2e7, type: 3} + m_ShaderKeywords: ALBEDO_OFF ALPHA_USAGE_OFF AMBIENTLIGHT_OFF CUBEMAP_OFF EMISSIVE_OFF + FRESNEL_OFF LIGHTMAP_OFF LIGHTPROBES_OFF LIGHT_OFF NEARCLIP_OFF NORMAL_OFF SHOWDEBUG_OFF + TINT_OFF VERTCOLOR_OFF _FOG_OFF + m_LightmapFlags: 0 + m_CustomRenderQueue: 2000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _Cubemap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _LightmapTexture + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _NormalMapAlpha + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: ALBEDO + second: 0 + - first: + name: ALPHA_TEST + second: 0 + - first: + name: ALPHA_USAGE + second: 0 + - first: + name: AMBIENTLIGHT + second: 0 + - first: + name: CUBEMAP + second: 0 + - first: + name: EMISSIVE + second: 0 + - first: + name: FRESNEL + second: 0 + - first: + name: LIGHT + second: 0 + - first: + name: LIGHTMAP + second: 0 + - first: + name: LIGHTPROBES + second: 0 + - first: + name: NEARCLIP + second: 0 + - first: + name: NORMAL + second: 0 + - first: + name: SHOWDEBUG + second: 0 + - first: + name: TINT + second: 0 + - first: + name: VERTCOLOR + second: 0 + - first: + name: ZOFFSET_CONSTANT + second: 0 + - first: + name: ZOFFSET_SLOPE + second: 0 + - first: + name: _AlphaTestThreshold + second: 0.05 + - first: + name: _COLORMASK + second: 15 + - first: + name: _CULL + second: 2 + - first: + name: _CubemapContribution + second: 1 + - first: + name: _DSTBLEND + second: 10 + - first: + name: _FOG + second: 0 + - first: + name: _LightProbeAmount + second: 1 + - first: + name: _NormalAlphaAsEmissive + second: 0 + - first: + name: _NormalAlphaAsSpecular + second: 0 + - first: + name: _SRCBLEND + second: 5 + - first: + name: _ShowDebugValue + second: 0 + - first: + name: _VertColorScale + second: 1 + - first: + name: _ZTEST + second: 8 + - first: + name: _ZWRITE + second: 1 + m_Colors: + - first: + name: _AlphaScale + second: {r: 1, g: 0, b: 0, a: 0} + - first: + name: _AmbientColor + second: {r: 0.125, g: 0.125, b: 0.125, a: 1} + - first: + name: _BounceColor + second: {r: 0.3, g: 0.3, b: 0.3, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _CubemapBalance + second: {r: 0, g: 1, b: 0, a: 0} + - first: + name: _CubemapRoughness + second: {r: 0, g: 10, b: 0, a: 0} + - first: + name: _EmissiveColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _FogColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _FogRange + second: {r: 1, g: 10, b: 0, a: 0} + - first: + name: _FresnelColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _FresnelScale + second: {r: 1, g: 1, b: 0, a: 0} + - first: + name: _LightmapParams + second: {r: 1, g: 0, b: 0, a: 0} + - first: + name: _NearClipDistance + second: {r: 0.2, g: 1, b: 0, a: 0} + - first: + name: _NormalAlphaScale + second: {r: 1, g: 0, b: 0, a: 0} + - first: + name: _NormalScale + second: {r: 1, g: 1, b: 1, a: 0} + - first: + name: _SpecPower + second: {r: 60, g: 0, b: 1, a: 0} + - first: + name: _TintColor + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _UplightColor + second: {r: 0.3, g: 0.3, b: 0.3, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat.meta b/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat.meta new file mode 100644 index 0000000..90e5931 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/CursorMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79bdbec5416f3444da4c0362c0b957a5 +timeCreated: 1465337516 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat new file mode 100644 index 0000000..42df57b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat @@ -0,0 +1,158 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: hand_down + m_Shader: {fileID: 4800000, guid: 17b35d8a8e5e92d4ebcf1933bf853497, type: 3} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 2800000, guid: d84aac8e3bc8fe344b50dab1e7382ad7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: d84aac8e3bc8fe344b50dab1e7382ad7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: PixelSnap + second: 0 + - first: + name: _Brightness + second: 6 + - first: + name: _BumpScale + second: 1 + - first: + name: _ColorMask + second: 15 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 10 + - first: + name: _Glossiness + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 3 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Opacity + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SrcBlend + second: 1 + - first: + name: _Stencil + second: 0 + - first: + name: _StencilComp + second: 8 + - first: + name: _StencilOp + second: 0 + - first: + name: _StencilReadMask + second: 255 + - first: + name: _StencilWriteMask + second: 255 + - first: + name: _Strength + second: 0.2 + - first: + name: _UVSec + second: 0 + - first: + name: _UseUIAlphaClip + second: 0 + - first: + name: _ZWrite + second: 0 + m_Colors: + - first: + name: _Color + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + - first: + name: _EmissionColor + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + - first: + name: _Tint + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat.meta b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat.meta new file mode 100644 index 0000000..2c28def --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_down.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4af844808c503d4dbe22d7d215745b1 +timeCreated: 1469563237 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat new file mode 100644 index 0000000..f48218f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat @@ -0,0 +1,194 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: hand_up + m_Shader: {fileID: 4800000, guid: 17b35d8a8e5e92d4ebcf1933bf853497, type: 3} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 778e02a60d620bb419088e692a3584d3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 2800000, guid: 778e02a60d620bb419088e692a3584d3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 10 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: PixelSnap + second: 0 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _ZWrite + second: 0 + data: + first: + name: _Glossiness + second: 1 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 3 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _Brightness + second: 6 + data: + first: + name: _Opacity + second: 1 + data: + first: + name: _Stencil + second: 0 + data: + first: + name: _StencilComp + second: 8 + data: + first: + name: _StencilOp + second: 0 + data: + first: + name: _StencilReadMask + second: 255 + data: + first: + name: _StencilWriteMask + second: 255 + data: + first: + name: _ColorMask + second: 15 + data: + first: + name: _Strength + second: 0.2 + data: + first: + name: _UseUIAlphaClip + second: 0 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + data: + first: + name: _Color + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + data: + first: + name: _Tint + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat.meta b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat.meta new file mode 100644 index 0000000..ac3a6ae --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/hand_up.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3614b053e3b0bd4b8efece8f50c21ad +timeCreated: 1444068346 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat b/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat new file mode 100644 index 0000000..372b2d0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat @@ -0,0 +1,145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ring_shadow + m_Shader: {fileID: 4800000, guid: 17b35d8a8e5e92d4ebcf1933bf853497, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 3000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 94564d840c7fb0442b70a8a6ee003ac2, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _ColorMask + second: 15 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _Stencil + second: 0 + - first: + name: _StencilComp + second: 8 + - first: + name: _StencilOp + second: 0 + - first: + name: _StencilReadMask + second: 255 + - first: + name: _StencilWriteMask + second: 255 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat.meta b/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat.meta new file mode 100644 index 0000000..01407d5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Materials/ring_shadow.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2c9c4679b0c3cf47b3ba3a449c985d7 +timeCreated: 1455735893 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models.meta b/HoloBot/Assets/HoloToolkit/Input/Models.meta new file mode 100644 index 0000000..abc224f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 007c74dfb2f47d54cb03722769c30a83 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor.meta new file mode 100644 index 0000000..2c5aa36 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4ac5ecface4399542974797bd73a3d5f +folderAsset: yes +timeCreated: 1455735874 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx new file mode 100644 index 0000000..58d133b Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx.meta new file mode 100644 index 0000000..4d81cf8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/Cursor.fbx.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 68471bd594667db46a10efbee4e188d5 +timeCreated: 1478288747 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 100002: group1 + 100004: group1.001 + 100006: group1.002 + 100008: group1.003 + 100010: group5 + 100012: group5.001 + 100014: group5.002 + 100016: group5.003 + 100018: group7 + 100020: group7.001 + 100022: group7.002 + 100024: group7.003 + 100026: groupBottom + 100028: groupLeft + 100030: groupRight + 100032: groupTop + 100034: joint1 + 100036: joint1 1 + 100038: joint1 2 + 100040: joint1 3 + 100042: joint2 + 100044: joint2 1 + 100046: joint2 2 + 100048: joint2 3 + 100050: joint2_end + 100052: joint2_end 1 + 100054: joint2_end 2 + 100056: joint2_end 3 + 100058: pCylinderBottom + 100060: pCylinderLeft + 100062: pCylinderRight + 100064: pCylinderTop + 100066: polySurfaceBottom + 100068: polySurfaceLeft + 100070: polySurfaceRight + 100072: polySurfaceTop + 400000: //RootNode + 400002: group1 + 400004: group1.001 + 400006: group1.002 + 400008: group1.003 + 400010: group5 + 400012: group5.001 + 400014: group5.002 + 400016: group5.003 + 400018: group7 + 400020: group7.001 + 400022: group7.002 + 400024: group7.003 + 400026: groupBottom + 400028: groupLeft + 400030: groupRight + 400032: groupTop + 400034: joint1 + 400036: joint1 1 + 400038: joint1 2 + 400040: joint1 3 + 400042: joint2 + 400044: joint2 1 + 400046: joint2 2 + 400048: joint2 3 + 400050: joint2_end + 400052: joint2_end 1 + 400054: joint2_end 2 + 400056: joint2_end 3 + 400058: pCylinderBottom + 400060: pCylinderLeft + 400062: pCylinderRight + 400064: pCylinderTop + 400066: polySurfaceBottom + 400068: polySurfaceLeft + 400070: polySurfaceRight + 400072: polySurfaceTop + 2300000: pCylinderBottom + 2300002: pCylinderLeft + 2300004: pCylinderRight + 2300006: pCylinderTop + 3300000: pCylinderBottom + 3300002: pCylinderLeft + 3300004: pCylinderRight + 3300006: pCylinderTop + 4300000: pCylinderRight + 4300002: polySurfaceRight + 4300004: pCylinderTop + 4300006: polySurfaceTop + 4300008: pCylinderLeft + 4300010: polySurfaceLeft + 4300012: pCylinderBottom + 4300014: polySurfaceBottom + 9500000: //RootNode + 13700000: polySurfaceBottom + 13700002: polySurfaceLeft + 13700004: polySurfaceRight + 13700006: polySurfaceTop + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 100 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 1 + tangentImportMode: 3 + importAnimation: 0 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm.meta new file mode 100644 index 0000000..f0ca836 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0624081163014824eb575250d78c791e +folderAsset: yes +timeCreated: 1455737525 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png new file mode 100644 index 0000000..2c016d1 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png.meta new file mode 100644 index 0000000..d613afb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_down.png.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: d84aac8e3bc8fe344b50dab1e7382ad7 +timeCreated: 1469563108 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png new file mode 100644 index 0000000..fc556ea Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png.meta new file mode 100644 index 0000000..b6e994a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbm/hand_up.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 778e02a60d620bb419088e692a3584d3 +timeCreated: 1444068346 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx new file mode 100644 index 0000000..6a4bbe8 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx.meta new file mode 100644 index 0000000..6a33a50 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_hand_ready.fbx.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 20553dcf305b52a4e84f5e4f56e5afdc +timeCreated: 1444068346 +licenseType: Pro +ModelImporter: + serializedVersion: 18 + fileIDToRecycleName: + 100000: cursor_cross_root + 100002: //RootNode + 100004: Cursor_Ring + 100006: Cursor_SizeNorthSouth + 100008: cursor_sizeNorthSouth_ring + 100010: cursor_sizeNorthSouth_ring_interaction + 100012: cursor_sizeNorthSouth_ring_interaction_root + 100014: cursor_sizeNorthSouth_ring_press_scale + 100016: ring_observation_scale + 400000: cursor_cross_root + 400002: //RootNode + 400004: Cursor_Ring + 400006: Cursor_SizeNorthSouth + 400008: cursor_sizeNorthSouth_ring + 400010: cursor_sizeNorthSouth_ring_interaction + 400012: cursor_sizeNorthSouth_ring_interaction_root + 400014: cursor_sizeNorthSouth_ring_press_scale + 400016: ring_observation_scale + 2300000: cursor_sizeNorthSouth_ring_interaction + 3300000: cursor_sizeNorthSouth_ring_interaction + 4300000: cursor_sizeNorthSouth_ring_interaction + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: .5 + animationPositionError: .5 + animationScaleError: .5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + splitTangentsAcrossUV: 1 + normalImportMode: 0 + tangentImportMode: 1 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: .5 + foreArmTwist: .5 + upperLegTwist: .5 + legTwist: .5 + armStretch: .0500000007 + legStretch: .0500000007 + feetSpacing: 0 + rootMotionBoneName: + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm.meta new file mode 100644 index 0000000..6b882e3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 128255248c91cb141a6d3c07f93ef90c +folderAsset: yes +timeCreated: 1455735875 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png new file mode 100644 index 0000000..d0847ce Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png.meta new file mode 100644 index 0000000..756c526 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbm/ring_shadow.png.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 94564d840c7fb0442b70a8a6ee003ac2 +timeCreated: 1455735882 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx new file mode 100644 index 0000000..a032642 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx.meta b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx.meta new file mode 100644 index 0000000..7b86f69 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Models/Cursor/cursor_ready.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: c1000081192be7347a0ad0c380ed6171 +timeCreated: 1455735916 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: cursor_cross_root + 100002: Cursor_Joystick + 100004: //RootNode + 100006: Cursor_Ring + 100008: Cursor_SizeNorthSouth + 100010: cursor_sizeNorthSouth_ring + 100012: cursor_sizeNorthSouth_ring_interaction_root + 100014: cursor_sizeNorthSouth_ring_press_scale + 100016: joystick_move + 100018: js_tool_indictators + 100020: ring_interaction_geo + 100022: ring_interaction_root + 100024: ring_observation_scale + 100026: ring_press_scale + 400000: cursor_cross_root + 400002: Cursor_Joystick + 400004: //RootNode + 400006: Cursor_Ring + 400008: Cursor_SizeNorthSouth + 400010: cursor_sizeNorthSouth_ring + 400012: cursor_sizeNorthSouth_ring_interaction_root + 400014: cursor_sizeNorthSouth_ring_press_scale + 400016: joystick_move + 400018: js_tool_indictators + 400020: ring_interaction_geo + 400022: ring_interaction_root + 400024: ring_observation_scale + 400026: ring_press_scale + 2300000: ring_interaction_geo + 3300000: ring_interaction_geo + 4300000: ring_interaction_geo + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins.meta new file mode 100644 index 0000000..8c9baeb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 00b1b81cca4d57b4a96c0073ab02641e +folderAsset: yes +timeCreated: 1474471004 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA.meta new file mode 100644 index 0000000..c25e655 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 185fe78bcbc5dd54386f1bdd51c449b5 +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM.meta new file mode 100644 index 0000000..442e74e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 230967124dee9a3448af0e8cd24335a1 +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll new file mode 100644 index 0000000..d2878ba Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll.meta new file mode 100644 index 0000000..87037a3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/ARM/MicStreamSelector.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: ba62e784cfa0c0145819cc7dfdcf8faa +timeCreated: 1468273328 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: ARM + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64.meta new file mode 100644 index 0000000..f0a72b9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5adc4b89c1810d14cb90502e0a2741f5 +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll new file mode 100644 index 0000000..9a77b4d Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll.meta new file mode 100644 index 0000000..fc5896f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x64/MicStreamSelector.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: a21436697051b874fa00fdcca17c671f +timeCreated: 1468273328 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86.meta new file mode 100644 index 0000000..7b39ee7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d97bc6f8c6648c44d870a1d6b2f4943e +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll new file mode 100644 index 0000000..4ab29a2 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll.meta new file mode 100644 index 0000000..8e4e81b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/WSA/x86/MicStreamSelector.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: a8170d4829430944d9ce829c225d7e80 +timeCreated: 1468273328 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x64.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64.meta new file mode 100644 index 0000000..eed579b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ed8582e216067d34eb13d1f04764484d +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll new file mode 100644 index 0000000..9481c84 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll.meta new file mode 100644 index 0000000..6883b60 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/x64/MicStreamSelector.dll.meta @@ -0,0 +1,62 @@ +fileFormatVersion: 2 +guid: d1017be762eba3d4ba065126882b98de +timeCreated: 1468273328 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: x86_64 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x86.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86.meta new file mode 100644 index 0000000..8390461 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 456e326222b190b488e8477b00145f3c +folderAsset: yes +timeCreated: 1468273301 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll new file mode 100644 index 0000000..55cbbf9 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll.meta b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll.meta new file mode 100644 index 0000000..a3e76aa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Plugins/x86/MicStreamSelector.dll.meta @@ -0,0 +1,62 @@ +fileFormatVersion: 2 +guid: a99d5ba76fdfa2b4bb8a84437b116eb0 +timeCreated: 1468273328 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: x86 + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: x86 + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs.meta new file mode 100644 index 0000000..9739ba1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e62af36e05049ed4bb16fb4572cfc67f +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor.meta new file mode 100644 index 0000000..ca422f0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fbeba0b69576309478973ecae362ee05 +folderAsset: yes +timeCreated: 1477677725 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab new file mode 100644 index 0000000..ab4d6aa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000013128004922} + m_IsPrefabParent: 1 +--- !u!1 &1000013128004922 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010362498278} + - 114: {fileID: 114000013944631048} + m_Layer: 2 + m_Name: BasicCursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014016047236 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011297337134} + - 33: {fileID: 33000012790067616} + - 23: {fileID: 23000010093703318} + m_Layer: 2 + m_Name: CursorVisual + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010362498278 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013128004922} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011297337134} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!4 &4000011297337134 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014016047236} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.15, y: 1.1500014, z: 2.5000029} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010362498278} + m_RootOrder: 0 +--- !u!23 &23000010093703318 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014016047236} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a2c9c4679b0c3cf47b3ba3a449c985d7, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000012790067616 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014016047236} + m_Mesh: {fileID: 4300000, guid: c1000081192be7347a0ad0c380ed6171, type: 3} +--- !u!114 &114000013944631048 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013128004922} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: afa1ae235bc6cfa43addd1435e2fd822, type: 3} + m_Name: + m_EditorClassIdentifier: + MinCursorDistance: 1 + DefaultCursorDistance: 2 + SurfaceCursorDistance: 0.02 + PositionLerpTime: 0.01 + ScaleLerpTime: 0.01 + RotationLerpTime: 0.01 + LookRotationBlend: 0.5 + PrimaryCursorVisual: {fileID: 0} + CursorStateData: + - Name: Hover + CursorState: 1 + CursorObject: {fileID: 1000014016047236} + - Name: Hover + CursorState: 3 + CursorObject: {fileID: 1000014016047236} + ParentTransform: {fileID: 0} diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab.meta new file mode 100644 index 0000000..4cbf8eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/BasicCursor.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f16e5ee07dd5f614bacd13b84d14c32f +timeCreated: 1455145063 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab new file mode 100644 index 0000000..386747f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab @@ -0,0 +1,235 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012943254746} + m_IsPrefabParent: 1 +--- !u!1 &1000012100030190 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011283192616} + - 33: {fileID: 33000011299448354} + - 23: {fileID: 23000013452343876} + m_Layer: 2 + m_Name: CursorOnHolograms + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012943254746 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013535415816} + - 114: {fileID: 114000013851064060} + m_Layer: 2 + m_Name: Cursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013615056792 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013144497514} + m_Layer: 2 + m_Name: CursorOffHolograms + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013763932778 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010267160112} + - 108: {fileID: 108000011213487996} + m_Layer: 2 + m_Name: Point light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010267160112 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013763932778} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000013144497514} + m_RootOrder: 0 +--- !u!4 &4000011283192616 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012100030190} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.15, y: 1.15, z: 2.5} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000013535415816} + m_RootOrder: 0 +--- !u!4 &4000013144497514 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013615056792} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.005} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000010267160112} + m_Father: {fileID: 4000013535415816} + m_RootOrder: 1 +--- !u!4 &4000013535415816 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012943254746} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011283192616} + - {fileID: 4000013144497514} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &23000013452343876 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012100030190} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a2c9c4679b0c3cf47b3ba3a449c985d7, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000011299448354 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012100030190} + m_Mesh: {fileID: 4300000, guid: c1000081192be7347a0ad0c380ed6171, type: 3} +--- !u!108 &108000011213487996 +Light: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013763932778} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 2 + m_Color: {r: 0.8039216, g: 0.6431373, b: 0.9529412, a: 1} + m_Intensity: 1 + m_Range: 0.05 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 1 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!114 &114000013851064060 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012943254746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: afa1ae235bc6cfa43addd1435e2fd822, type: 3} + m_Name: + m_EditorClassIdentifier: + MinCursorDistance: 1 + DefaultCursorDistance: 2 + SurfaceCursorDistance: 0.02 + PositionLerpTime: 0.01 + ScaleLerpTime: 0.01 + RotationLerpTime: 0.01 + LookRotationBlend: 0.5 + PrimaryCursorVisual: {fileID: 0} + CursorStateData: + - Name: On Hologram + CursorState: 1 + CursorObject: {fileID: 1000012100030190} + - Name: On Hologram + CursorState: 3 + CursorObject: {fileID: 1000012100030190} + - Name: Off Hologram + CursorState: 0 + CursorObject: {fileID: 1000013615056792} + - Name: Off Hologram + CursorState: 2 + CursorObject: {fileID: 1000013615056792} + ParentTransform: {fileID: 0} diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab.meta new file mode 100644 index 0000000..ec73b82 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2db04283121ca74495c2ee000fb4243 +timeCreated: 1457634138 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab new file mode 100644 index 0000000..d68fbfd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab @@ -0,0 +1,480 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010024638574} + m_IsPrefabParent: 1 +--- !u!1 &1000010024638574 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013243965410} + - 114: {fileID: 114000011803902180} + m_Layer: 2 + m_Name: CursorWithFeedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010093781024 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012440933642} + - 33: {fileID: 33000010851415662} + - 23: {fileID: 23000011644528258} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_interaction + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010322050210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011066195266} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010715023990 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011695305602} + m_Layer: 2 + m_Name: cursor_cross_root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011258900396 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013324006586} + m_Layer: 2 + m_Name: HandDetectedFeedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011704672682 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011699401982} + - 114: {fileID: 114000010331726594} + m_Layer: 2 + m_Name: FeedbackParent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012125673284 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012320641616} + - 33: {fileID: 33000014094570260} + - 23: {fileID: 23000010103078400} + m_Layer: 2 + m_Name: CursorVisual + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012742806780 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010087820484} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_press_scale + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012762340454 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010452078394} + m_Layer: 2 + m_Name: Cursor_Ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013020990872 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013622417028} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_interaction_root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013805455168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013060984414} + m_Layer: 2 + m_Name: ring_observation_scale + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014030841020 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010841534134} + m_Layer: 2 + m_Name: Cursor_SizeNorthSouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010087820484 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012742806780} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.004} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000011066195266} + m_RootOrder: 1 +--- !u!4 &4000010452078394 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012762340454} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000013060984414} + m_Father: {fileID: 4000013324006586} + m_RootOrder: 0 +--- !u!4 &4000010841534134 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014030841020} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011695305602} + - {fileID: 4000011066195266} + m_Father: {fileID: 4000013324006586} + m_RootOrder: 1 +--- !u!4 &4000011066195266 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010322050210} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000013622417028} + - {fileID: 4000010087820484} + m_Father: {fileID: 4000010841534134} + m_RootOrder: 1 +--- !u!4 &4000011695305602 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010715023990} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010841534134} + m_RootOrder: 0 +--- !u!4 &4000011699401982 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011704672682} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000013324006586} + m_Father: {fileID: 4000013243965410} + m_RootOrder: 0 +--- !u!4 &4000012320641616 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012125673284} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000013243965410} + m_RootOrder: 1 +--- !u!4 &4000012440933642 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010093781024} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0017081683, y: 0.0013783139, z: -0.0012663525} + m_LocalScale: {x: 0.02853388, y: 0.025535913, z: 0.03006477} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000013622417028} + m_RootOrder: 0 +--- !u!4 &4000013060984414 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013805455168} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010452078394} + m_RootOrder: 0 +--- !u!4 &4000013243965410 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010024638574} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011699401982} + - {fileID: 4000012320641616} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!4 &4000013324006586 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011258900396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.01} + m_LocalScale: {x: 1.5, y: 1.5, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000010452078394} + - {fileID: 4000010841534134} + m_Father: {fileID: 4000011699401982} + m_RootOrder: 0 +--- !u!4 &4000013622417028 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013020990872} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.004} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000012440933642} + m_Father: {fileID: 4000011066195266} + m_RootOrder: 0 +--- !u!23 &23000010103078400 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012125673284} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: a2c9c4679b0c3cf47b3ba3a449c985d7, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000011644528258 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010093781024} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e3614b053e3b0bd4b8efece8f50c21ad, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000010851415662 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010093781024} + m_Mesh: {fileID: 4300000, guid: 20553dcf305b52a4e84f5e4f56e5afdc, type: 3} +--- !u!33 &33000014094570260 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012125673284} + m_Mesh: {fileID: 4300000, guid: c1000081192be7347a0ad0c380ed6171, type: 3} +--- !u!114 &114000010331726594 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011704672682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac8d5b128a1d8204fb76c86f47b75912, type: 3} + m_Name: + m_EditorClassIdentifier: + PivotAxis: 0 +--- !u!114 &114000011803902180 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010024638574} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: afa1ae235bc6cfa43addd1435e2fd822, type: 3} + m_Name: + m_EditorClassIdentifier: + MinCursorDistance: 1 + DefaultCursorDistance: 2 + SurfaceCursorDistance: 0.02 + PositionLerpTime: 0.01 + ScaleLerpTime: 0.01 + RotationLerpTime: 0.01 + LookRotationBlend: 0.5 + PrimaryCursorVisual: {fileID: 0} + CursorStateData: + - Name: Over Object No Hands + CursorState: 1 + CursorObject: {fileID: 1000012125673284} + - Name: Hands Visible + CursorState: 2 + CursorObject: {fileID: 1000011704672682} + - Name: Over Object With Hands + CursorState: 3 + CursorObject: {fileID: 1000011704672682} + ParentTransform: {fileID: 0} diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab.meta new file mode 100644 index 0000000..0fde217 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/CursorWithFeedback.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90749889d87976143a9e21072d2434b4 +timeCreated: 1455228610 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab new file mode 100644 index 0000000..365ef42 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab @@ -0,0 +1,837 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012072213228} + m_IsPrefabParent: 1 +--- !u!1 &1000010015292458 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013708246872} + m_Layer: 0 + m_Name: group_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010240122096 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011787857196} + m_Layer: 0 + m_Name: group_bottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010503763288 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000014090385390} + m_Layer: 0 + m_Name: Anchor_Cursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010627582080 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012166063264} + - 137: {fileID: 137000012467287548} + m_Layer: 0 + m_Name: mesh_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010997923674 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013449772102} + m_Layer: 0 + m_Name: group_top_joint_outer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011038902392 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011946381988} + m_Layer: 0 + m_Name: group_right_joint_outer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011497247824 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010929445128} + m_Layer: 0 + m_Name: group_top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011665505428 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013458491836} + m_Layer: 0 + m_Name: group_bottom_joint_outer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011686294758 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011376360604} + - 137: {fileID: 137000012811968416} + m_Layer: 0 + m_Name: mesh_bottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011844533774 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013316072862} + - 95: {fileID: 95000011718528066} + m_Layer: 0 + m_Name: CursorVisual + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012072213228 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011792100794} + - 114: {fileID: 114000011521989572} + m_Layer: 0 + m_Name: DefaultCursor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012150952002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011681230980} + m_Layer: 0 + m_Name: group_right_joint_inner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012359495584 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011059980986} + - 137: {fileID: 137000012128918204} + m_Layer: 0 + m_Name: mesh_top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012568377582 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011368356948} + m_Layer: 0 + m_Name: group_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012792124594 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012976400574} + m_Layer: 0 + m_Name: group_bottom_joint_inner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012942637454 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013894343586} + - 137: {fileID: 137000014164134944} + m_Layer: 0 + m_Name: mesh_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013355298042 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010411813178} + m_Layer: 0 + m_Name: group_left_joint_outer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013761764438 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010787082106} + m_Layer: 0 + m_Name: group_left_joint_inner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013764401358 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013463439578} + m_Layer: 0 + m_Name: group_top_joint_inner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010411813178 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013355298042} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 0.12, z: 0.12} + m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90} + m_Children: + - {fileID: 4000010787082106} + m_Father: {fileID: 4000011368356948} + m_RootOrder: 1 +--- !u!4 &4000010787082106 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013761764438} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -1, y: 3.2612801e-16, z: -5.2385294e-32} + m_LocalScale: {x: 1e-12, y: 1, z: 1e-12} + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} + m_Children: [] + m_Father: {fileID: 4000010411813178} + m_RootOrder: 0 +--- !u!4 &4000010929445128 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011497247824} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011059980986} + - {fileID: 4000013449772102} + m_Father: {fileID: 4000013316072862} + m_RootOrder: 0 +--- !u!4 &4000011059980986 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012359495584} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 204.75, z: 0} + m_Children: [] + m_Father: {fileID: 4000010929445128} + m_RootOrder: 0 +--- !u!4 &4000011368356948 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012568377582} + m_LocalRotation: {x: 6.123234e-17, y: 1, z: -6.123234e-17, w: -6.123234e-17} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000012166063264} + - {fileID: 4000010411813178} + m_Father: {fileID: 4000013316072862} + m_RootOrder: 2 +--- !u!4 &4000011376360604 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011686294758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000011787857196} + m_RootOrder: 0 +--- !u!4 &4000011681230980 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012150952002} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -1, y: 3.2612801e-16, z: -5.2385294e-32} + m_LocalScale: {x: 1e-12, y: 1, z: 1e-12} + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} + m_Children: [] + m_Father: {fileID: 4000011946381988} + m_RootOrder: 0 +--- !u!4 &4000011787857196 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010240122096} + m_LocalRotation: {x: -0, y: -0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011376360604} + - {fileID: 4000013458491836} + m_Father: {fileID: 4000013316072862} + m_RootOrder: 1 +--- !u!4 &4000011792100794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012072213228} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000014090385390} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!4 &4000011946381988 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011038902392} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 0.12, z: 0.12} + m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90} + m_Children: + - {fileID: 4000011681230980} + m_Father: {fileID: 4000013708246872} + m_RootOrder: 1 +--- !u!4 &4000012166063264 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010627582080} + m_LocalRotation: {x: -6.123234e-17, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000011368356948} + m_RootOrder: 0 +--- !u!4 &4000012976400574 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012792124594} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -1, y: 3.2612801e-16, z: -5.2385294e-32} + m_LocalScale: {x: 1e-12, y: 1, z: 1e-12} + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} + m_Children: [] + m_Father: {fileID: 4000013458491836} + m_RootOrder: 0 +--- !u!4 &4000013316072862 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011844533774} + m_LocalRotation: {x: 0, y: -0, z: -0, w: -1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.04, y: 0.04, z: 0.04} + m_LocalEulerAnglesHint: {x: 0, y: -228, z: 0} + m_Children: + - {fileID: 4000010929445128} + - {fileID: 4000011787857196} + - {fileID: 4000011368356948} + - {fileID: 4000013708246872} + m_Father: {fileID: 4000014090385390} + m_RootOrder: 0 +--- !u!4 &4000013449772102 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010997923674} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 0.12, z: 0.12} + m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90} + m_Children: + - {fileID: 4000013463439578} + m_Father: {fileID: 4000010929445128} + m_RootOrder: 1 +--- !u!4 &4000013458491836 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011665505428} + m_LocalRotation: {x: 0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 0.12, z: 0.12} + m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90} + m_Children: + - {fileID: 4000012976400574} + m_Father: {fileID: 4000011787857196} + m_RootOrder: 1 +--- !u!4 &4000013463439578 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013764401358} + m_LocalRotation: {x: -0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -1, y: 3.2612801e-16, z: -5.2385294e-32} + m_LocalScale: {x: 1e-12, y: 1, z: 1e-12} + m_LocalEulerAnglesHint: {x: -90, y: 90, z: 0} + m_Children: [] + m_Father: {fileID: 4000013449772102} + m_RootOrder: 0 +--- !u!4 &4000013708246872 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010015292458} + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000013894343586} + - {fileID: 4000011946381988} + m_Father: {fileID: 4000013316072862} + m_RootOrder: 3 +--- !u!4 &4000013894343586 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012942637454} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000013708246872} + m_RootOrder: 0 +--- !u!4 &4000014090385390 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010503763288} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_Children: + - {fileID: 4000013316072862} + m_Father: {fileID: 4000011792100794} + m_RootOrder: 0 +--- !u!95 &95000011718528066 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011844533774} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 3f41b1c17f75cab40b11bb814443f19c, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 +--- !u!114 &114000011521989572 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012072213228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0decd33ba8702954885a62b5bc1a778e, type: 3} + m_Name: + m_EditorClassIdentifier: + MinCursorDistance: 1 + DefaultCursorDistance: 2 + SurfaceCursorDistance: 0.02 + PositionLerpTime: 0.01 + ScaleLerpTime: 0.01 + RotationLerpTime: 0.01 + LookRotationBlend: 0.5 + PrimaryCursorVisual: {fileID: 4000013316072862} + CursorStateData: + - Name: Observe + CursorState: 0 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 0 + AnimFloatValue: 0 + - Name: ObserveHover + CursorState: 1 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 1 + AnimFloatValue: 0 + - Name: Interact + CursorState: 2 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 2 + AnimFloatValue: 0 + - Name: InteractHover + CursorState: 3 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 3 + AnimFloatValue: 0 + - Name: Select + CursorState: 4 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 4 + AnimFloatValue: 0 + - Name: Release + CursorState: 5 + AnimInputType: 0 + AnimParameterName: CursorState + AnimBoolValue: 0 + AnimIntValue: 5 + AnimFloatValue: 0 + EnableStateData: + Name: + CursorState: 0 + AnimInputType: 2 + AnimParameterName: Waiting + AnimBoolValue: 0 + AnimIntValue: 0 + AnimFloatValue: 0 + DisableStateData: + Name: Waiting + CursorState: 5 + AnimInputType: 2 + AnimParameterName: Waiting + AnimBoolValue: 1 + AnimIntValue: 0 + AnimFloatValue: 0 + CursorAnimator: {fileID: 95000011718528066} +--- !u!137 &137000012128918204 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012359495584} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 79bdbec5416f3444da4c0362c0b957a5, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300002, guid: 68471bd594667db46a10efbee4e188d5, type: 3} + m_Bones: + - {fileID: 4000013449772102} + - {fileID: 4000013463439578} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4000013449772102} + m_AABB: + m_Center: {x: 0, y: 0.000000029802322, z: -0.34499973} + m_Extent: {x: 0.1025, y: 0.48790336, z: 0.34499973} + m_DirtyAABB: 0 +--- !u!137 &137000012467287548 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010627582080} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 79bdbec5416f3444da4c0362c0b957a5, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300010, guid: 68471bd594667db46a10efbee4e188d5, type: 3} + m_Bones: + - {fileID: 4000010411813178} + - {fileID: 4000010787082106} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4000010411813178} + m_AABB: + m_Center: {x: 0, y: 0, z: -0.34499964} + m_Extent: {x: 0.1025, y: 0.48790327, z: 0.34499964} + m_DirtyAABB: 0 +--- !u!137 &137000012811968416 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011686294758} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 79bdbec5416f3444da4c0362c0b957a5, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300014, guid: 68471bd594667db46a10efbee4e188d5, type: 3} + m_Bones: + - {fileID: 4000013458491836} + - {fileID: 4000012976400574} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4000013458491836} + m_AABB: + m_Center: {x: 0, y: 0.000000029802322, z: -0.34499973} + m_Extent: {x: 0.1025, y: 0.48790336, z: 0.34499973} + m_DirtyAABB: 0 +--- !u!137 &137000014164134944 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012942637454} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 79bdbec5416f3444da4c0362c0b957a5, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300002, guid: 68471bd594667db46a10efbee4e188d5, type: 3} + m_Bones: + - {fileID: 4000011946381988} + - {fileID: 4000011681230980} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4000011946381988} + m_AABB: + m_Center: {x: 0, y: 0, z: -0.34499964} + m_Extent: {x: 0.1025, y: 0.48790327, z: 0.34499964} + m_DirtyAABB: 0 diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab.meta new file mode 100644 index 0000000..a493866 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a611e772ef8ddf64d8106a9cbb70f31c +timeCreated: 1469228286 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab new file mode 100644 index 0000000..cf2cb61 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab @@ -0,0 +1,337 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &110754 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 408678} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_interaction_root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &128918 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 423990} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &139748 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 405604} + - 33: {fileID: 3374494} + - 23: {fileID: 2336532} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_interaction + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &150570 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 489468} + m_Layer: 2 + m_Name: ring_observation_scale + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173238 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 420132} + m_Layer: 2 + m_Name: HandDetectedFeedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &177434 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 447900} + m_Layer: 2 + m_Name: cursor_cross_root + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &187970 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 405794} + m_Layer: 2 + m_Name: Cursor_Ring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &198630 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 417894} + m_Layer: 2 + m_Name: cursor_sizeNorthSouth_ring_press_scale + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &198696 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 402240} + m_Layer: 2 + m_Name: Cursor_SizeNorthSouth + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &402240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 198696} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 447900} + - {fileID: 423990} + m_Father: {fileID: 420132} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &405604 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139748} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0017081683, y: 0.0013783139, z: -0.0012663525} + m_LocalScale: {x: 0.02853388, y: 0.025535913, z: 0.03006477} + m_Children: [] + m_Father: {fileID: 408678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &405794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187970} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 489468} + m_Father: {fileID: 420132} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &408678 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 110754} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.004} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 405604} + m_Father: {fileID: 423990} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &417894 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 198630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.004} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 423990} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &420132 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173238} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.01} + m_LocalScale: {x: 1.5, y: 1.5, z: 1} + m_Children: + - {fileID: 405794} + - {fileID: 402240} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &423990 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 128918} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 408678} + - {fileID: 417894} + m_Father: {fileID: 402240} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &447900 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 177434} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 402240} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &489468 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 150570} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: 0.002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 405794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2336532 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139748} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e3614b053e3b0bd4b8efece8f50c21ad, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &3374494 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139748} + m_Mesh: {fileID: 4300000, guid: 20553dcf305b52a4e84f5e4f56e5afdc, type: 3} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 0} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalPosition.z + value: -.00999999978 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalScale.x + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: m_LocalScale.y + value: 1.5 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 173238} + m_IsPrefabParent: 1 diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab.meta new file mode 100644 index 0000000..239f938 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/Cursor/HandDetectedFeedback.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63b112b193820c9458f19fe4f0cc625a +timeCreated: 1444774884 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab new file mode 100644 index 0000000..2936f95 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab @@ -0,0 +1,644 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011021619270} + m_IsPrefabParent: 1 +--- !u!1 &1000010136702736 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010085977160} + - 114: {fileID: 114000011221680894} + m_Layer: 0 + m_Name: JoystickXZTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010956895450 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011708201582} + - 114: {fileID: 114000012656745502} + m_Layer: 0 + m_Name: KeyboardXZTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011021619270 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010560871102} + - 20: {fileID: 20000013304850028} + - 92: {fileID: 92000010221946138} + - 124: {fileID: 124000011504821460} + - 81: {fileID: 81000013783107718} + - 114: {fileID: 114000013543835744} + m_Layer: 0 + m_Name: HoloLensCamera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011026140476 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000014150713462} + - 114: {fileID: 114000010160007858} + m_Layer: 0 + m_Name: JoystickXYTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011337565444 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010590998566} + - 114: {fileID: 114000013933693316} + m_Layer: 0 + m_Name: MouseXYRotationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011489060388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010510211078} + m_Layer: 0 + m_Name: GazeControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011947540078 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012378391282} + - 114: {fileID: 114000013988799740} + m_Layer: 0 + m_Name: MouseXZTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012373135252 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011800569768} + - 114: {fileID: 114000012889557236} + m_Layer: 0 + m_Name: KeyboardXYRotationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012618464992 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011251444590} + - 114: {fileID: 114000012298662144} + m_Layer: 0 + m_Name: KeyboardXYTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012744789930 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010393938340} + - 114: {fileID: 114000011359953050} + m_Layer: 0 + m_Name: MouseXYTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013425959562 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012536474926} + - 114: {fileID: 114000014171224568} + m_Layer: 0 + m_Name: KeyboardXZRotationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014073514604 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012610367806} + - 114: {fileID: 114000013649663976} + m_Layer: 0 + m_Name: JoystickXYRotationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010085977160 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010136702736} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 9 +--- !u!4 &4000010393938340 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012744789930} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 1 +--- !u!4 &4000010510211078 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011489060388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000010590998566} + - {fileID: 4000010393938340} + - {fileID: 4000012378391282} + - {fileID: 4000011800569768} + - {fileID: 4000012536474926} + - {fileID: 4000011251444590} + - {fileID: 4000011708201582} + - {fileID: 4000012610367806} + - {fileID: 4000014150713462} + - {fileID: 4000010085977160} + m_Father: {fileID: 4000010560871102} + m_RootOrder: 0 +--- !u!4 &4000010560871102 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000010510211078} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!4 &4000010590998566 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011337565444} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 0 +--- !u!4 &4000011251444590 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012618464992} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 5 +--- !u!4 &4000011708201582 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010956895450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 6 +--- !u!4 &4000011800569768 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012373135252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 3 +--- !u!4 &4000012378391282 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011947540078} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 2 +--- !u!4 &4000012536474926 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013425959562} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 4 +--- !u!4 &4000012610367806 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014073514604} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 7 +--- !u!4 &4000014150713462 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011026140476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000010510211078} + m_RootOrder: 8 +--- !u!20 &20000013304850028 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.85 + far clip plane: 1000 + field of view: 16 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!81 &81000013783107718 +AudioListener: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_Enabled: 1 +--- !u!92 &92000010221946138 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_Enabled: 1 +--- !u!114 &114000010160007858 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011026140476} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 3 + axisType: 0 + buttonType: 21 + InputManagerHorizontalAxisName: LeftTrigger + InputManagerVerticalAxisName: RightTrigger + Axis0Destination: 2 + Axis1Destination: 3 + Axis2Destination: 6 +--- !u!114 &114000011221680894 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010136702736} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 3 + axisType: 0 + buttonType: 21 + InputManagerHorizontalAxisName: RightStickHorizontal + InputManagerVerticalAxisName: RightStickVertical + Axis0Destination: 0 + Axis1Destination: 4 + Axis2Destination: 6 +--- !u!114 &114000011359953050 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012744789930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 13 + buttonType: 21 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 0 + Axis1Destination: 2 + Axis2Destination: 6 +--- !u!114 &114000012298662144 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012618464992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 3 + buttonType: 21 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 2 + Axis1Destination: 6 + Axis2Destination: 6 +--- !u!114 &114000012656745502 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010956895450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 3 + axisType: 0 + buttonType: 21 + InputManagerHorizontalAxisName: Horizontal + InputManagerVerticalAxisName: Vertical + Axis0Destination: 0 + Axis1Destination: 4 + Axis2Destination: 6 +--- !u!114 &114000012889557236 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012373135252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 6 + buttonType: 21 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 2 + Axis1Destination: 1 + Axis2Destination: 6 +--- !u!114 &114000013543835744 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cf6ab24363b7a74da25766ea8ba6809, type: 3} + m_Name: + m_EditorClassIdentifier: + MouseSupported: 1 + MouseXYRotationAxisControl: {fileID: 114000013933693316} + MouseXYTranslationAxisControl: {fileID: 114000011359953050} + MouseXZTranslationAxisControl: {fileID: 114000013988799740} + KeyboardSupported: 1 + KeyboardXYRotationAxisControl: {fileID: 114000012889557236} + KeyboardXZRotationAxisControl: {fileID: 114000014171224568} + KeyboardXYTranslationAxisControl: {fileID: 114000012298662144} + KeyboardXZTranslationAxisControl: {fileID: 114000012656745502} + JoystickSupported: 0 + JoystickXYRotationAxisControl: {fileID: 114000013649663976} + JoystickXYTranslationAxisControl: {fileID: 114000010160007858} + JoystickXZTranslationAxisControl: {fileID: 114000011221680894} +--- !u!114 &114000013649663976 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014073514604} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 3 + axisType: 0 + buttonType: 21 + InputManagerHorizontalAxisName: LeftStickHorizontal + InputManagerVerticalAxisName: LeftStickVertical + Axis0Destination: 2 + Axis1Destination: 0 + Axis2Destination: 6 +--- !u!114 &114000013933693316 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011337565444} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 4.5 + axisType: 11 + buttonType: 1 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 0 + Axis1Destination: 2 + Axis2Destination: 6 +--- !u!114 &114000013988799740 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011947540078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 3 + axisType: 12 + buttonType: 3 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 4 + Axis1Destination: 6 + Axis2Destination: 6 +--- !u!114 &114000014171224568 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013425959562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 7 + buttonType: 21 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 5 + Axis1Destination: 4 + Axis2Destination: 6 +--- !u!124 &124000011504821460 +Behaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011021619270} + m_Enabled: 1 diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab.meta new file mode 100644 index 0000000..58b9c4c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/HoloLensCamera.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d379ed0a5618c9f479f58bd83a2d0ad3 +timeCreated: 1463610582 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab b/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab new file mode 100644 index 0000000..ae50e70 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab @@ -0,0 +1,845 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011070707148} + m_IsPrefabParent: 1 +--- !u!1 &1000010419138632 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013175961358} + - 114: {fileID: 114000010697249598} + m_Layer: 0 + m_Name: RawInteractionSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010559312462 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010757173486} + - 33: {fileID: 33000013920336656} + - 23: {fileID: 23000011955365276} + m_Layer: 0 + m_Name: LeftHandMarkerQuad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000010652855520 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010985388306} + - 33: {fileID: 33000011755631056} + - 23: {fileID: 23000014275679654} + m_Layer: 0 + m_Name: RightHandMarkerQuad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000010722508446 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011352983594} + - 114: {fileID: 114000013582617810} + m_Layer: 0 + m_Name: XYTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010849031070 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012383807932} + - 114: {fileID: 114000013944478910} + m_Layer: 0 + m_Name: XZTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011025849994 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012897398672} + - 114: {fileID: 114000013734435004} + m_Layer: 0 + m_Name: XYTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011070707148 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011656901714} + - 114: {fileID: 114000012009196210} + - 114: {fileID: 114000011980027866} + - 114: {fileID: 114000012434513746} + - 114: {fileID: 114000013868099214} + m_Layer: 0 + m_Name: InputManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011611902316 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012504439998} + - 114: {fileID: 114000014256863992} + m_Layer: 0 + m_Name: FingerDownButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012017714622 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010470096086} + - 114: {fileID: 114000013661209266} + m_Layer: 0 + m_Name: FingerUpButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012022330152 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013985985722} + - 114: {fileID: 114000012391649198} + - 114: {fileID: 114000011693831752} + m_Layer: 0 + m_Name: EditorHandsInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012616863954 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000010261267946} + - 114: {fileID: 114000012864906760} + m_Layer: 0 + m_Name: GesturesInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012685836518 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000014269641458} + - 114: {fileID: 114000011211768160} + m_Layer: 0 + m_Name: FingerUpButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012835389718 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012179495490} + - 114: {fileID: 114000010160081412} + m_Layer: 0 + m_Name: XZTranslationAxis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013347501094 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012746438650} + m_Layer: 0 + m_Name: LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013402879350 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000011838644884} + m_Layer: 0 + m_Name: HandControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013803292764 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013940582514} + - 114: {fileID: 114000010332641428} + m_Layer: 0 + m_Name: FingerDownButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014258050880 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012651543500} + m_Layer: 0 + m_Name: RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010261267946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012616863954} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000011656901714} + m_RootOrder: 2 +--- !u!4 &4000010470096086 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012017714622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012746438650} + m_RootOrder: 2 +--- !u!4 &4000010757173486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010559312462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.05, y: -0.09, z: 0.9} + m_LocalScale: {x: -0.025, y: 0.025, z: 0.025} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012746438650} + m_RootOrder: 4 +--- !u!4 &4000010985388306 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010652855520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.05, y: -0.09, z: 0.9} + m_LocalScale: {x: 0.025, y: 0.025, z: 0.025} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012651543500} + m_RootOrder: 4 +--- !u!4 &4000011352983594 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010722508446} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012746438650} + m_RootOrder: 0 +--- !u!4 &4000011656901714 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011070707148} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000013175961358} + - {fileID: 4000013985985722} + - {fileID: 4000010261267946} + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!4 &4000011838644884 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013402879350} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000012746438650} + - {fileID: 4000012651543500} + m_Father: {fileID: 4000013985985722} + m_RootOrder: 0 +--- !u!4 &4000012179495490 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012835389718} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012746438650} + m_RootOrder: 1 +--- !u!4 &4000012383807932 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010849031070} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012651543500} + m_RootOrder: 1 +--- !u!4 &4000012504439998 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011611902316} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012651543500} + m_RootOrder: 3 +--- !u!4 &4000012651543500 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014258050880} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000012897398672} + - {fileID: 4000012383807932} + - {fileID: 4000014269641458} + - {fileID: 4000012504439998} + - {fileID: 4000010985388306} + m_Father: {fileID: 4000011838644884} + m_RootOrder: 1 +--- !u!4 &4000012746438650 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013347501094} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011352983594} + - {fileID: 4000012179495490} + - {fileID: 4000010470096086} + - {fileID: 4000013940582514} + - {fileID: 4000010757173486} + m_Father: {fileID: 4000011838644884} + m_RootOrder: 0 +--- !u!4 &4000012897398672 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011025849994} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012651543500} + m_RootOrder: 0 +--- !u!4 &4000013175961358 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010419138632} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000011656901714} + m_RootOrder: 0 +--- !u!4 &4000013940582514 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013803292764} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012746438650} + m_RootOrder: 3 +--- !u!4 &4000013985985722 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012022330152} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4000011838644884} + m_Father: {fileID: 4000011656901714} + m_RootOrder: 1 +--- !u!4 &4000014269641458 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012685836518} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 4000012651543500} + m_RootOrder: 2 +--- !u!23 &23000011955365276 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010559312462} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e3614b053e3b0bd4b8efece8f50c21ad, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000014275679654 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010652855520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: e3614b053e3b0bd4b8efece8f50c21ad, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000011755631056 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010652855520} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33000013920336656 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010559312462} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &114000010160081412 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012835389718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 0.5 + axisType: 12 + buttonType: 4 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 4 + Axis1Destination: 6 + Axis2Destination: 6 +--- !u!114 &114000010332641428 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013803292764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1350e83623c005741ad0d1b09834ed62, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonType: 12 +--- !u!114 &114000010697249598 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010419138632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73383145d055bef478097c80c114d2a4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000011211768160 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012685836518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1350e83623c005741ad0d1b09834ed62, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonType: 18 +--- !u!114 &114000011693831752 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012022330152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f5d9d16de978748488d7a8e0daf6e5cf, type: 3} + m_Name: + m_EditorClassIdentifier: + HandReturnFactor: 0.25 + HandTimeBeforeReturn: 0.25 + MinimumTrackedMovement: 0.001 + LeftHandPrimaryAxisControl: {fileID: 114000013582617810} + LeftHandSecondaryAxisControl: {fileID: 114000010160081412} + LeftFingerUpButtonControl: {fileID: 114000013661209266} + LeftFingerDownButtonControl: {fileID: 114000010332641428} + RightHandPrimaryAxisControl: {fileID: 114000013734435004} + RightHandSecondaryAxisControl: {fileID: 114000013944478910} + RightFingerUpButtonControl: {fileID: 114000011211768160} + RightFingerDownButtonControl: {fileID: 114000014256863992} + ActiveHandColor: {r: 0.3254902, g: 0.3764706, b: 0.92941177, a: 1} + DroppedHandColor: {r: 0.342, g: 0.342, b: 0.342, a: 0.241} + VisualizeHands: 1 + LeftHandVisualizer: {fileID: 1000010559312462} + RightHandVisualizer: {fileID: 1000010652855520} + HandUpTexture: {fileID: 2800000, guid: 778e02a60d620bb419088e692a3584d3, type: 3} + HandDownTexture: {fileID: 2800000, guid: d84aac8e3bc8fe344b50dab1e7382ad7, type: 3} + LeftHandInView: 0 + RightHandInView: 0 +--- !u!114 &114000011980027866 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011070707148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b81e3e700505863408cacaa0346cb1a6, type: 3} + m_Name: + m_EditorClassIdentifier: + StoredStabilitySamples: 60 +--- !u!114 &114000012009196210 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011070707148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d1a2a33ffcac354298137001635a001, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxGazeCollisionDistance: 10 + RaycastLayerMasks: + - serializedVersion: 2 + m_Bits: 4294967291 + Stabilizer: {fileID: 114000011980027866} + GazeTransform: {fileID: 0} +--- !u!114 &114000012391649198 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012022330152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c527ac8839879014ab405b6cb5ee39e6, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000012434513746 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011070707148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b160d197a8ca1894796ae263bafec0ac, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000012864906760 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012616863954} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d40781677294a0e4caffa3460012ae41, type: 3} + m_Name: + m_EditorClassIdentifier: + UseRailsNavigation: 0 +--- !u!114 &114000013582617810 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010722508446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 11 + buttonType: 4 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 3 + Axis1Destination: 0 + Axis2Destination: 6 +--- !u!114 &114000013661209266 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012017714622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1350e83623c005741ad0d1b09834ed62, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonType: 12 +--- !u!114 &114000013734435004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011025849994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 1 + axisType: 11 + buttonType: 6 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 3 + Axis1Destination: 0 + Axis2Destination: 6 +--- !u!114 &114000013868099214 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011070707148} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 37870ab7a81bfb74b9fa277cf45b06d2, type: 3} + m_Name: + m_EditorClassIdentifier: + SetStabilizationPlane: 1 + LerpStabilizationPlanePowerCloser: 4 + LerpStabilizationPlanePowerFarther: 7 + targetOverride: {fileID: 0} + trackVelocity: 0 + UseGazeManager: 1 + DefaultPlaneDistance: 2 + DrawGizmos: 0 +--- !u!114 &114000013944478910 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010849031070} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d1b627838df61e64baecc87fee2dec17, type: 3} + m_Name: + m_EditorClassIdentifier: + SensitivityScale: 0.5 + axisType: 12 + buttonType: 6 + InputManagerHorizontalAxisName: + InputManagerVerticalAxisName: + Axis0Destination: 4 + Axis1Destination: 6 + Axis2Destination: 6 +--- !u!114 &114000014256863992 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011611902316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1350e83623c005741ad0d1b09834ed62, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonType: 18 diff --git a/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab.meta b/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab.meta new file mode 100644 index 0000000..51fa430 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Prefabs/InputManager.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3eddd1c29199313478dd3f912bfab2ab +timeCreated: 1471454691 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/README.md b/HoloBot/Assets/HoloToolkit/Input/README.md new file mode 100644 index 0000000..ad0f8f6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/README.md @@ -0,0 +1,317 @@ +## [Input]() +Input System Diagrams: +![alt text](/External/ReadMeImages/InputSystemDiagram.png) +![alt text](/External/ReadMeImages/CursorSystemDiagram.PNG) + +## Scripts that leverage HoloLens input features namely Gaze, Gesture and Voice. + +This contains a fully-featured **input module**, which allows you to handle various types of input and send them to any game object being currently gazed at, or any fallback object. It also includes a **cursor** similar to the HoloLens shell cursor that fully leverages the Unity's animation system. + +### [Input Module Design](InputModuleDesign) +The input module is designed to be extensible: it could support various input mechanisms and various types of gazers. + +Each input source (hands, gestures, others) implement a **IInputSource** interface. The interface defines various events that the input sources can trigger. The input sources register themselves with the InputManager, whose role it is to forward input to the appropriate game objects. Input sources can be dynamically enabled / disabled as necessary, and new input sources can be created to support different input devices. + +Game objects that want to consume input events can implement one or many **input interfaces**, such as: + +- **IFocusable** for focus enter and exit. The focus can be triggered by the user's gaze or any other gaze source. +- **IHoldHandle** for the Windows hold gesture. +- **IInputHandler** for source up and down. The source can be a hand that tapped, a clicker that was pressed, etc. +- **IInputClickHandler** for source clicked. The source can be a hand that tapped, a clicker that was pressed, etc. +- **IManipulationHandler** for the Windows manipulation gesture. +- **INavigationnHandler** for the Windows navigation gesture. +- **ISourceStateHandler** for the source detected and source lost events. +- **ISpeechHandler** for voice commands. + +The **input manager** listens to the various events coming from the input sources, and also takes into account the gaze. Currently, that gaze is always coming from the GazeManager class, but this could be extended to support multiple gaze sources if the need arises. + +By default, input events are sent to the currently focused game object, if that object implements the appropriate interface. Modals input handlers can also be added to the input manager: these modal handlers will take priority over the currently focused object Fallback handlers can also be defined, so that the application can react to global inputs that aren't targeting a specific element. Any event sent by the input manager always bubbles up from the object to its ancestors. + +In recap, the input manager forwards the various input sources events to the appropriate game object, using the following order: + +1. The registered modal input handlers, in LIFO (Last-In First-Out) order of registration +2. The currently focused object +3. The fallback input handlers, in LIFO order of registration + +### [Prefabs](Prefabs) +Prefabs related to the input features. + +#### BasicCursor.prefab +Torus shaped basic cursor that follows the user's gaze around. + +#### Cursor.prefab +Torus shaped CursorOnHolograms when user is gazing at holograms and point light CursorOffHolograms when user is gazing away from holograms. + +#### CursorWithFeedback.prefab +Torus shaped cursor that follows the user's gaze and HandDetectedFeedback asset to give feedback to user when their hand is detected in the ready state. + +#### DefaultCursor.prefab +3D animated cursor that follows the user's gaze and uses the Unity animation system to handle its various states. This cursor imitates the HoloLens Shell cursor. + +#### HoloLensCamera.prefab +Unity camera that has been customized for Holographic development. +1. Camera.Transform set to 0,0,0 +2. 'Clear Flags' changed to 'Solid Color' +3. Color set to R:0, G:0, B:0, A:0 as black renders transparent in HoloLens. +4. Set the recommended near clipping plane. +5. Allows manual movement of the camera when in editor + +#### InputManager.prefab +Input system that manages gaze and various input sources currently supported by HoloLens, such as hands and gestures. + +This also includes a fake input source that allows you to simulate hand input when in the editor. By default, this can be done by holding Shift (left hand) or Space (right hand), moving the mouse to move the hand and use the left mouse button to tap. + +### [Scripts](Scripts) +Scripts related to the input features. + +#### Cursor +##### AnimatedCursor.cs +Animated cursor is a cursor driven using an animator to inject state information and animate accordingly. + +##### Cursor.cs +Abstract class that a concrete class should implement to make it easy to create a custom cursor. This provides the basic logic to show a cursor at the location a user is gazing. +1. Decides when to show the cursor. +2. Positions the cursor at the gazed hit location. +3. Rotates the cursor to match hologram normals. + +##### CursorModifier.cs +CursorModifier is a component that can be added to any game object with a collider to modify how a cursor reacts when on that collider. + +##### ICursor.cs +Cursor interface that any cursor must implement. + +##### ICursorModifier.cs +Interface that any cursor modifier must implement to provide basic overrides for cursor behaviour. + +##### MeshCursor.cs +Cursor whose states are represented by one or many meshes. + +##### ObjectCursor.cs +Cursor whose states are represented by one or many game objects. + +##### SpriteCursor.cs +Cursor whose states are represented by colored sprites. + +#### Gaze +##### BaseRayStabilizer.cs +A base abstract class for a stabilizer that takes as input position and orientation, and performs operations on them to stabilize or smooth that data. + +##### GazeManager.cs +Singleton component in charge of managing the gaze vector. This is where you can define which layers are considered when gazing at objects. Optionally, the gaze manager can reference a ray stabilizer that will be used to stabilize the gaze of the user. + +- **MaxGazeCollisionDistance :** the maximum distance to raycast. Any holograms beyond this value will not be raycasted to. +- **RaycastLayers :** the Unity layers to raycast against. If you have holograms that should not be raycasted against, like a cursor, do not include their layers in this mask. +- **Stabilizer :** stabilizer to use to stabilize the gaze. If not set, the gaze will not be stabilized. +- **Gaze Transform :** the transform to use as the source of the gaze. If not set, will default to the main camera. + +##### GazeStabilizer.cs +Stabilize the user's gaze to account for head jitter. + +- **StoredStabilitySamples** Number of samples that you want to iterate on. A larger number will be more stable. + +#### InputEvents +##### BaseInputEventData.cs +Base class for all input event data. An input event data is what is sent as a parameter to all input events. + +##### HoldEventData.cs +Event data for an event coming from the hold gesture. + +##### IFocusable.cs +Interface that a game object can implement to react to focus enter/exit. + +##### IHoldHandler.cs +Interface that a game object can implement to react to hold gestures. + +##### IInputHandler.cs +Interface that a game object can implement to react to simple pointer-like inputs. + +##### IManipulationHandler.cs +Interface that a game object can implement to react to manipulation gestures. + +##### INavigationHandler.cs +Interface that a game object can implement to react to navigation gestures. + +##### ISourceStateHandler.cs +Interface that a game object can implement to react to source state changes, such as when an input source is detected or lost. + +##### InputEventData.cs +Event data for an event that represents an input interaction such as a tap / click. + +##### ManipulationEventData.cs +Event data for an event coming from the manipulation gesture. + +##### NavigationEventData.cs +Event data for an event coming from the navigation gesture. + +##### SourceStateEventData.cs +Event data for an event that represents an input source being detected or lost. + +#### InputSources + +##### BaseInputSource.cs +Abstract base class for an input source that implements IInputSource. Defines the various abstract functions that any input source needs to implement, and provides some default implementations. + +##### EditorHandsInput.cs +Input source for fake hands information, which can be used to simulate hands input in the Unity editor. + +##### GesturesInput.cs +Input source for gestures information from the WSA APIs, which gives access to various system supported gestures. + +##### IInputSource.cs +Interface for an input source. An input source is any input mechanism that can be used as the source of user interactions. + +##### RawInteractionSourcesInput.cs +Input source for raw interactions sources information, which gives finer details about current source state and position than the standard GestureRecognizer. + +#### Interactions Scripts +##### HandDraggable.cs +Allows dragging an object in space with your hand on HoloLens. Just attach the script to a game object to make it movable. + +#### Microphone +##### MicStream.cs +Lets you access beam-formed microphone streams from the HoloLens to optimize voice and/or room captures, which is impossible to do with Unity's Microphone object. Takes the data and inserts it into Unity's AudioSource object for easy handling. Also lets you record indeterminate-length audio files from the Microphone to your device's Music Library, also using beam-forming. + +Check out Assets/HoloToolkit/Input/Tests/Scripts/MicStreamDemo.cs for an example of implementing these features, which is used in the demo scene at Assets/HoloToolkit/Input/Tests/MicrophoneStream.unity. + +**IMPORTANT**: Please make sure to add the Microphone and Music Library capabilities in your app, in Unity under +Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities +or in your Visual Studio Package.appxmanifest capabilities. + +**_KeywordsAndResponses_** Set the size as the number of keywords you'd like to listen for, then specify the keywords and method responses to complete the array. + +**RecognizerStart** Set this to determine whether the keyword recognizer will start immediately or if it should wait for your code to tell it to start. + +#### Voice + +**IMPORTANT**: Please make sure to add the Microphone capabilities in your app, in Unity under +Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities +or in your Visual Studio Package.appxmanifest capabilities. + +##### KeywordManager.cs +Allows you to specify keywords and methods in the Unity Inspector, instead of registering them explicitly in code. + +**_KeywordsAndResponses_** Set the size as the number of keywords you'd like to listen for, then specify the keywords and method responses to complete the array. + +**RecognizerStart** Set this to determine whether the keyword recognizer will start immediately or if it should wait for your code to tell it to start. + +##### SpeechInputSource.cs +Allows you to specify keywords and keyboard shortcuts in the Unity Inspector, instead of registering them explicitly in code. Keywords are handled by scripts that implement ISpeechHandler.cs. + +Check out Assets/HoloToolkit/Input/Tests/Scripts/SphereKeywords.cs and Assets/HoloToolkit/Input/Tests/Scripts/SphereGlobalKeywords.cs for an example of implementing these features, which is used in the demo scene at Assets/HoloToolkit/Input/Tests/SpeechInputSource.unity. + +**_KeywordsAndKeys_** Set the size as the number of keywords you'd like to listen for, then specify the keywords to complete the array. + +**RecognizerStart** Set this to determine whether the keyword recognizer will start immediately or if it should wait for your code to tell it to start. + +##### ISpeechHandler.cs +Interface that a game object can implement to react to speech keywords. + +### [Test Prefabs](TestPrefabs) + +Prefabs used in the various test scenes, which you can use as inspiration to build your own. + +#### FocusedObjectKeywordManager.prefab +Keyword manager pre-wired to send messages to object being currently focused via FocusedObjectMessageSender component. +You can simply drop this into your scene and be able to send arbitrary messages to currently focused object. + +#### SelectedObjectKeywordManager.prefab +Keyword manager pre-wired to send messages to object being currently selected via SelectedObjectMessageSender component. +You can simply drop this into your scene and be able to send arbitrary messages to currently selected object. + +### [Test Scripts](TestScripts) +#### FocusedObjectMessageSender.cs +Sends Unity message to currently focused object. +FocusedObjectMessageSender.SendMessageToFocusedObject needs to be registered as a response in KeywordManager +to enable arbitrary messages to be sent to currently focused object. + +#### SelectedObjectMessageSender.cs +Sends Unity message to currently selected object. +SelectedObjectMessageSender.SendMessageToSelectedObject needs to be registered as a response in KeywordManager +to enable arbitrary messages to be sent to currently selected object. + +#### SelectedObjectMessageReceiver.cs +Example on how to handle messages send by SelectedObjectMessageSender. +In this particular implementation, selected object color it toggled on selecting object and clearing selected object. + +#### SimpleGridGenerator.cs +A grid of dynamic objects to illustrate sending messages to prefab instances created at runtime as opposed +to only static objects that already exist in the scene. + +#### GazeResponder.cs +This class implements IFocusable to respond to gaze changes. +It highlights the object being gazed at. + +#### TapResponder.cs +This class implements IInputClickHandler to handle the tap gesture. +It increases the scale of the object when tapped. + +### [Tests](Tests/Scenes) +Tests related to the input features. To use the scene: + +1. Navigate to the Tests folder. +2. Double click on the test scene you wish to explore. +3. Either click "Play" in the unity editor or File -> Build Settings. +4. Add Open Scenes, Platform -> Windows Store, SDK -> Universal 10, Build Type -> D3D, Check 'Unity C# Projects'. +5. Click 'Build' and create an App folder. When compile is done, open the solution and deploy to device. + +#### BasicCursor.unity +Shows the basic cursor following the user's gaze and hugging the test sphere in the scene. + +#### Cursor.unity +Shows the cursor on holograms hugging the test sphere in the scene and cursor off holograms when not gazing at the sphere. + +#### CursorWithFeedback.unity +Shows the cursor hugging the test sphere in the scene and displays hand detected asset when hand is detected in ready state. + +#### FocusedObjectKeywords.unity +Example on how to send keyword messages to currently focused dynamically instantiated object. +Gazing on an object and saying "Make Smaller" and "Make Bigger" will adjust object size. + +#### InputTapTest.unity +Test scene shows you in a simple way, how to respond to user's gaze using the Input module. +It also shows you how to respond to the user's tap gesture. + +#### KeywordManager.unity +Shows how to use the KeywordManager.cs script to add keywords to your scene. + +1. Select whether you want the recognizer to start automatically or when you manually start it. +2. Specify the number of keywords you want. +3. Type the word or phrase you'd like to register as the keyword and, if you want, set a key code to use in the Editor. You can also use an attached microphone with the Editor. +4. Press the + to add a response. Then, drag a GameObject with the script you want to call into the "None (Object)" field. +5. Select the script and method to call or variable to set from the "No Function" dropdown. Add any parameters, if necessary, into the field below the dropdown. + +When you start the scene, your keywords will automatically be registered on a KeywordRecognizer, and the recognizer will be started (or not) based on your Recognizer Start setting. + +#### ManualCameraControl.unity + +This scene shows how to manually control the camera. The script is on the main camera of the scene. When preview mode in Unity is activated, the user can move around the scene using WASD and look around using right-mouse-button + mouse. + +#### MicrophoneStream.unity +Example usage of MicStream.cs to select and record beam-formed audio from the hololens. In editor, the script lets you choose if you want to beam-form capture on voice or on the room. When running, press 'Q' to start the stream you selected, 'W' will stop the stream, 'A' starts recording a wav file, and 'S' stops the recording, saves it to your Music library, and prints the full path of the audio clip. + +#### SelectedObjectKeywords.unity +Example on how to send keyword messages to currently selected dynamically instantiated object. +Gazing on an object and saying "Select Object" will persistently select that object for interaction with voice commands, +after which the user can also adjust object size with "Make Smaller" and "Make Bigger" voice commands and finally clear +currently selected object by saying "Clear Selection". + +#### OverrideFocusedObjectTest.unity +Test scene shows you in a simple way, how to route input to an object not being gazed/focused at. +Useful for scenarios like placing head locked content or clicking around to create objects. + +#### SpeechInputSource.unity + +Shows how to use the SpeechInputSource.cs script to add keywords to your scene. + +1. Select whether you want the recognizer to start automatically or when you manually start it. +2. Specify the number of keywords you want. +3. Type the word or phrase you'd like to register as the keyword and, if you want, set a key code to use in the Editor. You can also use an attached microphone with the Editor. +4. Attach a script that implements ISpeechHandler.cs to the object in the scene that will require the gaze focus to execute the command. You should register this script with the InputManager.cs as a global listener to handle keywords that don't require a focused object. + +When you start the scene, your keywords will automatically be registered on a KeywordRecognizer, and the recognizer will be started (or not) based on your Recognizer Start setting. + +#### + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/Input/README.md.meta b/HoloBot/Assets/HoloToolkit/Input/README.md.meta new file mode 100644 index 0000000..6b83133 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9727c082b70b9934a9136d337efb7159 +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts.meta new file mode 100644 index 0000000..42ed44f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3fca56ff17adf954590a8c00b2dc532c +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor.meta new file mode 100644 index 0000000..ebe047b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 683336f59c4e8154dabdb77e57f53763 +folderAsset: yes +timeCreated: 1464209091 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs new file mode 100644 index 0000000..223169e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs @@ -0,0 +1,170 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Animated cursor is a cursor driven using an animator to inject state information + /// and animate accordingly + /// + public class AnimatedCursor : Cursor + { + /// + /// Data struct for cursor state information for the Animated Cursor, which leverages the Unity animation system.. + /// This defines a modification to an Unity animation parameter, based on cursor state. + /// + [Serializable] + public struct AnimCursorDatum + { + public string Name; + public CursorStateEnum CursorState; + + /// + /// Types that an animation parameter can have in the Unity animation system. + /// + public enum AnimInputTypeEnum + { + Int, + Trigger, + Bool, + Float + } + + [Tooltip("Type of the animation parameter to modify.")] + public AnimInputTypeEnum AnimInputType; + + [Tooltip("Name of the animation parameter to modify.")] + public string AnimParameterName; + + [Tooltip("If the animation parameter type is a bool, value to set. Ignored otherwise.")] + public bool AnimBoolValue; + + [Tooltip("If the animation parameter type is an int, value to set. Ignored otherwise.")] + public int AnimIntValue; + + [Tooltip("If the animation parameter type is a float, value to set. Ignored otherwise.")] + public float AnimFloatValue; + } + + /// + /// Serialized set of cursor state data + /// + [Header("Animated Cursor State Data")] + [Tooltip("Cursor state data to use for its various states")] + [SerializeField] + public AnimCursorDatum[] CursorStateData; + + /// + /// Enabled state Data when enabling + /// + [Tooltip("Cursor State Data to use when enabling the cursor")] + public AnimCursorDatum EnableStateData; + + /// + /// Disabled state Data when disabled + /// + [Tooltip("Cursor State Data to use when the cursor is disabled")] + public AnimCursorDatum DisableStateData; + + /// + /// Link the the cursor animator + /// + [SerializeField] + [Tooltip("Animator for the cursor")] + protected Animator CursorAnimator = null; + + /// + /// Change anim stage when enabled + /// + public override void OnInputEnabled() + { + base.OnInputEnabled(); + SetCursorState(EnableStateData); + } + + /// + /// Change anim stage when disabled + /// + public override void OnInputDisabled() + { + base.OnInputDisabled(); + SetCursorState(DisableStateData); + } + + /// + /// Override to set the cursor anim trigger + /// + /// + protected override void OnActiveModifier(CursorModifier modifier) + { + base.OnActiveModifier(modifier); + + if (modifier != null) + { + if(!string.IsNullOrEmpty(modifier.CursorTriggerName)) + { + OnCursorStateChange(CursorStateEnum.Contextual); + CursorAnimator.SetTrigger(modifier.CursorTriggerName); + } + } + else + { + OnCursorStateChange(CursorStateEnum.None); + } + } + + /// + /// Override OnCursorState change to set the correct animation + /// state for the cursor + /// + /// + public override void OnCursorStateChange(CursorStateEnum state) + { + base.OnCursorStateChange(state); + if(state != CursorStateEnum.Contextual) + { + for(int i = 0; i < CursorStateData.Length; i++) + { + if(CursorStateData[i].CursorState == state) + { + SetCursorState(CursorStateData[i]); + } + } + } + } + + /// + /// Based on the type of animator state info pass it through to the animator + /// + /// + private void SetCursorState(AnimCursorDatum stateDatum) + { + // Return if we do not have an animator + if (CursorAnimator == null) + { + return; + } + + switch (stateDatum.AnimInputType) + { + case AnimCursorDatum.AnimInputTypeEnum.Bool: + CursorAnimator.SetBool(stateDatum.AnimParameterName, stateDatum.AnimBoolValue); + break; + case AnimCursorDatum.AnimInputTypeEnum.Float: + CursorAnimator.SetFloat(stateDatum.AnimParameterName, stateDatum.AnimFloatValue); + break; + case AnimCursorDatum.AnimInputTypeEnum.Int: + CursorAnimator.SetInteger(stateDatum.AnimParameterName, stateDatum.AnimIntValue); + break; + case AnimCursorDatum.AnimInputTypeEnum.Trigger: + CursorAnimator.SetTrigger(stateDatum.AnimParameterName); + break; + } + } + + } + +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs.meta new file mode 100644 index 0000000..152cb1d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/AnimatedCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0decd33ba8702954885a62b5bc1a778e +timeCreated: 1460564228 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs new file mode 100644 index 0000000..392f620 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs @@ -0,0 +1,458 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Object that represents a cursor in 3D space controlled by gaze. + /// + public abstract class Cursor : MonoBehaviour, ICursor + { + /// + /// Enum for current cursor state + /// + public enum CursorStateEnum + { + /// + /// Useful for releasing external override. + /// See CursorStateEnum.Contextual + /// + None = -1, + /// + /// Not IsHandVisible + /// + Observe, + /// + /// Not IsHandVisible AND not IsInputSourceDown AND TargetedObject exists + /// + ObserveHover, + /// + /// IsHandVisible AND not IsInputSourceDown AND TargetedObject is NULL + /// + Interact, + /// + /// IsHandVisible AND not IsInputSourceDown AND TargetedObject exists + /// + InteractHover, + /// + /// IsHandVisible AND IsInputSourceDown + /// + Select, + /// + /// Available for use by classes that extend Cursor. + /// No logic for setting Release state exists in the base Cursor class. + /// + Release, + /// + /// Allows for external override + /// + Contextual + } + + public CursorStateEnum CursorState { get { return cursorState; } } + private CursorStateEnum cursorState = CursorStateEnum.None; + + /// + /// Minimum distance for cursor if nothing is hit + /// + [Header("Cusor Distance")] + [Tooltip("The minimum distance the cursor can be with nothing hit")] + public float MinCursorDistance = 1.0f; + + /// + /// Maximum distance for cursor if nothing is hit + /// + [Tooltip("The maximum distance the cursor can be with nothing hit")] + public float DefaultCursorDistance = 2.0f; + + /// + /// Surface distance to place the cursor off of the surface at + /// + [Tooltip("The distance from the hit surface to place the cursor")] + public float SurfaceCursorDistance = 0.02f; + + [Header("Motion")] + [Tooltip("When lerping, use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + /// + /// Blend value for surface normal to user facing lerp + /// + public float PositionLerpTime = 0.01f; + + /// + /// Blend value for surface normal to user facing lerp + /// + public float ScaleLerpTime = 0.01f; + + /// + /// Blend value for surface normal to user facing lerp + /// + public float RotationLerpTime = 0.01f; + + /// + /// Blend value for surface normal to user facing lerp + /// + [Range(0, 1)] + public float LookRotationBlend = 0.5f; + + /// + /// Visual that is displayed when cursor is active normally + /// + [Header("Tranform References")] + public Transform PrimaryCursorVisual; + + public Vector3 Position + { + get { return transform.position; } + } + + public Quaternion Rotation + { + get { return transform.rotation; } + } + + public Vector3 LocalScale + { + get { return transform.localScale; } + } + + /// + /// Indicates if hand is current in the view + /// + protected bool IsHandVisible; + + /// + /// Indicates air tap down + /// + protected bool IsInputSourceDown; + + protected GameObject TargetedObject; + protected ICursorModifier TargetedCursorModifier; + + private uint visibleHandsCount = 0; + private bool isVisible = true; + + private GazeManager gazeManager; + + /// + /// Position, scale and rotational goals for cursor + /// + private Vector3 targetPosition; + private Vector3 targetScale; + private Quaternion targetRotation; + + /// + /// Indicates if the cursor should be visible + /// + public bool IsVisible + { + set + { + isVisible = value; + SetVisiblity(isVisible); + } + } + + #region MonoBehaviour Functions + + private void Awake() + { + // Use the setter to update visibility of the cursor at startup based on user preferences + IsVisible = isVisible; + SetVisiblity(isVisible); + } + + private void Start() + { + gazeManager = GazeManager.Instance; + RegisterManagers(); + } + + private void Update() + { + UpdateCursorState(); + UpdateCursorTransform(); + } + + /// + /// Override for enable functions + /// + protected virtual void OnEnable() + { + if (gazeManager) + { + OnFocusedObjectChanged(null, gazeManager.HitObject); + } + OnCursorStateChange(CursorStateEnum.None); + } + + /// + /// Override for disable functions + /// + protected virtual void OnDisable() + { + TargetedObject = null; + TargetedCursorModifier = null; + visibleHandsCount = 0; + IsHandVisible = false; + OnCursorStateChange(CursorStateEnum.Contextual); + } + + private void OnDestroy() + { + UnregisterManagers(); + } + + #endregion + + /// + /// Register to events from the managers the cursor needs. + /// + protected virtual void RegisterManagers() + { + // Register to gaze events + gazeManager.FocusedObjectChanged += OnFocusedObjectChanged; + + // Register the cursor as a global listener, so that it can always get input events it cares about + InputManager.Instance.AddGlobalListener(gameObject); + + // Setup the cursor to be able to respond to input being globally enabled / disabled + if (InputManager.Instance.IsInputEnabled) + { + OnInputEnabled(); + } + else + { + OnInputDisabled(); + } + + InputManager.Instance.InputEnabled += OnInputEnabled; + InputManager.Instance.InputDisabled += OnInputDisabled; + } + + /// + /// Unregister from events from the managers the cursor needs. + /// + protected virtual void UnregisterManagers() + { + if (gazeManager != null) + { + gazeManager.FocusedObjectChanged -= OnFocusedObjectChanged; + } + + if (InputManager.Instance != null) + { + InputManager.Instance.RemoveGlobalListener(gameObject); + InputManager.Instance.InputEnabled -= OnInputEnabled; + InputManager.Instance.InputDisabled -= OnInputDisabled; + } + } + + /// + /// Updates the currently targeted object and cursor modifier upon getting + /// an event indicating that the focused object has changed. + /// + /// Object that was previously being focused. + /// New object being focused. + protected virtual void OnFocusedObjectChanged(GameObject previousObject, GameObject newObject) + { + TargetedObject = newObject; + if (newObject != null) + { + OnActiveModifier(newObject.GetComponent()); + } + } + + /// + /// Override function when a new modifier is found or no modifier is valid + /// + /// + protected virtual void OnActiveModifier(CursorModifier modifier) + { + TargetedCursorModifier = modifier; + } + + /// + /// Update the cursor's transform + /// + protected virtual void UpdateCursorTransform() + { + // Get the necessary info from the gaze source + RaycastHit hitResult = gazeManager.HitInfo; + GameObject newTargetedObject = gazeManager.HitObject; + + // Get the forward vector looking back at camera + Vector3 lookForward = -gazeManager.GazeNormal; + + // Normalize scale on before update + targetScale = Vector3.one; + + // If no game object is hit, put the cursor at the default distance + if (TargetedObject == null) + { + this.TargetedObject = null; + this.TargetedCursorModifier = null; + targetPosition = gazeManager.GazeOrigin + gazeManager.GazeNormal * DefaultCursorDistance; + targetRotation = lookForward.magnitude > 0 ? Quaternion.LookRotation(lookForward, Vector3.up) : transform.rotation; + } + else + { + // Update currently targeted object + this.TargetedObject = newTargetedObject; + + if (TargetedCursorModifier != null) + { + TargetedCursorModifier.GetModifiedTransform(this, out targetPosition, out targetRotation, out targetScale); + } + else + { + // If no modifier is on the target, just use the hit result to set cursor position + targetPosition = hitResult.point + (lookForward * SurfaceCursorDistance); + targetRotation = Quaternion.LookRotation(Vector3.Lerp(hitResult.normal, lookForward, LookRotationBlend), Vector3.up); + } + } + + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + // Use the lerp times to blend the position to the target position + transform.position = Vector3.Lerp(transform.position, targetPosition, deltaTime / PositionLerpTime); + transform.localScale = Vector3.Lerp(transform.localScale, targetScale, deltaTime / ScaleLerpTime); + transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, deltaTime / RotationLerpTime); + } + + /// + /// Updates the visual representation of the cursor. + /// + public void SetVisiblity(bool visible) + { + if (PrimaryCursorVisual != null) + { + PrimaryCursorVisual.gameObject.SetActive(visible); + } + } + + /// + /// Disable input and set to contextual to override input + /// + public virtual void OnInputDisabled() + { + // Reset visible hands on disable + visibleHandsCount = 0; + IsHandVisible = false; + + OnCursorStateChange(CursorStateEnum.Contextual); + } + + /// + /// Enable input and set to none to reset cursor + /// + public virtual void OnInputEnabled() + { + OnCursorStateChange(CursorStateEnum.None); + } + + /// + /// Function for consuming the OnInputUp events + /// + /// + public virtual void OnInputUp(InputEventData eventData) + { + IsInputSourceDown = false; + } + + /// + /// Function for receiving OnInputDown events from InputManager + /// + /// + public virtual void OnInputDown(InputEventData eventData) + { + IsInputSourceDown = true; + } + + /// + /// Function for receiving OnInputClicked events from InputManager + /// + /// + public virtual void OnInputClicked(InputClickedEventData eventData) + { + // Open input socket for other cool stuff... + } + + + /// + /// Input source detected callback for the cursor + /// + /// + public virtual void OnSourceDetected(SourceStateEventData eventData) + { + visibleHandsCount++; + IsHandVisible = true; + } + + + /// + /// Input source lost callback for the cursor + /// + /// + public virtual void OnSourceLost(SourceStateEventData eventData) + { + visibleHandsCount--; + if (visibleHandsCount == 0) + { + IsHandVisible = false; + IsInputSourceDown = false; + } + } + + /// + /// Internal update to check for cursor state changes + /// + private void UpdateCursorState() + { + CursorStateEnum newState = CheckCursorState(); + if (cursorState != newState) + { + OnCursorStateChange(newState); + } + } + + /// + /// Virtual function for checking state changess. + /// + public virtual CursorStateEnum CheckCursorState() + { + if (cursorState != CursorStateEnum.Contextual) + { + if (IsInputSourceDown) + { + return CursorStateEnum.Select; + } + else if (cursorState == CursorStateEnum.Select) + { + return CursorStateEnum.Release; + } + + if (IsHandVisible) + { + return TargetedObject != null ? CursorStateEnum.InteractHover : CursorStateEnum.Interact; + } + return TargetedObject != null ? CursorStateEnum.ObserveHover : CursorStateEnum.Observe; + } + return CursorStateEnum.Contextual; + } + + /// + /// Change the cursor state to the new state. Override in cursor implementations. + /// + /// + public virtual void OnCursorStateChange(CursorStateEnum state) + { + cursorState = state; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs.meta new file mode 100644 index 0000000..b5c53a1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/Cursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ec2dd3e33d633414fa40ca4fead4a3d6 +timeCreated: 1460564228 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs new file mode 100644 index 0000000..b2f013c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Component that can be added to any game object with a collider to modify + /// how a cursor reacts when on that collider. + /// + public class CursorModifier : MonoBehaviour, ICursorModifier + { + [Tooltip("Transform for which this cursor modifier applies its various properties.")] + public Transform HostTransform; + + [Tooltip("How much a cursor should be offset from the surface of the object when overlapping.")] + public Vector3 CursorOffset = Vector3.zero; + + [Tooltip("Direction of the cursor offset.")] + public Vector3 CursorNormal = Vector3.back; + + [Tooltip("Scale of the cursor when looking at this object.")] + public Vector3 CursorScaleOffset = Vector3.one; + + [Tooltip("Should the cursor snap to the object.")] + public bool SnapCursor = false; + + [Tooltip("If true, the normal from the gaze vector will be used to orient the cursor " + + "instead of the targeted object's normal at point of contact.")] + public bool UseGazeBasedNormal = false; + + [Tooltip("Should the cursor be hidding when this object is focused.")] + public bool HideCursorOnFocus = false; + + [Tooltip("Cursor animation event to trigger when this object is gazed. Leave empty for none.")] + public string CursorTriggerName; + + private void Awake() + { + if (HostTransform == null) + { + HostTransform = transform; + } + } + + /// + /// Return whether or not hide the cursor + /// + /// + public bool GetCursorVisibility() + { + return HideCursorOnFocus; + } + + public Vector3 GetModifiedPosition(ICursor cursor) + { + Vector3 position; + + if (SnapCursor) + { + // Snap if the targeted object has a cursor modifier that supports snapping + position = HostTransform.position + + HostTransform.TransformVector(CursorOffset); + } + else + { + // Else, consider the modifiers on the cursor modifier, but don't snap + position = GazeManager.Instance.HitPosition + HostTransform.TransformVector(CursorOffset); + } + + return position; + } + + public Quaternion GetModifiedRotation(ICursor cursor) + { + Quaternion rotation; + + Vector3 forward = UseGazeBasedNormal ? -GazeManager.Instance.GazeNormal : HostTransform.rotation * CursorNormal; + + // Determine the cursor forward + if (forward.magnitude > 0) + { + rotation = Quaternion.LookRotation(forward, Vector3.up); + } + else + { + rotation = cursor.Rotation; + } + + return rotation; + } + + public Vector3 GetModifiedScale(ICursor cursor) + { + return CursorScaleOffset; + } + + public void GetModifiedTransform(ICursor cursor, out Vector3 position, out Quaternion rotation, out Vector3 scale) + { + position = GetModifiedPosition(cursor); + rotation = GetModifiedRotation(cursor); + scale = GetModifiedScale(cursor); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs.meta new file mode 100644 index 0000000..2e5671b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/CursorModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b79c91d1ffb021347a4135df5ddd1efc +timeCreated: 1470951870 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs new file mode 100644 index 0000000..4f001a9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Cursor Interface for handling input events and setting visiblity. + /// + public interface ICursor : IInputHandler, IInputClickHandler, ISourceStateHandler + { + /// + /// Position of the cursor. + /// + Vector3 Position { get; } + + /// + /// Rotation of the cursor. + /// + Quaternion Rotation { get; } + + /// + /// Local scale of the cursor. + /// + Vector3 LocalScale { get; } + + /// + /// Sets the visibility of the cursor. + /// + /// True if cursor should be visible, false if not. + void SetVisiblity(bool visible); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs.meta new file mode 100644 index 0000000..1d540d5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1ef5f7f70af31a94086ff3d7f0a1719f +timeCreated: 1477949420 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs new file mode 100644 index 0000000..3d70128 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Cursor Modifier Interface that provides basic overrides for cursor behaviour. + /// + public interface ICursorModifier + { + /// + /// Indicates whether the cursor should be visible or not. + /// + /// True if cursor should be visible, false if not. + bool GetCursorVisibility(); + + /// + /// Returns the cursor position after considering this modifier. + /// + /// Cursor that is being modified. + /// New position for the cursor + Vector3 GetModifiedPosition(ICursor cursor); + + /// + /// Returns the cursor rotation after considering this modifier. + /// + /// Cursor that is being modified. + /// New rotation for the cursor + Quaternion GetModifiedRotation(ICursor cursor); + + /// + /// Returns the cursor local scale after considering this modifier. + /// + /// Cursor that is being modified. + /// New local scale for the cursor + Vector3 GetModifiedScale(ICursor cursor); + + /// + /// Returns the modified transform for the cursor after considering this modifier. + /// + /// Cursor that is being modified. + /// Modified position. + /// Modified rotation. + /// Modified scale. + void GetModifiedTransform(ICursor cursor, out Vector3 position, out Quaternion rotation, out Vector3 scale); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs.meta new file mode 100644 index 0000000..c7c30d8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ICursorModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 822c0970b94b13a47801746b133830f5 +timeCreated: 1478108836 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs new file mode 100644 index 0000000..b13ad8f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs @@ -0,0 +1,86 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Object that represents a cursor in 3D space controlled by gaze. + /// + public class MeshCursor : Cursor + { + [Serializable] + public struct MeshCursorDatum + { + public string Name; + public CursorStateEnum CursorState; + public Mesh CursorMesh; + public Vector3 LocalScale; + public Vector3 LocalOffset; + } + + [SerializeField] + public MeshCursorDatum[] CursorStateData; + + /// + /// Sprite renderer to change. If null find one in children + /// + public MeshRenderer TargetRenderer; + + /// + /// On enable look for a sprite renderer on children + /// + protected override void OnEnable() + { + if(TargetRenderer == null) + { + TargetRenderer = GetComponentInChildren(); + } + + base.OnEnable(); + } + + /// + /// Override OnCursorState change to set the correct animation + /// state for the cursor + /// + /// + public override void OnCursorStateChange(CursorStateEnum state) + { + base.OnCursorStateChange(state); + + if (state != CursorStateEnum.Contextual) + { + for (int i = 0; i < CursorStateData.Length; i++) + { + if (CursorStateData[i].CursorState == state) + { + SetCursorState(CursorStateData[i]); + } + } + } + } + + /// + /// Based on the type of state info pass it through to the mesh renderer + /// + /// + private void SetCursorState(MeshCursorDatum stateDatum) + { + // Return if we do not have an animator + if (TargetRenderer != null) + { + MeshFilter mf = TargetRenderer.gameObject.GetComponent(); + if(mf != null && stateDatum.CursorMesh != null) + { + mf.mesh = stateDatum.CursorMesh; + } + + TargetRenderer.transform.localPosition = stateDatum.LocalOffset; + TargetRenderer.transform.localScale = stateDatum.LocalScale; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs.meta new file mode 100644 index 0000000..1784d79 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/MeshCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5a03e90953147cf4e948462c10c01b31 +timeCreated: 1460564228 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs new file mode 100644 index 0000000..bd1cb56 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// The object cursor can switch between different game objects based on its state. + /// It simply links the game object to set to active with its associated cursor state. + /// + public class ObjectCursor : Cursor + { + [Serializable] + public struct ObjectCursorDatum + { + public string Name; + public CursorStateEnum CursorState; + public GameObject CursorObject; + } + + [SerializeField] + public ObjectCursorDatum[] CursorStateData; + + /// + /// Sprite renderer to change. If null find one in children + /// + public Transform ParentTransform; + + /// + /// On enable look for a sprite renderer on children + /// + protected override void OnEnable() + { + if(ParentTransform == null) + { + ParentTransform = transform; + } + + for (int i = 0; i < ParentTransform.childCount; i++) + { + ParentTransform.GetChild(i).gameObject.SetActive(false); + } + + base.OnEnable(); + } + + /// + /// Override OnCursorState change to set the correct animation + /// state for the cursor + /// + /// + public override void OnCursorStateChange(CursorStateEnum state) + { + base.OnCursorStateChange(state); + if (state != CursorStateEnum.Contextual) + { + + // First, try to find a cursor for the current state + var newActive = new ObjectCursorDatum(); + for(int cursorIndex = 0; cursorIndex < CursorStateData.Length; cursorIndex++) + { + ObjectCursorDatum cursor = CursorStateData[cursorIndex]; + if (cursor.CursorState == state) + { + newActive = cursor; + break; + } + } + + // If no cursor for current state is found, let the last active cursor be + // (any cursor is better than an invisible cursor) + if (newActive.Name == null) + { + return; + } + + // If we come here, there is a cursor for the new state, + // so de-activate a possible earlier active cursor + for(int cursorIndex = 0; cursorIndex < CursorStateData.Length; cursorIndex++) + { + ObjectCursorDatum cursor = CursorStateData[cursorIndex]; + if (cursor.CursorObject.activeSelf) + { + cursor.CursorObject.SetActive(false); + break; + } + } + + // ... and set the cursor for the new state active. + newActive.CursorObject.SetActive(true); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs.meta new file mode 100644 index 0000000..68dcfeb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/ObjectCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: afa1ae235bc6cfa43addd1435e2fd822 +timeCreated: 1460564228 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs new file mode 100644 index 0000000..39f7117 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs @@ -0,0 +1,81 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Object that represents a cursor comprised of sprites and colors for each state + /// + public class SpriteCursor : Cursor + { + [Serializable] + public struct SpriteCursorDatum + { + public string Name; + public CursorStateEnum CursorState; + public Sprite CursorSprite; + public Color CursorColor; + } + + [SerializeField] + public SpriteCursorDatum[] CursorStateData; + + /// + /// Sprite renderer to change. If null find one in children + /// + public SpriteRenderer TargetRenderer; + + /// + /// On enable look for a sprite renderer on children + /// + protected override void OnEnable() + { + if(TargetRenderer == null) + { + TargetRenderer = GetComponentInChildren(); + } + + base.OnEnable(); + } + + /// + /// Override OnCursorState change to set the correct sprite + /// state for the cursor + /// + /// + public override void OnCursorStateChange(CursorStateEnum state) + { + base.OnCursorStateChange(state); + + if (state != CursorStateEnum.Contextual) + { + for (int i = 0; i < CursorStateData.Length; i++) + { + if (CursorStateData[i].CursorState == state) + { + SetCursorState(CursorStateData[i]); + } + } + } + } + + /// + /// Based on the type of state info pass it through to the sprite renderer + /// + /// + private void SetCursorState(SpriteCursorDatum stateDatum) + { + // Return if we do not have an animator + if (TargetRenderer != null) + { + TargetRenderer.sprite = stateDatum.CursorSprite; + TargetRenderer.color = stateDatum.CursorColor; + } + } + + } + +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs.meta new file mode 100644 index 0000000..b7cc6fb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Cursor/SpriteCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aca36d332a4c62a43b19ab4aa21d2248 +timeCreated: 1460564228 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor.meta new file mode 100644 index 0000000..7ccfb4c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9230b89c8eef3f94f98f6cbee39b500f +folderAsset: yes +timeCreated: 1485458480 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs new file mode 100644 index 0000000..11114a2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs @@ -0,0 +1,15 @@ +using UnityEditor; + +public class EditorHandsMaterialInspector : ShaderGUI +{ + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) + { + foreach (MaterialProperty materialProperty in properties) + { + if (materialProperty.flags != MaterialProperty.PropFlags.PerRendererData) + { + materialEditor.ShaderProperty(materialProperty, materialProperty.displayName); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs.meta new file mode 100644 index 0000000..4599d59 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Editor/EditorHandsMaterialInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7cea557c59ff6e4992ef89d5e6a8091 +timeCreated: 1485458499 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs new file mode 100644 index 0000000..2506d22 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs @@ -0,0 +1,164 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Allows the user to place and rotate GameObjects using a game controller. + /// TODO This should be converted to an input source. + /// + /// Make sure to enable the HumanInterfaceDevice capability before using. + public class GameControllerManipulator : MonoBehaviour + { + [Tooltip("Name of the joystick axis that moves the object along X as set in InputManager")] + public string MoveXAxisName = "ControllerLeftStickX"; + [Tooltip("Speed of movement along X")] + public float MoveXAxisSpeed = 0.2f; + + [Tooltip("Name of the joystick axis that moves the object along Y as set in InputManager")] + public string MoveYAxisName = "ControllerLeftStickY"; + [Tooltip("Speed of movement along Y")] + public float MoveYAxisSpeed = 0.2f; + + [Tooltip("Name of the joystick axis that moves the object along Z as set in InputManager")] + public string MoveZAxisName = "ControllerTriggerAxis"; + [Tooltip("Speed of movement along Z")] + public float MoveZAxisSpeed = 0.2f; + + [Tooltip("Name of the button the user presses to move the object with gaze")] + public string MoveWithGazeButtonName = "Fire1"; + + [Tooltip("Name of the joystick axis that rotates around X as set in InputManager")] + public string RotateAroundXAxisName = "ControllerLeftStickY"; + [Tooltip("Speed of rotation around X")] + public float RotateAroundXAxisSpeed = -1f; + + [Tooltip("Name of the joystick axis that rotates around Y as set in InputManager")] + public string RotateAroundYAxisName = "ControllerLeftStickX"; + [Tooltip("Speed of rotation around Y")] + public float RotateAroundYAxisSpeed = -1f; + + [Tooltip("Name of the joystick axis that rotates around Z as set in InputManager")] + public string RotateAroundZAxisName = ""; + [Tooltip("Speed of rotation around Z")] + public float RotateAroundZAxisSpeed = 1f; + + [Tooltip("Name of the button used to enable rotation. Useful for single stick controllers")] + public string RotateModifierButtonName = "Fire2"; + + [Tooltip("Move the gaze target instead of the GameObject this script is attached to")] + public bool MoveGazeTarget = false; + + private GameObject lastAffectedObject; + private float stickDistance = 0; + + // Update is called once per frame + private void Update() + { + GameObject objectToManipulate; + + if (!MoveGazeTarget) + { + objectToManipulate = gameObject; + } + else + { + objectToManipulate = lastAffectedObject ?? GazeManager.Instance.HitObject; + } + + if (objectToManipulate == null) + { + return; + } + + var cameraTransform = Camera.main.transform; + + //Rotate + var noRotateModifier = string.IsNullOrEmpty(RotateModifierButtonName); + var enableRotate = noRotateModifier || Input.GetButton(RotateModifierButtonName); + + float rz = 0; + float ry = 0; + float rx = 0; + + if (enableRotate) + { + rz = RotateAroundAxis(objectToManipulate, RotateAroundZAxisName, cameraTransform.forward, RotateAroundZAxisSpeed); + ry = RotateAroundAxis(objectToManipulate, RotateAroundYAxisName, cameraTransform.up, RotateAroundYAxisSpeed); + rx = RotateAroundAxis(objectToManipulate, RotateAroundXAxisName, cameraTransform.right, RotateAroundXAxisSpeed); + } + + //Move + bool usingSameAxisForRotateAndMove = RotateAroundYAxisName == MoveXAxisName || + RotateAroundYAxisName == MoveZAxisName || + RotateAroundZAxisName == MoveXAxisName || + RotateAroundZAxisName == MoveYAxisName; + + float x = 0; + float y = 0; + + //only move if the movement axis has not been used for rotation + if (!(enableRotate && usingSameAxisForRotateAndMove)) + { + x = Input.GetAxis(MoveXAxisName) * MoveXAxisSpeed * 60 * Time.deltaTime; + objectToManipulate.transform.RotateAround(cameraTransform.position, cameraTransform.up, x); + + y = Input.GetAxis(MoveYAxisName) * MoveYAxisSpeed * 60 * Time.deltaTime; + objectToManipulate.transform.RotateAround(cameraTransform.position, cameraTransform.right, y); + } + + var z = Input.GetAxis(MoveZAxisName) * MoveZAxisSpeed * 60 * Time.deltaTime; + objectToManipulate.transform.position += cameraTransform.forward*z*-0.03f; + + var stickInFrontOfMe = Input.GetButton(MoveWithGazeButtonName); + + if (stickInFrontOfMe) + { + if (stickDistance == 0) + { + stickDistance = (objectToManipulate.transform.position - cameraTransform.position).magnitude; + } + + objectToManipulate.transform.position = cameraTransform.position + cameraTransform.forward * stickDistance; + } + else + { + stickDistance = 0; + } + + + if (stickInFrontOfMe || x != 0 || y != 0 || z != 0 || rz != 0 || ry != 0 || rx != 0) + { + lastAffectedObject = objectToManipulate; + } +#if !UNITY_EDITOR + else + { + lastAffectedObject = null; //easier to test in Unity this way + } +#endif + } + + /// + /// Rotates the specified GameObject as dictated by joystick values and multipliers + /// + /// the gameObject to rotate + /// the name of the joystick axis + /// vector to rotate around + /// rotation speed + /// the amount of rotation applied + private float RotateAroundAxis(GameObject objectToRotate, string joyAxisName, Vector3 vectorToRotateAround, float speed) + { + if (string.IsNullOrEmpty(joyAxisName)) + { + return 0; + } + + var result = Input.GetAxis(joyAxisName) * speed * 60 * Time.deltaTime; + objectToRotate.transform.rotation = Quaternion.Euler(vectorToRotateAround * result) * objectToRotate.transform.rotation; + return result; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs.meta new file mode 100644 index 0000000..9b9eae5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/GameControllerManipulator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4d43a912ea5ac9408a3e9d407d36b53 +timeCreated: 1472832956 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze.meta new file mode 100644 index 0000000..cbfd1e6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1f494bd132b39f443afdf5e8ecf1edd2 +folderAsset: yes +timeCreated: 1464209085 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs new file mode 100644 index 0000000..bd3c785 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// A base class for a stabilizer that takes an input position and orientation, and performs operations on them + /// to stabilize, or smooth deltas, in the data. + /// + public abstract class BaseRayStabilizer : MonoBehaviour + { + /// + /// The stabilized position. + /// + public abstract Vector3 StablePosition { get; } + + /// + /// The stabilized rotation. + /// + public abstract Quaternion StableRotation { get; } + + /// + /// A ray representing the stable position and orientation + /// + public abstract Ray StableRay { get; } + + /// + /// Call this each frame to smooth out changes to a position and orientation. + /// + /// Input position to smooth. + /// Input orientation to smooth. + public abstract void UpdateStability(Vector3 position, Quaternion rotation); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs.meta new file mode 100644 index 0000000..27d5035 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/BaseRayStabilizer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c60c270d8eeccb14f9368b571cb637aa +timeCreated: 1470956080 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs new file mode 100644 index 0000000..05abcd1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs @@ -0,0 +1,377 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// The gaze manager manages everything related to a gaze ray that can interact with other objects. + /// + public class GazeManager : Singleton + { + public delegate void FocusedChangedDelegate(GameObject previousObject, GameObject newObject); + + /// + /// Indicates whether the user is currently gazing at an object. + /// + public bool IsGazingAtObject { get; private set; } + + /// + /// HitInfo property gives access to information at the object being gazed at, if any. + /// + public RaycastHit HitInfo { get { return hitInfo; } } + private RaycastHit hitInfo; + + /// + /// The game object that is currently being gazed at, if any. + /// + public GameObject HitObject { get; private set; } + + /// + /// Position at which the gaze manager hit an object. + /// If no object is currently being hit, this will use the last hit distance. + /// + public Vector3 HitPosition { get; private set; } + + /// + /// Origin of the gaze. + /// + public Vector3 GazeOrigin { get; private set; } + + /// + /// Normal of the gaze. + /// + public Vector3 GazeNormal { get; private set; } + + /// + /// Maximum distance at which the gaze can collide with an object. + /// + public float MaxGazeCollisionDistance = 10.0f; + + /// + /// The LayerMasks, in prioritized order, that are used to determine the HitObject when raycasting. + /// + /// Example Usage: + /// + /// // Allow the cursor to hit SR, but first prioritize any DefaultRaycastLayers (potentially behind SR) + /// + /// int sr = LayerMask.GetMask("SR"); + /// int nonSR = Physics.DefaultRaycastLayers & ~sr; + /// GazeManager.Instance.RaycastLayerMasks = new LayerMask[] { nonSR, sr }; + /// + [Tooltip("The LayerMasks, in prioritized order, that are used to determine the HitObject when raycasting.\n\nExample Usage:\n\n// Allow the cursor to hit SR, but first prioritize any DefaultRaycastLayers (potentially behind SR)\n\nint sr = LayerMask.GetMask(\"SR\");\nint nonSR = Physics.DefaultRaycastLayers & ~sr;\nGazeManager.Instance.RaycastLayerMasks = new LayerMask[] { nonSR, sr };")] + public LayerMask[] RaycastLayerMasks = new LayerMask[] { Physics.DefaultRaycastLayers }; + + /// + /// Current stabilization method, used to smooth out the gaze ray data. + /// If left null, no stabilization will be performed. + /// + [Tooltip("Stabilizer, if any, used to smooth out the gaze ray data.")] + public BaseRayStabilizer Stabilizer = null; + + /// + /// Transform that should be used as the source of the gaze position and orientation. + /// Defaults to the main camera. + /// + [Tooltip("Transform that should be used to represent the gaze position and orientation. Defaults to Camera.Main")] + public Transform GazeTransform; + + /// + /// Dispatched when focus shifts to a new object, or focus on current object + /// is lost. + /// + public event FocusedChangedDelegate FocusedObjectChanged; + + private float lastHitDistance = 2.0f; + + /// + /// Unity UI pointer event. This will be null if the EventSystem is not defined in the scene. + /// + public PointerEventData UnityUIPointerEvent { get; private set; } + + /// + /// Cached results of racast results. + /// + private List raycastResultList = new List(); + + protected override void Awake() + { + base.Awake(); + + // Add default RaycastLayers as first layerPriority + if (RaycastLayerMasks == null || RaycastLayerMasks.Length == 0) + { + RaycastLayerMasks = new LayerMask[] { Physics.DefaultRaycastLayers }; + } + } + + private void Start() + { + if (GazeTransform == null) + { + if (Camera.main != null) + { + GazeTransform = Camera.main.transform; + } + else + { + Debug.LogError("Gaze Manager was not given a GazeTransform and no main camera exists to default to."); + } + } + } + + private void Update() + { + if (GazeTransform == null) + { + return; + } + + UpdateGazeInfo(); + + // Perform raycast to determine gazed object + GameObject previousFocusObject = RaycastPhysics(); + + // If we have a unity event system, perform graphics raycasts as well to support Unity UI interactions + if (EventSystem.current != null) + { + // NOTE: We need to do this AFTER we set the HitPosition and HitObject since we need to use HitPosition to perform the correct 2D UI Raycast. + RaycastUnityUI(); + } + + // Dispatch changed event if focus is different + if (previousFocusObject != HitObject && FocusedObjectChanged != null) + { + FocusedObjectChanged(previousFocusObject, HitObject); + } + } + + /// + /// Updates the current gaze information, so that the gaze origin and normal are accurate. + /// + private void UpdateGazeInfo() + { + Vector3 newGazeOrigin = GazeTransform.position; + Vector3 newGazeNormal = GazeTransform.forward; + + // Update gaze info from stabilizer + if (Stabilizer != null) + { + Stabilizer.UpdateStability(newGazeOrigin, GazeTransform.rotation); + newGazeOrigin = Stabilizer.StablePosition; + newGazeNormal = Stabilizer.StableRay.direction; + } + + GazeOrigin = newGazeOrigin; + GazeNormal = newGazeNormal; + } + + /// + /// Perform a Unity physics Raycast to determine which scene objects with a collider is currently being gazed at, if any. + /// + private GameObject RaycastPhysics() + { + GameObject previousFocusObject = HitObject; + + // If there is only one priority, don't prioritize + if (RaycastLayerMasks.Length == 1) + { + IsGazingAtObject = Physics.Raycast(GazeOrigin, GazeNormal, out hitInfo, MaxGazeCollisionDistance, RaycastLayerMasks[0]); + } + else + { + // Raycast across all layers and prioritize + RaycastHit? hit = PrioritizeHits(Physics.RaycastAll(new Ray(GazeOrigin, GazeNormal), MaxGazeCollisionDistance, -1)); + + IsGazingAtObject = hit.HasValue; + if (IsGazingAtObject) + { + hitInfo = hit.Value; + } + } + + if (IsGazingAtObject) + { + HitObject = HitInfo.collider.gameObject; + HitPosition = HitInfo.point; + lastHitDistance = HitInfo.distance; + } + else + { + HitObject = null; + HitPosition = GazeOrigin + (GazeNormal * lastHitDistance); + } + return previousFocusObject; + } + + /// + /// Perform a Unity UI Raycast, compare with the latest 3D raycast, and overwrite the hit object info if the UI gets focus + /// + private void RaycastUnityUI() + { + if (UnityUIPointerEvent == null) + { + UnityUIPointerEvent = new PointerEventData(EventSystem.current); + } + + // 2D cursor position + Vector2 cursorScreenPos = Camera.main.WorldToScreenPoint(HitPosition); + UnityUIPointerEvent.delta = cursorScreenPos - UnityUIPointerEvent.position; + UnityUIPointerEvent.position = cursorScreenPos; + + // Graphics raycast + raycastResultList.Clear(); + EventSystem.current.RaycastAll(UnityUIPointerEvent, raycastResultList); + RaycastResult uiRaycastResult = FindClosestRaycastHitInLayermasks(raycastResultList, RaycastLayerMasks); + UnityUIPointerEvent.pointerCurrentRaycast = uiRaycastResult; + + // If we have a raycast result, check if we need to overwrite the 3D raycast info + if (uiRaycastResult.gameObject != null) + { + // Add the near clip distance since this is where the raycast is from + float uiRaycastDistance = uiRaycastResult.distance + Camera.main.nearClipPlane; + + bool superseded3DObject = false; + if (IsGazingAtObject) + { + // Check layer prioritization + if (RaycastLayerMasks.Length > 1) + { + // Get the index in the prioritized layer masks + int uiLayerIndex = FindLayerListIndex(uiRaycastResult.gameObject.layer, RaycastLayerMasks); + int threeDLayerIndex = FindLayerListIndex(hitInfo.collider.gameObject.layer, RaycastLayerMasks); + + if (threeDLayerIndex > uiLayerIndex) + { + superseded3DObject = true; + } + else if (threeDLayerIndex == uiLayerIndex) + { + if (hitInfo.distance > uiRaycastDistance) + { + superseded3DObject = true; + } + } + } + else + { + if (hitInfo.distance > uiRaycastDistance) + { + superseded3DObject = true; + } + } + } + + // Check if we need to overwrite the 3D raycast info + if (!IsGazingAtObject || superseded3DObject) + { + IsGazingAtObject = true; + Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(uiRaycastResult.screenPosition.x, uiRaycastResult.screenPosition.y, uiRaycastDistance)); + hitInfo = new RaycastHit() + { + distance = uiRaycastDistance, + normal = -Camera.main.transform.forward, + point = worldPos + }; + + HitObject = uiRaycastResult.gameObject; + HitPosition = HitInfo.point; + lastHitDistance = HitInfo.distance; + } + } + } + + #region Helpers + + /// + /// Find the closest raycast hit in the list of RaycastResults that is also included in the LayerMask list. + /// + /// List of RaycastResults from a Unity UI raycast + /// List of layers to support + /// RaycastResult if hit, or an empty RaycastResult if nothing was hit + private RaycastResult FindClosestRaycastHitInLayermasks(List candidates, LayerMask[] layerMaskList) + { + int combinedLayerMask = 0; + for (int i = 0; i < layerMaskList.Length; i++) + { + combinedLayerMask = combinedLayerMask | layerMaskList[i].value; + } + + RaycastResult? minHit = null; + for (var i = 0; i < candidates.Count; ++i) + { + if (candidates[i].gameObject == null || !IsLayerInLayerMask(candidates[i].gameObject.layer, combinedLayerMask)) + { + continue; + } + if (minHit == null || candidates[i].distance < minHit.Value.distance) + { + minHit = candidates[i]; + } + } + + return minHit ?? new RaycastResult(); + } + + /// + /// Look through the layerMaskList and find the index in that list for which the supplied layer is part of + /// + /// Layer to search for + /// List of LayerMasks to search + /// LayerMaskList index, or -1 for not found + private int FindLayerListIndex(int layer, LayerMask[] layerMaskList) + { + for (int i = 0; i < layerMaskList.Length; i++) + { + if (IsLayerInLayerMask(layer, layerMaskList[i].value)) + { + return i; + } + } + + return -1; + } + + private bool IsLayerInLayerMask(int layer, int layerMask) + { + return ((1 << layer) & layerMask) != 0; + } + + private RaycastHit? PrioritizeHits(RaycastHit[] hits) + { + if (hits.Length == 0) + { + return null; + } + + // Return the minimum distance hit within the first layer that has hits. + // In other words, sort all hit objects first by layerMask, then by distance. + for (int layerMaskIdx = 0; layerMaskIdx < RaycastLayerMasks.Length; layerMaskIdx++) + { + RaycastHit? minHit = null; + + for (int hitIdx = 0; hitIdx < hits.Length; hitIdx++) + { + RaycastHit hit = hits[hitIdx]; + if (IsLayerInLayerMask(hit.transform.gameObject.layer, RaycastLayerMasks[layerMaskIdx]) && + (minHit == null || hit.distance < minHit.Value.distance)) + { + minHit = hit; + } + } + + if (minHit != null) + { + return minHit; + } + } + + return null; + } + + #endregion Helpers + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs.meta new file mode 100644 index 0000000..03a3e71 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4d1a2a33ffcac354298137001635a001 +timeCreated: 1470956079 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs new file mode 100644 index 0000000..89b47c0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs @@ -0,0 +1,115 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// GazeStabilizer iterates over samples of Raycast data and + /// helps stabilize the user's gaze for precision targeting. + /// + public class GazeStabilizer : BaseRayStabilizer + { + [Tooltip("Number of samples that you want to iterate on.")] + [Range(40, 120)] + public int StoredStabilitySamples = 60; + + private Vector3 stablePosition; + public override Vector3 StablePosition + { + get { return stablePosition; } + } + + private Quaternion stableRotation; + public override Quaternion StableRotation + { + get { return stableRotation; } + } + + private Ray stableRay; + public override Ray StableRay + { + get { return stableRay; } + } + + /// + /// Calculates standard deviation and averages for the gaze position. + /// + private readonly VectorRollingStatistics positionRollingStats = new VectorRollingStatistics(); + + /// + /// Calculates standard deviation and averages for the gaze direction. + /// + private readonly VectorRollingStatistics directionRollingStats = new VectorRollingStatistics(); + + /// + /// Tunable parameter. + /// If the standard deviation for the position is above this value, we reset and stop stabilizing. + /// + private const float PositionStandardDeviationReset = 0.2f; + + /// + /// Tunable parameter. + /// If the standard deviation for the direction is above this value, we reset and stop stabilizing. + /// + private const float DirectionStandardDeviationReset = 0.1f; + + /// + /// We must have at least this many samples with a standard deviation below the above constants to stabalize + /// + private const int MinimumSamplesRequiredToStabalize = 30; + + /// + /// When not stabalizing this is the 'lerp' applied to the position and direction of the gaze to smooth it over time. + /// + private const float UnstabalizedLerpFactor = 0.3f; + + /// + /// When stabalizing we will use the standard deviation of the position and direction to create the lerp value. + /// By default this value will be low and the cursor will be too sluggish, so we 'boost' it by this value. + /// + private const float StabalizedLerpBoost = 10.0f; + + private void Awake() + { + directionRollingStats.Init(StoredStabilitySamples); + positionRollingStats.Init(StoredStabilitySamples); + } + + /// + /// Updates the StablePosition and StableRotation based on GazeSample values. + /// Call this method with Raycasthit parameters to get stable values. + /// + /// Position value from a RaycastHit point. + /// Rotation value from a RaycastHit rotation. + public override void UpdateStability(Vector3 position, Quaternion rotation) + { + Vector3 gazePosition = position; + Vector3 gazeDirection = rotation * Vector3.forward; + + positionRollingStats.AddSample(gazePosition); + directionRollingStats.AddSample(gazeDirection); + + float lerpPower = UnstabalizedLerpFactor; + if (positionRollingStats.ActualSampleCount > MinimumSamplesRequiredToStabalize && // we have enough samples and... + (positionRollingStats.CurrentStandardDeviation > PositionStandardDeviationReset || // the standard deviation of positions is high or... + directionRollingStats.CurrentStandardDeviation > DirectionStandardDeviationReset)) // the standard deviation of directions is high + { + // We've detected that the user's gaze is no longer fixed, so stop stabalizing so that gaze is responsive. + //Debug.LogFormat("Reset {0} {1} {2} {3}", positionRollingStats.standardDeviation, positionRollingStats.standardDeviationsAway, directionRollignStats.standardDeviation, directionRollignStats.standardDeviationsAway); + positionRollingStats.Reset(); + directionRollingStats.Reset(); + } + else if (positionRollingStats.ActualSampleCount > MinimumSamplesRequiredToStabalize) + { + // We've detected that the user's gaze is fairly fixed, so start stabalizing. The more fixed the gaze the less the cursor will move. + lerpPower = StabalizedLerpBoost * (positionRollingStats.CurrentStandardDeviation + directionRollingStats.CurrentStandardDeviation); + } + + stablePosition = Vector3.Lerp(stablePosition, gazePosition, lerpPower); + stableRotation = Quaternion.LookRotation(Vector3.Lerp(stableRotation * Vector3.forward, gazeDirection, lerpPower)); + stableRay = new Ray(stablePosition, stableRotation * Vector3.forward); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs.meta new file mode 100644 index 0000000..d3d4b33 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Gaze/GazeStabilizer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b81e3e700505863408cacaa0346cb1a6 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs new file mode 100644 index 0000000..b50b818 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs @@ -0,0 +1,169 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.VR.WSA.Input; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Show a hand guidance indicator when the user's hand is close to leaving the camera's view. + /// + public class HandGuidance : Singleton + { + [Tooltip("The Cursor object the HandGuidanceIndicator will be positioned around.")] + public GameObject Cursor; + + [Tooltip("GameObject to display when your hand is about to lose tracking.")] + public GameObject HandGuidanceIndicator; + private GameObject handGuidanceIndicatorGameObject = null; + + // Hand source loss risk to start showing a hand indicator. + // As the source loss risk approaches 1, the hand is closer to being out of view. + [Range(0.0f, 1.0f)] + [Tooltip("When to start showing the Hand Guidance Indicator. 1 is out of view, 0 is centered in view.")] + public float HandGuidanceThreshold = 0.5f; + + private Quaternion defaultHandGuidanceRotation; + + private uint? currentlyTrackedHand = null; + + protected override void Awake() + { + base.Awake(); + if (HandGuidanceIndicator == null) + { + Debug.LogError("Please include a GameObject for the Hand Guidance Indicator."); + } + + if (Cursor == null) + { + Debug.LogError("Please include a GameObject for the Cursor to display the indicator around."); + } + + if (HandGuidanceIndicator != null) + { + // Cache the initial rotation of the HandGuidanceIndicator so future rotations + // can be done with respect to this orientation. + defaultHandGuidanceRotation = HandGuidanceIndicator.transform.rotation; + } + + // Create an object in the scene for the guidance indicator and default it to not be visible. + handGuidanceIndicatorGameObject = Instantiate(HandGuidanceIndicator); + handGuidanceIndicatorGameObject.SetActive(false); + + // Register for hand and finger events to know where your hand + // is being tracked and what state it is in. + InteractionManager.SourceLost += InteractionManager_SourceLost; + InteractionManager.SourceUpdated += InteractionManager_SourceUpdated; + InteractionManager.SourceReleased += InteractionManager_SourceReleased; + } + + private void ShowHandGuidanceIndicator(InteractionSourceState hand) + { + if (!currentlyTrackedHand.HasValue) + { + return; + } + + // Get the position and rotation of the hand guidance indicator and display the indicator object. + if (handGuidanceIndicatorGameObject != null) + { + Vector3 position; + Quaternion rotation; + GetIndicatorPositionAndRotation(hand, out position, out rotation); + + handGuidanceIndicatorGameObject.transform.position = position; + handGuidanceIndicatorGameObject.transform.rotation = rotation * defaultHandGuidanceRotation; + handGuidanceIndicatorGameObject.SetActive(true); + } + } + + private void HideHandGuidanceIndicator(InteractionSourceState hand) + { + if (!currentlyTrackedHand.HasValue) + { + return; + } + + if (handGuidanceIndicatorGameObject != null) + { + handGuidanceIndicatorGameObject.SetActive(false); + } + } + + private void GetIndicatorPositionAndRotation(InteractionSourceState hand, out Vector3 position, out Quaternion rotation) + { + // Update the distance from IndicatorParent based on the user's hand's distance from the center of the view. + // Bound this distance by this maxDistanceFromCenter field, in meters. + const float maxDistanceFromCenter = 0.3f; + float distanceFromCenter = (float)(hand.properties.sourceLossRisk * maxDistanceFromCenter); + + // Subtract direction from origin so that the indicator is between the hand and the origin. + position = Cursor.transform.position - hand.properties.sourceLossMitigationDirection * distanceFromCenter; + rotation = Quaternion.LookRotation(Camera.main.transform.forward, hand.properties.sourceLossMitigationDirection); + } + + private void InteractionManager_SourceUpdated(InteractionSourceState hand) + { + // Only display hand indicators when we are in a holding state, since hands going out of view will affect any active gestures. + if (!hand.pressed) + { + return; + } + + // Only track a new hand if are not currently tracking a hand. + if (!currentlyTrackedHand.HasValue) + { + currentlyTrackedHand = hand.source.id; + } + else if (currentlyTrackedHand.Value != hand.source.id) + { + // This hand is not the currently tracked hand, do not drawn a guidance indicator for this hand. + return; + } + + // Start showing an indicator to move your hand toward the center of the view. + if (hand.properties.sourceLossRisk > HandGuidanceThreshold) + { + ShowHandGuidanceIndicator(hand); + } + else + { + HideHandGuidanceIndicator(hand); + } + } + + private void InteractionManager_SourceReleased(InteractionSourceState hand) + { + // Stop displaying the guidance indicator when the user releases their finger from the pressed state. + RemoveTrackedHand(hand); + } + + private void InteractionManager_SourceLost(InteractionSourceState hand) + { + // Stop displaying the guidance indicator when the user's hand leaves the view. + RemoveTrackedHand(hand); + } + + private void RemoveTrackedHand(InteractionSourceState hand) + { + // Only remove a hand if we are currently tracking a hand, and the hand to remove matches this tracked hand. + if (currentlyTrackedHand.HasValue && currentlyTrackedHand.Value == hand.source.id) + { + // Remove a hand by hiding the guidance indicator and nulling out the currentlyTrackedHand field. + handGuidanceIndicatorGameObject.SetActive(false); + currentlyTrackedHand = null; + } + } + + protected override void OnDestroy() + { + InteractionManager.SourceLost -= InteractionManager_SourceLost; + InteractionManager.SourceUpdated -= InteractionManager_SourceUpdated; + InteractionManager.SourceReleased -= InteractionManager_SourceReleased; + + base.OnDestroy(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs.meta new file mode 100644 index 0000000..0a8498c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/HandGuidance.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2ac869b7c13e5a542b695b17a48d0375 +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents.meta new file mode 100644 index 0000000..38f4fca --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9660420db2c085246ad4af96397bd31c +folderAsset: yes +timeCreated: 1470933856 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs new file mode 100644 index 0000000..ebc5924 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Base class of all input events. + /// + public abstract class BaseInputEventData : BaseEventData + { + /// + /// The source the input event originates from. + /// + public IInputSource InputSource { get; private set; } + + /// + /// The id of the source the event is from, for instance the hand id. + /// + public uint SourceId { get; private set; } + + public BaseInputEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + protected virtual void BaseInitialize(IInputSource inputSource, uint sourceId) + { + Reset(); + InputSource = inputSource; + SourceId = sourceId; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs.meta new file mode 100644 index 0000000..bf64659 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/BaseInputEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 57bc52a903dabb343acd31f45390b885 +timeCreated: 1471031854 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs new file mode 100644 index 0000000..7eb7259 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Event dispatched when a hold gesture is detected. + /// + public class HoldEventData : BaseInputEventData + { + public HoldEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId) + { + BaseInitialize(inputSource, sourceId); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs.meta new file mode 100644 index 0000000..2fde96c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/HoldEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 02ef53b3a93625840aa0bdadd41119c4 +timeCreated: 1471039769 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs new file mode 100644 index 0000000..5f17d5a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to focus enter/exit. + /// + public interface IFocusable : IEventSystemHandler + { + void OnFocusEnter(); + void OnFocusExit(); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs.meta new file mode 100644 index 0000000..7d454ee --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IFocusable.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a780ad3b7aa945548a27f98be252d2f0 +timeCreated: 1470934749 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs new file mode 100644 index 0000000..e746217 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to hold gestures. + /// + public interface IHoldHandler : IEventSystemHandler + { + void OnHoldStarted(HoldEventData eventData); + void OnHoldCompleted(HoldEventData eventData); + void OnHoldCanceled(HoldEventData eventData); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs.meta new file mode 100644 index 0000000..7b1bba4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IHoldHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 19bbf18da0424824c80f866d003d3c2d +timeCreated: 1470938330 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs new file mode 100644 index 0000000..e562793 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to simple click input. + /// + public interface IInputClickHandler : IEventSystemHandler + { + void OnInputClicked(InputClickedEventData eventData); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs.meta new file mode 100644 index 0000000..e2528b3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputClickHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b3af9ec35c2752747acc7943104003ac +timeCreated: 1479259956 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs new file mode 100644 index 0000000..9f69cdc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to simple pointer-like input. + /// + public interface IInputHandler : IEventSystemHandler + { + void OnInputUp(InputEventData eventData); + void OnInputDown(InputEventData eventData); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs.meta new file mode 100644 index 0000000..0067329 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IInputHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aaeec22e4394fe84eb076f236e01b4f6 +timeCreated: 1470934749 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs new file mode 100644 index 0000000..404ea18 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to manipulation gestures. + /// + public interface IManipulationHandler : IEventSystemHandler + { + void OnManipulationStarted(ManipulationEventData eventData); + void OnManipulationUpdated(ManipulationEventData eventData); + void OnManipulationCompleted(ManipulationEventData eventData); + void OnManipulationCanceled(ManipulationEventData eventData); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs.meta new file mode 100644 index 0000000..7435e9a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/IManipulationHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 691df9a706b797e46b321614e4c8fcfc +timeCreated: 1470938330 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs new file mode 100644 index 0000000..d232906 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to navigation gestures. + /// + public interface INavigationHandler : IEventSystemHandler + { + void OnNavigationStarted(NavigationEventData eventData); + void OnNavigationUpdated(NavigationEventData eventData); + void OnNavigationCompleted(NavigationEventData eventData); + void OnNavigationCanceled(NavigationEventData eventData); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs.meta new file mode 100644 index 0000000..6ad160e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/INavigationHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 45118da20cb0d3d46b72b9fe0868f070 +timeCreated: 1470938330 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs new file mode 100644 index 0000000..33be00e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to source state changes, such as when an input source is detected or lost. + /// + public interface ISourceStateHandler : IEventSystemHandler + { + void OnSourceDetected(SourceStateEventData eventData); + void OnSourceLost(SourceStateEventData eventData); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs.meta new file mode 100644 index 0000000..6f830e5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISourceStateHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1e18cc5955663234eac0b82dbb83df95 +timeCreated: 1474316412 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs new file mode 100644 index 0000000..92dd535 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Interface to implement to react to speech recognition. + /// + public interface ISpeechHandler : IEventSystemHandler + { + void OnSpeechKeywordRecognized(SpeechKeywordRecognizedEventData eventData); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs.meta new file mode 100644 index 0000000..a7d315f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ISpeechHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f62517ad59638754bad3b2a5d71a06b4 +timeCreated: 1479913151 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs new file mode 100644 index 0000000..30d855d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an input event that involves a tap. + /// + public class InputClickedEventData : InputEventData + { + /// + /// Number of taps that triggered the event. + /// + public int TapCount { get; private set; } + + public InputClickedEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId, int tapCount) + { + BaseInitialize(inputSource, sourceId); + TapCount = tapCount; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs.meta new file mode 100644 index 0000000..4e36eb2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputClickedEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b304d3268ca1ec74aa0fd59559e3d8cb +timeCreated: 1482758406 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs new file mode 100644 index 0000000..77ec266 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an input event that has a source id. + /// + public class InputEventData : BaseInputEventData + { + public InputEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId) + { + BaseInitialize(inputSource, sourceId); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs.meta new file mode 100644 index 0000000..52419b2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/InputEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d19e27fb7c95c9149a31eef0146eda5f +timeCreated: 1471025790 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs new file mode 100644 index 0000000..5a2d70a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an input event that involves content manipulation. + /// + public class ManipulationEventData : InputEventData + { + /// + /// The amount of manipulation that has occurred. Usually in the form of + /// delta position of a hand. + /// + public Vector3 CumulativeDelta { get; private set; } + + public ManipulationEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId, Vector3 cumulativeDelta) + { + BaseInitialize(inputSource, sourceId); + CumulativeDelta = cumulativeDelta; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs.meta new file mode 100644 index 0000000..5c57d98 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/ManipulationEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6da69ac160e563c43a9e481a14a381c2 +timeCreated: 1471039770 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs new file mode 100644 index 0000000..5036936 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an input event that involves content navigation. + /// + public class NavigationEventData : InputEventData + { + /// + /// The amount of manipulation that has occurred. Usually in the form of + /// delta position of a hand. + /// + public Vector3 CumulativeDelta { get; private set; } + + public NavigationEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId, Vector3 cumulativeDelta) + { + BaseInitialize(inputSource, sourceId); + CumulativeDelta = cumulativeDelta; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs.meta new file mode 100644 index 0000000..400b434 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/NavigationEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 36553f0bb12305447b639cf2d682cf1b +timeCreated: 1471039770 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs new file mode 100644 index 0000000..78a7e90 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an source state event that has a source id. + /// + public class SourceStateEventData : BaseInputEventData + { + public SourceStateEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId) + { + BaseInitialize(inputSource, sourceId); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs.meta new file mode 100644 index 0000000..4efab90 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SourceStateEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8b34d86fb1285344f9f865590a0e7fa3 +timeCreated: 1474316498 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs new file mode 100644 index 0000000..0d05338 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.Windows.Speech; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Describes an input event that involves keyword recognition. + /// + public class SpeechKeywordRecognizedEventData : InputEventData + { + /// + /// A measure of correct recognition certainty. + /// + public ConfidenceLevel Confidence { get; private set; } + + /// + /// The time it took for the phrase to be uttered. + /// + public TimeSpan PhraseDuration { get; private set; } + + /// + /// The moment in time when uttering of the phrase began. + /// + public DateTime PhraseStartTime { get; private set; } + + /// + /// A semantic meaning of recognized phrase. + /// + public SemanticMeaning[] SemanticMeanings { get; private set; } + + /// + /// The text that was recognized. + /// + public string RecognizedText { get; private set; } + + public SpeechKeywordRecognizedEventData(EventSystem eventSystem) : base(eventSystem) + { + } + + public void Initialize(IInputSource inputSource, uint sourceId, ConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, SemanticMeaning[] semanticMeanings, string recognizedText) + { + BaseInitialize(inputSource, sourceId); + Confidence = confidence; + PhraseDuration = phraseDuration; + PhraseStartTime = phraseStartTime; + SemanticMeanings = semanticMeanings; + RecognizedText = recognizedText; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs.meta new file mode 100644 index 0000000..09e4b3a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputEvents/SpeechKeywordRecognizedEventData.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fad9c3efdd73ec143ba39215c09207a2 +timeCreated: 1479913151 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs new file mode 100644 index 0000000..50c3eb2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs @@ -0,0 +1,619 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Input Manager is responsible for managing input sources and dispatching relevant events + /// to the appropriate input handlers. + /// + public class InputManager : Singleton + { + /// + /// To tap on a hologram even when not focused on, + /// set OverrideFocusedObject to desired game object. + /// If it's null, then focused object will be used. + /// + public GameObject OverrideFocusedObject { get; set; } + + public event Action InputEnabled; + public event Action InputDisabled; + + private readonly Stack modalInputStack = new Stack(); + private readonly Stack fallbackInputStack = new Stack(); + + /// + /// Global listeners listen to all events and ignore the fact that other components might have consumed them. + /// + private readonly List globalListeners = new List(); + + private bool isRegisteredToGazeChanges; + private int disabledRefCount; + + private InputEventData inputEventData; + private InputClickedEventData sourceClickedEventData; + private SourceStateEventData sourceStateEventData; + private ManipulationEventData manipulationEventData; + private HoldEventData holdEventData; + private NavigationEventData navigationEventData; + + /// + /// Indicates if input is currently enabled or not. + /// + public bool IsInputEnabled + { + get { return disabledRefCount <= 0; } + } + + /// + /// Should the Unity UI events be fired? + /// + public bool ShouldSendUnityUiEvents { get { return GazeManager.Instance.UnityUIPointerEvent != null && EventSystem.current != null; } } + + /// + /// Push a game object into the modal input stack. Any input handlers + /// on the game object are given priority to input events before any focused objects. + /// + /// The input handler to push + public void PushModalInputHandler(GameObject inputHandler) + { + modalInputStack.Push(inputHandler); + } + + /// + /// Remove the last game object from the modal input stack. + /// + public void PopModalInputHandler() + { + modalInputStack.Pop(); + } + + /// + /// Clear all modal input handlers off the stack. + /// + public void ClearModalInputStack() + { + modalInputStack.Clear(); + } + + /// + /// Adds a global listener that will receive all input events, regardless + /// of which other game objects might have handled the event beforehand. + /// + /// Listener to add. + public void AddGlobalListener(GameObject listener) + { + globalListeners.Add(listener); + } + + /// + /// Removes a global listener. + /// + /// Listener to remove. + public void RemoveGlobalListener(GameObject listener) + { + globalListeners.Remove(listener); + } + + /// + /// Push a game object into the fallback input stack. Any input handlers on + /// the game object are given input events when no modal or focused objects consume the event. + /// + /// The input handler to push + public void PushFallbackInputHandler(GameObject inputHandler) + { + fallbackInputStack.Push(inputHandler); + } + + /// + /// Remove the last game object from the fallback input stack. + /// + public void PopFallbackInputHandler() + { + fallbackInputStack.Pop(); + } + + /// + /// Clear all fallback input handlers off the stack. + /// + public void ClearFallbackInputStack() + { + fallbackInputStack.Clear(); + } + + /// + /// Push a disabled input state onto the input manager. + /// While input is disabled no events will be sent out and the cursor displays + /// a waiting animation. + /// + public void PushInputDisable() + { + ++disabledRefCount; + + if (disabledRefCount == 1) + { + InputDisabled.RaiseEvent(); + } + } + + /// + /// Pop disabled input state. When the last disabled state is + /// popped off the stack input will be re-enabled. + /// + public void PopInputDisable() + { + --disabledRefCount; + Debug.Assert(disabledRefCount >= 0, "Tried to pop more input disable than the amount pushed."); + + if (disabledRefCount == 0) + { + InputEnabled.RaiseEvent(); + } + } + + /// + /// Clear the input disable stack, which will immediately re-enable input. + /// + public void ClearInputDisableStack() + { + bool wasInputDisabled = disabledRefCount > 0; + disabledRefCount = 0; + + if (wasInputDisabled) + { + InputEnabled.RaiseEvent(); + } + } + + private void Start() + { + InitializeEventDatas(); + + if (GazeManager.Instance == null) + { + Debug.LogError("InputManager requires an active GazeManager in the scene"); + } + + RegisterGazeManager(); + } + + private void InitializeEventDatas() + { + inputEventData = new InputEventData(EventSystem.current); + sourceClickedEventData = new InputClickedEventData(EventSystem.current); + sourceStateEventData = new SourceStateEventData(EventSystem.current); + manipulationEventData = new ManipulationEventData(EventSystem.current); + navigationEventData = new NavigationEventData(EventSystem.current); + holdEventData = new HoldEventData(EventSystem.current); + } + + protected override void OnDestroy() + { + UnregisterGazeManager(); + } + + private void OnEnable() + { + RegisterGazeManager(); + } + + private void OnDisable() + { + UnregisterGazeManager(); + } + + public void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) + where T : IEventSystemHandler + { + if (!enabled || disabledRefCount > 0) + { + return; + } + + // Use focused object when OverrideFocusedObject is null. + GameObject focusedObject = (OverrideFocusedObject == null) ? GazeManager.Instance.HitObject : OverrideFocusedObject; + + // Send the event to global listeners + for (int i = 0; i < globalListeners.Count; i++) + { + // Global listeners should only get events on themselves, as opposed to their hierarchy + ExecuteEvents.Execute(globalListeners[i], eventData, eventHandler); + } + + // Handle modal input if one exists + if (modalInputStack.Count > 0) + { + GameObject modalInput = modalInputStack.Peek(); + + // If there is a focused object in the hierarchy of the modal handler, start the event + // bubble there + if (focusedObject != null && focusedObject.transform.IsChildOf(modalInput.transform)) + { + + if (ExecuteEvents.ExecuteHierarchy(focusedObject, eventData, eventHandler)) + { + return; + } + } + // Otherwise, just invoke the event on the modal handler itself + else + { + if (ExecuteEvents.ExecuteHierarchy(modalInput, eventData, eventHandler)) + { + return; + } + } + } + + // If event was not handled by modal, pass it on to the current focused object + if (focusedObject != null) + { + bool eventHandled = ExecuteEvents.ExecuteHierarchy(focusedObject, eventData, eventHandler); + if (eventHandled) + { + return; + } + } + + // If event was not handled by the focused object, pass it on to any fallback handlers + if (fallbackInputStack.Count > 0) + { + GameObject fallbackInput = fallbackInputStack.Peek(); + ExecuteEvents.ExecuteHierarchy(fallbackInput, eventData, eventHandler); + } + } + + /// + /// Register to gaze manager events. + /// + private void RegisterGazeManager() + { + if (!isRegisteredToGazeChanges && GazeManager.Instance != null) + { + GazeManager.Instance.FocusedObjectChanged += GazeManager_FocusedChanged; + isRegisteredToGazeChanges = true; + } + } + + /// + /// Unregister from gaze manager events. + /// + private void UnregisterGazeManager() + { + if (isRegisteredToGazeChanges && GazeManager.Instance != null) + { + GazeManager.Instance.FocusedObjectChanged -= GazeManager_FocusedChanged; + isRegisteredToGazeChanges = false; + } + } + + private static readonly ExecuteEvents.EventFunction OnFocusEnterEventHandler = + delegate (IFocusable handler, BaseEventData eventData) + { + handler.OnFocusEnter(); + }; + + private static readonly ExecuteEvents.EventFunction OnFocusExitEventHandler = + delegate (IFocusable handler, BaseEventData eventData) + { + handler.OnFocusExit(); + }; + + private void GazeManager_FocusedChanged(GameObject previousObject, GameObject newObject) + { + if (disabledRefCount > 0) + { + return; + } + + if (previousObject != null) + { + ExecuteEvents.ExecuteHierarchy(previousObject, null, OnFocusExitEventHandler); + if (ShouldSendUnityUiEvents) + { + ExecuteEvents.ExecuteHierarchy(previousObject, GazeManager.Instance.UnityUIPointerEvent, ExecuteEvents.pointerExitHandler); + } + } + + if (newObject != null) + { + ExecuteEvents.ExecuteHierarchy(newObject, null, OnFocusEnterEventHandler); + if (ShouldSendUnityUiEvents) + { + ExecuteEvents.ExecuteHierarchy(newObject, GazeManager.Instance.UnityUIPointerEvent, ExecuteEvents.pointerEnterHandler); + } + } + } + + private static readonly ExecuteEvents.EventFunction OnInputClickedEventHandler = + delegate (IInputClickHandler handler, BaseEventData eventData) + { + InputClickedEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnInputClicked(casted); + }; + + public void RaiseInputClicked(IInputSource source, uint sourceId, int tapCount) + { + // Create input event + sourceClickedEventData.Initialize(source, sourceId, tapCount); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceClickedEventData, OnInputClickedEventHandler); + + // UI events + if (ShouldSendUnityUiEvents) + { + PointerEventData unityUIPointerEvent = GazeManager.Instance.UnityUIPointerEvent; + HandleEvent(unityUIPointerEvent, ExecuteEvents.pointerClickHandler); + } + } + + private static readonly ExecuteEvents.EventFunction OnSourceUpEventHandler = + delegate (IInputHandler handler, BaseEventData eventData) + { + InputEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnInputUp(casted); + }; + + public void RaiseSourceUp(IInputSource source, uint sourceId) + { + // Create input event + inputEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(inputEventData, OnSourceUpEventHandler); + + // UI events + if (ShouldSendUnityUiEvents) + { + PointerEventData unityUIPointerEvent = GazeManager.Instance.UnityUIPointerEvent; + HandleEvent(unityUIPointerEvent, ExecuteEvents.pointerUpHandler); + } + } + + private static readonly ExecuteEvents.EventFunction OnSourceDownEventHandler = + delegate (IInputHandler handler, BaseEventData eventData) + { + InputEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnInputDown(casted); + }; + + public void RaiseSourceDown(IInputSource source, uint sourceId) + { + // Create input event + inputEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(inputEventData, OnSourceDownEventHandler); + + // UI events + if (ShouldSendUnityUiEvents) + { + PointerEventData unityUiPointerEvent = GazeManager.Instance.UnityUIPointerEvent; + + unityUiPointerEvent.eligibleForClick = true; + unityUiPointerEvent.delta = Vector2.zero; + unityUiPointerEvent.dragging = false; + unityUiPointerEvent.useDragThreshold = true; + unityUiPointerEvent.pressPosition = unityUiPointerEvent.position; + unityUiPointerEvent.pointerPressRaycast = unityUiPointerEvent.pointerCurrentRaycast; + + HandleEvent(unityUiPointerEvent, ExecuteEvents.pointerDownHandler); + } + } + + private static readonly ExecuteEvents.EventFunction OnSourceDetectedEventHandler = + delegate (ISourceStateHandler handler, BaseEventData eventData) + { + SourceStateEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSourceDetected(casted); + }; + + public void RaiseSourceDetected(IInputSource source, uint sourceId) + { + // Create input event + sourceStateEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceStateEventData, OnSourceDetectedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourceLostEventHandler = + delegate (ISourceStateHandler handler, BaseEventData eventData) + { + SourceStateEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSourceLost(casted); + }; + + public void RaiseSourceLost(IInputSource source, uint sourceId) + { + // Create input event + sourceStateEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceStateEventData, OnSourceLostEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnManipulationStartedEventHandler = + delegate (IManipulationHandler handler, BaseEventData eventData) + { + ManipulationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnManipulationStarted(casted); + }; + + public void RaiseManipulationStarted(IInputSource source, uint sourceId, Vector3 cumulativeDelta) + { + // Create input event + manipulationEventData.Initialize(source, sourceId, cumulativeDelta); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(manipulationEventData, OnManipulationStartedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnManipulationUpdatedEventHandler = + delegate (IManipulationHandler handler, BaseEventData eventData) + { + ManipulationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnManipulationUpdated(casted); + }; + + public void RaiseManipulationUpdated(IInputSource source, uint sourceId, Vector3 cumulativeDelta) + { + // Create input event + manipulationEventData.Initialize(source, sourceId, cumulativeDelta); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(manipulationEventData, OnManipulationUpdatedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnManipulationCompletedEventHandler = + delegate (IManipulationHandler handler, BaseEventData eventData) + { + ManipulationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnManipulationCompleted(casted); + }; + + public void RaiseManipulationCompleted(IInputSource source, uint sourceId, Vector3 cumulativeDelta) + { + // Create input event + manipulationEventData.Initialize(source, sourceId, cumulativeDelta); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(manipulationEventData, OnManipulationCompletedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnManipulationCanceledEventHandler = + delegate (IManipulationHandler handler, BaseEventData eventData) + { + ManipulationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnManipulationCanceled(casted); + }; + + public void RaiseManipulationCanceled(IInputSource source, uint sourceId, Vector3 cumulativeDelta) + { + // Create input event + manipulationEventData.Initialize(source, sourceId, cumulativeDelta); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(manipulationEventData, OnManipulationCanceledEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnHoldStartedEventHandler = + delegate (IHoldHandler handler, BaseEventData eventData) + { + HoldEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnHoldStarted(casted); + }; + + public void RaiseHoldStarted(IInputSource source, uint sourceId) + { + // Create input event + holdEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(holdEventData, OnHoldStartedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnHoldCompletedEventHandler = + delegate (IHoldHandler handler, BaseEventData eventData) + { + HoldEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnHoldCompleted(casted); + }; + + public void RaiseHoldCompleted(IInputSource source, uint sourceId) + { + // Create input event + holdEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(holdEventData, OnHoldCompletedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnHoldCanceledEventHandler = + delegate (IHoldHandler handler, BaseEventData eventData) + { + HoldEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnHoldCanceled(casted); + }; + + public void RaiseHoldCanceled(IInputSource source, uint sourceId) + { + // Create input event + holdEventData.Initialize(source, sourceId); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(holdEventData, OnHoldCanceledEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnNavigationStartedEventHandler = + delegate (INavigationHandler handler, BaseEventData eventData) + { + NavigationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnNavigationStarted(casted); + }; + + public void RaiseNavigationStarted(IInputSource source, uint sourceId, Vector3 normalizedOffset) + { + // Create input event + navigationEventData.Initialize(source, sourceId, normalizedOffset); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(navigationEventData, OnNavigationStartedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnNavigationUpdatedEventHandler = + delegate (INavigationHandler handler, BaseEventData eventData) + { + NavigationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnNavigationUpdated(casted); + }; + + public void RaiseNavigationUpdated(IInputSource source, uint sourceId, Vector3 normalizedOffset) + { + // Create input event + navigationEventData.Initialize(source, sourceId, normalizedOffset); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(navigationEventData, OnNavigationUpdatedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnNavigationCompletedEventHandler = + delegate (INavigationHandler handler, BaseEventData eventData) + { + NavigationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnNavigationCompleted(casted); + }; + + public void RaiseNavigationCompleted(IInputSource source, uint sourceId, Vector3 normalizedOffset) + { + // Create input event + navigationEventData.Initialize(source, sourceId, normalizedOffset); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(navigationEventData, OnNavigationCompletedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnNavigationCanceledEventHandler = + delegate (INavigationHandler handler, BaseEventData eventData) + { + NavigationEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnNavigationCanceled(casted); + }; + + public void RaiseNavigationCanceled(IInputSource source, uint sourceId, Vector3 normalizedOffset) + { + // Create input event + navigationEventData.Initialize(source, sourceId, normalizedOffset); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(navigationEventData, OnNavigationCanceledEventHandler); + } + + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs.meta new file mode 100644 index 0000000..d334b9c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b160d197a8ca1894796ae263bafec0ac +timeCreated: 1471025790 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources.meta new file mode 100644 index 0000000..5ee319b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 625f902511dda214e988a85f9566d616 +folderAsset: yes +timeCreated: 1470879308 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs new file mode 100644 index 0000000..cb85fcc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Base class for an input source. + /// + public abstract class BaseInputSource : MonoBehaviour, IInputSource + { + protected InputManager inputManager; + + protected virtual void Start() + { + inputManager = InputManager.Instance; + } + + public abstract SupportedInputInfo GetSupportedInputInfo(uint sourceId); + + public bool SupportsInputInfo(uint sourceId, SupportedInputInfo inputInfo) + { + return (GetSupportedInputInfo(sourceId) & inputInfo) != 0; + } + + public abstract bool TryGetPosition(uint sourceId, out Vector3 position); + + public abstract bool TryGetOrientation(uint sourceId, out Quaternion orientation); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs.meta new file mode 100644 index 0000000..66ec2ba --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/BaseInputSource.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1a454c1fc56751649ab5a76175b205af +timeCreated: 1471296253 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs new file mode 100644 index 0000000..6a34e43 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs @@ -0,0 +1,410 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Input source for fake hands information, which gives finer details about current hand state and position + /// than the standard GestureRecognizer. + /// + /// This input source only triggers SourceUp and SourceDown for the hands. Everything else is handled by GesturesInput. + [RequireComponent(typeof(ManualHandControl))] + public class EditorHandsInput : BaseInputSource + { + /// + /// Data for a hand. + /// + private class EditorHandData + { + public EditorHandData(uint handId) + { + HandId = handId; + HandPosition = Vector3.zero; + HandDelta = Vector3.zero; + IsFingerDown = false; + IsFingerDownPending = false; + FingerStateChanged = false; + FingerStateUpdateTimer = -1; + ManipulationInProgress = false; + HoldInProgress = false; + CumulativeDelta = Vector3.zero; + } + + public readonly uint HandId; + public Vector3 HandPosition; + public Vector3 HandDelta; + public bool IsFingerDown; + public bool IsFingerDownPending; + public bool FingerStateChanged; + public float FingerStateUpdateTimer; + public float FingerDownStartTime; + public bool ManipulationInProgress; + public bool HoldInProgress; + public Vector3 CumulativeDelta; + } + + private ManualHandControl manualHandControl; + + /// + /// Dispatched each frame that a hand is moving. + /// + public event Action HandMoved; + + /// + /// Delay before a finger pressed is considered. + /// This mitigates fake finger taps that can sometimes be detected while the hand is moving. + /// + private const float FingerPressDelay = 0.07f; + + /// + /// The maximum interval between button down and button up that will result in a clicked event. + /// + private const float MaxClickDuration = 0.5f; + + /// + /// Number of fake hands supported in the editor. + /// + private const int EditorHandsCount = 2; + + /// + /// Array containing the hands data for the two fake hands. + /// + private readonly EditorHandData[] editorHandsData = new EditorHandData[EditorHandsCount]; + + /// + /// Dictionary linking each hand ID to its data. + /// + private readonly Dictionary handIdToData = new Dictionary(4); + private readonly List pendingHandIdDeletes = new List(); + + // HashSets used to be able to quickly update the hands data when hands become visible / not visible. + private readonly HashSet currentHands = new HashSet(); + private readonly HashSet newHands = new HashSet(); + + [SerializeField] + [Tooltip("The total amount of hand movement that needs to happen to signal intent to start a manipulation. This is a distance, but not a distance in any one direction.")] + private float manipulationStartMovementThreshold = 0.03f; + + public override SupportedInputInfo GetSupportedInputInfo(uint sourceId) + { + return SupportedInputInfo.Position; + } + + public override bool TryGetPosition(uint sourceId, out Vector3 position) + { + if (sourceId >= editorHandsData.Length) + { + position = Vector3.zero; + return false; + } + + position = editorHandsData[sourceId].HandPosition; + return true; + } + + public override bool TryGetOrientation(uint sourceId, out Quaternion orientation) + { + // Orientation is not supported by hands. + orientation = Quaternion.identity; + return false; + } + + /// + /// Gets the position delta of the specified hand. + /// + /// ID of the hand to get. + /// The current movement vector of the specified hand. + public Vector3 GetHandDelta(uint handId) + { + if (handId >= editorHandsData.Length) + { + string message = string.Format("GetHandDelta called with invalid hand ID {0}.", handId.ToString()); + throw new ArgumentException(message, "handId"); + } + + return editorHandsData[handId].HandDelta; + } + + /// + /// Gets the pressed state of the specified hand. + /// + /// ID of the hand to get. + /// True if the specified hand is currently in an airtap. + public bool GetFingerState(uint handId) + { + if (handId >= editorHandsData.Length) + { + var message = string.Format("GetFingerState called with invalid hand ID {0}.", handId.ToString()); + throw new ArgumentException(message, "handId"); + } + + return editorHandsData[handId].IsFingerDown; + } + + /// + /// Gets whether the specified hand just started an airtap this frame. + /// + /// ID of the hand to get. + /// True for the first frame of an airtap + public bool GetFingerDown(uint handId) + { + if (handId >= editorHandsData.Length) + { + var message = string.Format("GetFingerDown called with invalid hand ID {0}.", handId.ToString()); + throw new ArgumentException(message, "handId"); + } + + return editorHandsData[handId].IsFingerDown && editorHandsData[handId].FingerStateChanged; + } + + /// + /// Gets whether the specified hand just ended an airtap this frame. + /// + /// ID of the hand to get. + /// True for the first frame of the release of an airtap + public bool GetFingerUp(uint handId) + { + if (handId >= editorHandsData.Length) + { + var message = string.Format("GetFingerUp called with invalid hand ID {0}.", handId.ToString()); + throw new ArgumentException(message, "handId"); + } + + return !editorHandsData[handId].IsFingerDown && editorHandsData[handId].FingerStateChanged; + } + + private void Awake() + { +#if !UNITY_EDITOR + Destroy(this); +#else + manualHandControl = GetComponent(); + for (uint i = 0; i < editorHandsData.Length; i++) + { + editorHandsData[i] = new EditorHandData(i); + } +#endif + } + +#if UNITY_EDITOR + private void Update() + { + newHands.Clear(); + currentHands.Clear(); + + UpdateHandData(); + SendHandVisibilityEvents(); + } +#endif + + /// + /// Update the hand data for the currently detected hands. + /// + private void UpdateHandData() + { + float time; + float deltaTime; + + if (manualHandControl.UseUnscaledTime) + { + time = Time.unscaledTime; + deltaTime = Time.unscaledDeltaTime; + } + else + { + time = Time.time; + deltaTime = Time.deltaTime; + } + + if (manualHandControl.LeftHandInView) + { + GetOrAddHandData(0); + currentHands.Add(0); + + UpdateHandState(manualHandControl.LeftHandSourceState, editorHandsData[0], deltaTime, time); + } + + if (manualHandControl.RightHandInView) + { + GetOrAddHandData(1); + currentHands.Add(1); + UpdateHandState(manualHandControl.RightHandSourceState, editorHandsData[1], deltaTime, time); + } + } + + /// + /// Gets the hand data for the specified hand source if it already exists, otherwise creates it. + /// + /// Hand source for which hands data should be retrieved. + /// The hand data requested. + private EditorHandData GetOrAddHandData(uint sourceId) + { + EditorHandData handData; + if (!handIdToData.TryGetValue(sourceId, out handData)) + { + handData = new EditorHandData(sourceId); + handIdToData.Add(handData.HandId, handData); + newHands.Add(handData.HandId); + } + + return handData; + } + + /// + /// Updates the hand positional information. + /// + /// Hand source to use to update the position. + /// EditorHandData structure to update. + /// Unscaled delta time of last event. + /// Unscaled time of last event. + private void UpdateHandState(DebugInteractionSourceState handSource, EditorHandData editorHandData, float deltaTime, float time) + { + // Update hand position. + Vector3 handPosition; + if (handSource.Properties.Location.TryGetPosition(out handPosition)) + { + editorHandData.HandDelta = handPosition - editorHandData.HandPosition; + editorHandData.HandPosition = handPosition; + } + + // Check for finger presses. + if (handSource.Pressed != editorHandData.IsFingerDownPending) + { + editorHandData.IsFingerDownPending = handSource.Pressed; + editorHandData.FingerStateUpdateTimer = FingerPressDelay; + } + + // Finger presses are delayed to mitigate issue with hand position shifting during air tap. + editorHandData.FingerStateChanged = false; + if (editorHandData.FingerStateUpdateTimer > 0) + { + editorHandData.FingerStateUpdateTimer -= deltaTime; + if (editorHandData.FingerStateUpdateTimer <= 0) + { + editorHandData.IsFingerDown = editorHandData.IsFingerDownPending; + editorHandData.FingerStateChanged = true; + if (editorHandData.IsFingerDown) + { + editorHandData.FingerDownStartTime = time; + } + } + } + + SendHandStateEvents(editorHandData, time); + } + + /// + /// Sends the events for hand state changes. + /// + /// Hand data for which events should be sent. + /// Unscaled time of last event. + private void SendHandStateEvents(EditorHandData editorHandData, float time) + { + // Hand moved event. + if (editorHandData.HandDelta.sqrMagnitude > 0) + { + HandMoved.RaiseEvent(this, editorHandData.HandId); + } + + // If the finger state has just changed to be down vs up. + if (editorHandData.FingerStateChanged) + { + // New down presses are straightforward - fire input down and be on your way. + if (editorHandData.IsFingerDown) + { + inputManager.RaiseSourceDown(this, editorHandData.HandId); + editorHandData.CumulativeDelta = Vector3.zero; + } + // New up presses require sending different events depending on whether it's also a click, hold, or manipulation. + else + { + // A gesture is always either a click, a hold or a manipulation. + if (editorHandData.ManipulationInProgress) + { + inputManager.RaiseManipulationCompleted(this, editorHandData.HandId, editorHandData.CumulativeDelta); + editorHandData.ManipulationInProgress = false; + } + // Clicks and holds are based on time, and both are overruled by manipulations. + else if (editorHandData.HoldInProgress) + { + inputManager.RaiseHoldCompleted(this, editorHandData.HandId); + editorHandData.HoldInProgress = false; + } + else + { + // We currently only support single taps in editor. + inputManager.RaiseInputClicked(this, editorHandData.HandId, 1); + } + + inputManager.RaiseSourceUp(this, editorHandData.HandId); + } + } + // If the finger state hasn't changed, and the finger is down, that means if calculations need to be done + // nothing might change, or it might trigger a hold or a manipulation (or a hold and then a manipulation). + else if (editorHandData.IsFingerDown) + { + editorHandData.CumulativeDelta += editorHandData.HandDelta; + + if (!editorHandData.ManipulationInProgress) + { + // Manipulations are triggered by the amount of movement since the finger was pressed down. + if (editorHandData.CumulativeDelta.magnitude > manipulationStartMovementThreshold) + { + // Starting a manipulation will cancel an existing hold. + if (editorHandData.HoldInProgress) + { + inputManager.RaiseHoldCanceled(this, editorHandData.HandId); + editorHandData.HoldInProgress = false; + } + + inputManager.RaiseManipulationStarted(this, editorHandData.HandId, editorHandData.CumulativeDelta); + editorHandData.ManipulationInProgress = true; + } + // Holds are triggered by time. + else if (!editorHandData.HoldInProgress && (time - editorHandData.FingerDownStartTime >= MaxClickDuration)) + { + inputManager.RaiseHoldStarted(this, editorHandData.HandId); + editorHandData.HoldInProgress = true; + } + } + else + { + inputManager.RaiseManipulationUpdated(this, editorHandData.HandId, editorHandData.CumulativeDelta); + } + } + } + + /// + /// Sends the events for hand visibility changes. + /// + private void SendHandVisibilityEvents() + { + // Send event for new hands that were added. + foreach (uint newHand in newHands) + { + inputManager.RaiseSourceDetected(this, newHand); + } + + // Send event for hands that are no longer visible and remove them from our dictionary. + foreach (uint existingHand in handIdToData.Keys) + { + if (!currentHands.Contains(existingHand)) + { + pendingHandIdDeletes.Add(existingHand); + inputManager.RaiseSourceLost(this, existingHand); + } + } + + // Remove pending hand IDs. + for (int i = 0; i < pendingHandIdDeletes.Count; ++i) + { + handIdToData.Remove(pendingHandIdDeletes[i]); + } + pendingHandIdDeletes.Clear(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs.meta new file mode 100644 index 0000000..8f70184 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/EditorHandsInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c527ac8839879014ab405b6cb5ee39e6 +timeCreated: 1470932425 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs new file mode 100644 index 0000000..18b09cf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs @@ -0,0 +1,229 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.VR.WSA.Input; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Input source for gestures information from the WSA APIs, which gives access to various system-supported gestures. + /// This is a wrapper on top of GestureRecognizer. + /// + public class GesturesInput : BaseInputSource + { + // This enumeration gives the manager two different ways to handle the recognizer. Both will + // set up the recognizer. The first causes the recognizer to start + // immediately. The second allows the recognizer to be manually started at a later time. + public enum RecognizerStartBehavior { AutoStart, ManualStart }; + + [Tooltip("Whether the recognizer should be activated on start.")] + public RecognizerStartBehavior RecognizerStart; + + [Tooltip("Set to true to use the use rails (guides) for the navigation gesture, as opposed to full 3D navigation.")] + public bool UseRailsNavigation = false; + + protected GestureRecognizer gestureRecognizer; + protected GestureRecognizer navigationGestureRecognizer; + + protected override void Start() + { + base.Start(); + + gestureRecognizer = new GestureRecognizer(); + gestureRecognizer.TappedEvent += OnTappedEvent; + + gestureRecognizer.HoldStartedEvent += OnHoldStartedEvent; + gestureRecognizer.HoldCompletedEvent += OnHoldCompletedEvent; + gestureRecognizer.HoldCanceledEvent += OnHoldCanceledEvent; + + gestureRecognizer.ManipulationStartedEvent += OnManipulationStartedEvent; + gestureRecognizer.ManipulationUpdatedEvent += OnManipulationUpdatedEvent; + gestureRecognizer.ManipulationCompletedEvent += OnManipulationCompletedEvent; + gestureRecognizer.ManipulationCanceledEvent += OnManipulationCanceledEvent; + + gestureRecognizer.SetRecognizableGestures(GestureSettings.Tap | + GestureSettings.ManipulationTranslate | + GestureSettings.Hold); + + // We need a separate gesture recognizer for navigation, since it isn't compatible with manipulation + navigationGestureRecognizer = new GestureRecognizer(); + + navigationGestureRecognizer.NavigationStartedEvent += OnNavigationStartedEvent; + navigationGestureRecognizer.NavigationUpdatedEvent += OnNavigationUpdatedEvent; + navigationGestureRecognizer.NavigationCompletedEvent += OnNavigationCompletedEvent; + navigationGestureRecognizer.NavigationCanceledEvent += OnNavigationCanceledEvent; + + if (UseRailsNavigation) + { + navigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationRailsX | + GestureSettings.NavigationRailsY | + GestureSettings.NavigationRailsZ); + } + else + { + navigationGestureRecognizer.SetRecognizableGestures(GestureSettings.NavigationX | + GestureSettings.NavigationY | + GestureSettings.NavigationZ); + } + + if (RecognizerStart == RecognizerStartBehavior.AutoStart) + { + gestureRecognizer.StartCapturingGestures(); + navigationGestureRecognizer.StartCapturingGestures(); + } + } + + protected virtual void OnDestroy() + { + StopGestureRecognizer(); + if (gestureRecognizer != null) + { + gestureRecognizer.TappedEvent -= OnTappedEvent; + + gestureRecognizer.HoldStartedEvent -= OnHoldStartedEvent; + gestureRecognizer.HoldCompletedEvent -= OnHoldCompletedEvent; + gestureRecognizer.HoldCanceledEvent -= OnHoldCanceledEvent; + + gestureRecognizer.ManipulationStartedEvent -= OnManipulationStartedEvent; + gestureRecognizer.ManipulationUpdatedEvent -= OnManipulationUpdatedEvent; + gestureRecognizer.ManipulationCompletedEvent -= OnManipulationCompletedEvent; + gestureRecognizer.ManipulationCanceledEvent -= OnManipulationCanceledEvent; + + gestureRecognizer.Dispose(); + } + if (navigationGestureRecognizer != null) + { + navigationGestureRecognizer.NavigationStartedEvent -= OnNavigationStartedEvent; + navigationGestureRecognizer.NavigationUpdatedEvent -= OnNavigationUpdatedEvent; + navigationGestureRecognizer.NavigationCompletedEvent -= OnNavigationCompletedEvent; + navigationGestureRecognizer.NavigationCanceledEvent -= OnNavigationCanceledEvent; + + navigationGestureRecognizer.Dispose(); + } + } + + protected virtual void OnDisable() + { + StopGestureRecognizer(); + } + + protected virtual void OnEnable() + { + if (RecognizerStart == RecognizerStartBehavior.AutoStart) + { + StartGestureRecognizer(); + } + } + + /// + /// Make sure the gesture recognizer is off, then start it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StartGestureRecognizer() + { + if (gestureRecognizer != null && !gestureRecognizer.IsCapturingGestures()) + { + gestureRecognizer.StartCapturingGestures(); + } + if (navigationGestureRecognizer != null && !navigationGestureRecognizer.IsCapturingGestures()) + { + navigationGestureRecognizer.StartCapturingGestures(); + } + } + + /// + /// Make sure the gesture recognizer is on, then stop it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StopGestureRecognizer() + { + if (gestureRecognizer != null && gestureRecognizer.IsCapturingGestures()) + { + gestureRecognizer.StopCapturingGestures(); + } + if (navigationGestureRecognizer != null && navigationGestureRecognizer.IsCapturingGestures()) + { + navigationGestureRecognizer.StopCapturingGestures(); + } + } + + protected void OnTappedEvent(InteractionSourceKind source, int tapCount, Ray headRay) + { + inputManager.RaiseInputClicked(this, 0, tapCount); + } + + protected void OnHoldStartedEvent(InteractionSourceKind source, Ray headray) + { + inputManager.RaiseHoldStarted(this, 0); + } + + protected void OnHoldCanceledEvent(InteractionSourceKind source, Ray headray) + { + inputManager.RaiseHoldCanceled(this, 0); + } + + protected void OnHoldCompletedEvent(InteractionSourceKind source, Ray headray) + { + inputManager.RaiseHoldCompleted(this, 0); + } + + protected void OnManipulationStartedEvent(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray) + { + inputManager.RaiseManipulationStarted(this, 0, cumulativeDelta); + } + + protected void OnManipulationUpdatedEvent(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray) + { + inputManager.RaiseManipulationUpdated(this, 0, cumulativeDelta); + } + + protected void OnManipulationCompletedEvent(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray) + { + inputManager.RaiseManipulationCompleted(this, 0, cumulativeDelta); + } + + protected void OnManipulationCanceledEvent(InteractionSourceKind source, Vector3 cumulativeDelta, Ray headray) + { + inputManager.RaiseManipulationCanceled(this, 0, cumulativeDelta); + } + + protected void OnNavigationStartedEvent(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray) + { + inputManager.RaiseNavigationStarted(this, 0, normalizedOffset); + } + + protected void OnNavigationUpdatedEvent(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray) + { + inputManager.RaiseNavigationUpdated(this, 0, normalizedOffset); + } + + protected void OnNavigationCompletedEvent(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray) + { + inputManager.RaiseNavigationCompleted(this, 0, normalizedOffset); + } + + protected void OnNavigationCanceledEvent(InteractionSourceKind source, Vector3 normalizedOffset, Ray headray) + { + inputManager.RaiseNavigationCanceled(this, 0, normalizedOffset); + } + + public override bool TryGetPosition(uint sourceId, out Vector3 position) + { + position = Vector3.zero; + return false; + } + + public override bool TryGetOrientation(uint sourceId, out Quaternion orientation) + { + orientation = Quaternion.identity; + return false; + } + + public override SupportedInputInfo GetSupportedInputInfo(uint sourceId) + { + return SupportedInputInfo.None; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs.meta new file mode 100644 index 0000000..57a14da --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/GesturesInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d40781677294a0e4caffa3460012ae41 +timeCreated: 1470932425 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs new file mode 100644 index 0000000..e97ebf6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Flags used to indicate which input information is supported by an input source. + /// + [Flags] + public enum SupportedInputInfo + { + None = 0, + Position = 1, + Orientation = 2, + } + + /// + /// Interface for an input source. + /// An input source can be anything that a user can use to interact with a device. + /// + public interface IInputSource + { + /// + /// Returns the input info that that the input source can provide. + /// + SupportedInputInfo GetSupportedInputInfo(uint sourceId); + + /// + /// Returns whether the input source supports the specified input info type. + /// + /// ID of the source. + /// Input info type that we want to get information about. + bool SupportsInputInfo(uint sourceId, SupportedInputInfo inputInfo); + + /// + /// Returns the position of the input source, if available. + /// Not all input sources have positional information. + /// + /// ID of the source for which the position should be retrieved. + /// Out parameter filled with the position if available, otherwise the zero vector. + /// True if a position was retrieved, false if not. + bool TryGetPosition(uint sourceId, out Vector3 position); + + /// + /// Returns the orientation of the input source, if available. + /// Not all input sources have orientation information. + /// + /// ID of the source for which the position should be retrieved. + /// Out parameter filled with the orientation if available, otherwise the zero vector. + /// True if an orientation was retrieved, false if not. + bool TryGetOrientation(uint sourceId, out Quaternion orientation); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs.meta new file mode 100644 index 0000000..5a79a95 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/IInputSource.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 17aa48f2d64d22c4d8a6c63e08a13cd4 +timeCreated: 1470932424 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs new file mode 100644 index 0000000..492bbbd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.VR.WSA.Input; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Input source for raw interactions sources information, which gives finer details about current source state and position + /// than the standard GestureRecognizer. + /// This mostly allows users to access the source up/down and detected/lost events, + /// which are not communicated as part of standard Windows gestures. + /// + /// + /// This input source only triggers SourceUp/SourceDown and SourceDetected/SourceLost. + /// Everything else is handled by GesturesInput. + /// + public class RawInteractionSourcesInput : BaseInputSource + { + /// + /// Data for an interaction source. + /// + private class SourceData + { + public SourceData(uint sourceId) + { + SourceId = sourceId; + HasPosition = false; + SourcePosition = Vector3.zero; + IsSourceDown = false; + IsSourceDownPending = false; + SourceStateChanged = false; + SourceStateUpdateTimer = -1; + } + + public readonly uint SourceId; + public bool HasPosition; + public Vector3 SourcePosition; + public bool IsSourceDown; + public bool IsSourceDownPending; + public bool SourceStateChanged; + public float SourceStateUpdateTimer; + } + + /// + /// Delay before a source press is considered. + /// This mitigates fake source taps that can sometimes be detected while the input source is moving. + /// + private const float SourcePressDelay = 0.07f; + + [Tooltip("Use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + /// + /// Dictionary linking each source ID to its data. + /// + private readonly Dictionary sourceIdToData = new Dictionary(4); + private readonly List pendingSourceIdDeletes = new List(); + + // HashSets used to be able to quickly update the sources data when they become visible / not visible + private readonly HashSet currentSources = new HashSet(); + private readonly HashSet newSources = new HashSet(); + + public override SupportedInputInfo GetSupportedInputInfo(uint sourceId) + { + SupportedInputInfo retVal = SupportedInputInfo.None; + + SourceData sourceData; + if (sourceIdToData.TryGetValue(sourceId, out sourceData)) + { + if (sourceData.HasPosition) + { + retVal |= SupportedInputInfo.Position; + } + } + + return retVal; + } + + public override bool TryGetPosition(uint sourceId, out Vector3 position) + { + SourceData sourceData; + if (sourceIdToData.TryGetValue(sourceId, out sourceData)) + { + if (sourceData.HasPosition) + { + position = sourceData.SourcePosition; + return true; + } + } + + // Else, the source doesn't have positional information + position = Vector3.zero; + return false; + } + + public override bool TryGetOrientation(uint sourceId, out Quaternion orientation) + { + // Orientation is not supported by any Windows interaction sources + orientation = Quaternion.identity; + return false; + } + + private void Update() + { + newSources.Clear(); + currentSources.Clear(); + + UpdateSourceData(); + SendSourceVisibilityEvents(); + } + + /// + /// Update the source data for the currently detected sources. + /// + private void UpdateSourceData() + { + // Poll for updated reading from hands + InteractionSourceState[] sourceStates = InteractionManager.GetCurrentReading(); + if (sourceStates != null) + { + for (var i = 0; i < sourceStates.Length; ++i) + { + InteractionSourceState handSource = sourceStates[i]; + SourceData sourceData = GetOrAddSourceData(handSource.source); + currentSources.Add(handSource.source.id); + + UpdateSourceState(handSource, sourceData); + } + } + } + + /// + /// Gets the source data for the specified interaction source if it already exists, otherwise creates it. + /// + /// Interaction source for which data should be retrieved. + /// The source data requested. + private SourceData GetOrAddSourceData(InteractionSource interactionSource) + { + SourceData sourceData; + if (!sourceIdToData.TryGetValue(interactionSource.id, out sourceData)) + { + sourceData = new SourceData(interactionSource.id); + sourceIdToData.Add(sourceData.SourceId, sourceData); + newSources.Add(sourceData.SourceId); + } + + return sourceData; + } + + /// + /// Updates the source positional information. + /// + /// Interaction source to use to update the position. + /// SourceData structure to update. + private void UpdateSourceState(InteractionSourceState interactionSource, SourceData sourceData) + { + // Update source position + Vector3 sourcePosition; + if (interactionSource.properties.location.TryGetPosition(out sourcePosition)) + { + sourceData.HasPosition = true; + sourceData.SourcePosition = sourcePosition; + } + + // Check for source presses + if (interactionSource.pressed != sourceData.IsSourceDownPending) + { + sourceData.IsSourceDownPending = interactionSource.pressed; + sourceData.SourceStateUpdateTimer = SourcePressDelay; + } + + // Source presses are delayed to mitigate issue with hand position shifting during air tap + sourceData.SourceStateChanged = false; + if (sourceData.SourceStateUpdateTimer >= 0) + { + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + sourceData.SourceStateUpdateTimer -= deltaTime; + if (sourceData.SourceStateUpdateTimer < 0) + { + sourceData.IsSourceDown = sourceData.IsSourceDownPending; + sourceData.SourceStateChanged = true; + } + } + + SendSourceStateEvents(sourceData); + } + + /// + /// Sends the events for source state changes. + /// + /// Source data for which events should be sent. + private void SendSourceStateEvents(SourceData sourceData) + { + // Source pressed/released events + if (sourceData.SourceStateChanged) + { + if (sourceData.IsSourceDown) + { + inputManager.RaiseSourceDown(this, sourceData.SourceId); + } + else + { + inputManager.RaiseSourceUp(this, sourceData.SourceId); + } + } + } + + /// + /// Sends the events for source visibility changes. + /// + private void SendSourceVisibilityEvents() + { + // Send event for new sources that were added + foreach (uint newSource in newSources) + { + inputManager.RaiseSourceDetected(this, newSource); + } + + // Send event for sources that are no longer visible and remove them from our dictionary + foreach (uint existingSource in sourceIdToData.Keys) + { + if (!currentSources.Contains(existingSource)) + { + pendingSourceIdDeletes.Add(existingSource); + inputManager.RaiseSourceLost(this, existingSource); + } + } + + // Remove pending source IDs + for (int i = 0; i < pendingSourceIdDeletes.Count; ++i) + { + sourceIdToData.Remove(pendingSourceIdDeletes[i]); + } + pendingSourceIdDeletes.Clear(); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs.meta new file mode 100644 index 0000000..1e3b3dc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/InputSources/RawInteractionSourcesInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 73383145d055bef478097c80c114d2a4 +timeCreated: 1470932424 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions.meta new file mode 100644 index 0000000..1a6093a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 95d2ce0a001b47e408d513b5017f2899 +folderAsset: yes +timeCreated: 1471397343 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs new file mode 100644 index 0000000..c7a42a0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs @@ -0,0 +1,316 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Component that allows dragging an object with your hand on HoloLens. + /// Dragging is done by calculating the angular delta and z-delta between the current and previous hand positions, + /// and then repositioning the object based on that. + /// + public class HandDraggable : MonoBehaviour, + IFocusable, + IInputHandler, + ISourceStateHandler + { + /// + /// Event triggered when dragging starts. + /// + public event Action StartedDragging; + + /// + /// Event triggered when dragging stops. + /// + public event Action StoppedDragging; + + [Tooltip("Transform that will be dragged. Defaults to the object of the component.")] + public Transform HostTransform; + + [Tooltip("Scale by which hand movement in z is multipled to move the dragged object.")] + public float DistanceScale = 2f; + + public enum RotationModeEnum + { + Default, + LockObjectRotation, + OrientTowardUser, + OrientTowardUserAndKeepUpright + } + + public RotationModeEnum RotationMode = RotationModeEnum.Default; + + public bool IsDraggingEnabled = true; + + private Camera mainCamera; + private bool isDragging; + private bool isGazed; + private Vector3 objRefForward; + private Vector3 objRefUp; + private float objRefDistance; + private Quaternion gazeAngularOffset; + private float handRefDistance; + private Vector3 objRefGrabPoint; + + private Vector3 draggingPosition; + private Quaternion draggingRotation; + + private IInputSource currentInputSource = null; + private uint currentInputSourceId; + + private void Start() + { + if (HostTransform == null) + { + HostTransform = transform; + } + + mainCamera = Camera.main; + } + + private void OnDestroy() + { + if (isDragging) + { + StopDragging(); + } + + if (isGazed) + { + OnFocusExit(); + } + } + + private void Update() + { + if (IsDraggingEnabled && isDragging) + { + UpdateDragging(); + } + } + + /// + /// Starts dragging the object. + /// + public void StartDragging() + { + if (!IsDraggingEnabled) + { + return; + } + + if (isDragging) + { + return; + } + + // Add self as a modal input handler, to get all inputs during the manipulation + InputManager.Instance.PushModalInputHandler(gameObject); + + isDragging = true; + //GazeCursor.Instance.SetState(GazeCursor.State.Move); + //GazeCursor.Instance.SetTargetObject(HostTransform); + + Vector3 gazeHitPosition = GazeManager.Instance.HitInfo.point; + Vector3 handPosition; + currentInputSource.TryGetPosition(currentInputSourceId, out handPosition); + + Vector3 pivotPosition = GetHandPivotPosition(); + handRefDistance = Vector3.Magnitude(handPosition - pivotPosition); + objRefDistance = Vector3.Magnitude(gazeHitPosition - pivotPosition); + + Vector3 objForward = HostTransform.forward; + Vector3 objUp = HostTransform.up; + + // Store where the object was grabbed from + objRefGrabPoint = mainCamera.transform.InverseTransformDirection(HostTransform.position - gazeHitPosition); + + Vector3 objDirection = Vector3.Normalize(gazeHitPosition - pivotPosition); + Vector3 handDirection = Vector3.Normalize(handPosition - pivotPosition); + + objForward = mainCamera.transform.InverseTransformDirection(objForward); // in camera space + objUp = mainCamera.transform.InverseTransformDirection(objUp); // in camera space + objDirection = mainCamera.transform.InverseTransformDirection(objDirection); // in camera space + handDirection = mainCamera.transform.InverseTransformDirection(handDirection); // in camera space + + objRefForward = objForward; + objRefUp = objUp; + + // Store the initial offset between the hand and the object, so that we can consider it when dragging + gazeAngularOffset = Quaternion.FromToRotation(handDirection, objDirection); + draggingPosition = gazeHitPosition; + + StartedDragging.RaiseEvent(); + } + + /// + /// Gets the pivot position for the hand, which is approximated to the base of the neck. + /// + /// Pivot position for the hand. + private Vector3 GetHandPivotPosition() + { + Vector3 pivot = Camera.main.transform.position + new Vector3(0, -0.2f, 0) - Camera.main.transform.forward * 0.2f; // a bit lower and behind + return pivot; + } + + /// + /// Enables or disables dragging. + /// + /// Indicates whether dragging shoudl be enabled or disabled. + public void SetDragging(bool isEnabled) + { + if (IsDraggingEnabled == isEnabled) + { + return; + } + + IsDraggingEnabled = isEnabled; + + if (isDragging) + { + StopDragging(); + } + } + + /// + /// Update the position of the object being dragged. + /// + private void UpdateDragging() + { + Vector3 newHandPosition; + currentInputSource.TryGetPosition(currentInputSourceId, out newHandPosition); + + Vector3 pivotPosition = GetHandPivotPosition(); + + Vector3 newHandDirection = Vector3.Normalize(newHandPosition - pivotPosition); + + newHandDirection = mainCamera.transform.InverseTransformDirection(newHandDirection); // in camera space + Vector3 targetDirection = Vector3.Normalize(gazeAngularOffset * newHandDirection); + targetDirection = mainCamera.transform.TransformDirection(targetDirection); // back to world space + + float currenthandDistance = Vector3.Magnitude(newHandPosition - pivotPosition); + + float distanceRatio = currenthandDistance / handRefDistance; + float distanceOffset = distanceRatio > 0 ? (distanceRatio - 1f) * DistanceScale : 0; + float targetDistance = objRefDistance + distanceOffset; + + draggingPosition = pivotPosition + (targetDirection * targetDistance); + + if (RotationMode == RotationModeEnum.OrientTowardUser || RotationMode == RotationModeEnum.OrientTowardUserAndKeepUpright) + { + draggingRotation = Quaternion.LookRotation(HostTransform.position - pivotPosition); + } + else if (RotationMode == RotationModeEnum.LockObjectRotation) + { + draggingRotation = HostTransform.rotation; + } + else // RotationModeEnum.Default + { + Vector3 objForward = mainCamera.transform.TransformDirection(objRefForward); // in world space + Vector3 objUp = mainCamera.transform.TransformDirection(objRefUp); // in world space + draggingRotation = Quaternion.LookRotation(objForward, objUp); + } + + // Apply Final Position + HostTransform.position = draggingPosition + mainCamera.transform.TransformDirection(objRefGrabPoint); + // Apply Final Rotation + HostTransform.rotation = draggingRotation; + if (RotationMode == RotationModeEnum.OrientTowardUserAndKeepUpright) + { + Quaternion upRotation = Quaternion.FromToRotation(HostTransform.up, Vector3.up); + HostTransform.rotation = upRotation * HostTransform.rotation; + } + } + + /// + /// Stops dragging the object. + /// + public void StopDragging() + { + if (!isDragging) + { + return; + } + + // Remove self as a modal input handler + InputManager.Instance.PopModalInputHandler(); + + isDragging = false; + currentInputSource = null; + StoppedDragging.RaiseEvent(); + } + + public void OnFocusEnter() + { + if (!IsDraggingEnabled) + { + return; + } + + if (isGazed) + { + return; + } + + isGazed = true; + } + + public void OnFocusExit() + { + if (!IsDraggingEnabled) + { + return; + } + + if (!isGazed) + { + return; + } + + isGazed = false; + } + + public void OnInputUp(InputEventData eventData) + { + if (currentInputSource != null && + eventData.SourceId == currentInputSourceId) + { + StopDragging(); + } + } + + public void OnInputDown(InputEventData eventData) + { + if (isDragging) + { + // We're already handling drag input, so we can't start a new drag operation. + return; + } + + if (!eventData.InputSource.SupportsInputInfo(eventData.SourceId, SupportedInputInfo.Position)) + { + // The input source must provide positional data for this script to be usable + return; + } + + currentInputSource = eventData.InputSource; + currentInputSourceId = eventData.SourceId; + StartDragging(); + } + + public void OnSourceDetected(SourceStateEventData eventData) + { + // Nothing to do + } + + public void OnSourceLost(SourceStateEventData eventData) + { + if (currentInputSource != null && eventData.SourceId == currentInputSourceId) + { + StopDragging(); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs.meta new file mode 100644 index 0000000..0273e67 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Interactions/HandDraggable.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7d5a0a60fbe897549ad0bfe2039f12b6 +timeCreated: 1463778456 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs new file mode 100644 index 0000000..011fa80 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs @@ -0,0 +1,237 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// KeyboardManager allows other scripts to register for (or inject) key events. + /// + public class KeyboardManager : Singleton + { + public enum KeyEvent + { + /// + /// This event is sent once when a key is pressed. + /// + KeyDown = 0, + + /// + /// This event is sent repeatedly while a key is held down. + /// + KeyHeld, + + /// + /// This event is sent once when a key is released. + /// + KeyUp + }; + + /// + /// Simple struct that holds a KeyCode and KeyEvent + /// + public struct KeyCodeEventPair + { + public KeyCode KeyCode; + public KeyEvent KeyEvent; + + public KeyCodeEventPair(KeyCode keyCode, KeyEvent keyEvent) + { + this.KeyCode = keyCode; + this.KeyEvent = keyEvent; + } + + public override bool Equals(object obj) + { + if (!(obj is KeyCodeEventPair)) + { + return false; + } + + KeyCodeEventPair compare = (KeyCodeEventPair)obj; + + return KeyCode == compare.KeyCode && KeyEvent == compare.KeyEvent; + } + + public override int GetHashCode() + { + return (KeyCode.GetHashCode() * 100) ^ KeyEvent.GetHashCode(); + } + }; + + /// + /// KeyboardRegistration is returned by RegisterKeyEvent. Calling code should maintain a reference + /// to the object while the registration should function, then call Dispose on it to unregister. + /// + public class KeyboardRegistration : IDisposable + { + private readonly KeyCodeEventPair keyCodeEvent; + private readonly KeyboardCallback callback; + private bool isRegistered; + + public KeyboardRegistration(KeyCodeEventPair keyCodeEvent, KeyboardCallback callback) + { + this.keyCodeEvent = keyCodeEvent; + this.callback = callback; + isRegistered = true; + } + + public void Dispose() + { + if (isRegistered) + { + var keyboard = KeyboardManager.Instance; + if (keyboard) + { + keyboard.UnregisterKeyEvent(keyCodeEvent, callback); + } + isRegistered = false; + } + } + } + + /// + /// Delegate that is called when a registered keyboard event is detected + /// + /// The KeyCodeEventPair corresponding to the detected input + public delegate void KeyboardCallback(KeyCodeEventPair keyCodeEvent); + + /// + /// A dictionary containing a list of callbacks for each active KeyCodeEventPair + /// + private Dictionary> registeredCallbacks + = new Dictionary>(); + + /// + /// The detected input events. This is done to avoid callbacks interfering with the traversal of the dictionary. + /// + private List detectedKeyEvents = new List(); + + /// + /// The input events that are being processed. Only used by Update to avoid multithreading issues. + /// + private List pendingKeyEvents = new List(); + + private void Update() + { + lock (detectedKeyEvents) + { + pendingKeyEvents.AddRange(detectedKeyEvents); + detectedKeyEvents.Clear(); + } + + // Check for all keys that are registered for events + foreach (KeyCodeEventPair keyCheck in registeredCallbacks.Keys) + { + bool eventTriggered = false; + + switch (keyCheck.KeyEvent) + { + case KeyEvent.KeyHeld: + eventTriggered = Input.GetKey(keyCheck.KeyCode); + break; + case KeyEvent.KeyDown: + eventTriggered = Input.GetKeyDown(keyCheck.KeyCode); + break; + case KeyEvent.KeyUp: + eventTriggered = Input.GetKeyUp(keyCheck.KeyCode); + break; + } + + if (eventTriggered) + { + pendingKeyEvents.Add(keyCheck); + } + } + + for (int eventIndex = 0; eventIndex < pendingKeyEvents.Count; eventIndex++) + { + HandleKeyEvent(pendingKeyEvents[eventIndex]); + } + pendingKeyEvents.Clear(); + } + + /// + /// Unregister a specified KeyCodeEventPair and KeyboardCallback. + /// + private void UnregisterKeyEvent(KeyCodeEventPair keyCodeEvent, KeyboardCallback callback) + { + if (registeredCallbacks.ContainsKey(keyCodeEvent)) + { + List callbackList = registeredCallbacks[keyCodeEvent]; + + if (callbackList.Remove(callback)) + { + // remove the list from the dictionary if no callbacks are left + if (callbackList.Count == 0) + { + registeredCallbacks.Remove(keyCodeEvent); + } + } + } + } + + /// + /// Invoke any registered callbacks for the specified KeyCodeEventPair input. + /// + private void HandleKeyEvent(KeyCodeEventPair keyEventPair) + { + List callbackList; + + if (registeredCallbacks.TryGetValue(keyEventPair, out callbackList)) + { + // Create a copy of the list in case a listener unregisters. + KeyboardCallback[] callbacksCopy = callbackList.ToArray(); + foreach (KeyboardCallback callback in callbacksCopy) + { + callback(keyEventPair); + } + } + } + + #region Public Functions + /// + /// Register to get a callback whenever the specified KeyCodeEventPair input is detected + /// + public KeyboardRegistration RegisterKeyEvent(KeyCodeEventPair keycodeEvent, KeyboardCallback callback) + { + if (!registeredCallbacks.ContainsKey(keycodeEvent)) + { + registeredCallbacks.Add(keycodeEvent, new List()); + } + + // Don't register the same callback more than once + List callbackList = registeredCallbacks[keycodeEvent]; + for (int i = 0; i < callbackList.Count; i++) + { + if (callbackList[i] == callback) + { + // Duplicate + Debug.LogError("Ignoring duplicate keyboard callback."); + return null; + } + } + + callbackList.Add(callback); + + // return a registration object, which must be referenced until it's disposed to unregister + return new KeyboardRegistration(keycodeEvent, callback); + } + + /// + /// Queue an artificial keyboard event to be handled on the next Update. + /// (This can be called from another thread.) + /// + public void InjectKeyboardEvent(KeyCodeEventPair keycodeEvent) + { + lock (detectedKeyEvents) + { + detectedKeyEvents.Add(keycodeEvent); + } + } + #endregion + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs.meta new file mode 100644 index 0000000..2a9e879 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/KeyboardManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d16c92d59af8a9a4a9a0db824132b067 +timeCreated: 1467670142 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone.meta new file mode 100644 index 0000000..23d1ff3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8262c9fb55668ff4ab65697a089e64ae +folderAsset: yes +timeCreated: 1474471005 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs new file mode 100644 index 0000000..a2569c3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs @@ -0,0 +1,195 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Runtime.InteropServices; +using UnityEngine; +using System.Text; + +namespace HoloToolkit.Unity.InputModule +{ + public class MicStream + { + // This class replaces Unity's Microphone object + // This class is made for HoloLens mic stream selection, but should work well on all windows 10 devices + // chooses from one of three possible microphone modes on HoloLens + // There is an example of how to use this script in HoloToolkit\Input\Tests\Scripts\MicStreamDemo.cs + + // Streams: LOW_QUALITY_VOICE is optimized for speech analysis, COMMUNICATIONS is higher quality voice and is probably preferred + // ROOM_CAPTURE tries to get the sounds of the room more than the voice of the suer + // can only be set on initialization + public enum StreamCategory { LOW_QUALITY_VOICE, HIGH_QUALITY_VOICE, ROOM_CAPTURE } + + public enum ErrorCodes { ALREADY_RUNNING = -10, NO_AUDIO_DEVICE, NO_INPUT_DEVICE, ALREADY_RECORDING, GRAPH_NOT_EXIST, CHANNEL_COUNT_MISMATCH, FILE_CREATION_PERMISSION_ERROR, NOT_ENOUGH_DATA, NEED_ENABLED_MIC_CAPABILITY }; + + const int MAX_PATH = 260; // 260 is maximum path length in windows, to be returned when we MicStopRecording + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] // If included in MicStartStream, this callback will be triggered when audio data is ready. This is not the preferred method for Game Engines and can probably be ignored. + public delegate void LiveMicCallback(); + + /// + /// Called before calling MicStartStream or MicstartRecording to initialize microphone + /// + /// One of the entries in the StreamCategory enumeratio + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicInitializeDefault(int category); + + /// + /// Called before calling MicStartStream or MicstartRecording to initialize microphone + /// + /// One of the entries in the StreamCategory enumeration + /// Desired number of samples per second + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicInitializeCustomRate(int category, int samplerate); + + /// + /// Call this to start receiving data from a microphone. Then, each frame, call MicGetFrame. + /// + /// If true, all data will stay in the queue, if the client code is running behind. This can lead to significant audio lag, so is not appropriate for low-latency situations like reall-time voice chat. + /// If true, the audio from the microphone will be played through your speakers. + /// Optional (can be null): This callback will be called when data is ready for MicGetFrame + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicStartStream(bool keepData, bool previewOnDevice, LiveMicCallback micsignal); + + /// + /// Call this to start receiving data from a microphone. Then, each frame, call MicGetFrame. + /// + /// If true, all data will stay in the queue, if the client code is running behind. This can lead to significant audio lag, so is not appropriate for low-latency situations like reall-time voice chat. + /// If true, the audio from the microphone will be played through your speakers. + /// error code or 0 + public static int MicStartStream(bool keepData, bool previewOnDevice) + { + return MicStartStream(keepData, previewOnDevice, null); + } + + /// + /// Shuts down the connection to the microphone. Data will not longer be received from the microphone. + /// + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicStopStream(); + + /// + /// Begins recording microphone data to the specified file. + /// + /// The file will be saved to this name. Specify only the wav file's name with extensions, aka "myfile.wav", not full path + /// If true, will play micstream in speakers + /// + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicStartRecording(string filename, bool previewOnDevice); + + /// + /// Finishes writing the file recording started with MicStartRecording. + /// + /// returns the full path to the recorded audio file + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern void MicStopRecording(StringBuilder sb); + + /// + /// Finishes writing the file recording started with MicStartRecording. + /// + /// the full path to the recorded audio file + public static string MicStopRecording() + { + StringBuilder builder = new StringBuilder(MAX_PATH); + MicStopRecording(builder); + return builder.ToString(); + } + + /// + /// Cleans up data associated with microphone recording. Counterpart to MicInitialize* + /// + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicDestroy(); + + /// + /// Pauses streaming of microphone data to MicGetFrame (and/or file specified with MicStartRecording) + /// + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + + public static extern int MicPause(); + + /// + /// Unpauses streaming of microphone data to MicGetFrame (and/or file specified with MicStartRecording) + /// + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicResume(); + + /// + /// Sets apmlification factor for microphone samples returned by MicGetFrame (and/or file specified with MicStartRecording) + /// + /// gain factor + /// error code or 0 + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicSetGain(float g); + + /// + /// Queries the default microphone audio frame sample size. Useful if doing default initializations with callbacks to know how much data it wants to hand you. + /// + /// the number of samles in the default audio buffer + [DllImport("MicStreamSelector", ExactSpelling = true)] + private static extern int MicGetDefaultBufferSize(); + + /// + /// Queries the number of channels supported by the microphone. Useful if doing default initializations with callbacks to know how much data it wants to hand you. + /// + /// the number of channels + [DllImport("MicStreamSelector", ExactSpelling = true)] + private static extern int MicGetDefaultNumChannels(); + + /// + /// Read from the microphone buffer. Usually called once per frame. + /// + /// the buffer into which to store the microphone audio samples + /// the length of the buffer + /// the number of audio channels to store in the buffer + /// error code (or 0 if no error) + [DllImport("MicStreamSelector", ExactSpelling = true)] + public static extern int MicGetFrame(float[] buffer, int length, int numchannels); + + /// + /// Prints useful error/warning messages based on error codes returned from the functions in this class + /// + /// An error code returned by another function in this class + /// True if no error or warning message was printed, false if a message was printed + public static bool CheckForErrorOnCall(int returnCode) + { + switch (returnCode) + { + case (int)ErrorCodes.ALREADY_RECORDING: + Debug.LogError("WARNING: Tried to start recording when you were already doing so. You need to stop your previous recording before you can start again."); + return false; + case (int)ErrorCodes.ALREADY_RUNNING: + Debug.LogError("WARNING: Tried to initialize microphone more than once"); + return false; + case (int)ErrorCodes.GRAPH_NOT_EXIST: + Debug.LogError("ERROR: Tried to do microphone things without a properly initialized microphone. \n Do you have a mic plugged into a functional audio system and did you call MicInitialize() before anything else ??"); + return false; + case (int)ErrorCodes.NO_AUDIO_DEVICE: + Debug.LogError("ERROR: Tried to start microphone, but you don't appear to have a functional audio device. check your OS audio settings."); + return false; + case (int)ErrorCodes.NO_INPUT_DEVICE: + Debug.LogError("ERROR: Tried to start microphone, but you don't have one plugged in, do you?"); + return false; + case (int)ErrorCodes.CHANNEL_COUNT_MISMATCH: + Debug.LogError("ERROR: Microphone had a channel count mismatch internally on device. Try setting different mono/stereo options in OS mic settings."); + return false; + case (int)ErrorCodes.FILE_CREATION_PERMISSION_ERROR: + Debug.LogError("ERROR: Didn't have access to create file in Music library. Make sure permissions to write to Music library are set granted."); + return false; + case (int)ErrorCodes.NOT_ENOUGH_DATA: + // usually not an error, means the device hasn't produced enough data yet because it just started running + return false; + case (int)ErrorCodes.NEED_ENABLED_MIC_CAPABILITY: + Debug.LogError("ERROR: Seems like you forgot to enable the microphone capabilities in your Unity permissions"); + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs.meta new file mode 100644 index 0000000..9c6f001 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Microphone/MicStream.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4b1346964b1669842b425d5dce5b360d +timeCreated: 1468273805 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs new file mode 100644 index 0000000..8ccf9fe --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule.Tests +{ + /// + /// Register this game object on the InputManager as a global listener. + /// + public class SetGlobalListener : MonoBehaviour + { + private void Start() + { + InputManager.Instance.AddGlobalListener(gameObject); + } + + private void OnDestroy() + { + InputManager.Instance.RemoveGlobalListener(gameObject); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs.meta new file mode 100644 index 0000000..2b0dd96 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/SetGlobalListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cae8f3c88e9704a4393cb8d904b62372 +timeCreated: 1481884576 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/UI.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI.meta new file mode 100644 index 0000000..47ec4c3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: db8878df5857f754aafe6c6d0e759c69 +folderAsset: yes +timeCreated: 1469832109 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs new file mode 100644 index 0000000..642b2eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Very simple class that implements basic logic for a trigger button. + /// + public class TriggerButton : MonoBehaviour, IInputClickHandler + { + /// + /// Indicates whether the button is clickable or not. + /// + [Tooltip("Indicates whether the button is clickable or not.")] + public bool IsEnabled = true; + + public event Action ButtonPressed; + + /// + /// Press the button programatically. + /// + public void Press() + { + if (IsEnabled) + { + ButtonPressed.RaiseEvent(); + } + } + + public void OnInputClicked(InputClickedEventData eventData) + { + if (IsEnabled) + { + ButtonPressed.RaiseEvent(); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs.meta new file mode 100644 index 0000000..c260c74 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/UI/TriggerButton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e56a6ffca3a66b54189d6d303078cbf6 +timeCreated: 1469832135 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities.meta new file mode 100644 index 0000000..e93afa3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bca5b310aad363f4da86850d2785aa96 +folderAsset: yes +timeCreated: 1471397787 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs new file mode 100644 index 0000000..bf6437d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs @@ -0,0 +1,565 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// AxisController uses the keyboard, mouse, or joystick and allows + /// you to map a 1 axis controller to 1 axis displacement via GetDiplacement1() + /// or to map a 2 axis controller to 2 axis displacement via GetDisplacement2() + /// or to map a 2 axis controller to 2 of the 3 axis displacement via GetDisplacement3() + /// + public class AxisController : MonoBehaviour + { + /// + /// Type of input axis, based on device. + /// + public enum AxisType + { + // Axis are double axis (XY) unless indicated as single axis (X only) + InputManagerAxis, + + KeyboardArrows, + KeyboardWASD, + KeyboardQE, // single axis + KeyboardIJKL, + KeyboardUO, // single axis + Keyboard8426, + Keyboard7193, + KeyboardPeriodComma, // single axis + KeyboardBrackets, + KeyBoardHomeEndPgUpPgDown, + + Mouse, + MouseScroll, // single axis + + None + } + + /// + /// Each input axis, x, y, or z, will get mapped to an output axis, with potential inversion + /// + public enum AxisDestination + { + PositiveX, + NegativeX, + PositiveY, + NegativeY, + PositiveZ, + NegativeZ, + None + } + + public float SensitivityScale = 3.0f; + + [Tooltip("Use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + public AxisType axisType = AxisType.Mouse; + public ButtonController.ButtonType buttonType = ButtonController.ButtonType.None; + + public string InputManagerHorizontalAxisName; + public string InputManagerVerticalAxisName; + + public AxisDestination Axis0Destination = AxisDestination.PositiveX; + public AxisDestination Axis1Destination = AxisDestination.PositiveY; + public AxisDestination Axis2Destination = AxisDestination.None; + + private Vector3 lastMousePosition = Vector3.zero; + + private const float MouseSensitivity = 0.015f; // always affects the mouse sensitivity + private const float MouseUnlockedSensitivity = 0.1f; // affects the sensitivity when using the mouse buttons + private const float KeyboardSensitivity = 10.0f; + private const float InputManagerAxisSensitivity = 0.05f; + + private bool isMouseJumping = false; + private bool appHasFocus = true; + private bool usingMouse = false; + + private bool inputManagerAxesNeedApproval = true; + private bool inputManagerHorizontalAxisApproved = false; + private bool inputManagerVerticalAxisApproved = false; + + public bool AxisTypeIsKeyboard + { + get { return AxisType.KeyboardArrows <= axisType && axisType <= AxisType.KeyBoardHomeEndPgUpPgDown; } + } + public bool AxisTypeIsInputManagerAxis + { + get { return axisType == AxisType.InputManagerAxis; } + } + public bool AxisTypeIsMouse + { + get { return axisType == AxisType.Mouse; } + } + public bool AxisTypeIsMouseScroll + { + get { return axisType == AxisType.MouseScroll; } + } + + public void EnableAndCheck(bool value) + { + this.enabled = value; + if (value) + { + InputManagerAxisCheck(); + } + } + + private void Awake() + { + // AxisController is for development only and should not exist--and certainly not be used--in + // any non-Editor scenario. +#if !UNITY_EDITOR + Destroy(this); +#else + // Workaround for Remote Desktop. Ctrl-mouse, Shift-mouse, and Alt-mouse don't work, so they should be avoided. + if (IsRunningUnderRemoteDesktop()) + { + if (this.buttonType == ButtonController.ButtonType.Control) + { + this.buttonType = ButtonController.ButtonType.Left; + Debug.LogWarning("Running under Remote Desktop, so changed AxisContol method to Left mouse button"); + } + if (this.buttonType == ButtonController.ButtonType.Alt) + { + this.buttonType = ButtonController.ButtonType.Right; + Debug.LogWarning("Running under Remote Desktop, so changed AxisContol method to Right mouse button"); + } + if (this.buttonType == ButtonController.ButtonType.Shift) + { + this.buttonType = ButtonController.ButtonType.Middle; + Debug.LogWarning("Running under Remote Desktop, so changed AxisContol method to Middle mouse button"); + } + } + + UnityEngine.Cursor.lockState = CursorLockMode.None; + UnityEngine.Cursor.visible = true; +#endif + } + + private static float InputCurve(float x) + { + // smoothing input curve, converts from [-1,1] to [-2,2] + return (Mathf.Sign(x) * (1.0f - Mathf.Cos(.5f * Mathf.PI * Mathf.Clamp(x, -1.0f, 1.0f)))); + } + + /// + /// Get a Vector3 populated with axis mapped displacements. + /// + public Vector3 GetDisplacementVector3() + { + Vector3 source = GetDisplacement(); + Vector3 dest = Vector3.zero; + RemapAdditive(source, 0, ref dest, Axis0Destination); + RemapAdditive(source, 1, ref dest, Axis1Destination); + RemapAdditive(source, 2, ref dest, Axis2Destination); + return dest; + } + + /// + /// Get a Vector2 populated with axis mapped displacements. + /// + public Vector2 GetDisplacementVector2() + { + Vector3 source = GetDisplacement(); + Vector3 middle = Vector3.zero; + Vector2 dest = Vector2.zero; + RemapAdditive(source, 0, ref middle, Axis0Destination); + RemapAdditive(source, 1, ref middle, Axis1Destination); + dest[0] = middle[0]; + dest[1] = middle[1]; + return dest; + } + + /// + /// Get a float populated with axis mapped displacements. + /// + public float GetDisplacementFloat() + { + Vector3 source = GetDisplacement(); + Vector3 middle = Vector2.zero; + RemapAdditive(source, 0, ref middle, Axis0Destination); + return middle[0]; + } + + private void RemapAdditive(Vector3 source, int sourceDim, ref Vector3 dest, AxisDestination destDim) + { + float inp = source[sourceDim]; + if (destDim == AxisDestination.NegativeX || destDim == AxisDestination.NegativeY || destDim == AxisDestination.NegativeZ) + { + inp = -inp; + } + if (destDim == AxisDestination.PositiveX || destDim == AxisDestination.NegativeX) + { + dest[0] += inp; + } + else if (destDim == AxisDestination.PositiveY || destDim == AxisDestination.NegativeY) + { + dest[1] += inp; + } + else if (destDim == AxisDestination.PositiveZ || destDim == AxisDestination.NegativeZ) + { + dest[2] += inp; + } + } + + private Vector3 GetDisplacement() + { + Vector3 rot = Vector3.zero; + + // this check enables us to check the InputManagerAxes names when we are switching on the fly + if (!AxisTypeIsInputManagerAxis) + { + inputManagerAxesNeedApproval = true; + } + + // Now check to see what sort of input we have, and dispatch the appropriate LookTick routine + if (AxisTypeIsInputManagerAxis) + { + if (inputManagerAxesNeedApproval) + { + InputManagerAxisCheck(); + } + if (ShouldControl()) + { + rot = InputManagerAxisLookTick(); + } + } + else if (AxisTypeIsKeyboard) + { + if (ShouldControl()) + rot = KeyboardLookTick(); + } + else if (AxisTypeIsMouseScroll) + { + if (ShouldControl()) + rot.x += Input.GetAxis("Mouse ScrollWheel"); + } + else if (AxisTypeIsMouse) + { + if (ShouldControl()) + { + if (!this.usingMouse) + { + OnStartMouseLook(); + this.usingMouse = true; + } + rot = MouseLookTick(); + } + else + { + if (this.usingMouse) + { + OnEndMouseLook(); + this.usingMouse = false; + } + } + } + + rot *= this.SensitivityScale; + return rot; + } + + private void OnStartMouseLook() + { + if (this.buttonType <= ButtonController.ButtonType.Middle) + { + // if mousebutton is either left, right or middle + SetWantsMouseJumping(true); + } + else if (this.buttonType <= ButtonController.ButtonType.Focused) + { + // if mousebutton is either control, shift or focused + UnityEngine.Cursor.lockState = CursorLockMode.Locked; + UnityEngine.Cursor.visible = false; + } + + // do nothing if (this.MouseLookButton == MouseButton.None) + } + + private void OnEndMouseLook() + { + if (this.buttonType <= ButtonController.ButtonType.Middle) + { + // if mousebutton is either left, right or middle + SetWantsMouseJumping(false); + } + else if (this.buttonType <= ButtonController.ButtonType.Focused) + { + // if mousebutton is either control, shift or focused + UnityEngine.Cursor.lockState = CursorLockMode.None; + UnityEngine.Cursor.visible = true; + } + + // do nothing if (this.MouseLookButton == MouseButton.None) + } + + private Vector3 MouseLookTick() + { + Vector3 rot = Vector3.zero; + + // Use frame-to-frame mouse delta in pixels to determine mouse rotation. The traditional + // GetAxis("Mouse X") method doesn't work under Remote Desktop. + Vector3 mousePositionDelta = Input.mousePosition - this.lastMousePosition; + this.lastMousePosition = Input.mousePosition; + + if (UnityEngine.Cursor.lockState == CursorLockMode.Locked) + { + mousePositionDelta.x = Input.GetAxis("Mouse X"); + mousePositionDelta.y = Input.GetAxis("Mouse Y"); + } + else + { + mousePositionDelta.x *= MouseUnlockedSensitivity; + mousePositionDelta.y *= MouseUnlockedSensitivity; + } + + rot.x += -InputCurve(mousePositionDelta.y) * MouseSensitivity; + rot.y += InputCurve(mousePositionDelta.x) * MouseSensitivity; + return rot; + } + + private float GetKeyDir(KeyCode neg, KeyCode pos) + { + return Input.GetKey(neg) ? -1.0f : Input.GetKey(pos) ? 1.0f : 0.0f; + } + + private float GetKeyDir(string neg, string pos) + { + return Input.GetKey(neg) ? -1.0f : Input.GetKey(pos) ? 1.0f : 0.0f; + } + + private void InputManagerAxisCheck() + { + inputManagerHorizontalAxisApproved = false; + inputManagerVerticalAxisApproved = false; + + { + inputManagerHorizontalAxisApproved = true; + try + { + Input.GetAxis(InputManagerHorizontalAxisName); + } + catch (Exception) + { + Debug.LogWarningFormat("Input Axis {0} is not setup. Use Edit -> Project Settings -> Input", InputManagerHorizontalAxisName); + inputManagerHorizontalAxisApproved = false; + } + } + + { + inputManagerVerticalAxisApproved = true; + try + { + Input.GetAxis(InputManagerVerticalAxisName); + } + catch (Exception) + { + Debug.LogWarningFormat("Input Axis {0} is not setup. Use Edit -> Project Settings -> Input", InputManagerVerticalAxisName); + inputManagerVerticalAxisApproved = false; + } + } + inputManagerAxesNeedApproval = false; + } + + private Vector3 InputManagerAxisLookTick() + { + Vector3 rot = Vector3.zero; + if (inputManagerHorizontalAxisApproved) + { + rot.x += InputManagerAxisSensitivity * InputCurve(Input.GetAxis(InputManagerHorizontalAxisName)); + } + if (inputManagerVerticalAxisApproved) + { + rot.y += InputManagerAxisSensitivity * InputCurve(Input.GetAxis(InputManagerVerticalAxisName)); + } + return rot; + } + + private Vector3 KeyboardLookTick() + { + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + Vector3 rot = Vector3.zero; + if (axisType == AxisType.KeyboardArrows) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.LeftArrow, KeyCode.RightArrow)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.DownArrow, KeyCode.UpArrow)); + } + else if (axisType == AxisType.KeyboardWASD) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.A, KeyCode.D)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.S, KeyCode.W)); + } + else if (axisType == AxisType.KeyboardQE) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Q, KeyCode.E)); + } + else if (axisType == AxisType.KeyboardIJKL) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.J, KeyCode.L)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.K, KeyCode.I)); + } + else if (axisType == AxisType.KeyboardUO) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.U, KeyCode.O)); + } + else if (axisType == AxisType.Keyboard8426) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Keypad4, KeyCode.Keypad6)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Keypad2, KeyCode.Keypad8)); + } + else if (axisType == AxisType.Keyboard7193) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Keypad1, KeyCode.Keypad7)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Keypad3, KeyCode.Keypad9)); + } + else if (axisType == AxisType.KeyboardPeriodComma) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.Comma, KeyCode.Period)); + } + else if (axisType == AxisType.KeyboardBrackets) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.LeftBracket, KeyCode.RightBracket)); + } + else if (axisType == AxisType.KeyBoardHomeEndPgUpPgDown) + { + rot.x += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.End, KeyCode.Home)); + rot.y += InputCurve(deltaTime * KeyboardSensitivity * GetKeyDir(KeyCode.PageDown, KeyCode.PageUp)); + } + return rot; + } + + /// + /// Only allow the mouse to control rotation when Unity has focus. This enables + /// the player to temporarily alt-tab away without having the player look around randomly + /// back in the Unity Game window. + /// + /// Whether the user is holding down the control button. + public bool ShouldControl() + { + if (!this.appHasFocus) + { + return false; + } + else if (this.buttonType == ButtonController.ButtonType.None) + { + return true; + } + else if (this.buttonType <= ButtonController.ButtonType.Middle) + { + return Input.GetMouseButton((int)this.buttonType); + } + else if (this.buttonType == ButtonController.ButtonType.Control) + { + return Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl); + } + else if (this.buttonType == ButtonController.ButtonType.Shift) + { + return Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); + } + else if (this.buttonType == ButtonController.ButtonType.Alt) + { + return Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt); + } + else if (this.buttonType == ButtonController.ButtonType.Space) + { + return Input.GetKey(KeyCode.Space); + } + else if (this.buttonType == ButtonController.ButtonType.Return) + { + return Input.GetKey(KeyCode.Return); + } + else if (this.buttonType == ButtonController.ButtonType.Focused) + { + if (!this.usingMouse) + { + // any kind of click will capture focus + return Input.GetMouseButtonDown((int)ButtonController.ButtonType.Left) + || Input.GetMouseButtonDown((int)ButtonController.ButtonType.Right) + || Input.GetMouseButtonDown((int)ButtonController.ButtonType.Middle); + } + else + { + // pressing escape will stop capture + return !Input.GetKeyDown(KeyCode.Escape); + } + } + + return false; + } + + private void OnApplicationFocus(bool focusStatus) + { + this.appHasFocus = focusStatus; + } + + /// + /// Mouse jumping is typically used during one of the mouse button modes. + /// It means that the cursor will be invisible when it is outside of the + /// Unity game view window, and visible when it breaches the outer edges. + /// + /// Wheter the mouse cursor should be visible over the game window. + private void SetWantsMouseJumping(bool wantsJumping) + { + if (wantsJumping != this.isMouseJumping) + { + this.isMouseJumping = wantsJumping; + + if (wantsJumping) + { + // unlock the cursor if it was locked + UnityEngine.Cursor.lockState = CursorLockMode.None; + + // hide the cursor + UnityEngine.Cursor.visible = false; + + this.lastMousePosition = Input.mousePosition; + } + else + { + // recenter the cursor (setting lockCursor has side-effects under the hood) + UnityEngine.Cursor.lockState = CursorLockMode.Locked; + UnityEngine.Cursor.lockState = CursorLockMode.None; + + // show the cursor + UnityEngine.Cursor.visible = true; + } + +#if UNITY_EDITOR + UnityEditor.EditorGUIUtility.SetWantsMouseJumping(wantsJumping ? 1 : 0); +#endif + } + } + +#if UNITY_EDITOR + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern uint GetCurrentProcessId(); + + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern bool ProcessIdToSessionId(uint dwProcessId, out uint pSessionId); + + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern uint WTSGetActiveConsoleSessionId(); + + private bool IsRunningUnderRemoteDesktop() + { + uint processId = GetCurrentProcessId(); + uint sessionId; + return ProcessIdToSessionId(processId, out sessionId) && (sessionId != WTSGetActiveConsoleSessionId()); + } +#else + private bool IsRunningUnderRemoteDesktop() + { + return false; + } +#endif + } + +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs.meta new file mode 100644 index 0000000..5e26026 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/AxisController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d1b627838df61e64baecc87fee2dec17 +timeCreated: 1463176599 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs new file mode 100644 index 0000000..6d24696 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs @@ -0,0 +1,173 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + + /// + /// ButtonController provides a per key or button component for the Manual input Controls + /// in the Unity Editor, used to simulate actual HoloLens behavior. + /// + public class ButtonController : MonoBehaviour + { + /// + /// These enums allow us to activate an axis only by a key press, such as CTRL mouse or ALT mouse + /// + public enum ButtonType + { + Left, + Right, + Middle, + Control, + Shift, + Alt, + Space, + Return, + Focused, + ControlAndLeft, + ControlAndRight, + ControlAndMiddle, + ShiftAndLeft, + ShiftAndRight, + ShiftAndMiddle, + AltAndLeft, + AltAndRight, + AltAndMiddle, + SpaceAndLeft, + SpaceAndRight, + SpaceAndMiddle, + None + } + + /// + /// Type of button used for activation. + /// + public ButtonType buttonType = ButtonType.None; + + private bool appHasFocus = true; + + private void Awake() + { + // ButtonController is for development only and should not exist--and certainly not be used--in + // any non-Editor scenario. +#if !UNITY_EDITOR + Destroy(this); +#else + // Workaround for Remote Desktop. Ctrl-mouse, Shift-mouse, and Alt-mouse don't work, so they should be avoided. + if (IsRunningUnderRemoteDesktop()) + { + if (this.buttonType == ButtonType.Control) + { + this.buttonType = ButtonType.Left; + Debug.LogWarning("Running under Remote Desktop, so changed ButtonController method to Left mouse button"); + } + if (this.buttonType == ButtonType.Alt) + { + this.buttonType = ButtonType.Right; + Debug.LogWarning("Running under Remote Desktop, so changed ButtonController method to Right mouse button"); + } + if (this.buttonType == ButtonType.Shift) + { + this.buttonType = ButtonType.Middle; + Debug.LogWarning("Running under Remote Desktop, so changed ButtonController method to Middle mouse button"); + } + } +#endif + } + + /// + /// Returns true if the configured button is currently pressed. + /// + /// True if pressed. + public bool Pressed() + { + bool left = Input.GetMouseButton(0); + bool right = Input.GetMouseButton(1); + bool middle = Input.GetMouseButton(2); + bool control = Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl); + bool shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); + bool alt = Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt); + bool space = Input.GetKey(KeyCode.Space); + switch (buttonType) + { + case ButtonType.Left: + return left; + case ButtonType.Right: + return right; + case ButtonType.Middle: + return middle; + case ButtonType.Control: + return control; + case ButtonType.Shift: + return shift; + case ButtonType.Alt: + return alt; + case ButtonType.Space: + return space; + case ButtonType.Return: + return Input.GetKey(KeyCode.Return); + case ButtonType.Focused: + return this.appHasFocus; + case ButtonType.ControlAndLeft: + return control && left; + case ButtonType.ControlAndRight: + return control && right; + case ButtonType.ControlAndMiddle: + return control && middle; + case ButtonType.ShiftAndLeft: + return shift && left; + case ButtonType.ShiftAndRight: + return shift && right; + case ButtonType.ShiftAndMiddle: + return shift && middle; + case ButtonType.AltAndLeft: + return alt && left; + case ButtonType.AltAndRight: + return alt && right; + case ButtonType.AltAndMiddle: + return alt && middle; + case ButtonType.SpaceAndLeft: + return space && left; + case ButtonType.SpaceAndRight: + return space && right; + case ButtonType.SpaceAndMiddle: + return space && middle; + case ButtonType.None: + default: + return false; + }; + } + + private void OnApplicationFocus(bool focusStatus) + { + this.appHasFocus = focusStatus; + } + +#if UNITY_EDITOR + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern uint GetCurrentProcessId(); + + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern bool ProcessIdToSessionId(uint dwProcessId, out uint pSessionId); + + [System.Runtime.InteropServices.DllImport("kernel32.dll")] + private static extern uint WTSGetActiveConsoleSessionId(); + + private bool IsRunningUnderRemoteDesktop() + { + uint processId = GetCurrentProcessId(); + uint sessionId; + return ProcessIdToSessionId(processId, out sessionId) && (sessionId != WTSGetActiveConsoleSessionId()); + } +#else + private bool IsRunningUnderRemoteDesktop() + { + return false; + } +#endif + + } + +} // namespace diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs.meta new file mode 100644 index 0000000..b24fd0e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ButtonController.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1350e83623c005741ad0d1b09834ed62 +timeCreated: 1463182826 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs new file mode 100644 index 0000000..34aacb3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs @@ -0,0 +1,123 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// Class for manually controlling the camera when not running on HoloLens (in editor). + /// Attach to same main camera game object. + /// + public class ManualGazeControl : MonoBehaviour + { + public bool MouseSupported = true; + public AxisController MouseXYRotationAxisControl; + public AxisController MouseXYTranslationAxisControl; + public AxisController MouseXZTranslationAxisControl; + + public bool KeyboardSupported = true; + public AxisController KeyboardXYRotationAxisControl; + public AxisController KeyboardXZRotationAxisControl; + public AxisController KeyboardXYTranslationAxisControl; + public AxisController KeyboardXZTranslationAxisControl; + + public bool JoystickSupported = false; + public AxisController JoystickXYRotationAxisControl; + public AxisController JoystickXYTranslationAxisControl; + public AxisController JoystickXZTranslationAxisControl; + + private Vector3 lastTrackerToUnityTranslation = Vector3.zero; + private Quaternion lastTrackerToUnityRotation = Quaternion.identity; + + private Transform cameraTransform; + + private void Awake() + { +#if !UNITY_EDITOR + Destroy(this); +#endif + cameraTransform = GetComponent().transform; + if (cameraTransform == null) + { + Debug.LogError("ManualGazeControl being used on a game object without a Camera."); + } + + MouseXYRotationAxisControl.enabled = MouseSupported; + MouseXYTranslationAxisControl.enabled = MouseSupported; + MouseXZTranslationAxisControl.enabled = MouseSupported; + + KeyboardXYRotationAxisControl.enabled = KeyboardSupported; + KeyboardXZRotationAxisControl.enabled = KeyboardSupported; + KeyboardXYTranslationAxisControl.enabled = KeyboardSupported; + KeyboardXZTranslationAxisControl.enabled = KeyboardSupported; + + JoystickXYRotationAxisControl.enabled = JoystickSupported; + JoystickXYTranslationAxisControl.enabled = JoystickSupported; + JoystickXZTranslationAxisControl.enabled = JoystickSupported; + + } + + private void Update() + { + // Undo the last tracker to Unity transforms applied. + cameraTransform.Translate(-this.lastTrackerToUnityTranslation, Space.World); + cameraTransform.Rotate(-this.lastTrackerToUnityRotation.eulerAngles, Space.World); + + // Undo the last local Z-axis tilt rotation. + float previousZTilt = this.transform.localEulerAngles.z; + cameraTransform.Rotate(0, 0, -previousZTilt, Space.Self); + + // Calculate and apply the camera control movement this frame + Vector3 rotate = Vector3.zero; + Vector3 translate = Vector3.zero; + + if (MouseSupported) + { + Vector3 mouseXYRotate = MouseXYRotationAxisControl.GetDisplacementVector3(); + Vector3 mouseXYTranslate = MouseXYTranslationAxisControl.GetDisplacementVector3(); + Vector3 mouseXZTranslate = MouseXZTranslationAxisControl.GetDisplacementVector3(); + rotate += mouseXYRotate; + translate += mouseXYTranslate; + translate += mouseXZTranslate; + } + + if (KeyboardSupported) + { + Vector3 keyboardXYRotate = KeyboardXYRotationAxisControl.GetDisplacementVector3(); + Vector3 keyboardXZRotate = KeyboardXZRotationAxisControl.GetDisplacementVector3(); + Vector3 keyboardXYTranslate = KeyboardXYTranslationAxisControl.GetDisplacementVector3(); + Vector3 keyboardXZTranslate = KeyboardXZTranslationAxisControl.GetDisplacementVector3(); + rotate += keyboardXYRotate; + rotate += keyboardXZRotate; + translate += keyboardXYTranslate; + translate += keyboardXZTranslate; + } + + if (JoystickSupported) + { + Vector3 joystickXYRotate = JoystickXYRotationAxisControl.GetDisplacementVector3(); + Vector3 joystickXYTranslate = JoystickXYTranslationAxisControl.GetDisplacementVector3(); + Vector3 joystickXZTranslate = JoystickXZTranslationAxisControl.GetDisplacementVector3(); + rotate += joystickXYRotate; + translate += joystickXYTranslate; + translate += joystickXZTranslate; + } + + rotate *= Mathf.Rad2Deg; // change to degrees for the Rotate function + + // Now apply the displacements to the camera + cameraTransform.Rotate(rotate.x, 0.0f, 0.0f, Space.Self); + cameraTransform.Rotate(0.0f, rotate.y, 0.0f, Space.World); + cameraTransform.Translate(translate, Space.Self); + + // Apply updated local Z-axis tilt rotation. + cameraTransform.Rotate(0.0f, 0.0f, rotate.z + previousZTilt, Space.Self); + + // Re-apply the last tracker to Unity transform. + cameraTransform.Rotate(this.lastTrackerToUnityRotation.eulerAngles, Space.World); + cameraTransform.Translate(this.lastTrackerToUnityTranslation, Space.World); + } + } + +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs.meta new file mode 100644 index 0000000..e968d38 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualGazeControl.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9cf6ab24363b7a74da25766ea8ba6809 +timeCreated: 1464208473 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs new file mode 100644 index 0000000..5bf8826 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs @@ -0,0 +1,288 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + public enum ButtonChoices + { + Left, + Right, + Middle, + Control, + Shift, + Alt, + Focused, + None + } + + /// + /// Since the InteractionSourceState is internal to UnityEngine.VR.WSA.Input, + /// this is a fake SourceState structure to keep the test code consistent. + /// + public struct DebugInteractionSourceState + { + public bool Pressed; + public DebugInteractionSourceProperties Properties; + } + + /// + /// Since the InteractionSourceProperties is internal to UnityEngine.VR.WSA.Input, + /// this is a fake SourceProperties structure to keep the test code consistent. + /// + public struct DebugInteractionSourceProperties + { + public DebugInteractionSourceLocation Location; + } + + /// + /// Since the InteractionSourceLocation is internal to UnityEngine.VR.WSA.Input, + /// this is a fake SourceLocation structure to keep the test code consistent. + /// + public class DebugInteractionSourceLocation + { + /// + /// In the typical InteractionSourceLocation, the hardware determines if + /// TryGetPosition and TryGetVelocity will return true or not. Here + /// we manually emulate this state with TryGetFunctionsReturnsTrue. + /// + public bool TryGetFunctionsReturnsTrue; + + public Vector3 Position; + public Vector3 Velocity; + + public void Awake() + { + TryGetFunctionsReturnsTrue = false; + Position = new Vector3(0, 0, 0); + Velocity = new Vector3(0, 0, 0); + } + + public bool TryGetPosition(out Vector3 position) + { + position = Position; + if (!TryGetFunctionsReturnsTrue) + { + return false; + } + return true; + } + + public bool TryGetVelocity(out Vector3 velocity) + { + velocity = Velocity; + if (!TryGetFunctionsReturnsTrue) + { + return false; + } + return true; + } + } + + /// + /// Class for manually controlling the hand(s) when not running on HoloLens (in editor). + /// + public class ManualHandControl : MonoBehaviour + { + public float HandReturnFactor = 0.25f; /// [0.0,1.0] the closer this is to one the faster it brings the hand back to center + public float HandTimeBeforeReturn = 0.5f; + public float MinimumTrackedMovement = 0.001f; + + [Tooltip("Use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + public AxisController LeftHandPrimaryAxisControl; + public AxisController LeftHandSecondaryAxisControl; + public ButtonController LeftFingerUpButtonControl; + public ButtonController LeftFingerDownButtonControl; + + public AxisController RightHandPrimaryAxisControl; + public AxisController RightHandSecondaryAxisControl; + public ButtonController RightFingerUpButtonControl; + public ButtonController RightFingerDownButtonControl; + + public DebugInteractionSourceState LeftHandSourceState; + public DebugInteractionSourceState RightHandSourceState; + + public Color ActiveHandColor; + public Color DroppedHandColor; + /// + /// Will place hand visualizations in the world space, only for debugging. + /// Place the representative GameObjects in LeftHandVisualizer & RightHandVisualizer. + /// + public bool VisualizeHands = true; + public GameObject LeftHandVisualizer; + public GameObject RightHandVisualizer; + + public Texture HandUpTexture; + public Texture HandDownTexture; + + public bool LeftHandInView; + public bool RightHandInView; + + private Vector3 leftHandInitialPosition; + private Vector3 rightHandInitialPosition; + + private Vector3 leftHandLocalPosition; + private Vector3 rightHandLocalPosition; + + private Renderer leftHandVisualRenderer; + private Renderer rightHandVisualRenderer; + private MaterialPropertyBlock leftHandVisualPropertyBlock; + private MaterialPropertyBlock rightHandVisualPropertyBlock; + private int mainTexID; + private bool appHasFocus = true; + + private float timeBeforeReturn; + + private void Awake() + { + mainTexID = Shader.PropertyToID("_MainTex"); + + LeftHandSourceState.Pressed = false; + LeftHandSourceState.Properties.Location = new DebugInteractionSourceLocation(); + leftHandLocalPosition = LeftHandVisualizer.transform.position; + leftHandInitialPosition = leftHandLocalPosition; + LeftHandSourceState.Properties.Location.Position = leftHandLocalPosition; + leftHandVisualRenderer = LeftHandVisualizer.GetComponent(); + leftHandVisualPropertyBlock = new MaterialPropertyBlock(); + leftHandVisualRenderer.SetPropertyBlock(leftHandVisualPropertyBlock); + + RightHandSourceState.Pressed = false; + RightHandSourceState.Properties.Location = new DebugInteractionSourceLocation(); + rightHandLocalPosition = RightHandVisualizer.transform.position; + rightHandInitialPosition = rightHandLocalPosition; + RightHandSourceState.Properties.Location.Position = rightHandLocalPosition; + rightHandVisualRenderer = RightHandVisualizer.GetComponent(); + rightHandVisualPropertyBlock = new MaterialPropertyBlock(); + rightHandVisualRenderer.SetPropertyBlock(rightHandVisualPropertyBlock); + +#if !UNITY_EDITOR + VisualizeHands = false; + UpdateHandVisualization(); + Destroy(this); +#endif + } + + private void Update() + { + UpdateHandVisualization(); + + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + float smoothingFactor = deltaTime * 30.0f * HandReturnFactor; + if (timeBeforeReturn > 0.0f) + { + timeBeforeReturn = Mathf.Clamp(timeBeforeReturn - deltaTime, 0.0f, HandTimeBeforeReturn); + } + + LeftHandSourceState.Pressed = LeftFingerDownButtonControl.Pressed(); + RightHandSourceState.Pressed = RightFingerDownButtonControl.Pressed(); + + if (LeftHandSourceState.Pressed || RightHandSourceState.Pressed) + { + timeBeforeReturn = HandTimeBeforeReturn; + } + + if (timeBeforeReturn <= 0.0f) + { + leftHandLocalPosition = Vector3.Slerp(leftHandLocalPosition, leftHandInitialPosition, smoothingFactor); + if (leftHandLocalPosition == leftHandInitialPosition) + { + LeftHandInView = false; + } + rightHandLocalPosition = Vector3.Slerp(rightHandLocalPosition, rightHandInitialPosition, smoothingFactor); + if (rightHandLocalPosition == rightHandInitialPosition) + { + RightHandInView = false; + } + } + + if (appHasFocus) + { + Vector3 translate1 = LeftHandPrimaryAxisControl.GetDisplacementVector3(); + Vector3 translate2 = LeftHandSecondaryAxisControl.GetDisplacementVector3(); + Vector3 translate = translate1 + translate2; + + // If there is a mouse translate with a modifier key and it is held down, do not reset the hand position. + bool handTranslateActive = + (LeftHandPrimaryAxisControl.axisType == AxisController.AxisType.Mouse && LeftHandPrimaryAxisControl.buttonType != ButtonController.ButtonType.None && LeftHandPrimaryAxisControl.ShouldControl()) || + (LeftHandSecondaryAxisControl.axisType == AxisController.AxisType.Mouse && LeftHandSecondaryAxisControl.buttonType != ButtonController.ButtonType.None && LeftHandSecondaryAxisControl.ShouldControl()); + + if (handTranslateActive || LeftHandSourceState.Pressed) + { + timeBeforeReturn = HandTimeBeforeReturn; + LeftHandInView = true; + } + + leftHandLocalPosition += translate; + LeftHandSourceState.Properties.Location.Position = Camera.main.transform.position + Camera.main.transform.TransformVector(leftHandLocalPosition); + + LeftHandVisualizer.transform.position = LeftHandSourceState.Properties.Location.Position; + LeftHandVisualizer.transform.forward = Camera.main.transform.forward; + + leftHandVisualPropertyBlock.SetTexture(mainTexID, LeftHandSourceState.Pressed ? HandDownTexture : HandUpTexture); + leftHandVisualRenderer.SetPropertyBlock(leftHandVisualPropertyBlock); + + LeftHandSourceState.Properties.Location.TryGetFunctionsReturnsTrue = LeftHandInView; + } + else + { + LeftHandSourceState.Properties.Location.TryGetFunctionsReturnsTrue = false; + } + + if (appHasFocus) + { + Vector3 translate1 = RightHandPrimaryAxisControl.GetDisplacementVector3(); + Vector3 translate2 = RightHandSecondaryAxisControl.GetDisplacementVector3(); + Vector3 translate = translate1 + translate2; + + + bool handTranslateActive = + (RightHandPrimaryAxisControl.axisType == AxisController.AxisType.Mouse && RightHandPrimaryAxisControl.buttonType != ButtonController.ButtonType.None && RightHandPrimaryAxisControl.ShouldControl()) || + (RightHandSecondaryAxisControl.axisType == AxisController.AxisType.Mouse && RightHandSecondaryAxisControl.buttonType != ButtonController.ButtonType.None && RightHandSecondaryAxisControl.ShouldControl()); + + // If there is a mouse translate with a modifier key and it is held down, do not reset the hand position. + if (handTranslateActive || RightHandSourceState.Pressed) + { + timeBeforeReturn = HandTimeBeforeReturn; + RightHandInView = true; + } + + rightHandLocalPosition += translate; + RightHandSourceState.Properties.Location.Position = Camera.main.transform.position + Camera.main.transform.TransformVector(rightHandLocalPosition); + + RightHandVisualizer.transform.position = RightHandSourceState.Properties.Location.Position; + RightHandVisualizer.transform.forward = Camera.main.transform.forward; + rightHandVisualPropertyBlock.SetTexture(mainTexID, RightHandSourceState.Pressed ? HandDownTexture : HandUpTexture); + rightHandVisualRenderer.SetPropertyBlock(rightHandVisualPropertyBlock); + + RightHandSourceState.Properties.Location.TryGetFunctionsReturnsTrue = RightHandInView; + } + else + { + RightHandSourceState.Properties.Location.TryGetFunctionsReturnsTrue = false; + } + } + + private void UpdateHandVisualization() + { + leftHandVisualPropertyBlock.SetColor("_Color", LeftHandInView ? ActiveHandColor : DroppedHandColor); + rightHandVisualPropertyBlock.SetColor("_Color", RightHandInView ? ActiveHandColor : DroppedHandColor); + + if (LeftHandVisualizer.activeSelf != VisualizeHands) + { + LeftHandVisualizer.SetActive(VisualizeHands); + } + if (RightHandVisualizer.activeSelf != VisualizeHands) + { + RightHandVisualizer.SetActive(VisualizeHands); + } + } + } + +} + diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs.meta new file mode 100644 index 0000000..fd6722d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Utilities/ManualHandControl.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f5d9d16de978748488d7a8e0daf6e5cf +timeCreated: 1463005967 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice.meta new file mode 100644 index 0000000..d95dcd4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1e1644ee9122f0947bb1a04f2da54d79 +folderAsset: yes +timeCreated: 1464209698 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor.meta new file mode 100644 index 0000000..26b4c3b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96002e6c3375b69438b84427abc094ac +folderAsset: yes +timeCreated: 1481793391 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs new file mode 100644 index 0000000..c22edc2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEditor; + +namespace HoloToolkit.Unity.InputModule +{ + [CustomPropertyDrawer(typeof(SpeechInputSource.KeywordAndKeyCode))] + public class KeywordAndKeyCodeDrawer : PropertyDrawer + { + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent content) + { + EditorGUI.BeginProperty(rect, content, property); + + // calculate field reactangle with half of total drawer length for each + float fieldWidth = rect.width * 0.5f; + Rect keywordRect = new Rect(rect.x, rect.y, fieldWidth, rect.height); + Rect keyCodeRect = new Rect(rect.x + fieldWidth, rect.y, fieldWidth, rect.height); + + // the Keyword field without label + EditorGUI.PropertyField(keywordRect, property.FindPropertyRelative("Keyword"), GUIContent.none); + // the KeyCode field without label + EditorGUI.PropertyField(keyCodeRect, property.FindPropertyRelative("KeyCode"), GUIContent.none); + + EditorGUI.EndProperty(); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs.meta new file mode 100644 index 0000000..9b17e76 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/KeywordAndKeyCodeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5d877fc560a8f724fba6dd6e12386516 +timeCreated: 1481795529 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs new file mode 100644 index 0000000..b72c0c0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs @@ -0,0 +1,113 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + [CustomEditor(typeof(SpeechInputHandler))] + public class SpeechInputHandlerEditor : Editor + { + private SerializedProperty keywordsProperty; + private string[] registeredKeywords; + + private void OnEnable() + { + keywordsProperty = serializedObject.FindProperty("keywords"); + registeredKeywords = RegisteredKeywords().Distinct().ToArray(); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + ShowList(keywordsProperty); + serializedObject.ApplyModifiedProperties(); + + // error and warning messages + if (keywordsProperty.arraySize == 0) + { + EditorGUILayout.HelpBox("No keywords have been assigned!", MessageType.Warning); + } + else + { + SpeechInputHandler handler = target as SpeechInputHandler; + string duplicateKeyword = handler.keywords.GroupBy(keyword => keyword.Keyword.ToLower()).Where(group => group.Count() > 1).Select(group => group.Key).FirstOrDefault(); + if (duplicateKeyword != null) + { + EditorGUILayout.HelpBox("Keyword '" + duplicateKeyword + "' is assigned more than once!", MessageType.Warning); + } + } + } + + private static GUIContent removeButtonContent = new GUIContent("-", "Remove keyword"); + private static GUIContent addButtonContent = new GUIContent("+", "Add keyword"); + private static GUILayoutOption miniButtonWidth = GUILayout.Width(20.0f); + + private void ShowList(SerializedProperty list) + { + EditorGUI.indentLevel++; + + // remove the keywords already assigned from the registered list + SpeechInputHandler handler = target as SpeechInputHandler; + string[] availableKeywords = registeredKeywords.Except(handler.keywords.Select(keywordAndResponse => keywordAndResponse.Keyword)).ToArray(); + + // keyword rows + for (int index = 0; index < list.arraySize; index++) + { + // the element + SerializedProperty elementProperty = list.GetArrayElementAtIndex(index); + EditorGUILayout.BeginHorizontal(); + bool elementExpanded = EditorGUILayout.PropertyField(elementProperty); + GUILayout.FlexibleSpace(); + // the remove element button + bool elementRemoved = GUILayout.Button(removeButtonContent, EditorStyles.miniButton, miniButtonWidth); + if (elementRemoved) + { + list.DeleteArrayElementAtIndex(index); + } + EditorGUILayout.EndHorizontal(); + + if (!elementRemoved && elementExpanded) + { + SerializedProperty keywordProperty = elementProperty.FindPropertyRelative("Keyword"); + string[] keywords = availableKeywords.Concat(new[] { keywordProperty.stringValue }).OrderBy(keyword => keyword).ToArray(); + int previousSelection = ArrayUtility.IndexOf(keywords, keywordProperty.stringValue); + int currentSelection = EditorGUILayout.Popup("Keyword", previousSelection, keywords); + if (currentSelection != previousSelection) + { + keywordProperty.stringValue = keywords[currentSelection]; + } + + SerializedProperty responseProperty = elementProperty.FindPropertyRelative("Response"); + EditorGUILayout.PropertyField(responseProperty, true); + } + } + + // add button row + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + // the add element button + if (GUILayout.Button(addButtonContent, EditorStyles.miniButton, miniButtonWidth)) + { + list.InsertArrayElementAtIndex(list.arraySize); + } + EditorGUILayout.EndHorizontal(); + + EditorGUI.indentLevel--; + } + + private IEnumerable RegisteredKeywords() + { + foreach(SpeechInputSource source in Object.FindObjectsOfType()) + { + foreach(SpeechInputSource.KeywordAndKeyCode keywordAndKeyCode in source.Keywords) + { + yield return keywordAndKeyCode.Keyword; + } + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs.meta new file mode 100644 index 0000000..37e0531 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputHandlerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 978dacb7a2cc0fd45aba947d6d966484 +timeCreated: 1482245695 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs new file mode 100644 index 0000000..803457d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity.InputModule +{ + [CustomEditor(typeof(SpeechInputSource))] + public class SpeechInputSourceEditor : Editor + { + private SerializedProperty recognizerStart; + private SerializedProperty keywordsAndKeys; + + private void OnEnable() + { + recognizerStart = serializedObject.FindProperty("RecognizerStart"); + keywordsAndKeys = serializedObject.FindProperty("Keywords"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + // the RecognizerStart field + EditorGUILayout.PropertyField(recognizerStart); + // the Keywords field + ShowList(keywordsAndKeys); + serializedObject.ApplyModifiedProperties(); + + // error and warning messages + if (keywordsAndKeys.arraySize == 0) + { + EditorGUILayout.HelpBox("No keywords have been assigned!", MessageType.Warning); + } + } + + private static GUIContent removeButtonContent = new GUIContent("-", "Remove keyword"); + private static GUIContent addButtonContent = new GUIContent("+", "Add keyword"); + private static GUILayoutOption miniButtonWidth = GUILayout.Width(20.0f); + + private static void ShowList(SerializedProperty list) + { + // property name with expansion widget + EditorGUILayout.PropertyField(list); + + if (list.isExpanded) + { + EditorGUI.indentLevel++; + + // header row + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Keyword"); + EditorGUILayout.LabelField("Key Shortcut"); + EditorGUILayout.EndHorizontal(); + + // keyword rows + for (int index = 0; index < list.arraySize; index++) + { + EditorGUILayout.BeginHorizontal(); + // the element + EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(index)); + // the remove element button + if (GUILayout.Button(removeButtonContent, EditorStyles.miniButton, miniButtonWidth)) + { + list.DeleteArrayElementAtIndex(index); + } + EditorGUILayout.EndHorizontal(); + } + + // add button row + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + // the add element button + if (GUILayout.Button(addButtonContent, EditorStyles.miniButton, miniButtonWidth)) + { + list.InsertArrayElementAtIndex(list.arraySize); + } + EditorGUILayout.EndHorizontal(); + + EditorGUI.indentLevel--; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs.meta new file mode 100644 index 0000000..676b61e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/Editor/SpeechInputSourceEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea5e835211b0e9541ba1adb429d80ea3 +timeCreated: 1481793435 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs new file mode 100644 index 0000000..e7daf9b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs @@ -0,0 +1,166 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Windows.Speech; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// KeywordManager allows you to specify keywords and methods in the Unity + /// Inspector, instead of registering them explicitly in code. + /// This also includes a setting to either automatically start the + /// keyword recognizer or allow your code to start it. + /// + /// IMPORTANT: Please make sure to add the microphone capability in your app, in Unity under + /// Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities + /// or in your Visual Studio Package.appxmanifest capabilities. + /// + public partial class KeywordManager : MonoBehaviour + { + [System.Serializable] + public struct KeywordAndResponse + { + [Tooltip("The keyword to recognize.")] + public string Keyword; + [Tooltip("The KeyCode to recognize.")] + public KeyCode KeyCode; + [Tooltip("The UnityEvent to be invoked when the keyword is recognized.")] + public UnityEvent Response; + } + + // This enumeration gives the manager two different ways to handle the recognizer. Both will + // set up the recognizer and add all keywords. The first causes the recognizer to start + // immediately. The second allows the recognizer to be manually started at a later time. + public enum RecognizerStartBehavior { AutoStart, ManualStart }; + + [Tooltip("An enumeration to set whether the recognizer should start on or off.")] + public RecognizerStartBehavior RecognizerStart; + + [Tooltip("An array of string keywords and UnityEvents, to be set in the Inspector.")] + public KeywordAndResponse[] KeywordsAndResponses; + + private KeywordRecognizer keywordRecognizer; + private readonly Dictionary responses = new Dictionary(); + + void Start() + { + int keywordCount = KeywordsAndResponses.Length; + if (keywordCount > 0) + { + try + { + string[] keywords = new string[keywordCount]; + // Convert the struct array into a dictionary, with the keywords and the keys and the methods as the values. + // This helps easily link the keyword recognized to the UnityEvent to be invoked. + for (int index = 0; index < keywordCount; index++) + { + KeywordAndResponse keywordAndResponse = KeywordsAndResponses[index]; + responses[keywordAndResponse.Keyword] = keywordAndResponse.Response; + keywords[index] = keywordAndResponse.Keyword; + } + + keywordRecognizer = new KeywordRecognizer(keywords); + keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized; + + if (RecognizerStart == RecognizerStartBehavior.AutoStart) + { + keywordRecognizer.Start(); + } + } + catch (ArgumentException) + { + Debug.LogError("Duplicate keywords specified in the Inspector on " + gameObject.name + "."); + } + } + else + { + Debug.LogError("Must have at least one keyword specified in the Inspector on " + gameObject.name + "."); + } + } + + void Update() + { + if (keywordRecognizer != null && keywordRecognizer.IsRunning) + { + ProcessKeyBindings(); + } + } + + void OnDestroy() + { + if (keywordRecognizer != null) + { + StopKeywordRecognizer(); + keywordRecognizer.OnPhraseRecognized -= KeywordRecognizer_OnPhraseRecognized; + keywordRecognizer.Dispose(); + } + } + + void OnDisable() + { + if (keywordRecognizer != null) + { + StopKeywordRecognizer(); + } + } + + void OnEnable() + { + if (keywordRecognizer != null && RecognizerStart == RecognizerStartBehavior.AutoStart) + { + StartKeywordRecognizer(); + } + } + + private void ProcessKeyBindings() + { + foreach (var kvp in KeywordsAndResponses) + { + if (Input.GetKeyDown(kvp.KeyCode)) + { + kvp.Response.Invoke(); + return; + } + } + } + + private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) + { + UnityEvent keywordResponse; + + // Check to make sure the recognized keyword exists in the methods dictionary, then invoke the corresponding method. + if (responses.TryGetValue(args.text, out keywordResponse)) + { + keywordResponse.Invoke(); + } + } + + /// + /// Make sure the keyword recognizer is off, then start it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StartKeywordRecognizer() + { + if (keywordRecognizer != null && !keywordRecognizer.IsRunning) + { + keywordRecognizer.Start(); + } + } + + /// + /// Make sure the keyword recognizer is on, then stop it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StopKeywordRecognizer() + { + if (keywordRecognizer != null && keywordRecognizer.IsRunning) + { + keywordRecognizer.Stop(); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs.meta new file mode 100644 index 0000000..557b252 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f2795b3e072e1745a4f8c670d64284f +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs new file mode 100644 index 0000000..07c9735 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace HoloToolkit.Unity.InputModule +{ + public class SpeechInputHandler : MonoBehaviour, ISpeechHandler + { + [System.Serializable] + public struct KeywordAndResponse + { + [Tooltip("The keyword to handle.")] + public string Keyword; + [Tooltip("The handler to be invoked.")] + public UnityEvent Response; + } + + [Tooltip("The keywords to be recognized and optional keyboard shortcuts.")] + public KeywordAndResponse[] keywords; + + [NonSerialized] + private readonly Dictionary responses = new Dictionary(); + + // Use this for initialization + protected virtual void Start() + { + // Convert the struct array into a dictionary, with the keywords and the methods as the values. + // This helps easily link the keyword recognized to the UnityEvent to be invoked. + int keywordCount = keywords.Length; + for (int index = 0; index < keywordCount; index++) + { + KeywordAndResponse keywordAndResponse = keywords[index]; + string keyword = keywordAndResponse.Keyword.ToLower(); + if (responses.ContainsKey(keyword)) + { + Debug.LogError("Duplicate keyword '" + keyword + "' specified in '" + gameObject.name + "'."); + } + else + { + responses.Add(keyword, keywordAndResponse.Response); + } + } + } + + void ISpeechHandler.OnSpeechKeywordRecognized(SpeechKeywordRecognizedEventData eventData) + { + UnityEvent keywordResponse; + + // Check to make sure the recognized keyword exists in the methods dictionary, then invoke the corresponding method. + if (enabled && responses.TryGetValue(eventData.RecognizedText.ToLower(), out keywordResponse)) + { + keywordResponse.Invoke(); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs.meta new file mode 100644 index 0000000..347f8ed --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e7d6513c2cdf97f409654a2a4114d9b1 +timeCreated: 1482243203 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs new file mode 100644 index 0000000..d763199 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs @@ -0,0 +1,182 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.Windows.Speech; + +namespace HoloToolkit.Unity.InputModule +{ + /// + /// SpeechInputSource allows you to specify keywords and methods in the Unity + /// Inspector, instead of registering them explicitly in code. + /// This also includes a setting to either automatically start the + /// keyword recognizer or allow your code to start it. + /// + /// IMPORTANT: Please make sure to add the microphone capability in your app, in Unity under + /// Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities + /// or in your Visual Studio Package.appxmanifest capabilities. + /// + public partial class SpeechInputSource : BaseInputSource + { + [System.Serializable] + public struct KeywordAndKeyCode + { + [Tooltip("The keyword to recognize.")] + public string Keyword; + [Tooltip("The KeyCode to recognize.")] + public KeyCode KeyCode; + } + + // This enumeration gives the manager two different ways to handle the recognizer. Both will + // set up the recognizer and add all keywords. The first causes the recognizer to start + // immediately. The second allows the recognizer to be manually started at a later time. + public enum RecognizerStartBehavior { AutoStart, ManualStart }; + + [Tooltip("Whether the recognizer should be activated on start.")] + public RecognizerStartBehavior RecognizerStart; + + [Tooltip("The keywords to be recognized and optional keyboard shortcuts.")] + public KeywordAndKeyCode[] Keywords; + + private KeywordRecognizer keywordRecognizer; + + private SpeechKeywordRecognizedEventData speechKeywordRecognizedEventData; + + protected override void Start() + { + base.Start(); + + speechKeywordRecognizedEventData = new SpeechKeywordRecognizedEventData(EventSystem.current); + + int keywordCount = Keywords.Length; + if (keywordCount > 0) + { + string[] keywords = new string[keywordCount]; + for (int index = 0; index < keywordCount; index++) + { + keywords[index] = Keywords[index].Keyword; + } + keywordRecognizer = new KeywordRecognizer(keywords); + keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized; + + if (RecognizerStart == RecognizerStartBehavior.AutoStart) + { + keywordRecognizer.Start(); + } + } + else + { + Debug.LogError("Must have at least one keyword specified in the Inspector on " + gameObject.name + "."); + } + } + + protected virtual void Update() + { + if (keywordRecognizer != null && keywordRecognizer.IsRunning) + { + ProcessKeyBindings(); + } + } + + protected virtual void OnDestroy() + { + if (keywordRecognizer != null) + { + StopKeywordRecognizer(); + keywordRecognizer.OnPhraseRecognized -= KeywordRecognizer_OnPhraseRecognized; + keywordRecognizer.Dispose(); + } + } + + protected virtual void OnDisable() + { + if (keywordRecognizer != null) + { + StopKeywordRecognizer(); + } + } + + protected virtual void OnEnable() + { + if (keywordRecognizer != null && RecognizerStart == RecognizerStartBehavior.AutoStart) + { + StartKeywordRecognizer(); + } + } + + private void ProcessKeyBindings() + { + for (int index = Keywords.Length; --index >= 0;) + { + if (Input.GetKeyDown(Keywords[index].KeyCode)) + { + OnPhraseRecognized(ConfidenceLevel.High, TimeSpan.Zero, DateTime.Now, null, Keywords[index].Keyword); + } + } + } + + private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) + { + OnPhraseRecognized(args.confidence, args.phraseDuration, args.phraseStartTime, args.semanticMeanings, args.text); + } + + /// + /// Make sure the keyword recognizer is off, then start it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StartKeywordRecognizer() + { + if (keywordRecognizer != null && !keywordRecognizer.IsRunning) + { + keywordRecognizer.Start(); + } + } + + /// + /// Make sure the keyword recognizer is on, then stop it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + public void StopKeywordRecognizer() + { + if (keywordRecognizer != null && keywordRecognizer.IsRunning) + { + keywordRecognizer.Stop(); + } + } + + private static readonly ExecuteEvents.EventFunction OnSpeechKeywordRecognizedEventHandler = + delegate (ISpeechHandler handler, BaseEventData eventData) + { + SpeechKeywordRecognizedEventData casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSpeechKeywordRecognized(casted); + }; + + protected void OnPhraseRecognized(ConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, SemanticMeaning[] semanticMeanings, string text) + { + // Create input event + speechKeywordRecognizedEventData.Initialize(this, 0, confidence, phraseDuration, phraseStartTime, semanticMeanings, text); + + // Pass handler through HandleEvent to perform modal/fallback logic + inputManager.HandleEvent(speechKeywordRecognizedEventData, OnSpeechKeywordRecognizedEventHandler); + } + + public override bool TryGetPosition(uint sourceId, out Vector3 position) + { + position = Vector3.zero; + return false; + } + + public override bool TryGetOrientation(uint sourceId, out Quaternion orientation) + { + orientation = Quaternion.identity; + return false; + } + + public override SupportedInputInfo GetSupportedInputInfo(uint sourceId) + { + return SupportedInputInfo.None; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs.meta b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs.meta new file mode 100644 index 0000000..cf56baa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Scripts/Voice/SpeechInputSource.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c62fd7a55ba7458499b69cae18f83806 +timeCreated: 1480671562 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders.meta b/HoloBot/Assets/HoloToolkit/Input/Shaders.meta new file mode 100644 index 0000000..28b5078 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 567263514c68df24a8aa456a5dc6c8f4 +folderAsset: yes +timeCreated: 1466793338 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader b/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader new file mode 100644 index 0000000..add56d2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader @@ -0,0 +1,54 @@ +Shader "HoloToolkit/Cursor" +{ + Properties + { + _Color ("Color", Color) = (1, 1, 1, 1) + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + float4 _Color; + + v2f vert (appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + + v2f o; + o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); + + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = _Color; + return col; + } + ENDCG + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader.meta b/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader.meta new file mode 100644 index 0000000..5bf93e4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/Cursor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 51c87b08c4bd5cd4eabce20953fbe2e7 +timeCreated: 1471371239 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader b/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader new file mode 100644 index 0000000..a80203e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader @@ -0,0 +1,96 @@ +Shader "HoloToolkit/Cursor" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + UNITY_SETUP_INSTANCE_ID(IN); + + v2f OUT; + OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); + OUT.texcoord = IN.texcoord; +#ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); +#endif + OUT.color = IN.color * _Color; + + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + return OUT; + } + + sampler2D _MainTex; + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; + clip (color.a - 0.01); + return color; + } + ENDCG + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader.meta b/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader.meta new file mode 100644 index 0000000..059794e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/CursorShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1c78697a7c77f7a49873eb4602b26988 +timeCreated: 1444775332 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader b/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader new file mode 100644 index 0000000..aedeb8f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader @@ -0,0 +1,93 @@ +Shader "HoloToolkit/EditorHands" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + [PerRendererData] _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + UNITY_VERTEX_OUTPUT_STEREO + }; + fixed4 _Color; + v2f vert(appdata_t IN) + { + UNITY_SETUP_INSTANCE_ID(IN); + v2f OUT; + OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); + OUT.texcoord = IN.texcoord; + #ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); + #endif + OUT.color = IN.color * _Color; + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + return OUT; + } + + + sampler2D _MainTex; + fixed4 frag(v2f IN) : SV_Target + { + half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; + clip (color.a - 0.01); + return color; + } + + ENDCG + } + } + CustomEditor "EditorHandsMaterialInspector" +} diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader.meta b/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader.meta new file mode 100644 index 0000000..cb5c15c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/EditorHands.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 17b35d8a8e5e92d4ebcf1933bf853497 +timeCreated: 1444775332 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader b/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader new file mode 100644 index 0000000..31d7b2e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader @@ -0,0 +1,177 @@ +// +// Copyright (C) Microsoft. All rights reserved. +// + +Shader "HoloToolkit/SpecularHighlight" +{ + Properties + { + _Color("Main Color", Color) = (1,1,1,1) + _HighlightColor("Highlight Color", Color) = (1,1,1,1) + _MainTex1("Albedo", 2D) = "white" { } + _Specular("Specular", Color) = (0.08,0.075,0.065,1) + _Shininess("Shininess", float) = 3.0 + _Highlight("Highlight", float) = 0.0 + } + + CGINCLUDE +#include "UnityCG.cginc" +#include "AutoLight.cginc" +#include "Lighting.cginc" + ENDCG + + SubShader + { + Tags { "RenderType" = "Opaque" } + LOD 200 + Pass + { + Lighting On + Tags {"LightMode" = "ForwardBase"} + + CGPROGRAM + + #pragma exclude_renderers gles + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fwdbase + #pragma target 5.0 + #pragma only_renderers d3d11 + + // Low precision floating point types + #define lowp min16float + #define lowp2 min16float2 + #define lowp3 min16float3 + #define lowp4 min16float4 + #define WORLD_NORMAL(vertexNormal) lowp4((normalize((lowp3)mul(vertexNormal, (float3x3)unity_WorldToObject))), 1.0f) + + #define SPECULAR_ON 1 + #define REFLECTION_ON 0 + + float3 _Color; + float3 _HighlightColor; + sampler2D _MainTex1; + float4 _Specular; + float _Shininess; + float _Highlight; + + sampler2D _SimpleShadow; + uniform float4x4 _World2SimpleShadow; + + float _CubeContribution; + float _FresnelPower; + samplerCUBE _Cube; + + struct appdata_t + { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 texcoord : TEXCOORD0; + lowp4 color : COLOR; + }; + + struct v2f + { + float4 pos : POSITION; + lowp2 uv : TEXCOORD0; + lowp3 color : COLOR; + lowp3 diffuse : TEXCOORD2; + +#if SPECULAR_ON + lowp3 specular : TEXCOORD4; +#endif + +#if REFLECTION_ON + lowp3 worldViewDir : TEXCOORD5; + lowp3 worldNormal : TEXCOORD6; + lowp3 reflection : TEXCOORD7; +#endif + + }; + + v2f vert(appdata_t v) + { + v2f o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.uv = v.texcoord; + + //Setup vectors for light probe contribution, w = 1. + lowp4 worldNormal = WORLD_NORMAL(v.normal); + + //Calculate light probe contribution + lowp3 x1; + // Linear + constant polynomial terms + x1.r = dot(unity_SHAr, worldNormal); + x1.g = dot(unity_SHAg, worldNormal); + x1.b = dot(unity_SHAb, worldNormal); + + //transfering color to pixel shader for use in diffuse output + o.color = v.color * _Color; + + lowp nDotL = saturate(dot((lowp3)_WorldSpaceLightPos0.xyz, worldNormal.xyz)); + lowp3 halfLightColor = _LightColor0.rgb * (lowp).5f; + + // Store half the color of the light as diffuse and half as ambient + o.diffuse = halfLightColor * nDotL; + +#if SPECULAR_ON || REFLECTION_ON + lowp3 worldViewDir = normalize(WorldSpaceViewDir(v.vertex)); +#endif + +#if SPECULAR_ON + // Calculate specular + // TODO WorldLightDir is constant each frame. Normalize this on the CPU instead. + lowp3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); + lowp3 halfVector = normalize(worldLightDir + worldViewDir); + + lowp3 specNormal = normalize(worldNormal); + lowp specDot = saturate(dot(specNormal, halfVector)); + + // Pre-adding specular into ambient so we don't + // have to do it in the fragment shader + o.specular = _Specular * saturate(pow(specDot, _Shininess)) * 5; +#endif + +#if REFLECTION_ON + o.worldNormal = worldNormal; + o.worldViewDir = worldViewDir; + o.reflection = reflect(-worldViewDir, worldNormal.xyz * 1.0); +#endif + return o; + } + + + lowp4 frag(v2f i) : COLOR + { + lowp attenuation = 1.0f; + lowp3 albedo; + { + albedo = (lowp3)tex2D(_MainTex1, i.uv) * i.color; +#if SPECULAR_ON + albedo += i.specular; +#endif + +#if REFLECTION_ON + lowp fresnel = saturate(dot(i.worldNormal, i.worldViewDir)); + // Try and sneak a MAD in there + lowp fresnelRatio = (fresnel * fresnel) * (-(lowp)_FresnelPower) + (lowp)1.0; + albedo += texCUBE(_Cube, i.reflection) * _CubeContribution * fresnelRatio; +#endif + } + + lowp3 irradiance; + { + irradiance = i.diffuse; + irradiance = irradiance * attenuation + albedo; + } + + lowp3 exitantRadiance = albedo * irradiance + _HighlightColor * _Highlight; + + lowp alpha = 1.0f; + return lowp4(exitantRadiance, alpha); + } + ENDCG + } + } + Fallback "VertexLit" +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader.meta b/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader.meta new file mode 100644 index 0000000..76a50a9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Input/Shaders/SpecularHighlight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f326278a838e87c499393f30a8e72127 +timeCreated: 1461882034 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing.meta b/HoloBot/Assets/HoloToolkit/Sharing.meta new file mode 100644 index 0000000..811ed26 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fa3fb3fd8dafc484487449a62b4fab72 +folderAsset: yes +timeCreated: 1456611862 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins.meta new file mode 100644 index 0000000..b58dd23 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5f788fe1ea017744fa7365052305669e +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA.meta new file mode 100644 index 0000000..b71f665 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b474aba3141da224aa5a9100f8838cde +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM.meta new file mode 100644 index 0000000..21cbbbc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 04160e0c231a5714c982df6de2d09433 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll new file mode 100644 index 0000000..9a51b44 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll.meta new file mode 100644 index 0000000..84d2da8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/ARM/SharingClient.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: e34562f7419002c42acf845c89fd2c5a +timeCreated: 1456615159 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: ARM + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64.meta new file mode 100644 index 0000000..941f024 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85059dffc84910e4993d5e1da0604b7d +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll new file mode 100644 index 0000000..7466624 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll.meta new file mode 100644 index 0000000..9c9c6aa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x64/SharingClient.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 7ca2360a11146cc4cb740a0eab60b6b4 +timeCreated: 1456615159 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86.meta new file mode 100644 index 0000000..bd039e6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bcf9bdf58e801514daf1ce7f10b88a7b +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll new file mode 100644 index 0000000..70ffcf2 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll.meta new file mode 100644 index 0000000..580a7c4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/WSA/x86/SharingClient.dll.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 524bc2fa88e9e2249a3bace97aee437c +timeCreated: 1456615159 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64.meta new file mode 100644 index 0000000..276a81f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6cb6ac333da98c74facd3d4c621690e0 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll new file mode 100644 index 0000000..19a487f Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll.meta new file mode 100644 index 0000000..35524c1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x64/SharingClient.dll.meta @@ -0,0 +1,62 @@ +fileFormatVersion: 2 +guid: 851c5df1d1918514ebd9f776dae6844d +timeCreated: 1458942114 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: x86_64 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86.meta new file mode 100644 index 0000000..ba50f98 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c765185e90368834bb85c1a8c0816010 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll new file mode 100644 index 0000000..c63ddcd Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll differ diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll.meta b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll.meta new file mode 100644 index 0000000..cb7d81e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Plugins/x86/SharingClient.dll.meta @@ -0,0 +1,62 @@ +fileFormatVersion: 2 +guid: fcb86078da5d38b4b9010f905416d334 +timeCreated: 1458942114 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: x86 + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: x86 + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Prefabs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs.meta new file mode 100644 index 0000000..c077980 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aa5a1f5c296fe8c48a336bca1f65bef8 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab new file mode 100644 index 0000000..a8e04e3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab @@ -0,0 +1,74 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &163528 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 475158} + - component: {fileID: 114000012667812730} + - component: {fileID: 114000013602799446} + m_Layer: 0 + m_Name: Sharing + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &475158 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163528} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 163528} + m_IsPrefabParent: 1 +--- !u!114 &114000012667812730 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9af4ac91e9017f34c971bbf5e12948d3, type: 3} + m_Name: + m_EditorClassIdentifier: + ClientRole: 0 + ServerAddress: localhost + ServerPort: 20602 + connectOnAwake: 1 + AutoDiscoverServer: 0 + PingIntervalSec: 2 + IsAudioEndpoint: 1 + ShowDetailedLogs: 0 +--- !u!114 &114000013602799446 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 163528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8fa5da1314a4aa745a5be3f0f6ab6bd6, type: 3} + m_Name: + m_EditorClassIdentifier: + SessionName: Default diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab.meta b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab.meta new file mode 100644 index 0000000..fff8d84 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Prefabs/Sharing.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8aaf37823b26ee449bb3b3d7775965c3 +timeCreated: 1454460865 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/README.md b/HoloBot/Assets/HoloToolkit/Sharing/README.md new file mode 100644 index 0000000..954d5c8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/README.md @@ -0,0 +1,377 @@ +## [Sharing]() +The HoloToolkit.Sharing library allows applications to span multiple devices, and enables holographic collaboration. + +Originally developed for OnSight, a collaboration between SOTA (a Microsoft studio) and NASA to enhance their existing Mars rover planning tool with HoloLens, HoloToolkit.Sharing enables users to use multiple devices for a task by allowing the apps running on each device communicate and stay in sync seamlessly in real time. + +Users can also collaborate with other users (who are also using multiple devices) who may be in the same room or working remotely. + +## Table of Contents + +- [Features](#features) +- [Configuration](#configuration) +- [Troubleshooting](#troubleshooting) +- [Plugins](#plugins) +- [Prefabs](#prefabs) +- [Scripts](#scripts) +- [Test Prefabs](#test-prefabs) +- [Test Scripts](#test-scripts) +- [Tests](#tests) + +### Features +--- + +#### Lobby & Session system +* Discover available sessions or create your own +* Permanent or ‘until empty’ session lifetime +* See user status: current session, mute state +* Easy to discover and hop between sessions + +#### Anchor Sharing +* Users in a session can be in the same or different physical rooms +* Users can share the location of Holographic 'anchors' they place in their room with other users in the same room +* Users joining late can download all anchors in the session +* Allows multiple users to see shared holograms + +#### Synchronization System +Synchronize data across all participants in session +* Everyone in session guaranteed to see the same thing +* Automatic conflict resolution for simultanious conflicting remote changes +* Real-time: See remote changes as they happen +* Shared data sets automatically merged when new users join a session +* Responsive: no delay in your own changes +* Ownership: your data leaves session when you do + +#### Group Voice Chat +Support for VOIP is built-in +* Server-based mixing lowers processing and bandwidth requirements for clients + +#### Visual Pairing +Connect devices just by looking at them +* One device displays a QR code with connection info and security code +* Other device sees QR code, connects, and validates with security code +* Can also detect location in 3D space using built-in fiducial marker support + +#### Profiler +Profiling and debugging an experience that spans multiple devices is challenging. So HoloToolkit.Sharing provides an app that can connect to multiple devices at once and aggregates their timings and debug output in a single place + +#### Sync Model + +HoloToolkit.Sharing has the ability to synchronize data across any application connected to a given session. Conflict resolution is automatically handled by the framework, at whichever level the conflict occurs. + +##### Primitive Types +The following primitives are natively supported by the sync system. The C# class that corresponds to each primitive is written in parentheses. + +- Boolean (SyncBool) +- Double (SyncDouble) +- Float (SyncFloat) +- Integer (SyncInteger) +- Long (SyncLong) +- Object, which is a container class that can have child primitives (SyncObject +- String (SyncString) + +On top of the native primitives above, the following types are supported in the C# layer: + +- Quaternion (SyncQuaternion) +- Transform (SyncTransform) +- Unordered array (SyncArray) +- Vector3 (SyncVector3) + +Other types can be built for your own application as needed by inheriting from SyncObject in a similar way to what SyncVector3 and SyncTransform do. + +##### Defining the Sync Model +By default, the SyncRoot object (which inherits from SyncObject) only contains an array of InstantiatedPrefabs, which may not be enough for your application. + +For any type inheriting from SyncObject, you can easily add new children primitives by using the SyncData attribute, such as in the following example: + + + public class MySyncObject : SyncObject + { + [SyncData] + public SyncSpawnArray OtherSyncObject; + + [SyncData] + public SyncFloat FloatValue; + } + +Any SyncPrimitive tagged with the [SyncData] attribute will automatically be added to the data model and synced in the current HoloToolkit.Sharing session. + +### Configuration +--- +Ensure you have the following capabilities set in Player Settings -> Windows Store -> Publishing Settings -> Capabilities: + +1. SpatialPerception +2. InternetClientServer +3. PrivateNetworkClientServer +4. Microphone capabilities + +Install or run the server instance. + +### Troubleshooting +--- +- Double check the Server Address on your sharing stage component in your scene matches the address shown in the sharing service console. +- Make sure all devices are connected to the same Wireless Local Area Network. +- Ensure all firewall settings are correct. Windows firewall gives you options to enable/disable by network type (private, public, home), make sure you're enabling the firewall for your connection's type. + +####Invalid Schema Version + +``` +SharingService [..\..\Source\Common\Private\SessionListHandshakeLogic.cpp (67)]: +*************************************************************** +List Server Handshake Failed: Invalid schema version. +Expected: 17, got 15 +Please sync to latest XTools +*************************************************************** +``` + +- Ensure you're using the latest binaries of the sharing service found at `HoloToolkit-Unity\External\HoloToolkit\Sharing\Server`. + +### [Plugins](Plugins) +--- +Contains compiled architecture specific binaries for SharingClient.dll which are required by the Unity application for accessing sharing APIs. +Binaries are compiled from the native [HoloToolkit\Sharing](https://github.com/Microsoft/HoloToolkit/tree/master/Sharing). + +### [Prefabs](Prefabs) +--- +Prefabs related to the sharing and networking features. + +#### Sharing.prefab +1. Enables sharing and networking in your Unity application. +2. Allows you to communicate between a Windows and non-Windows device. + +**SharingStage.cs** allows you to be a Primary Client (typical case). +**Server Address** is the IP address of the machine running the HoloToolkit -> Launch Sharing Service. +**Server Port** displays the port being used for communicating. + +**AutoJoinSession.cs** creates a shared session with Session Name 'Default' which is customizable. +Joins a player to that session if once already exists. + +### [Scripts](Scripts) +--- +Scripts related to the sharing and networking features. + +#### [Editor](Scripts/Editor) +--- +Scripts for in editor use only. + +##### SharingMenu.cs +Enables users to start the Sharing Service, Sharing Manager, and Profiler from the Unity Editor via the HoloToolkit Menu. + +##### SharingStageEditor.cs +Draws the default Sharing Stage Inspector and adds the SyncRoot Hierarchy view so users can quickly verify Sync Object updates. + +#### [SDK](Scripts/SDK) +--- +Contains scripts compiled from the native [HoloToolkit\Sharing](https://github.com/Microsoft/HoloToolkit/tree/master/Sharing) repository and using the SWIG tool to generate different language bindings. + +#### [Spawning](Scripts/Spawning) +--- +Scripts for spawning objects using the sharing service. + +##### PrefabSpawnerManager.cs +A SpawnManager that creates a GameObject based on a prefab when a new SyncSpawnedObject is created in the data model. This class can spawn prefabs in reaction to the addition/removal of any object that inherits from SyncSpawnedObject, thus allowing applications to dynamically spawn prefabs as needed. + +The PrefabSpawnManager registers to the SyncArray of InstantiatedPrefabs in the SyncRoot object. + +The various classes can be linked to a prefab from the editor by specifying which class corresponds to which prefab. Note that the class field is currently a string that has to be typed in manually ("SyncSpawnedObject", for example): this could eventually be improved through a custom editor script. + +##### SpawnManager.cs +A SpawnManager is in charge of spawning the appropriate objects based on changes to an array of data model objects. It also manages the lifespan of these spawned objects. + +This is an abstract class from which you can derive a custom SpawnManager to react to specific synchronized objects being added or removed from the data model. + +##### SyncSpawnArray.cs +This array is meant to hold SyncSpawnedObject and objects of subclasses. Compared to SyncArray, this supports dynamic types for objects. + +##### SyncSpawnedObject.cs +A SpawnedObject contains all the information needed for another device to spawn an object in the same location as where it was originally created on this device. + +#### [SyncModel](Scripts/SyncModel) +--- +Scripts for syncing data over sharing service. + +##### SyncArray.cs +The SyncArray class provides the functionality of an array in the data model. The array holds entire objects, not primitives, since each object is indexed by unique name. Note that this array is unordered. + +##### SyncBool.cs +This class implements the boolean primitive for the syncing system. It does the heavy lifting to make adding new bools to a class easy. + +##### SyncDataAttributes.cs +Used to markup SyncObject classes and SyncPrimitives inside those classes, so that they properly get instantiated when using a hierarchical data model that inherits from SyncObject. + +##### SyncDouble.cs +This class implements the double primitive for the syncing system. It does the heavy lifting to make adding new doubles to a class easy. + +##### SyncFloat.cs +This class implements the float primitive for the syncing system. It does the heavy lifting to make adding new floats to a class easy. + +##### SyncInteger.cs +This class implements the integer primitive for the syncing system. It does the heavy lifting to make adding new integers to a class easy. + +##### SyncLong.cs +This class implements the long primitive for the syncing system. It does the heavy lifting to make adding new longs to a class easy. + +##### SyncObject.cs +The SyncObject class is a container object that can hold multiple SyncPrimitives. + +##### SyncPrimitive.cs +Base primitive used to define an element within the data model. The primitive is defined by a field and a value. + +##### SyncQuaternion.cs +This class implements the Quaternion object primitive for the syncing system. It does the heavy lifting to make adding new Quaternion to a class easy. + +##### SyncString.cs +This class implements the string primitive for the syncing system. It does the heavy lifting to make adding new strings to a class easy. + +##### SyncTransform.cs +This class implements the Transform object primitive for the syncing system. It does the heavy lifting to make adding new transforms to a class easy. A transform defines the position, rotation and scale of an object. + +##### SyncVector3.cs +This class implements the Vector3 object primitive for the syncing system. It does the heavy lifting to make adding new Vector3 to a class easy. + +#### [Unity](Scripts/Unity) +--- +Scripts used to implement unity specific sync services. + +##### DefaultSyncModelAccessor.cs +Default implementation of a behaviour that allows other components of a game object access the shared data model as a raw SyncObject instance. + +##### ISyncModelSccessor.cs +Interface that allows a components of a game object access the shared data model set by a SpawnManager. + +##### TransformSynchronizer.cs +Synchronizer to update and broadcast a transform object through our data model. + +#### [Utilities](Scripts/Utilities) +--- +Scripts for sync service utilities. + +##### AutoJoinSession.cs +A behaviour component that allows the application to automatically join the specified session as soon as the application has a valid server connection. This class will also maintain the session connection throughout the application lifetime. + +This is mostly meant to be used to quickly test networking in an application. In most cases, some session management code should be written to allow users to join/leave sessions according to the desired application flow. + +##### ConsoleLogWriter.cs +Utility class that writes the sharing service log messages to the Unity Engine's console. + +##### DirectPairing.cs +This class enables users to pair with a remote client directly. One side should use the Receiver role, the other side should use the Connector role. RemoteAddress and RemotePort are used by the Connector role, LocalPort is used by the Receiver. + +#### [VoiceChat](Scripts/VoiceChat) +--- +Scripts for Voice Chat service. + +##### MicrophoneReceiver.cs +Receives and plays voice data transmitted through the session server. This data comes from other clients running the MicrophoneTransmitter behaviour. + +##### MicrophoneTransmitter.cs +Transmits data from your microphone to other clients connected to a SessionServer. Requires any receiving client to be running the MicrophoneReceiver script. + +--- + +#### ServerSessionTracker.cs +The ServerSessionsTracker is in charge of listing the various sessions that exist on the server, and exposes events related to all of these sessions. This is also the class that allows the application to join or leave a session. Instance is created by Sharing Stage when a connection is found. + +#### SessionUsersTracker.cs +The SessionUsersTracker keeps track of the current session and its users. It also exposes events that are triggered whenever users join or leave the current session. Instance is created by Sharing Stage when a connection is found. + +#### SharingStage.cs +A Singleton behaviour that is in charge of managing the core networking layer for the application. The SharingStage has the following responsibilities: + +- Server configuration (address, port and client role) +- Establish and manage the server connection +- Create and initialize the synchronized data model (SyncRoot) +- Create the ServerSessionsTracker that tracks all sessions on the server +- Create the SessionUsersTracker that tracks the users in the current session + +#### SyncRoot.cs +Root of the synchronized data model, under which every element of the model should be located. The SharingStage will automatically create and initialize the SyncRoot at application startup. + +#### SyncSettings.cs +Collection of sharing sync settings, used by the HoloToolkit Sharing sync system to figure out which data model classes need to be instantiated when receiving data that inherits from SyncObject. + +#### SyncStateListener.cs +C# wrapper for the Sharing SyncListener, making changes available through the Action class. + +### [Test Prefabs](Tests/Prefabs) +--- +Prefabs used in the various test scenes, which you can use as inspiration to build your own. + +#### SpawnTestCube.prefab +Simple Cube prefab with a Transform, Mesh Filter, Box Collider, Mesh Renderer, and Default Sync Model Accessor components. + +#### SpawnTestSphere.prefab +A simple Sphere prefab with a Transform, Mesh Filter, Sphere Collider, and Mesh Renderer components. +Purposefully missing Default Sync Model Accessor component for SharingSpawnTest. + +### [Test Scripts](Tests/Scripts) +--- +Test Scripts. + +#### CustomMessages.cs +Test class for demonstrating how to send custom messages between clients. + +#### ImportExportAnchorManager.cs +Manages creating anchors and sharing the anchors with other clients. + +#### RemoteHeadManager.cs +Broadcasts the head transform of the local user to other users in the session, and adds and updates the head transforms of remote users. Head transforms are sent and received in the local coordinate space of the GameObject this component is on. + +#### RoomTest.cs +Test class for demonstrating creating rooms and anchors. + +#### SyncObjectSpawner.cs +Class that handles spawning and deleteing sync objects for the `SpawningTest.scene`. Uses the `KeywordManager` to spawn objects using voice and keyboard input. + +|Voice Command|Key Command|Description| +|---|---|---| +| Spawn Basic | Key `I`| Spawns a cube with a `SyncSpawnedObject` basic sync model.| +| Spawn Custom | Key `O`| Spawns a sphere with a `SyncSpawnTestSphere` custom sync model.| +| Delete Object | Key `M`| Deletes both sync model types.| + +#### SyncSpawnTestSphere.cs +Class that demonstrates a custom class using sync model attributes. + +#### UserNotifications.cs +Used to demonstrate how to get notifications when users leave and enter room. + +### [Tests](Tests/Scenes) +--- +Tests related to the sharing features. To use the each scene: + +1. Navigate to the Tests folder. +2. Double click on the test scene you wish to explore. +3. Either click "Play" in the unity editor or File -> Build Settings. +4. Add Open Scenes, Platform -> Windows Store, SDK -> Universal 10, Build Type -> D3D, Check 'Unity C# Projects'. +5. Enable all required [capabilities](configuration). +6. Click 'Build' and create an App folder. When compile is done, open the solution and deploy to device. + +#### SharingTest.unity +This test demonstrates how to use the Sharing prefabs for networking and sharing custom messages with clients. +It also demonstrates how to share world anchors between clients to establish a shared space. + +1. Ensure to launch the sharing service using: HoloToolkit -> Launch Sharing service +2. Enter the IP address displayed in the console window into the Server Address of the Sharing object. +3. **CustomMessages.cs** shows how to communicate specific information across clients. +4. **ImportExportAnchorManager.cs** shows how to create anchors and share them with other clients using the sharing service. +5. **RemoteHeadManager.cs** draw cubes on remote heads of users joining the session. + +#### RoomAndAnchorTest.unity +This test demonstrates how to create new rooms and anchors inside your application. +It also demonstrates how to upload and download new anchors. + +1. Ensure to launch the sharing service using: HoloToolkit -> Launch Sharing service +2. Enter the IP address displayed in the console window into the Server Address of the Sharing object. +3. **RoomTest.cs** shows how to create, join, and leave rooms; also shows how to create and download anchors. + +#### SharingSpawnTest.unity +This test demonstrates how to spawn and delete sync objects in your scene and across your networked clients. + +1. Ensure to launch the sharing service using: HoloToolkit -> Launch Sharing service +2. Enter the IP address displayed in the console window into the Server Address of the Sharing object. +3. **PrefabSpawnManager.cs** enables you to store prefab references to use when spawning. +4. **SyncObjectSpawner.cs** demonstrates how to spawn and delete sync objects, as well as custom class types. + +--- +##### [Go back up to the table of contents](#table-of-contents) +##### [Go back to the main page.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/Sharing/README.md.meta b/HoloBot/Assets/HoloToolkit/Sharing/README.md.meta new file mode 100644 index 0000000..f439bf9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 978345edff4a3ea4cb8ca1e56e7d3257 +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts.meta new file mode 100644 index 0000000..9a2d38a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ece6b30733993ed418105192d199ba9c +folderAsset: yes +timeCreated: 1456611862 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor.meta new file mode 100644 index 0000000..d2a6c73 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cf3a15147feff8e4aa8134f6c34b4682 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs new file mode 100644 index 0000000..a093dba --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.IO; +using UnityEditor; +using UnityEngine; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing +{ + public static class SharingMenu + { + [MenuItem("HoloToolkit/Sharing Service/Launch Sharing Service", false, 100)] + public static void LaunchSessionServer() + { + string filePathName = @"External\HoloToolkit\Sharing\Server\SharingService.exe"; + + if (!File.Exists(filePathName)) + { + Debug.LogError("Sharing service does not exist at location: " + filePathName); + Debug.LogError("Manually copy SharingService.exe to this path from HoloToolkit-Unity\\External."); + return; + } + + ExternalProcess.FindAndLaunch(filePathName, @"-local"); + } + + [MenuItem("HoloToolkit/Sharing Service/Launch Session Manager", false, 101)] + public static void LaunchSessionUI() + { + string filePathName = @"External\HoloToolkit\Sharing\Tools\SessionManager\x86\SessionManager.UI.exe"; + + if (!File.Exists(filePathName)) + { + Debug.LogError("Session Manager UI does not exist at location: " + filePathName); + Debug.LogError("Manually copy SessionManager.UI.exe to this path from HoloToolkit-Unity\\External."); + return; + } + + ExternalProcess.FindAndLaunch(filePathName); + } + + [MenuItem("HoloToolkit/Sharing Service/Launch Profiler", false, 103)] + public static void LaunchProfilerX() + { + string filePathName = @"External\HoloToolkit\Sharing\Tools\Profiler\x86\ProfilerX.exe"; + + if (!File.Exists(filePathName)) + { + Debug.LogError("Profiler does not exist at location: " + filePathName); + Debug.LogError("Manually copy ProfilerX.exe to this path from HoloToolkit-Unity\\External."); + return; + } + + ExternalProcess.FindAndLaunch(filePathName); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs.meta new file mode 100644 index 0000000..900e2b8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 029ac67c65e8d7d428e72c96a230fe63 +timeCreated: 1455735876 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs new file mode 100644 index 0000000..3ad819d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs @@ -0,0 +1,95 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing +{ + [CustomEditor(typeof(SharingStage))] + public class SharingStageEditor : Editor + { + private Dictionary foldoutGUIMap = new Dictionary(); + + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + if (Application.isPlaying) + { + SharingStage networkManager = (SharingStage)target; + + SyncRoot root = networkManager.Root; + + if (root != null) + { + EditorGUILayout.Separator(); + EditorGUILayout.BeginVertical(); + { + EditorGUILayout.LabelField("Object Hierarchy"); + DrawDataModelGUI(root, string.Empty); + } + EditorGUILayout.EndVertical(); + } + + // Force this inspector to repaint every frame so that it reflects changes to the undo stack + // immediately rather than showing stale data until the user clicks on the inspector window + Repaint(); + } + } + + private void DrawDataModelGUI(SyncPrimitive syncPrimitive, string parentPath) + { + string fieldName = syncPrimitive.FieldName; + object rawValue = syncPrimitive.RawValue; + + SyncObject syncObject = syncPrimitive as SyncObject; + + if (syncObject != null) + { + bool foldout = false; + if (foldoutGUIMap.ContainsKey(syncObject)) + { + foldout = foldoutGUIMap[syncObject]; + } + + int ownerId = syncObject.OwnerId; + string owner = ownerId == int.MaxValue ? string.Empty : ownerId.ToString(); + string objectType = syncObject.ObjectType; + + foldout = EditorGUILayout.Foldout(foldout, string.Format("{0} (Owner:{1} Type:{2})", fieldName, owner, objectType)); + foldoutGUIMap[syncObject] = foldout; + + if (foldout) + { + EditorGUI.indentLevel++; + + SyncPrimitive[] children = syncObject.GetChildren(); + for (int i = 0; i < children.Length; i++) + { + DrawDataModelGUI(children[i], parentPath + "/" + fieldName); + } + + EditorGUI.indentLevel--; + } + } + else + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(fieldName, GUILayout.MaxWidth(125)); + EditorGUILayout.LabelField(rawValue != null ? rawValue.ToString() : "null", GUILayout.MaxWidth(200)); + EditorGUILayout.LabelField(syncPrimitive.NetworkElement != null ? "live" : "local", GUILayout.MaxWidth(50)); + if (syncPrimitive.NetworkElement != null) + { + EditorGUILayout.LabelField(parentPath + "/" + fieldName, GUILayout.MaxWidth(500)); + } + + EditorGUILayout.EndHorizontal(); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs.meta new file mode 100644 index 0000000..a0f6e55 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Editor/SharingStageEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41489accbb481284383749868a7cdbe1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK.meta new file mode 100644 index 0000000..83d9db0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 026247228427a694eae4fa19eb6ae09f +folderAsset: yes +timeCreated: 1456612507 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs new file mode 100644 index 0000000..d68ab1e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class AnchorDownloadRequest : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal AnchorDownloadRequest(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AnchorDownloadRequest obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~AnchorDownloadRequest() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_AnchorDownloadRequest(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual XString GetAnchorName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.AnchorDownloadRequest_GetAnchorName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual Room GetRoom() { + global::System.IntPtr cPtr = SharingClientPINVOKE.AnchorDownloadRequest_GetRoom(swigCPtr); + Room ret = (cPtr == global::System.IntPtr.Zero) ? null : new Room(cPtr, true); + return ret; + } + + public virtual int GetDataSize() { + int ret = SharingClientPINVOKE.AnchorDownloadRequest_GetDataSize(swigCPtr); + return ret; + } + + public virtual bool GetData(byte[] data, int dataSize) { + global::System.Runtime.InteropServices.GCHandle pinHandle_data = global::System.Runtime.InteropServices.GCHandle.Alloc(data, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + bool ret = SharingClientPINVOKE.AnchorDownloadRequest_GetData(swigCPtr, (global::System.IntPtr)pinHandle_data.AddrOfPinnedObject(), dataSize); + return ret; + } + } finally { pinHandle_data.Free(); } + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs.meta new file mode 100644 index 0000000..064d71f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AnchorDownloadRequest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d53ea1ece6ac3424d8a27a35ce7382a1 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs new file mode 100644 index 0000000..ce08227 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs @@ -0,0 +1,49 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class AudioManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal AudioManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AudioManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~AudioManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_AudioManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void SetMicrophoneEnabled(bool bEnabled) { + SharingClientPINVOKE.AudioManager_SetMicrophoneEnabled(swigCPtr, bEnabled); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs.meta new file mode 100644 index 0000000..9621eea --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/AudioManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8e030fe9817319d4fab480567eb92871 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs new file mode 100644 index 0000000..4ce60ad --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class BoolElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal BoolElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.BoolElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(BoolElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~BoolElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_BoolElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static BoolElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.BoolElement_Cast(Element.getCPtr(element)); + BoolElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new BoolElement(cPtr, true); + return ret; + } + + public virtual bool GetValue() { + bool ret = SharingClientPINVOKE.BoolElement_GetValue(swigCPtr); + return ret; + } + + public virtual void SetValue(bool newValue) { + SharingClientPINVOKE.BoolElement_SetValue(swigCPtr, newValue); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs.meta new file mode 100644 index 0000000..a926f91 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/BoolElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f70eeb83a554b8945b4d66070558cf6e +timeCreated: 1458412650 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs new file mode 100644 index 0000000..9c216f4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs @@ -0,0 +1,102 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class ClientConfig : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal ClientConfig(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ClientConfig obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~ClientConfig() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_ClientConfig(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public ClientConfig(ClientRole role) : this(SharingClientPINVOKE.new_ClientConfig((int)role), true) { + } + + public ClientRole GetRole() { + ClientRole ret = (ClientRole)SharingClientPINVOKE.ClientConfig_GetRole(swigCPtr); + return ret; + } + + public string GetServerAddress() { + string ret = SharingClientPINVOKE.ClientConfig_GetServerAddress(swigCPtr); + return ret; + } + + public bool SetServerAddress(string serverAddress) { + bool ret = SharingClientPINVOKE.ClientConfig_SetServerAddress(swigCPtr, serverAddress); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + return ret; + } + + public int GetServerPort() { + int ret = SharingClientPINVOKE.ClientConfig_GetServerPort(swigCPtr); + return ret; + } + + public bool SetServerPort(int port) { + bool ret = SharingClientPINVOKE.ClientConfig_SetServerPort(swigCPtr, port); + return ret; + } + + public LogWriter GetLogWriter() { + global::System.IntPtr cPtr = SharingClientPINVOKE.ClientConfig_GetLogWriter(swigCPtr); + LogWriter ret = (cPtr == global::System.IntPtr.Zero) ? null : new LogWriter(cPtr, false); + return ret; + } + + public void SetLogWriter(LogWriter logger) { + SharingClientPINVOKE.ClientConfig_SetLogWriter(swigCPtr, LogWriter.getCPtr(logger)); + } + + public bool GetIsAudioEndpoint() { + bool ret = SharingClientPINVOKE.ClientConfig_GetIsAudioEndpoint(swigCPtr); + return ret; + } + + public void SetIsAudioEndpoint(bool isAudioEndpoint) { + SharingClientPINVOKE.ClientConfig_SetIsAudioEndpoint(swigCPtr, isAudioEndpoint); + } + + public bool GetProfilerEnabled() { + bool ret = SharingClientPINVOKE.ClientConfig_GetProfilerEnabled(swigCPtr); + return ret; + } + + public void SetProfilerEnabled(bool enabled) { + SharingClientPINVOKE.ClientConfig_SetProfilerEnabled(swigCPtr, enabled); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs.meta new file mode 100644 index 0000000..055acbf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientConfig.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bcc7f229b101b9e449ec9126419f76a7 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs new file mode 100644 index 0000000..e05d1f2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs @@ -0,0 +1,19 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum ClientRole { + Primary = 0, + Secondary, + Unspecified = 255 +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs.meta new file mode 100644 index 0000000..c8c240b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ClientRole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: be9a5b811786c044e8c9fd2d5b866a20 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs new file mode 100644 index 0000000..40d940c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DirectPairConnector : PairMaker { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal DirectPairConnector(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.DirectPairConnector_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DirectPairConnector obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DirectPairConnector() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DirectPairConnector(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public DirectPairConnector() : this(SharingClientPINVOKE.new_DirectPairConnector__SWIG_0(), true) { + } + + public DirectPairConnector(XString remoteNameOrIP) : this(SharingClientPINVOKE.new_DirectPairConnector__SWIG_1(XString.getCPtr(remoteNameOrIP)), true) { + } + + public DirectPairConnector(XString remoteNameOrIP, ushort port) : this(SharingClientPINVOKE.new_DirectPairConnector__SWIG_2(XString.getCPtr(remoteNameOrIP), port), true) { + } + + public override bool IsReceiver() { + bool ret = SharingClientPINVOKE.DirectPairConnector_IsReceiver(swigCPtr); + return ret; + } + + public override int GetAddressCount() { + int ret = SharingClientPINVOKE.DirectPairConnector_GetAddressCount(swigCPtr); + return ret; + } + + public override XString GetAddress(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.DirectPairConnector_GetAddress(swigCPtr, index); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public override ushort GetPort() { + ushort ret = SharingClientPINVOKE.DirectPairConnector_GetPort(swigCPtr); + return ret; + } + + public override void Update() { + SharingClientPINVOKE.DirectPairConnector_Update(swigCPtr); + } + + public override bool IsReadyToConnect() { + bool ret = SharingClientPINVOKE.DirectPairConnector_IsReadyToConnect(swigCPtr); + return ret; + } + + public void SetRemoteAddress(XString remoteNameOrIP) { + SharingClientPINVOKE.DirectPairConnector_SetRemoteAddress(swigCPtr, XString.getCPtr(remoteNameOrIP)); + } + + public void SetRemotePort(ushort port) { + SharingClientPINVOKE.DirectPairConnector_SetRemotePort(swigCPtr, port); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs.meta new file mode 100644 index 0000000..308133b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairConnector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 859fd434eb3777f47b8211fd408bf2f1 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs new file mode 100644 index 0000000..d59195f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DirectPairReceiver : PairMaker { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal DirectPairReceiver(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.DirectPairReceiver_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DirectPairReceiver obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DirectPairReceiver() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DirectPairReceiver(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public DirectPairReceiver() : this(SharingClientPINVOKE.new_DirectPairReceiver__SWIG_0(), true) { + } + + public DirectPairReceiver(ushort port) : this(SharingClientPINVOKE.new_DirectPairReceiver__SWIG_1(port), true) { + } + + public override bool IsReceiver() { + bool ret = SharingClientPINVOKE.DirectPairReceiver_IsReceiver(swigCPtr); + return ret; + } + + public override int GetAddressCount() { + int ret = SharingClientPINVOKE.DirectPairReceiver_GetAddressCount(swigCPtr); + return ret; + } + + public override XString GetAddress(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.DirectPairReceiver_GetAddress(swigCPtr, index); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public override ushort GetPort() { + ushort ret = SharingClientPINVOKE.DirectPairReceiver_GetPort(swigCPtr); + return ret; + } + + public override void Update() { + SharingClientPINVOKE.DirectPairReceiver_Update(swigCPtr); + } + + public override bool IsReadyToConnect() { + bool ret = SharingClientPINVOKE.DirectPairReceiver_IsReadyToConnect(swigCPtr); + return ret; + } + + public void SetIncomingPort(ushort port) { + SharingClientPINVOKE.DirectPairReceiver_SetIncomingPort(swigCPtr, port); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs.meta new file mode 100644 index 0000000..187d218 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DirectPairReceiver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 74d56d87eb953dd4381a8a97bc379427 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs new file mode 100644 index 0000000..ba02822 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DiscoveredSystem : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal DiscoveredSystem(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DiscoveredSystem obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DiscoveredSystem() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DiscoveredSystem(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public DiscoveredSystem(string name, string address, SystemRole role) : this(SharingClientPINVOKE.new_DiscoveredSystem(name, address, (int)role), true) { + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public string GetName() { + string ret = SharingClientPINVOKE.DiscoveredSystem_GetName(swigCPtr); + return ret; + } + + public string GetAddress() { + string ret = SharingClientPINVOKE.DiscoveredSystem_GetAddress(swigCPtr); + return ret; + } + + public SystemRole GetRole() { + SystemRole ret = (SystemRole)SharingClientPINVOKE.DiscoveredSystem_GetRole(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs.meta new file mode 100644 index 0000000..153e64b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveredSystem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 066461858c98cfa4f84fadee8ef21431 +timeCreated: 1469576082 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs new file mode 100644 index 0000000..ad0b6ba --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs @@ -0,0 +1,78 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DiscoveryClient : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal DiscoveryClient(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DiscoveryClient obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DiscoveryClient() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DiscoveryClient(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public static DiscoveryClient Create() { + global::System.IntPtr cPtr = SharingClientPINVOKE.DiscoveryClient_Create(); + DiscoveryClient ret = (cPtr == global::System.IntPtr.Zero) ? null : new DiscoveryClient(cPtr, true); + return ret; + } + + public virtual void Ping() { + SharingClientPINVOKE.DiscoveryClient_Ping(swigCPtr); + } + + public virtual uint GetDiscoveredCount() { + uint ret = SharingClientPINVOKE.DiscoveryClient_GetDiscoveredCount(swigCPtr); + return ret; + } + + public virtual DiscoveredSystem GetDiscoveredSystem(uint index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.DiscoveryClient_GetDiscoveredSystem(swigCPtr, index); + DiscoveredSystem ret = (cPtr == global::System.IntPtr.Zero) ? null : new DiscoveredSystem(cPtr, true); + return ret; + } + + public virtual void Update() { + SharingClientPINVOKE.DiscoveryClient_Update(swigCPtr); + } + + public virtual void AddListener(DiscoveryClientListener newListener) { + SharingClientPINVOKE.DiscoveryClient_AddListener(swigCPtr, DiscoveryClientListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(DiscoveryClientListener oldListener) { + SharingClientPINVOKE.DiscoveryClient_RemoveListener(swigCPtr, DiscoveryClientListener.getCPtr(oldListener)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs.meta new file mode 100644 index 0000000..3ebfe9c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClient.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b062bce6a098ab74992080eb9f5b399e +timeCreated: 1469576082 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs new file mode 100644 index 0000000..4830ebe --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Sharing +{ + public class DiscoveryClientAdapter : DiscoveryClientListener + { + public event Action DiscoveredEvent; + public event Action LostEvent; + + public override void OnRemoteSystemDiscovered(DiscoveredSystem remoteSystem) + { + if (this.DiscoveredEvent != null) + { + this.DiscoveredEvent(remoteSystem); + } + } + + public override void OnRemoteSystemLost(DiscoveredSystem remoteSystem) + { + if (this.LostEvent != null) + { + this.LostEvent(remoteSystem); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs.meta new file mode 100644 index 0000000..871dcab --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4e0e39f4c4cf0314ea7459835e596035 +timeCreated: 1469576082 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs new file mode 100644 index 0000000..0ade27e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DiscoveryClientListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal DiscoveryClientListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.DiscoveryClientListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DiscoveryClientListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DiscoveryClientListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DiscoveryClientListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnRemoteSystemDiscovered(DiscoveredSystem remoteSystem) { + if (SwigDerivedClassHasMethod("OnRemoteSystemDiscovered", swigMethodTypes0)) SharingClientPINVOKE.DiscoveryClientListener_OnRemoteSystemDiscoveredSwigExplicitDiscoveryClientListener(swigCPtr, DiscoveredSystem.getCPtr(remoteSystem)); else SharingClientPINVOKE.DiscoveryClientListener_OnRemoteSystemDiscovered(swigCPtr, DiscoveredSystem.getCPtr(remoteSystem)); + } + + public virtual void OnRemoteSystemLost(DiscoveredSystem remoteSystem) { + if (SwigDerivedClassHasMethod("OnRemoteSystemLost", swigMethodTypes1)) SharingClientPINVOKE.DiscoveryClientListener_OnRemoteSystemLostSwigExplicitDiscoveryClientListener(swigCPtr, DiscoveredSystem.getCPtr(remoteSystem)); else SharingClientPINVOKE.DiscoveryClientListener_OnRemoteSystemLost(swigCPtr, DiscoveredSystem.getCPtr(remoteSystem)); + } + + public DiscoveryClientListener() : this(SharingClientPINVOKE.new_DiscoveryClientListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnRemoteSystemDiscovered", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateDiscoveryClientListener_0(SwigDirectorOnRemoteSystemDiscovered); + if (SwigDerivedClassHasMethod("OnRemoteSystemLost", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateDiscoveryClientListener_1(SwigDirectorOnRemoteSystemLost); + SharingClientPINVOKE.DiscoveryClientListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(DiscoveryClientListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnRemoteSystemDiscovered(global::System.IntPtr remoteSystem) { + OnRemoteSystemDiscovered((remoteSystem == global::System.IntPtr.Zero) ? null : new DiscoveredSystem(remoteSystem, true)); + } + + private void SwigDirectorOnRemoteSystemLost(global::System.IntPtr remoteSystem) { + OnRemoteSystemLost((remoteSystem == global::System.IntPtr.Zero) ? null : new DiscoveredSystem(remoteSystem, true)); + } + + public delegate void SwigDelegateDiscoveryClientListener_0(global::System.IntPtr remoteSystem); + public delegate void SwigDelegateDiscoveryClientListener_1(global::System.IntPtr remoteSystem); + + private SwigDelegateDiscoveryClientListener_0 swigDelegate0; + private SwigDelegateDiscoveryClientListener_1 swigDelegate1; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(DiscoveredSystem) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(DiscoveredSystem) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs.meta new file mode 100644 index 0000000..753336c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DiscoveryClientListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9f6f54dee03b48c47b5d6fd906d49c78 +timeCreated: 1469576082 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs new file mode 100644 index 0000000..25bf17d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class DoubleElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal DoubleElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.DoubleElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(DoubleElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~DoubleElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_DoubleElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static DoubleElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.DoubleElement_Cast(Element.getCPtr(element)); + DoubleElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new DoubleElement(cPtr, true); + return ret; + } + + public virtual double GetValue() { + double ret = SharingClientPINVOKE.DoubleElement_GetValue(swigCPtr); + return ret; + } + + public virtual void SetValue(double newValue) { + SharingClientPINVOKE.DoubleElement_SetValue(swigCPtr, newValue); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs.meta new file mode 100644 index 0000000..6728140 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/DoubleElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 43d418ff51ba3544b804b6b3183d5933 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs new file mode 100644 index 0000000..0a237e3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs @@ -0,0 +1,72 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Element : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Element(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Element obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Element() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Element(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual ElementType GetElementType() { + ElementType ret = (ElementType)SharingClientPINVOKE.Element_GetElementType(swigCPtr); + return ret; + } + + public virtual long GetGUID() { + long ret = SharingClientPINVOKE.Element_GetGUID(swigCPtr); + return ret; + } + + public virtual XString GetName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Element_GetName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual Element GetParent() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Element_GetParent(swigCPtr); + Element ret = (cPtr == global::System.IntPtr.Zero) ? null : new Element(cPtr, true); + return ret; + } + + public virtual bool IsValid() { + bool ret = SharingClientPINVOKE.Element_IsValid(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs.meta new file mode 100644 index 0000000..1cbf090 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Element.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b692ae4f7b48b624796ce8a9aa8611f5 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs new file mode 100644 index 0000000..e89952b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum ElementType { + UnknownType = 0, + BoolType, + Int32Type, + Int64Type, + FloatType, + DoubleType, + StringType, + ObjectType, + Int32ArrayType, + FloatArrayType, + StringArrayType, + ElementTypeCount +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs.meta new file mode 100644 index 0000000..897fa32 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ElementType.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cade7dac84db4e74b8b3fec66e5e1e82 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs new file mode 100644 index 0000000..1a8bcfe --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs @@ -0,0 +1,80 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class FloatArrayElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal FloatArrayElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.FloatArrayElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(FloatArrayElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~FloatArrayElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_FloatArrayElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static FloatArrayElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.FloatArrayElement_Cast(Element.getCPtr(element)); + FloatArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new FloatArrayElement(cPtr, true); + return ret; + } + + public virtual int GetCount() { + int ret = SharingClientPINVOKE.FloatArrayElement_GetCount(swigCPtr); + return ret; + } + + public virtual float GetValue(int index) { + float ret = SharingClientPINVOKE.FloatArrayElement_GetValue(swigCPtr, index); + return ret; + } + + public virtual void SetValue(int index, float newValue) { + SharingClientPINVOKE.FloatArrayElement_SetValue(swigCPtr, index, newValue); + } + + public virtual void InsertValue(int index, float value) { + SharingClientPINVOKE.FloatArrayElement_InsertValue(swigCPtr, index, value); + } + + public virtual void RemoveValue(int index) { + SharingClientPINVOKE.FloatArrayElement_RemoveValue(swigCPtr, index); + } + + public virtual void AddListener(FloatArrayListener newListener) { + SharingClientPINVOKE.FloatArrayElement_AddListener(swigCPtr, FloatArrayListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(FloatArrayListener oldListener) { + SharingClientPINVOKE.FloatArrayElement_RemoveListener(swigCPtr, FloatArrayListener.getCPtr(oldListener)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs.meta new file mode 100644 index 0000000..d666c6b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2518ccd0b2421954794513944e3a6869 +timeCreated: 1462155791 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs new file mode 100644 index 0000000..1744d72 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class FloatArrayListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal FloatArrayListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.FloatArrayListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(FloatArrayListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~FloatArrayListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_FloatArrayListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnValueChanged(int index, float newValue) { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) SharingClientPINVOKE.FloatArrayListener_OnValueChangedSwigExplicitFloatArrayListener(swigCPtr, index, newValue); else SharingClientPINVOKE.FloatArrayListener_OnValueChanged(swigCPtr, index, newValue); + } + + public virtual void OnValueInserted(int index, float value) { + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) SharingClientPINVOKE.FloatArrayListener_OnValueInsertedSwigExplicitFloatArrayListener(swigCPtr, index, value); else SharingClientPINVOKE.FloatArrayListener_OnValueInserted(swigCPtr, index, value); + } + + public virtual void OnValueRemoved(int index, float value) { + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) SharingClientPINVOKE.FloatArrayListener_OnValueRemovedSwigExplicitFloatArrayListener(swigCPtr, index, value); else SharingClientPINVOKE.FloatArrayListener_OnValueRemoved(swigCPtr, index, value); + } + + public FloatArrayListener() : this(SharingClientPINVOKE.new_FloatArrayListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateFloatArrayListener_0(SwigDirectorOnValueChanged); + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateFloatArrayListener_1(SwigDirectorOnValueInserted); + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateFloatArrayListener_2(SwigDirectorOnValueRemoved); + SharingClientPINVOKE.FloatArrayListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(FloatArrayListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnValueChanged(int index, float newValue) { + OnValueChanged(index, newValue); + } + + private void SwigDirectorOnValueInserted(int index, float value) { + OnValueInserted(index, value); + } + + private void SwigDirectorOnValueRemoved(int index, float value) { + OnValueRemoved(index, value); + } + + public delegate void SwigDelegateFloatArrayListener_0(int index, float newValue); + public delegate void SwigDelegateFloatArrayListener_1(int index, float value); + public delegate void SwigDelegateFloatArrayListener_2(int index, float value); + + private SwigDelegateFloatArrayListener_0 swigDelegate0; + private SwigDelegateFloatArrayListener_1 swigDelegate1; + private SwigDelegateFloatArrayListener_2 swigDelegate2; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(int), typeof(float) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(int), typeof(float) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(int), typeof(float) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs.meta new file mode 100644 index 0000000..28832f4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatArrayListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: da1b823857d8a394c8ef27ea19ef3144 +timeCreated: 1462155795 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs new file mode 100644 index 0000000..c5e78b1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class FloatElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal FloatElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.FloatElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(FloatElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~FloatElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_FloatElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static FloatElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.FloatElement_Cast(Element.getCPtr(element)); + FloatElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new FloatElement(cPtr, true); + return ret; + } + + public virtual float GetValue() { + float ret = SharingClientPINVOKE.FloatElement_GetValue(swigCPtr); + return ret; + } + + public virtual void SetValue(float newValue) { + SharingClientPINVOKE.FloatElement_SetValue(swigCPtr, newValue); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs.meta new file mode 100644 index 0000000..96f3826 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/FloatElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ac8224f4a25f6fa45ba349edce232637 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs new file mode 100644 index 0000000..a0ee11f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs @@ -0,0 +1,80 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class IntArrayElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal IntArrayElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.IntArrayElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(IntArrayElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~IntArrayElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_IntArrayElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static IntArrayElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.IntArrayElement_Cast(Element.getCPtr(element)); + IntArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new IntArrayElement(cPtr, true); + return ret; + } + + public virtual int GetCount() { + int ret = SharingClientPINVOKE.IntArrayElement_GetCount(swigCPtr); + return ret; + } + + public virtual int GetValue(int index) { + int ret = SharingClientPINVOKE.IntArrayElement_GetValue(swigCPtr, index); + return ret; + } + + public virtual void SetValue(int index, int newValue) { + SharingClientPINVOKE.IntArrayElement_SetValue(swigCPtr, index, newValue); + } + + public virtual void InsertValue(int index, int value) { + SharingClientPINVOKE.IntArrayElement_InsertValue(swigCPtr, index, value); + } + + public virtual void RemoveValue(int index) { + SharingClientPINVOKE.IntArrayElement_RemoveValue(swigCPtr, index); + } + + public virtual void AddListener(IntArrayListener newListener) { + SharingClientPINVOKE.IntArrayElement_AddListener(swigCPtr, IntArrayListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(IntArrayListener oldListener) { + SharingClientPINVOKE.IntArrayElement_RemoveListener(swigCPtr, IntArrayListener.getCPtr(oldListener)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs.meta new file mode 100644 index 0000000..f7a9e66 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0ba440176c08a3c4ebeb59f52a092c89 +timeCreated: 1456612507 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs new file mode 100644 index 0000000..3e12159 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class IntArrayListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal IntArrayListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.IntArrayListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(IntArrayListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~IntArrayListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_IntArrayListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnValueChanged(int index, int newValue) { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) SharingClientPINVOKE.IntArrayListener_OnValueChangedSwigExplicitIntArrayListener(swigCPtr, index, newValue); else SharingClientPINVOKE.IntArrayListener_OnValueChanged(swigCPtr, index, newValue); + } + + public virtual void OnValueInserted(int index, int value) { + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) SharingClientPINVOKE.IntArrayListener_OnValueInsertedSwigExplicitIntArrayListener(swigCPtr, index, value); else SharingClientPINVOKE.IntArrayListener_OnValueInserted(swigCPtr, index, value); + } + + public virtual void OnValueRemoved(int index, int value) { + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) SharingClientPINVOKE.IntArrayListener_OnValueRemovedSwigExplicitIntArrayListener(swigCPtr, index, value); else SharingClientPINVOKE.IntArrayListener_OnValueRemoved(swigCPtr, index, value); + } + + public IntArrayListener() : this(SharingClientPINVOKE.new_IntArrayListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateIntArrayListener_0(SwigDirectorOnValueChanged); + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateIntArrayListener_1(SwigDirectorOnValueInserted); + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateIntArrayListener_2(SwigDirectorOnValueRemoved); + SharingClientPINVOKE.IntArrayListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(IntArrayListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnValueChanged(int index, int newValue) { + OnValueChanged(index, newValue); + } + + private void SwigDirectorOnValueInserted(int index, int value) { + OnValueInserted(index, value); + } + + private void SwigDirectorOnValueRemoved(int index, int value) { + OnValueRemoved(index, value); + } + + public delegate void SwigDelegateIntArrayListener_0(int index, int newValue); + public delegate void SwigDelegateIntArrayListener_1(int index, int value); + public delegate void SwigDelegateIntArrayListener_2(int index, int value); + + private SwigDelegateIntArrayListener_0 swigDelegate0; + private SwigDelegateIntArrayListener_1 swigDelegate1; + private SwigDelegateIntArrayListener_2 swigDelegate2; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(int), typeof(int) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(int), typeof(int) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(int), typeof(int) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs.meta new file mode 100644 index 0000000..3350299 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntArrayListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 04c537c71d256594a951d2b914a48746 +timeCreated: 1456612507 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs new file mode 100644 index 0000000..13321be --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class IntElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal IntElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.IntElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(IntElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~IntElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_IntElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static IntElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.IntElement_Cast(Element.getCPtr(element)); + IntElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new IntElement(cPtr, true); + return ret; + } + + public virtual int GetValue() { + int ret = SharingClientPINVOKE.IntElement_GetValue(swigCPtr); + return ret; + } + + public virtual void SetValue(int newValue) { + SharingClientPINVOKE.IntElement_SetValue(swigCPtr, newValue); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs.meta new file mode 100644 index 0000000..bf0972e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/IntElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d75a41f2e4c793940a9a59b31e9acc94 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs new file mode 100644 index 0000000..c907304 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs @@ -0,0 +1,57 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Listener : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Listener(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Listener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Listener() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Listener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public void UnregisterAll() { + SharingClientPINVOKE.Listener_UnregisterAll(swigCPtr); + } + + public bool IsRegistered() { + bool ret = SharingClientPINVOKE.Listener_IsRegistered(swigCPtr); + return ret; + } + + public Listener() : this(SharingClientPINVOKE.new_Listener(), true) { + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs.meta new file mode 100644 index 0000000..beda5a6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Listener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 182f095ff0116ff46ac2a23cb3587999 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs new file mode 100644 index 0000000..c37b0f4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Log : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Log(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Log obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Log() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Log(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public static void Info(string message) { + SharingClientPINVOKE.Log_Info(message); + } + + public static void Warning(string message) { + SharingClientPINVOKE.Log_Warning(message); + } + + public static void Error(string message) { + SharingClientPINVOKE.Log_Error(message); + } + + public Log() : this(SharingClientPINVOKE.new_Log(), true) { + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs.meta new file mode 100644 index 0000000..692c924 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Log.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3374bcd48d8266b41b7b441750847e97 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs new file mode 100644 index 0000000..edb2b45 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs @@ -0,0 +1,49 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class LogManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal LogManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(LogManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~LogManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_LogManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void Log(LogSeverity severity, string message) { + SharingClientPINVOKE.LogManager_Log(swigCPtr, (int)severity, message); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs.meta new file mode 100644 index 0000000..675cb9d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6d49a768fbedaf14284696ffdf9a1a58 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs new file mode 100644 index 0000000..75eaf4d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs @@ -0,0 +1,19 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum LogSeverity { + Info, + Warning, + Error +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs.meta new file mode 100644 index 0000000..d2b2fb9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogSeverity.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a7b79af5d4490448b433db89ffd9002 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs new file mode 100644 index 0000000..9624099 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs @@ -0,0 +1,75 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class LogWriter : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal LogWriter(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(LogWriter obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~LogWriter() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_LogWriter(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void WriteLogEntry(LogSeverity severity, string message) { + if (SwigDerivedClassHasMethod("WriteLogEntry", swigMethodTypes0)) SharingClientPINVOKE.LogWriter_WriteLogEntrySwigExplicitLogWriter(swigCPtr, (int)severity, message); else SharingClientPINVOKE.LogWriter_WriteLogEntry(swigCPtr, (int)severity, message); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public LogWriter() : this(SharingClientPINVOKE.new_LogWriter(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("WriteLogEntry", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateLogWriter_0(SwigDirectorWriteLogEntry); + SharingClientPINVOKE.LogWriter_director_connect(swigCPtr, swigDelegate0); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(LogWriter)); + return hasDerivedMethod; + } + + private void SwigDirectorWriteLogEntry(int severity, string message) { + WriteLogEntry((LogSeverity)severity, message); + } + + public delegate void SwigDelegateLogWriter_0(int severity, string message); + + private SwigDelegateLogWriter_0 swigDelegate0; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(LogSeverity), typeof(string) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs.meta new file mode 100644 index 0000000..8efc44c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LogWriter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af9459aa91259ae4e8255e96c78788cb +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs new file mode 100644 index 0000000..23bd04e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class LongElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal LongElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.LongElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(LongElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~LongElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_LongElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static LongElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.LongElement_Cast(Element.getCPtr(element)); + LongElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new LongElement(cPtr, true); + return ret; + } + + public virtual long GetValue() { + long ret = SharingClientPINVOKE.LongElement_GetValue(swigCPtr); + return ret; + } + + public virtual void SetValue(long newValue) { + SharingClientPINVOKE.LongElement_SetValue(swigCPtr, newValue); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs.meta new file mode 100644 index 0000000..0111557 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/LongElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7cff4ebc4a12209428687fb495563d03 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs new file mode 100644 index 0000000..1956c01 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs @@ -0,0 +1,19 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum MachineSessionState { + DISCONNECTED = 0, + JOINING, + JOINED +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs.meta new file mode 100644 index 0000000..3dc18eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MachineSessionState.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ae82d911aef56b0489802527281c3dc7 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs new file mode 100644 index 0000000..50a46b7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum MessageChannel { + Default = 0, + Mouse, + Avatar, + Audio, + ProfileChannel, + RoomAnchorChannel, + UserMessageChannelStart = 16, + MessageChannelMax = 31 +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs.meta new file mode 100644 index 0000000..d43716f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageChannel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 389a31a0565854340ba5168ea20afd85 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs new file mode 100644 index 0000000..211c8f0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs @@ -0,0 +1,35 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum MessageID { + Start = 134, + StatusOnly = Start, + Broadcast, + SendTo, + SessionControl, + MouseXToClient, + MouseXToServer, + SyncMessage, + Tunnel, + TunnelControl, + AudioSamples, + Handshake, + UserPresenceChange, + AvatarBroadcast, + TestAutomation, + Profiling, + InternalSyncMessage, + RoomAnchor, + UserMessageIDStart = 134+50 +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs.meta new file mode 100644 index 0000000..30f8316 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageID.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21534efce7a96fa4fb4f37f1778223f1 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs new file mode 100644 index 0000000..f47d74a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum MessagePriority { + Immediate = 0, + High, + Medium, + Low +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs.meta new file mode 100644 index 0000000..942d588 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessagePriority.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 900c184e3efb3864197d48dc1a418d03 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs new file mode 100644 index 0000000..de46efb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs @@ -0,0 +1,21 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum MessageReliability { + Unreliable = 0, + UnreliableSequenced, + Reliable, + ReliableOrdered, + ReliableSequenced +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs.meta new file mode 100644 index 0000000..91914b8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/MessageReliability.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cbbd38aa97489dd4db6d0c2415dd6786 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs new file mode 100644 index 0000000..8706489 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs @@ -0,0 +1,151 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class NetworkConnection : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal NetworkConnection(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(NetworkConnection obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~NetworkConnection() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_NetworkConnection(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual bool IsConnected() { + bool ret = SharingClientPINVOKE.NetworkConnection_IsConnected(swigCPtr); + return ret; + } + + public virtual ulong GetConnectionGUID() { + ulong ret = SharingClientPINVOKE.NetworkConnection_GetConnectionGUID(swigCPtr); + return ret; + } + + public virtual void Send(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel, bool releaseMessage) { + SharingClientPINVOKE.NetworkConnection_Send__SWIG_0(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel, releaseMessage); + } + + public virtual void Send(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel) { + SharingClientPINVOKE.NetworkConnection_Send__SWIG_1(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel); + } + + public virtual void Send(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability) { + SharingClientPINVOKE.NetworkConnection_Send__SWIG_2(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability); + } + + public virtual void Send(NetworkOutMessage msg, MessagePriority priority) { + SharingClientPINVOKE.NetworkConnection_Send__SWIG_3(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority); + } + + public virtual void Send(NetworkOutMessage msg) { + SharingClientPINVOKE.NetworkConnection_Send__SWIG_4(swigCPtr, NetworkOutMessage.getCPtr(msg)); + } + + public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel, bool releaseMessage) { + SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_0(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel, releaseMessage); + } + + public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel) { + SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_1(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel); + } + + public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability) { + SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_2(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability); + } + + public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg, MessagePriority priority) { + SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_3(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg), (int)priority); + } + + public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg) { + SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_4(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg)); + } + + public virtual void Broadcast(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel, bool releaseMessage) { + SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_0(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel, releaseMessage); + } + + public virtual void Broadcast(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel) { + SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_1(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel); + } + + public virtual void Broadcast(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability) { + SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_2(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability); + } + + public virtual void Broadcast(NetworkOutMessage msg, MessagePriority priority) { + SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_3(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority); + } + + public virtual void Broadcast(NetworkOutMessage msg) { + SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_4(swigCPtr, NetworkOutMessage.getCPtr(msg)); + } + + public virtual void AddListener(byte messageType, NetworkConnectionListener newListener) { + SharingClientPINVOKE.NetworkConnection_AddListener(swigCPtr, messageType, NetworkConnectionListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(byte messageType, NetworkConnectionListener oldListener) { + SharingClientPINVOKE.NetworkConnection_RemoveListener(swigCPtr, messageType, NetworkConnectionListener.getCPtr(oldListener)); + } + + public virtual void AddListenerAsync(byte messageType, NetworkConnectionListener newListener) { + SharingClientPINVOKE.NetworkConnection_AddListenerAsync(swigCPtr, messageType, NetworkConnectionListener.getCPtr(newListener)); + } + + public virtual void RemoveListenerAsync(byte messageType, NetworkConnectionListener oldListener) { + SharingClientPINVOKE.NetworkConnection_RemoveListenerAsync(swigCPtr, messageType, NetworkConnectionListener.getCPtr(oldListener)); + } + + public virtual NetworkOutMessage CreateMessage(byte messageType) { + global::System.IntPtr cPtr = SharingClientPINVOKE.NetworkConnection_CreateMessage(swigCPtr, messageType); + NetworkOutMessage ret = (cPtr == global::System.IntPtr.Zero) ? null : new NetworkOutMessage(cPtr, true); + return ret; + } + + public virtual void ReturnMessage(NetworkOutMessage msg) { + SharingClientPINVOKE.NetworkConnection_ReturnMessage(swigCPtr, NetworkOutMessage.getCPtr(msg)); + } + + public virtual void Disconnect() { + SharingClientPINVOKE.NetworkConnection_Disconnect(swigCPtr); + } + + public virtual XString GetRemoteAddress() { + global::System.IntPtr cPtr = SharingClientPINVOKE.NetworkConnection_GetRemoteAddress(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs.meta new file mode 100644 index 0000000..658f152 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 94445f39cf0fd084386c1495b0e0cb5e +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs new file mode 100644 index 0000000..8cc759e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of NetworkConnection to register to receive event callbacks without + /// having their classes inherit directly from NetworkConnectionListener + /// + public class NetworkConnectionAdapter : NetworkConnectionListener + { + public event System.Action ConnectedCallback; + public event System.Action ConnectionFailedCallback; + public event System.Action DisconnectedCallback; + public event System.Action MessageReceivedCallback; + + public NetworkConnectionAdapter() { } + + public override void OnConnected(NetworkConnection connection) + { + Profile.BeginRange("OnConnected"); + if (this.ConnectedCallback != null) + { + this.ConnectedCallback(connection); + } + Profile.EndRange(); + } + + public override void OnConnectFailed(NetworkConnection connection) + { + Profile.BeginRange("OnConnectFailed"); + if (this.ConnectionFailedCallback != null) + { + this.ConnectionFailedCallback(connection); + } + Profile.EndRange(); + } + + public override void OnDisconnected(NetworkConnection connection) + { + Profile.BeginRange("OnDisconnected"); + if (this.DisconnectedCallback != null) + { + this.DisconnectedCallback(connection); + } + Profile.EndRange(); + } + + public override void OnMessageReceived(NetworkConnection connection, NetworkInMessage message) + { + Profile.BeginRange("OnMessageReceived"); + if (this.MessageReceivedCallback != null) + { + this.MessageReceivedCallback(connection, message); + } + Profile.EndRange(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs.meta new file mode 100644 index 0000000..ffed5e1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a1b63e0a8ff81124e98ad4e0f40a81d4 +timeCreated: 1456614578 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs new file mode 100644 index 0000000..32ae40a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class NetworkConnectionListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal NetworkConnectionListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.NetworkConnectionListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(NetworkConnectionListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~NetworkConnectionListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_NetworkConnectionListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnConnected(NetworkConnection connection) { + if (SwigDerivedClassHasMethod("OnConnected", swigMethodTypes0)) SharingClientPINVOKE.NetworkConnectionListener_OnConnectedSwigExplicitNetworkConnectionListener(swigCPtr, NetworkConnection.getCPtr(connection)); else SharingClientPINVOKE.NetworkConnectionListener_OnConnected(swigCPtr, NetworkConnection.getCPtr(connection)); + } + + public virtual void OnConnectFailed(NetworkConnection connection) { + if (SwigDerivedClassHasMethod("OnConnectFailed", swigMethodTypes1)) SharingClientPINVOKE.NetworkConnectionListener_OnConnectFailedSwigExplicitNetworkConnectionListener(swigCPtr, NetworkConnection.getCPtr(connection)); else SharingClientPINVOKE.NetworkConnectionListener_OnConnectFailed(swigCPtr, NetworkConnection.getCPtr(connection)); + } + + public virtual void OnDisconnected(NetworkConnection connection) { + if (SwigDerivedClassHasMethod("OnDisconnected", swigMethodTypes2)) SharingClientPINVOKE.NetworkConnectionListener_OnDisconnectedSwigExplicitNetworkConnectionListener(swigCPtr, NetworkConnection.getCPtr(connection)); else SharingClientPINVOKE.NetworkConnectionListener_OnDisconnected(swigCPtr, NetworkConnection.getCPtr(connection)); + } + + public virtual void OnMessageReceived(NetworkConnection connection, NetworkInMessage message) { + if (SwigDerivedClassHasMethod("OnMessageReceived", swigMethodTypes3)) SharingClientPINVOKE.NetworkConnectionListener_OnMessageReceivedSwigExplicitNetworkConnectionListener(swigCPtr, NetworkConnection.getCPtr(connection), NetworkInMessage.getCPtr(message)); else SharingClientPINVOKE.NetworkConnectionListener_OnMessageReceived(swigCPtr, NetworkConnection.getCPtr(connection), NetworkInMessage.getCPtr(message)); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public NetworkConnectionListener() : this(SharingClientPINVOKE.new_NetworkConnectionListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnConnected", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateNetworkConnectionListener_0(SwigDirectorOnConnected); + if (SwigDerivedClassHasMethod("OnConnectFailed", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateNetworkConnectionListener_1(SwigDirectorOnConnectFailed); + if (SwigDerivedClassHasMethod("OnDisconnected", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateNetworkConnectionListener_2(SwigDirectorOnDisconnected); + if (SwigDerivedClassHasMethod("OnMessageReceived", swigMethodTypes3)) + swigDelegate3 = new SwigDelegateNetworkConnectionListener_3(SwigDirectorOnMessageReceived); + SharingClientPINVOKE.NetworkConnectionListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(NetworkConnectionListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnConnected(global::System.IntPtr connection) { + OnConnected((connection == global::System.IntPtr.Zero) ? null : new NetworkConnection(connection, true)); + } + + private void SwigDirectorOnConnectFailed(global::System.IntPtr connection) { + OnConnectFailed((connection == global::System.IntPtr.Zero) ? null : new NetworkConnection(connection, true)); + } + + private void SwigDirectorOnDisconnected(global::System.IntPtr connection) { + OnDisconnected((connection == global::System.IntPtr.Zero) ? null : new NetworkConnection(connection, true)); + } + + private void SwigDirectorOnMessageReceived(global::System.IntPtr connection, global::System.IntPtr message) { + OnMessageReceived((connection == global::System.IntPtr.Zero) ? null : new NetworkConnection(connection, true), new NetworkInMessage(message, false)); + } + + public delegate void SwigDelegateNetworkConnectionListener_0(global::System.IntPtr connection); + public delegate void SwigDelegateNetworkConnectionListener_1(global::System.IntPtr connection); + public delegate void SwigDelegateNetworkConnectionListener_2(global::System.IntPtr connection); + public delegate void SwigDelegateNetworkConnectionListener_3(global::System.IntPtr connection, global::System.IntPtr message); + + private SwigDelegateNetworkConnectionListener_0 swigDelegate0; + private SwigDelegateNetworkConnectionListener_1 swigDelegate1; + private SwigDelegateNetworkConnectionListener_2 swigDelegate2; + private SwigDelegateNetworkConnectionListener_3 swigDelegate3; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(NetworkConnection) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(NetworkConnection) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(NetworkConnection) }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { typeof(NetworkConnection), typeof(NetworkInMessage) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs.meta new file mode 100644 index 0000000..ff9c5d5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkConnectionListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6c720c9d5cbee074fa9de28be77fd831 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs new file mode 100644 index 0000000..e47c39f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class NetworkInMessage : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal NetworkInMessage(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(NetworkInMessage obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~NetworkInMessage() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_NetworkInMessage(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual byte ReadByte() { + byte ret = SharingClientPINVOKE.NetworkInMessage_ReadByte(swigCPtr); + return ret; + } + + public virtual short ReadInt16() { + short ret = SharingClientPINVOKE.NetworkInMessage_ReadInt16(swigCPtr); + return ret; + } + + public virtual int ReadInt32() { + int ret = SharingClientPINVOKE.NetworkInMessage_ReadInt32(swigCPtr); + return ret; + } + + public virtual long ReadInt64() { + long ret = SharingClientPINVOKE.NetworkInMessage_ReadInt64(swigCPtr); + return ret; + } + + public virtual float ReadFloat() { + float ret = SharingClientPINVOKE.NetworkInMessage_ReadFloat(swigCPtr); + return ret; + } + + public virtual double ReadDouble() { + double ret = SharingClientPINVOKE.NetworkInMessage_ReadDouble(swigCPtr); + return ret; + } + + public virtual XString ReadString() { + global::System.IntPtr cPtr = SharingClientPINVOKE.NetworkInMessage_ReadString(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual void ReadArray(byte[] data, uint arrayLength) { + global::System.Runtime.InteropServices.GCHandle pinHandle_data = global::System.Runtime.InteropServices.GCHandle.Alloc(data, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + SharingClientPINVOKE.NetworkInMessage_ReadArray(swigCPtr, (global::System.IntPtr)pinHandle_data.AddrOfPinnedObject(), arrayLength); + } + } finally { pinHandle_data.Free(); } + } + + public virtual int GetUnreadBitsCount() { + int ret = SharingClientPINVOKE.NetworkInMessage_GetUnreadBitsCount(swigCPtr); + return ret; + } + + public virtual int GetSize() { + int ret = SharingClientPINVOKE.NetworkInMessage_GetSize(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs.meta new file mode 100644 index 0000000..5e6ade6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkInMessage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 346ba241716cdef4bafa77d74f3b4f9c +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs new file mode 100644 index 0000000..14bb0e9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class NetworkOutMessage : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal NetworkOutMessage(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(NetworkOutMessage obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~NetworkOutMessage() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_NetworkOutMessage(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void Write(byte value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_0(swigCPtr, value); + } + + public virtual void Write(short value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_1(swigCPtr, value); + } + + public virtual void Write(int value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_2(swigCPtr, value); + } + + public virtual void Write(long value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_3(swigCPtr, value); + } + + public virtual void Write(float value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_4(swigCPtr, value); + } + + public virtual void Write(double value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_5(swigCPtr, value); + } + + public virtual void Write(XString value) { + SharingClientPINVOKE.NetworkOutMessage_Write__SWIG_6(swigCPtr, XString.getCPtr(value)); + } + + public virtual void WriteArray(byte[] data, uint length) { + global::System.Runtime.InteropServices.GCHandle pinHandle_data = global::System.Runtime.InteropServices.GCHandle.Alloc(data, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + SharingClientPINVOKE.NetworkOutMessage_WriteArray(swigCPtr, (global::System.IntPtr)pinHandle_data.AddrOfPinnedObject(), length); + } + } finally { pinHandle_data.Free(); } + } + + public virtual void Reset() { + SharingClientPINVOKE.NetworkOutMessage_Reset(swigCPtr); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs.meta new file mode 100644 index 0000000..e7435c9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/NetworkOutMessage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cecbd801e1b4ed448a9066d07bdb1a51 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs new file mode 100644 index 0000000..6da7b01 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs @@ -0,0 +1,170 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class ObjectElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal ObjectElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.ObjectElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ObjectElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~ObjectElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_ObjectElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static ObjectElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_Cast(Element.getCPtr(element)); + ObjectElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true); + return ret; + } + + public virtual BoolElement CreateBoolElement(XString name, bool value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateBoolElement(swigCPtr, XString.getCPtr(name), value); + BoolElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new BoolElement(cPtr, true); + return ret; + } + + public virtual IntElement CreateIntElement(XString name, int value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateIntElement(swigCPtr, XString.getCPtr(name), value); + IntElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new IntElement(cPtr, true); + return ret; + } + + public virtual LongElement CreateLongElement(XString name, long value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateLongElement(swigCPtr, XString.getCPtr(name), value); + LongElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new LongElement(cPtr, true); + return ret; + } + + public virtual FloatElement CreateFloatElement(XString name, float value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateFloatElement(swigCPtr, XString.getCPtr(name), value); + FloatElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new FloatElement(cPtr, true); + return ret; + } + + public virtual DoubleElement CreateDoubleElement(XString name, double value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateDoubleElement(swigCPtr, XString.getCPtr(name), value); + DoubleElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new DoubleElement(cPtr, true); + return ret; + } + + public virtual StringElement CreateStringElement(XString name, XString value) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateStringElement(swigCPtr, XString.getCPtr(name), XString.getCPtr(value)); + StringElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new StringElement(cPtr, true); + return ret; + } + + public virtual ObjectElement CreateObjectElement(XString name, XString objectType, User owner) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateObjectElement__SWIG_0(swigCPtr, XString.getCPtr(name), XString.getCPtr(objectType), User.getCPtr(owner)); + ObjectElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true); + return ret; + } + + public virtual ObjectElement CreateObjectElement(XString name, XString objectType) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateObjectElement__SWIG_1(swigCPtr, XString.getCPtr(name), XString.getCPtr(objectType)); + ObjectElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true); + return ret; + } + + public virtual IntArrayElement CreateIntArrayElement(XString name) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateIntArrayElement(swigCPtr, XString.getCPtr(name)); + IntArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new IntArrayElement(cPtr, true); + return ret; + } + + public virtual FloatArrayElement CreateFloatArrayElement(XString name) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateFloatArrayElement(swigCPtr, XString.getCPtr(name)); + FloatArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new FloatArrayElement(cPtr, true); + return ret; + } + + public virtual StringArrayElement CreateStringArrayElement(XString name) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateStringArrayElement(swigCPtr, XString.getCPtr(name)); + StringArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new StringArrayElement(cPtr, true); + return ret; + } + + public virtual int GetElementCount() { + int ret = SharingClientPINVOKE.ObjectElement_GetElementCount(swigCPtr); + return ret; + } + + public virtual Element GetElement(long id) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_GetElement__SWIG_0(swigCPtr, id); + Element ret = (cPtr == global::System.IntPtr.Zero) ? null : new Element(cPtr, true); + return ret; + } + + public virtual Element GetElement(XString name) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_GetElement__SWIG_1(swigCPtr, XString.getCPtr(name)); + Element ret = (cPtr == global::System.IntPtr.Zero) ? null : new Element(cPtr, true); + return ret; + } + + public virtual Element GetElementAt(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_GetElementAt(swigCPtr, index); + Element ret = (cPtr == global::System.IntPtr.Zero) ? null : new Element(cPtr, true); + return ret; + } + + public virtual void RemoveElement(Element element) { + SharingClientPINVOKE.ObjectElement_RemoveElement__SWIG_0(swigCPtr, Element.getCPtr(element)); + } + + public virtual void RemoveElement(long id) { + SharingClientPINVOKE.ObjectElement_RemoveElement__SWIG_1(swigCPtr, id); + } + + public virtual void RemoveElementAt(int index) { + SharingClientPINVOKE.ObjectElement_RemoveElementAt(swigCPtr, index); + } + + public virtual void AddListener(ObjectElementListener newListener) { + SharingClientPINVOKE.ObjectElement_AddListener(swigCPtr, ObjectElementListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(ObjectElementListener oldListener) { + SharingClientPINVOKE.ObjectElement_RemoveListener(swigCPtr, ObjectElementListener.getCPtr(oldListener)); + } + + public virtual int GetOwnerID() { + int ret = SharingClientPINVOKE.ObjectElement_GetOwnerID(swigCPtr); + return ret; + } + + public virtual XString GetObjectType() { + global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_GetObjectType(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs.meta new file mode 100644 index 0000000..f0d6807 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e0d1a3b25e4d0cf44b9cafd4a514ea85 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs new file mode 100644 index 0000000..4783742 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of ObjectElements to register to receive event callbacks without + /// having their classes inherit directly from ObjectElementListener + /// + public class ObjectElementAdapter : ObjectElementListener + { + public event System.Action BoolChangedEvent; + public event System.Action IntChangedEvent; + public event System.Action LongChangedEvent; + public event System.Action FloatChangedEvent; + public event System.Action DoubleChangedEvent; + public event System.Action StringChangedEvent; + public event System.Action ElementAddedEvent; + public event System.Action ElementDeletedEvent; + + /// + /// Initializes a new instance of . + /// + public ObjectElementAdapter() { } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new int value. + public override void OnIntElementChanged(long elementID, int newValue) + { + Profile.BeginRange("OnIntElementChanged"); + if (this.IntChangedEvent != null) + { + this.IntChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new double value. + public override void OnDoubleElementChanged(long elementID, double newValue) + { + Profile.BeginRange("OnDoubleElementChanged"); + if (this.DoubleChangedEvent != null) + { + this.DoubleChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new float value. + public override void OnFloatElementChanged(long elementID, float newValue) + { + Profile.BeginRange("OnFloatElementChanged"); + if (this.FloatChangedEvent != null) + { + this.FloatChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new long value. + public override void OnLongElementChanged(long elementID, long newValue) + { + Profile.BeginRange("OnLongElementChanged"); + if (this.LongChangedEvent != null) + { + this.LongChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new string value. + public override void OnStringElementChanged(long elementID, XString newValue) + { + Profile.BeginRange("OnStringElementChanged"); + if (this.StringChangedEvent != null) + { + this.StringChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The Elements id. + /// The new bool value + public override void OnBoolElementChanged(long elementID, bool newValue) + { + Profile.BeginRange("OnBoolElementChanged"); + if (this.BoolChangedEvent != null) + { + this.BoolChangedEvent(elementID, newValue); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The new Element. + public override void OnElementAdded(Element element) + { + Profile.BeginRange("OnElementAdded"); + if (this.ElementAddedEvent != null) + { + this.ElementAddedEvent(element); + } + Profile.EndRange(); + } + + /// + /// Throws the . + /// + /// The deleted Element. + public override void OnElementDeleted(Element element) + { + Profile.BeginRange("OnElementDeleted"); + if (this.ElementDeletedEvent != null) + { + this.ElementDeletedEvent(element); + } + Profile.EndRange(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs.meta new file mode 100644 index 0000000..b0e17ac --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ae04686128a4f2d4980a2ee5eaf185cc +timeCreated: 1457026428 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs new file mode 100644 index 0000000..c1395da --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs @@ -0,0 +1,164 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class ObjectElementListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal ObjectElementListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.ObjectElementListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ObjectElementListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~ObjectElementListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_ObjectElementListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnBoolElementChanged(long elementID, bool newValue) { + if (SwigDerivedClassHasMethod("OnBoolElementChanged", swigMethodTypes0)) SharingClientPINVOKE.ObjectElementListener_OnBoolElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, newValue); else SharingClientPINVOKE.ObjectElementListener_OnBoolElementChanged(swigCPtr, elementID, newValue); + } + + public virtual void OnIntElementChanged(long elementID, int newValue) { + if (SwigDerivedClassHasMethod("OnIntElementChanged", swigMethodTypes1)) SharingClientPINVOKE.ObjectElementListener_OnIntElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, newValue); else SharingClientPINVOKE.ObjectElementListener_OnIntElementChanged(swigCPtr, elementID, newValue); + } + + public virtual void OnLongElementChanged(long elementID, long newValue) { + if (SwigDerivedClassHasMethod("OnLongElementChanged", swigMethodTypes2)) SharingClientPINVOKE.ObjectElementListener_OnLongElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, newValue); else SharingClientPINVOKE.ObjectElementListener_OnLongElementChanged(swigCPtr, elementID, newValue); + } + + public virtual void OnFloatElementChanged(long elementID, float newValue) { + if (SwigDerivedClassHasMethod("OnFloatElementChanged", swigMethodTypes3)) SharingClientPINVOKE.ObjectElementListener_OnFloatElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, newValue); else SharingClientPINVOKE.ObjectElementListener_OnFloatElementChanged(swigCPtr, elementID, newValue); + } + + public virtual void OnDoubleElementChanged(long elementID, double newValue) { + if (SwigDerivedClassHasMethod("OnDoubleElementChanged", swigMethodTypes4)) SharingClientPINVOKE.ObjectElementListener_OnDoubleElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, newValue); else SharingClientPINVOKE.ObjectElementListener_OnDoubleElementChanged(swigCPtr, elementID, newValue); + } + + public virtual void OnStringElementChanged(long elementID, XString newValue) { + if (SwigDerivedClassHasMethod("OnStringElementChanged", swigMethodTypes5)) SharingClientPINVOKE.ObjectElementListener_OnStringElementChangedSwigExplicitObjectElementListener(swigCPtr, elementID, XString.getCPtr(newValue)); else SharingClientPINVOKE.ObjectElementListener_OnStringElementChanged(swigCPtr, elementID, XString.getCPtr(newValue)); + } + + public virtual void OnElementAdded(Element element) { + if (SwigDerivedClassHasMethod("OnElementAdded", swigMethodTypes6)) SharingClientPINVOKE.ObjectElementListener_OnElementAddedSwigExplicitObjectElementListener(swigCPtr, Element.getCPtr(element)); else SharingClientPINVOKE.ObjectElementListener_OnElementAdded(swigCPtr, Element.getCPtr(element)); + } + + public virtual void OnElementDeleted(Element element) { + if (SwigDerivedClassHasMethod("OnElementDeleted", swigMethodTypes7)) SharingClientPINVOKE.ObjectElementListener_OnElementDeletedSwigExplicitObjectElementListener(swigCPtr, Element.getCPtr(element)); else SharingClientPINVOKE.ObjectElementListener_OnElementDeleted(swigCPtr, Element.getCPtr(element)); + } + + public ObjectElementListener() : this(SharingClientPINVOKE.new_ObjectElementListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnBoolElementChanged", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateObjectElementListener_0(SwigDirectorOnBoolElementChanged); + if (SwigDerivedClassHasMethod("OnIntElementChanged", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateObjectElementListener_1(SwigDirectorOnIntElementChanged); + if (SwigDerivedClassHasMethod("OnLongElementChanged", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateObjectElementListener_2(SwigDirectorOnLongElementChanged); + if (SwigDerivedClassHasMethod("OnFloatElementChanged", swigMethodTypes3)) + swigDelegate3 = new SwigDelegateObjectElementListener_3(SwigDirectorOnFloatElementChanged); + if (SwigDerivedClassHasMethod("OnDoubleElementChanged", swigMethodTypes4)) + swigDelegate4 = new SwigDelegateObjectElementListener_4(SwigDirectorOnDoubleElementChanged); + if (SwigDerivedClassHasMethod("OnStringElementChanged", swigMethodTypes5)) + swigDelegate5 = new SwigDelegateObjectElementListener_5(SwigDirectorOnStringElementChanged); + if (SwigDerivedClassHasMethod("OnElementAdded", swigMethodTypes6)) + swigDelegate6 = new SwigDelegateObjectElementListener_6(SwigDirectorOnElementAdded); + if (SwigDerivedClassHasMethod("OnElementDeleted", swigMethodTypes7)) + swigDelegate7 = new SwigDelegateObjectElementListener_7(SwigDirectorOnElementDeleted); + SharingClientPINVOKE.ObjectElementListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3, swigDelegate4, swigDelegate5, swigDelegate6, swigDelegate7); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(ObjectElementListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnBoolElementChanged(long elementID, bool newValue) { + OnBoolElementChanged(elementID, newValue); + } + + private void SwigDirectorOnIntElementChanged(long elementID, int newValue) { + OnIntElementChanged(elementID, newValue); + } + + private void SwigDirectorOnLongElementChanged(long elementID, long newValue) { + OnLongElementChanged(elementID, newValue); + } + + private void SwigDirectorOnFloatElementChanged(long elementID, float newValue) { + OnFloatElementChanged(elementID, newValue); + } + + private void SwigDirectorOnDoubleElementChanged(long elementID, double newValue) { + OnDoubleElementChanged(elementID, newValue); + } + + private void SwigDirectorOnStringElementChanged(long elementID, global::System.IntPtr newValue) { + OnStringElementChanged(elementID, (newValue == global::System.IntPtr.Zero) ? null : new XString(newValue, true)); + } + + private void SwigDirectorOnElementAdded(global::System.IntPtr element) { + OnElementAdded((element == global::System.IntPtr.Zero) ? null : new Element(element, true)); + } + + private void SwigDirectorOnElementDeleted(global::System.IntPtr element) { + OnElementDeleted((element == global::System.IntPtr.Zero) ? null : new Element(element, true)); + } + + public delegate void SwigDelegateObjectElementListener_0(long elementID, bool newValue); + public delegate void SwigDelegateObjectElementListener_1(long elementID, int newValue); + public delegate void SwigDelegateObjectElementListener_2(long elementID, long newValue); + public delegate void SwigDelegateObjectElementListener_3(long elementID, float newValue); + public delegate void SwigDelegateObjectElementListener_4(long elementID, double newValue); + public delegate void SwigDelegateObjectElementListener_5(long elementID, global::System.IntPtr newValue); + public delegate void SwigDelegateObjectElementListener_6(global::System.IntPtr element); + public delegate void SwigDelegateObjectElementListener_7(global::System.IntPtr element); + + private SwigDelegateObjectElementListener_0 swigDelegate0; + private SwigDelegateObjectElementListener_1 swigDelegate1; + private SwigDelegateObjectElementListener_2 swigDelegate2; + private SwigDelegateObjectElementListener_3 swigDelegate3; + private SwigDelegateObjectElementListener_4 swigDelegate4; + private SwigDelegateObjectElementListener_5 swigDelegate5; + private SwigDelegateObjectElementListener_6 swigDelegate6; + private SwigDelegateObjectElementListener_7 swigDelegate7; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(long), typeof(bool) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(long), typeof(int) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(long), typeof(long) }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { typeof(long), typeof(float) }; + private static global::System.Type[] swigMethodTypes4 = new global::System.Type[] { typeof(long), typeof(double) }; + private static global::System.Type[] swigMethodTypes5 = new global::System.Type[] { typeof(long), typeof(XString) }; + private static global::System.Type[] swigMethodTypes6 = new global::System.Type[] { typeof(Element) }; + private static global::System.Type[] swigMethodTypes7 = new global::System.Type[] { typeof(Element) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs.meta new file mode 100644 index 0000000..2a6a03a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ObjectElementListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b495c812f1ec77408d360727b6f0a9d +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs new file mode 100644 index 0000000..77b41e5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs @@ -0,0 +1,173 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class PairMaker : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal PairMaker(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PairMaker obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~PairMaker() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_PairMaker(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual bool IsReceiver() { + bool ret = (SwigDerivedClassHasMethod("IsReceiver", swigMethodTypes0) ? SharingClientPINVOKE.PairMaker_IsReceiverSwigExplicitPairMaker(swigCPtr) : SharingClientPINVOKE.PairMaker_IsReceiver(swigCPtr)); + return ret; + } + + public virtual int GetAddressCount() { + int ret = SharingClientPINVOKE.PairMaker_GetAddressCount(swigCPtr); + return ret; + } + + public virtual XString GetAddress(int index) { + global::System.IntPtr cPtr = (SwigDerivedClassHasMethod("GetAddress", swigMethodTypes2) ? SharingClientPINVOKE.PairMaker_GetAddressSwigExplicitPairMaker(swigCPtr, index) : SharingClientPINVOKE.PairMaker_GetAddress(swigCPtr, index)); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual ushort GetPort() { + ushort ret = (SwigDerivedClassHasMethod("GetPort", swigMethodTypes3) ? SharingClientPINVOKE.PairMaker_GetPortSwigExplicitPairMaker(swigCPtr) : SharingClientPINVOKE.PairMaker_GetPort(swigCPtr)); + return ret; + } + + public virtual void Update() { + if (SwigDerivedClassHasMethod("Update", swigMethodTypes4)) SharingClientPINVOKE.PairMaker_UpdateSwigExplicitPairMaker(swigCPtr); else SharingClientPINVOKE.PairMaker_Update(swigCPtr); + } + + public virtual bool IsReadyToConnect() { + bool ret = (SwigDerivedClassHasMethod("IsReadyToConnect", swigMethodTypes5) ? SharingClientPINVOKE.PairMaker_IsReadyToConnectSwigExplicitPairMaker(swigCPtr) : SharingClientPINVOKE.PairMaker_IsReadyToConnect(swigCPtr)); + return ret; + } + + public virtual int GetLocalKey() { + int ret = (SwigDerivedClassHasMethod("GetLocalKey", swigMethodTypes6) ? SharingClientPINVOKE.PairMaker_GetLocalKeySwigExplicitPairMaker(swigCPtr) : SharingClientPINVOKE.PairMaker_GetLocalKey(swigCPtr)); + return ret; + } + + public virtual int GetRemoteKey() { + int ret = (SwigDerivedClassHasMethod("GetRemoteKey", swigMethodTypes7) ? SharingClientPINVOKE.PairMaker_GetRemoteKeySwigExplicitPairMaker(swigCPtr) : SharingClientPINVOKE.PairMaker_GetRemoteKey(swigCPtr)); + return ret; + } + + public PairMaker() : this(SharingClientPINVOKE.new_PairMaker(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("IsReceiver", swigMethodTypes0)) + swigDelegate0 = new SwigDelegatePairMaker_0(SwigDirectorIsReceiver); + if (SwigDerivedClassHasMethod("GetAddressCount", swigMethodTypes1)) + swigDelegate1 = new SwigDelegatePairMaker_1(SwigDirectorGetAddressCount); + if (SwigDerivedClassHasMethod("GetAddress", swigMethodTypes2)) + swigDelegate2 = new SwigDelegatePairMaker_2(SwigDirectorGetAddress); + if (SwigDerivedClassHasMethod("GetPort", swigMethodTypes3)) + swigDelegate3 = new SwigDelegatePairMaker_3(SwigDirectorGetPort); + if (SwigDerivedClassHasMethod("Update", swigMethodTypes4)) + swigDelegate4 = new SwigDelegatePairMaker_4(SwigDirectorUpdate); + if (SwigDerivedClassHasMethod("IsReadyToConnect", swigMethodTypes5)) + swigDelegate5 = new SwigDelegatePairMaker_5(SwigDirectorIsReadyToConnect); + if (SwigDerivedClassHasMethod("GetLocalKey", swigMethodTypes6)) + swigDelegate6 = new SwigDelegatePairMaker_6(SwigDirectorGetLocalKey); + if (SwigDerivedClassHasMethod("GetRemoteKey", swigMethodTypes7)) + swigDelegate7 = new SwigDelegatePairMaker_7(SwigDirectorGetRemoteKey); + SharingClientPINVOKE.PairMaker_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3, swigDelegate4, swigDelegate5, swigDelegate6, swigDelegate7); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(PairMaker)); + return hasDerivedMethod; + } + + private bool SwigDirectorIsReceiver() { + return IsReceiver(); + } + + private int SwigDirectorGetAddressCount() { + return GetAddressCount(); + } + + private global::System.IntPtr SwigDirectorGetAddress(int index) { + return XString.getCPtr(GetAddress(index)).Handle ; + } + + private ushort SwigDirectorGetPort() { + return GetPort(); + } + + private void SwigDirectorUpdate() { + Update(); + } + + private bool SwigDirectorIsReadyToConnect() { + return IsReadyToConnect(); + } + + private int SwigDirectorGetLocalKey() { + return GetLocalKey(); + } + + private int SwigDirectorGetRemoteKey() { + return GetRemoteKey(); + } + + public delegate bool SwigDelegatePairMaker_0(); + public delegate int SwigDelegatePairMaker_1(); + public delegate global::System.IntPtr SwigDelegatePairMaker_2(int index); + public delegate ushort SwigDelegatePairMaker_3(); + public delegate void SwigDelegatePairMaker_4(); + public delegate bool SwigDelegatePairMaker_5(); + public delegate int SwigDelegatePairMaker_6(); + public delegate int SwigDelegatePairMaker_7(); + + private SwigDelegatePairMaker_0 swigDelegate0; + private SwigDelegatePairMaker_1 swigDelegate1; + private SwigDelegatePairMaker_2 swigDelegate2; + private SwigDelegatePairMaker_3 swigDelegate3; + private SwigDelegatePairMaker_4 swigDelegate4; + private SwigDelegatePairMaker_5 swigDelegate5; + private SwigDelegatePairMaker_6 swigDelegate6; + private SwigDelegatePairMaker_7 swigDelegate7; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(int) }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes4 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes5 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes6 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes7 = new global::System.Type[] { }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs.meta new file mode 100644 index 0000000..8209530 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairMaker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 084b4f8c431905d4cac0e4b5f2a3b6db +timeCreated: 1458941821 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs new file mode 100644 index 0000000..bb77580 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of the pairing API to register to receive pairing event callbacks without + /// having their classes inherit directly from PairingListener + /// + public class PairingAdapter : PairingListener + { + public event System.Action SuccessEvent; + public event System.Action FailureEvent; + + public PairingAdapter() { } + + public override void PairingConnectionSucceeded() + { + if (this.SuccessEvent != null) + { + this.SuccessEvent(); + } + } + + public override void PairingConnectionFailed(PairingResult result) + { + if (this.FailureEvent != null) + { + this.FailureEvent(result); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs.meta new file mode 100644 index 0000000..e2842db --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0c043c1caff935c4ab375545540e6f89 +timeCreated: 1458941821 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs new file mode 100644 index 0000000..078ca6e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class PairingListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal PairingListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.PairingListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PairingListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~PairingListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_PairingListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void PairingConnectionSucceeded() { + if (SwigDerivedClassHasMethod("PairingConnectionSucceeded", swigMethodTypes0)) SharingClientPINVOKE.PairingListener_PairingConnectionSucceededSwigExplicitPairingListener(swigCPtr); else SharingClientPINVOKE.PairingListener_PairingConnectionSucceeded(swigCPtr); + } + + public virtual void PairingConnectionFailed(PairingResult reason) { + if (SwigDerivedClassHasMethod("PairingConnectionFailed", swigMethodTypes1)) SharingClientPINVOKE.PairingListener_PairingConnectionFailedSwigExplicitPairingListener(swigCPtr, (int)reason); else SharingClientPINVOKE.PairingListener_PairingConnectionFailed(swigCPtr, (int)reason); + } + + public PairingListener() : this(SharingClientPINVOKE.new_PairingListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("PairingConnectionSucceeded", swigMethodTypes0)) + swigDelegate0 = new SwigDelegatePairingListener_0(SwigDirectorPairingConnectionSucceeded); + if (SwigDerivedClassHasMethod("PairingConnectionFailed", swigMethodTypes1)) + swigDelegate1 = new SwigDelegatePairingListener_1(SwigDirectorPairingConnectionFailed); + SharingClientPINVOKE.PairingListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(PairingListener)); + return hasDerivedMethod; + } + + private void SwigDirectorPairingConnectionSucceeded() { + PairingConnectionSucceeded(); + } + + private void SwigDirectorPairingConnectionFailed(int reason) { + PairingConnectionFailed((PairingResult)reason); + } + + public delegate void SwigDelegatePairingListener_0(); + public delegate void SwigDelegatePairingListener_1(int reason); + + private SwigDelegatePairingListener_0 swigDelegate0; + private SwigDelegatePairingListener_1 swigDelegate1; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(PairingResult) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs.meta new file mode 100644 index 0000000..e8ec370 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 47b537eba84b0c3449305d8669a8b1af +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs new file mode 100644 index 0000000..ae6f90c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs @@ -0,0 +1,82 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class PairingManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal PairingManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(PairingManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~PairingManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_PairingManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual bool HasPairingInfo() { + bool ret = SharingClientPINVOKE.PairingManager_HasPairingInfo(swigCPtr); + return ret; + } + + public virtual void ClearPairingInfo() { + SharingClientPINVOKE.PairingManager_ClearPairingInfo(swigCPtr); + } + + public virtual bool BeginConnecting(PairingListener listener) { + bool ret = SharingClientPINVOKE.PairingManager_BeginConnecting(swigCPtr, PairingListener.getCPtr(listener)); + return ret; + } + + public virtual void CancelConnecting() { + SharingClientPINVOKE.PairingManager_CancelConnecting(swigCPtr); + } + + public virtual PairingResult BeginPairing(PairMaker pairMaker, PairingListener listener) { + PairingResult ret = (PairingResult)SharingClientPINVOKE.PairingManager_BeginPairing(swigCPtr, PairMaker.getCPtr(pairMaker), PairingListener.getCPtr(listener)); + return ret; + } + + public virtual void CancelPairing() { + SharingClientPINVOKE.PairingManager_CancelPairing(swigCPtr); + } + + public virtual bool IsPairing() { + bool ret = SharingClientPINVOKE.PairingManager_IsPairing(swigCPtr); + return ret; + } + + public virtual bool IsConnected() { + bool ret = SharingClientPINVOKE.PairingManager_IsConnected(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs.meta new file mode 100644 index 0000000..17137af --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f95f2d2e5aebb354c937a457bd78f00c +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs new file mode 100644 index 0000000..5b2e6c6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum PairingResult { + Ok = 0, + CanceledByUser, + FailedToOpenIncomingConnection, + FailedToOpenOutgoingConnection, + PairingAlreadyInProgress, + ConnectionFailed, + NoAddressToConnectTo +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs.meta new file mode 100644 index 0000000..09fa065 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/PairingResult.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e0fb94a22a19a954b814249beda9d83c +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs new file mode 100644 index 0000000..157a050 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs @@ -0,0 +1,57 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Profile : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Profile(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Profile obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Profile() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Profile(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public static void BeginRange(string name) { + SharingClientPINVOKE.Profile_BeginRange(name); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public static void EndRange() { + SharingClientPINVOKE.Profile_EndRange(); + } + + public Profile() : this(SharingClientPINVOKE.new_Profile(), true) { + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs.meta new file mode 100644 index 0000000..d33efb7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Profile.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c4274adbfd91e4a4dbc9b93da052ed4f +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs new file mode 100644 index 0000000..801aab1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class ProfileManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal ProfileManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ProfileManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~ProfileManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_ProfileManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void BeginRange(string name) { + SharingClientPINVOKE.ProfileManager_BeginRange(swigCPtr, name); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public virtual void EndRange() { + SharingClientPINVOKE.ProfileManager_EndRange(swigCPtr); + } + + public virtual void Log(LogSeverity severity, string message) { + SharingClientPINVOKE.ProfileManager_Log(swigCPtr, (int)severity, message); + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs.meta new file mode 100644 index 0000000..c3a504a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/ProfileManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4bb9a692e2fe3694c8a241389195c987 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs new file mode 100644 index 0000000..f1b3edc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Receipt : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Receipt(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Receipt obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Receipt() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Receipt(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void Clear() { + SharingClientPINVOKE.Receipt_Clear(swigCPtr); + } + + public Receipt() : this(SharingClientPINVOKE.new_Receipt(), true) { + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs.meta new file mode 100644 index 0000000..f2a2e0e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Receipt.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 92d599c3060487d4493f33566bff57ef +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs new file mode 100644 index 0000000..68009ce --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Room : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Room(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Room obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Room() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Room(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual XString GetName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Room_GetName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual long GetID() { + long ret = SharingClientPINVOKE.Room_GetID(swigCPtr); + return ret; + } + + public virtual int GetUserCount() { + int ret = SharingClientPINVOKE.Room_GetUserCount(swigCPtr); + return ret; + } + + public virtual int GetUserID(int userIndex) { + int ret = SharingClientPINVOKE.Room_GetUserID(swigCPtr, userIndex); + return ret; + } + + public virtual bool GetKeepOpen() { + bool ret = SharingClientPINVOKE.Room_GetKeepOpen(swigCPtr); + return ret; + } + + public virtual void SetKeepOpen(bool keepOpen) { + SharingClientPINVOKE.Room_SetKeepOpen(swigCPtr, keepOpen); + } + + public virtual int GetAnchorCount() { + int ret = SharingClientPINVOKE.Room_GetAnchorCount(swigCPtr); + return ret; + } + + public virtual XString GetAnchorName(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.Room_GetAnchorName(swigCPtr, index); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public const long kInvalidRoomID = -1L; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs.meta new file mode 100644 index 0000000..0df7363 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Room.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b39013cb87c4bf47a8642ff75feb58a +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs new file mode 100644 index 0000000..46c8d25 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs @@ -0,0 +1,100 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class RoomManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal RoomManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(RoomManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~RoomManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_RoomManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void AddListener(RoomManagerListener newListener) { + SharingClientPINVOKE.RoomManager_AddListener(swigCPtr, RoomManagerListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(RoomManagerListener oldListener) { + SharingClientPINVOKE.RoomManager_RemoveListener(swigCPtr, RoomManagerListener.getCPtr(oldListener)); + } + + public virtual int GetRoomCount() { + int ret = SharingClientPINVOKE.RoomManager_GetRoomCount(swigCPtr); + return ret; + } + + public virtual Room GetRoom(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.RoomManager_GetRoom(swigCPtr, index); + Room ret = (cPtr == global::System.IntPtr.Zero) ? null : new Room(cPtr, true); + return ret; + } + + public virtual Room GetCurrentRoom() { + global::System.IntPtr cPtr = SharingClientPINVOKE.RoomManager_GetCurrentRoom(swigCPtr); + Room ret = (cPtr == global::System.IntPtr.Zero) ? null : new Room(cPtr, true); + return ret; + } + + public virtual Room CreateRoom(XString roomName, long roomID, bool keepOpenWhenEmpty) { + global::System.IntPtr cPtr = SharingClientPINVOKE.RoomManager_CreateRoom(swigCPtr, XString.getCPtr(roomName), roomID, keepOpenWhenEmpty); + Room ret = (cPtr == global::System.IntPtr.Zero) ? null : new Room(cPtr, true); + return ret; + } + + public virtual bool JoinRoom(Room room) { + bool ret = SharingClientPINVOKE.RoomManager_JoinRoom(swigCPtr, Room.getCPtr(room)); + return ret; + } + + public virtual bool LeaveRoom() { + bool ret = SharingClientPINVOKE.RoomManager_LeaveRoom(swigCPtr); + return ret; + } + + public virtual bool DownloadAnchor(Room room, XString anchorName) { + bool ret = SharingClientPINVOKE.RoomManager_DownloadAnchor(swigCPtr, Room.getCPtr(room), XString.getCPtr(anchorName)); + return ret; + } + + public virtual bool UploadAnchor(Room room, XString anchorName, byte[] data, int dataSize) { + global::System.Runtime.InteropServices.GCHandle pinHandle_data = global::System.Runtime.InteropServices.GCHandle.Alloc(data, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + bool ret = SharingClientPINVOKE.RoomManager_UploadAnchor(swigCPtr, Room.getCPtr(room), XString.getCPtr(anchorName), (global::System.IntPtr)pinHandle_data.AddrOfPinnedObject(), dataSize); + return ret; + } + } finally { pinHandle_data.Free(); } + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs.meta new file mode 100644 index 0000000..6ad29a0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c97cc1ee7df4993418ffc252dbe1ad8a +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs new file mode 100644 index 0000000..8f9b9be --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of the RoomManager to register to receive event callbacks without + /// having their classes inherit directly from RoomManagerListener + /// + public class RoomManagerAdapter : RoomManagerListener + { + public event System.Action RoomAddedEvent; + public event System.Action RoomClosedEvent; + public event System.Action UserJoinedRoomEvent; + public event System.Action UserLeftRoomEvent; + public event System.Action AnchorsChangedEvent; + public event System.Action AnchorsDownloadedEvent; + public event System.Action AnchorUploadedEvent; + + public RoomManagerAdapter() { } + + public override void OnRoomAdded(Room newRoom) + { + Profile.BeginRange("OnRoomAdded"); + if (this.RoomAddedEvent != null) + { + this.RoomAddedEvent(newRoom); + } + Profile.EndRange(); + } + + public override void OnRoomClosed(Room room) + { + Profile.BeginRange("OnRoomClosed"); + if (this.RoomClosedEvent != null) + { + this.RoomClosedEvent(room); + } + Profile.EndRange(); + } + + public override void OnUserJoinedRoom(Room room, int user) + { + Profile.BeginRange("OnUserJoinedRoom"); + if (this.UserJoinedRoomEvent != null) + { + this.UserJoinedRoomEvent(room, user); + } + Profile.EndRange(); + } + + public override void OnUserLeftRoom(Room room, int user) + { + Profile.BeginRange("OnUserLeftRoom"); + if (this.UserLeftRoomEvent != null) + { + this.UserLeftRoomEvent(room, user); + } + Profile.EndRange(); + } + + public override void OnAnchorsChanged(Room room) + { + Profile.BeginRange("OnAnchorsChanged"); + if (this.AnchorsChangedEvent != null) + { + this.AnchorsChangedEvent(room); + } + Profile.EndRange(); + } + + public override void OnAnchorsDownloaded(bool successful, AnchorDownloadRequest request, XString failureReason) + { + Profile.BeginRange("OnAnchorsDownloaded"); + if (this.AnchorsDownloadedEvent != null) + { + this.AnchorsDownloadedEvent(successful, request, failureReason); + } + Profile.EndRange(); + } + + public override void OnAnchorUploadComplete(bool successful, XString failureReason) + { + Profile.BeginRange("OnAnchorUploadComplete"); + if (this.AnchorUploadedEvent != null) + { + this.AnchorUploadedEvent(successful, failureReason); + } + Profile.EndRange(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs.meta new file mode 100644 index 0000000..ecb637a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 65489362c11ca984a9e8f9b932da0a8e +timeCreated: 1457026428 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs new file mode 100644 index 0000000..aad5df0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs @@ -0,0 +1,151 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class RoomManagerListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal RoomManagerListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.RoomManagerListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(RoomManagerListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~RoomManagerListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_RoomManagerListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnRoomAdded(Room newRoom) { + if (SwigDerivedClassHasMethod("OnRoomAdded", swigMethodTypes0)) SharingClientPINVOKE.RoomManagerListener_OnRoomAddedSwigExplicitRoomManagerListener(swigCPtr, Room.getCPtr(newRoom)); else SharingClientPINVOKE.RoomManagerListener_OnRoomAdded(swigCPtr, Room.getCPtr(newRoom)); + } + + public virtual void OnRoomClosed(Room room) { + if (SwigDerivedClassHasMethod("OnRoomClosed", swigMethodTypes1)) SharingClientPINVOKE.RoomManagerListener_OnRoomClosedSwigExplicitRoomManagerListener(swigCPtr, Room.getCPtr(room)); else SharingClientPINVOKE.RoomManagerListener_OnRoomClosed(swigCPtr, Room.getCPtr(room)); + } + + public virtual void OnUserJoinedRoom(Room room, int user) { + if (SwigDerivedClassHasMethod("OnUserJoinedRoom", swigMethodTypes2)) SharingClientPINVOKE.RoomManagerListener_OnUserJoinedRoomSwigExplicitRoomManagerListener(swigCPtr, Room.getCPtr(room), user); else SharingClientPINVOKE.RoomManagerListener_OnUserJoinedRoom(swigCPtr, Room.getCPtr(room), user); + } + + public virtual void OnUserLeftRoom(Room room, int user) { + if (SwigDerivedClassHasMethod("OnUserLeftRoom", swigMethodTypes3)) SharingClientPINVOKE.RoomManagerListener_OnUserLeftRoomSwigExplicitRoomManagerListener(swigCPtr, Room.getCPtr(room), user); else SharingClientPINVOKE.RoomManagerListener_OnUserLeftRoom(swigCPtr, Room.getCPtr(room), user); + } + + public virtual void OnAnchorsChanged(Room room) { + if (SwigDerivedClassHasMethod("OnAnchorsChanged", swigMethodTypes4)) SharingClientPINVOKE.RoomManagerListener_OnAnchorsChangedSwigExplicitRoomManagerListener(swigCPtr, Room.getCPtr(room)); else SharingClientPINVOKE.RoomManagerListener_OnAnchorsChanged(swigCPtr, Room.getCPtr(room)); + } + + public virtual void OnAnchorsDownloaded(bool successful, AnchorDownloadRequest request, XString failureReason) { + if (SwigDerivedClassHasMethod("OnAnchorsDownloaded", swigMethodTypes5)) SharingClientPINVOKE.RoomManagerListener_OnAnchorsDownloadedSwigExplicitRoomManagerListener(swigCPtr, successful, AnchorDownloadRequest.getCPtr(request), XString.getCPtr(failureReason)); else SharingClientPINVOKE.RoomManagerListener_OnAnchorsDownloaded(swigCPtr, successful, AnchorDownloadRequest.getCPtr(request), XString.getCPtr(failureReason)); + } + + public virtual void OnAnchorUploadComplete(bool successful, XString failureReason) { + if (SwigDerivedClassHasMethod("OnAnchorUploadComplete", swigMethodTypes6)) SharingClientPINVOKE.RoomManagerListener_OnAnchorUploadCompleteSwigExplicitRoomManagerListener(swigCPtr, successful, XString.getCPtr(failureReason)); else SharingClientPINVOKE.RoomManagerListener_OnAnchorUploadComplete(swigCPtr, successful, XString.getCPtr(failureReason)); + } + + public RoomManagerListener() : this(SharingClientPINVOKE.new_RoomManagerListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnRoomAdded", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateRoomManagerListener_0(SwigDirectorOnRoomAdded); + if (SwigDerivedClassHasMethod("OnRoomClosed", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateRoomManagerListener_1(SwigDirectorOnRoomClosed); + if (SwigDerivedClassHasMethod("OnUserJoinedRoom", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateRoomManagerListener_2(SwigDirectorOnUserJoinedRoom); + if (SwigDerivedClassHasMethod("OnUserLeftRoom", swigMethodTypes3)) + swigDelegate3 = new SwigDelegateRoomManagerListener_3(SwigDirectorOnUserLeftRoom); + if (SwigDerivedClassHasMethod("OnAnchorsChanged", swigMethodTypes4)) + swigDelegate4 = new SwigDelegateRoomManagerListener_4(SwigDirectorOnAnchorsChanged); + if (SwigDerivedClassHasMethod("OnAnchorsDownloaded", swigMethodTypes5)) + swigDelegate5 = new SwigDelegateRoomManagerListener_5(SwigDirectorOnAnchorsDownloaded); + if (SwigDerivedClassHasMethod("OnAnchorUploadComplete", swigMethodTypes6)) + swigDelegate6 = new SwigDelegateRoomManagerListener_6(SwigDirectorOnAnchorUploadComplete); + SharingClientPINVOKE.RoomManagerListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3, swigDelegate4, swigDelegate5, swigDelegate6); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(RoomManagerListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnRoomAdded(global::System.IntPtr newRoom) { + OnRoomAdded((newRoom == global::System.IntPtr.Zero) ? null : new Room(newRoom, true)); + } + + private void SwigDirectorOnRoomClosed(global::System.IntPtr room) { + OnRoomClosed((room == global::System.IntPtr.Zero) ? null : new Room(room, true)); + } + + private void SwigDirectorOnUserJoinedRoom(global::System.IntPtr room, int user) { + OnUserJoinedRoom((room == global::System.IntPtr.Zero) ? null : new Room(room, true), user); + } + + private void SwigDirectorOnUserLeftRoom(global::System.IntPtr room, int user) { + OnUserLeftRoom((room == global::System.IntPtr.Zero) ? null : new Room(room, true), user); + } + + private void SwigDirectorOnAnchorsChanged(global::System.IntPtr room) { + OnAnchorsChanged((room == global::System.IntPtr.Zero) ? null : new Room(room, true)); + } + + private void SwigDirectorOnAnchorsDownloaded(bool successful, global::System.IntPtr request, global::System.IntPtr failureReason) { + OnAnchorsDownloaded(successful, (request == global::System.IntPtr.Zero) ? null : new AnchorDownloadRequest(request, true), (failureReason == global::System.IntPtr.Zero) ? null : new XString(failureReason, true)); + } + + private void SwigDirectorOnAnchorUploadComplete(bool successful, global::System.IntPtr failureReason) { + OnAnchorUploadComplete(successful, (failureReason == global::System.IntPtr.Zero) ? null : new XString(failureReason, true)); + } + + public delegate void SwigDelegateRoomManagerListener_0(global::System.IntPtr newRoom); + public delegate void SwigDelegateRoomManagerListener_1(global::System.IntPtr room); + public delegate void SwigDelegateRoomManagerListener_2(global::System.IntPtr room, int user); + public delegate void SwigDelegateRoomManagerListener_3(global::System.IntPtr room, int user); + public delegate void SwigDelegateRoomManagerListener_4(global::System.IntPtr room); + public delegate void SwigDelegateRoomManagerListener_5(bool successful, global::System.IntPtr request, global::System.IntPtr failureReason); + public delegate void SwigDelegateRoomManagerListener_6(bool successful, global::System.IntPtr failureReason); + + private SwigDelegateRoomManagerListener_0 swigDelegate0; + private SwigDelegateRoomManagerListener_1 swigDelegate1; + private SwigDelegateRoomManagerListener_2 swigDelegate2; + private SwigDelegateRoomManagerListener_3 swigDelegate3; + private SwigDelegateRoomManagerListener_4 swigDelegate4; + private SwigDelegateRoomManagerListener_5 swigDelegate5; + private SwigDelegateRoomManagerListener_6 swigDelegate6; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(Room) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(Room) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(Room), typeof(int) }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { typeof(Room), typeof(int) }; + private static global::System.Type[] swigMethodTypes4 = new global::System.Type[] { typeof(Room) }; + private static global::System.Type[] swigMethodTypes5 = new global::System.Type[] { typeof(bool), typeof(AnchorDownloadRequest), typeof(XString) }; + private static global::System.Type[] swigMethodTypes6 = new global::System.Type[] { typeof(bool), typeof(XString) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs.meta new file mode 100644 index 0000000..9b24428 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/RoomManagerListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: db80c602911422546923f9ff32bc5ae3 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs new file mode 100644 index 0000000..29ddb41 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs @@ -0,0 +1,100 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Session : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Session(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Session obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Session() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Session(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual MachineSessionState GetMachineSessionState() { + MachineSessionState ret = (MachineSessionState)SharingClientPINVOKE.Session_GetMachineSessionState(swigCPtr); + return ret; + } + + public virtual void AddListener(SessionListener newListener) { + SharingClientPINVOKE.Session_AddListener(swigCPtr, SessionListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(SessionListener oldListener) { + SharingClientPINVOKE.Session_RemoveListener(swigCPtr, SessionListener.getCPtr(oldListener)); + } + + public virtual bool IsJoined() { + bool ret = SharingClientPINVOKE.Session_IsJoined(swigCPtr); + return ret; + } + + public virtual bool Join() { + bool ret = SharingClientPINVOKE.Session_Join(swigCPtr); + return ret; + } + + public virtual void Leave() { + SharingClientPINVOKE.Session_Leave(swigCPtr); + } + + public virtual int GetUserCount() { + int ret = SharingClientPINVOKE.Session_GetUserCount(swigCPtr); + return ret; + } + + public virtual User GetUser(int i) { + global::System.IntPtr cPtr = SharingClientPINVOKE.Session_GetUser(swigCPtr, i); + User ret = (cPtr == global::System.IntPtr.Zero) ? null : new User(cPtr, true); + return ret; + } + + public virtual SessionType GetSessionType() { + SessionType ret = (SessionType)SharingClientPINVOKE.Session_GetSessionType(swigCPtr); + return ret; + } + + public virtual XString GetName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Session_GetName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual NetworkConnection GetSessionNetworkConnection() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Session_GetSessionNetworkConnection(swigCPtr); + NetworkConnection ret = (cPtr == global::System.IntPtr.Zero) ? null : new NetworkConnection(cPtr, true); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs.meta new file mode 100644 index 0000000..955a91d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Session.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 248028be8e1c62249af53fb6f7285320 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs new file mode 100644 index 0000000..ac80527 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs @@ -0,0 +1,112 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SessionListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal SessionListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.SessionListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SessionListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~SessionListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_SessionListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnJoiningSession() { + if (SwigDerivedClassHasMethod("OnJoiningSession", swigMethodTypes0)) SharingClientPINVOKE.SessionListener_OnJoiningSessionSwigExplicitSessionListener(swigCPtr); else SharingClientPINVOKE.SessionListener_OnJoiningSession(swigCPtr); + } + + public virtual void OnJoinSucceeded() { + if (SwigDerivedClassHasMethod("OnJoinSucceeded", swigMethodTypes1)) SharingClientPINVOKE.SessionListener_OnJoinSucceededSwigExplicitSessionListener(swigCPtr); else SharingClientPINVOKE.SessionListener_OnJoinSucceeded(swigCPtr); + } + + public virtual void OnJoinFailed() { + if (SwigDerivedClassHasMethod("OnJoinFailed", swigMethodTypes2)) SharingClientPINVOKE.SessionListener_OnJoinFailedSwigExplicitSessionListener(swigCPtr); else SharingClientPINVOKE.SessionListener_OnJoinFailed(swigCPtr); + } + + public virtual void OnSessionDisconnected() { + if (SwigDerivedClassHasMethod("OnSessionDisconnected", swigMethodTypes3)) SharingClientPINVOKE.SessionListener_OnSessionDisconnectedSwigExplicitSessionListener(swigCPtr); else SharingClientPINVOKE.SessionListener_OnSessionDisconnected(swigCPtr); + } + + public SessionListener() : this(SharingClientPINVOKE.new_SessionListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnJoiningSession", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateSessionListener_0(SwigDirectorOnJoiningSession); + if (SwigDerivedClassHasMethod("OnJoinSucceeded", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateSessionListener_1(SwigDirectorOnJoinSucceeded); + if (SwigDerivedClassHasMethod("OnJoinFailed", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateSessionListener_2(SwigDirectorOnJoinFailed); + if (SwigDerivedClassHasMethod("OnSessionDisconnected", swigMethodTypes3)) + swigDelegate3 = new SwigDelegateSessionListener_3(SwigDirectorOnSessionDisconnected); + SharingClientPINVOKE.SessionListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(SessionListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnJoiningSession() { + OnJoiningSession(); + } + + private void SwigDirectorOnJoinSucceeded() { + OnJoinSucceeded(); + } + + private void SwigDirectorOnJoinFailed() { + OnJoinFailed(); + } + + private void SwigDirectorOnSessionDisconnected() { + OnSessionDisconnected(); + } + + public delegate void SwigDelegateSessionListener_0(); + public delegate void SwigDelegateSessionListener_1(); + public delegate void SwigDelegateSessionListener_2(); + public delegate void SwigDelegateSessionListener_3(); + + private SwigDelegateSessionListener_0 swigDelegate0; + private SwigDelegateSessionListener_1 swigDelegate1; + private SwigDelegateSessionListener_2 swigDelegate2; + private SwigDelegateSessionListener_3 swigDelegate3; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs.meta new file mode 100644 index 0000000..8aa0961 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 36bb423d5e763fe4a98e55fef096b59e +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs new file mode 100644 index 0000000..7deff7c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SessionManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal SessionManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SessionManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~SessionManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_SessionManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void AddListener(SessionManagerListener newListener) { + SharingClientPINVOKE.SessionManager_AddListener(swigCPtr, SessionManagerListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(SessionManagerListener oldListener) { + SharingClientPINVOKE.SessionManager_RemoveListener(swigCPtr, SessionManagerListener.getCPtr(oldListener)); + } + + public virtual bool CreateSession(XString sessionName) { + bool ret = SharingClientPINVOKE.SessionManager_CreateSession__SWIG_0(swigCPtr, XString.getCPtr(sessionName)); + return ret; + } + + public virtual bool CreateSession(XString sessionName, SessionType type) { + bool ret = SharingClientPINVOKE.SessionManager_CreateSession__SWIG_1(swigCPtr, XString.getCPtr(sessionName), (int)type); + return ret; + } + + public virtual int GetSessionCount() { + int ret = SharingClientPINVOKE.SessionManager_GetSessionCount(swigCPtr); + return ret; + } + + public virtual Session GetSession(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.SessionManager_GetSession(swigCPtr, index); + Session ret = (cPtr == global::System.IntPtr.Zero) ? null : new Session(cPtr, true); + return ret; + } + + public virtual Session GetCurrentSession() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SessionManager_GetCurrentSession(swigCPtr); + Session ret = (cPtr == global::System.IntPtr.Zero) ? null : new Session(cPtr, true); + return ret; + } + + public virtual User GetCurrentUser() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SessionManager_GetCurrentUser(swigCPtr); + User ret = (cPtr == global::System.IntPtr.Zero) ? null : new User(cPtr, true); + return ret; + } + + public virtual bool IsServerConnected() { + bool ret = SharingClientPINVOKE.SessionManager_IsServerConnected(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs.meta new file mode 100644 index 0000000..26ed910 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2f2c4c2163986d1418d8447c2d9ae90e +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs new file mode 100644 index 0000000..9f26b19 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs @@ -0,0 +1,114 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of the SessionManager to register to receive event callbacks without + /// having their classes inherit directly from SessionManagerListener + /// + public class SessionManagerAdapter : SessionManagerListener + { + public event System.Action CreateSucceededEvent; + public event System.Action CreateFailedEvent; + public event System.Action SessionAddedEvent; + public event System.Action SessionClosedEvent; + public event System.Action UserJoinedSessionEvent; + public event System.Action UserLeftSessionEvent; + public event System.Action UserChangedEvent; + public event System.Action ServerConnectedEvent; + public event System.Action ServerDisconnectedEvent; + + public SessionManagerAdapter() { } + + public override void OnCreateSucceeded(Session newSession) + { + Profile.BeginRange("OnCreateSucceeded"); + if (this.CreateSucceededEvent != null) + { + this.CreateSucceededEvent(newSession); + } + Profile.EndRange(); + } + + public override void OnCreateFailed(XString reason) + { + Profile.BeginRange("OnCreateFailed"); + if (this.CreateFailedEvent != null) + { + this.CreateFailedEvent(reason); + } + Profile.EndRange(); + } + + public override void OnSessionAdded(Session newSession) + { + Profile.BeginRange("OnSessionAdded"); + if (this.SessionAddedEvent != null) + { + this.SessionAddedEvent(newSession); + } + Profile.EndRange(); + } + + public override void OnSessionClosed(Session session) + { + Profile.BeginRange("OnSessionClosed"); + if (this.SessionClosedEvent != null) + { + this.SessionClosedEvent(session); + } + Profile.EndRange(); + } + + public override void OnUserJoinedSession(Session session, User newUser) + { + Profile.BeginRange("OnUserJoinedSession"); + if (this.UserJoinedSessionEvent != null) + { + this.UserJoinedSessionEvent(session, newUser); + } + Profile.EndRange(); + } + + public override void OnUserLeftSession(Session session, User user) + { + Profile.BeginRange("OnUserLeftSession"); + if (this.UserLeftSessionEvent != null) + { + this.UserLeftSessionEvent(session, user); + } + Profile.EndRange(); + } + + public override void OnUserChanged(Session session, User user) + { + Profile.BeginRange("OnUserChanged"); + if (this.UserChangedEvent != null) + { + this.UserChangedEvent(session, user); + } + Profile.EndRange(); + } + + public override void OnServerConnected() + { + Profile.BeginRange("OnServerConnected"); + if (this.ServerConnectedEvent != null) + { + this.ServerConnectedEvent(); + } + Profile.EndRange(); + } + + public override void OnServerDisconnected() + { + Profile.BeginRange("OnServerDisconnected"); + if (this.ServerDisconnectedEvent != null) + { + this.ServerDisconnectedEvent(); + } + Profile.EndRange(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs.meta new file mode 100644 index 0000000..c2cf814 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 019bc2c61963f164f881b0dfbb4c4862 +timeCreated: 1458941821 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs new file mode 100644 index 0000000..8ae1b14 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs @@ -0,0 +1,177 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SessionManagerListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal SessionManagerListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.SessionManagerListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SessionManagerListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~SessionManagerListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_SessionManagerListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnCreateSucceeded(Session newSession) { + if (SwigDerivedClassHasMethod("OnCreateSucceeded", swigMethodTypes0)) SharingClientPINVOKE.SessionManagerListener_OnCreateSucceededSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(newSession)); else SharingClientPINVOKE.SessionManagerListener_OnCreateSucceeded(swigCPtr, Session.getCPtr(newSession)); + } + + public virtual void OnCreateFailed(XString reason) { + if (SwigDerivedClassHasMethod("OnCreateFailed", swigMethodTypes1)) SharingClientPINVOKE.SessionManagerListener_OnCreateFailedSwigExplicitSessionManagerListener(swigCPtr, XString.getCPtr(reason)); else SharingClientPINVOKE.SessionManagerListener_OnCreateFailed(swigCPtr, XString.getCPtr(reason)); + } + + public virtual void OnSessionAdded(Session newSession) { + if (SwigDerivedClassHasMethod("OnSessionAdded", swigMethodTypes2)) SharingClientPINVOKE.SessionManagerListener_OnSessionAddedSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(newSession)); else SharingClientPINVOKE.SessionManagerListener_OnSessionAdded(swigCPtr, Session.getCPtr(newSession)); + } + + public virtual void OnSessionClosed(Session session) { + if (SwigDerivedClassHasMethod("OnSessionClosed", swigMethodTypes3)) SharingClientPINVOKE.SessionManagerListener_OnSessionClosedSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(session)); else SharingClientPINVOKE.SessionManagerListener_OnSessionClosed(swigCPtr, Session.getCPtr(session)); + } + + public virtual void OnUserJoinedSession(Session session, User newUser) { + if (SwigDerivedClassHasMethod("OnUserJoinedSession", swigMethodTypes4)) SharingClientPINVOKE.SessionManagerListener_OnUserJoinedSessionSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(session), User.getCPtr(newUser)); else SharingClientPINVOKE.SessionManagerListener_OnUserJoinedSession(swigCPtr, Session.getCPtr(session), User.getCPtr(newUser)); + } + + public virtual void OnUserLeftSession(Session session, User user) { + if (SwigDerivedClassHasMethod("OnUserLeftSession", swigMethodTypes5)) SharingClientPINVOKE.SessionManagerListener_OnUserLeftSessionSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(session), User.getCPtr(user)); else SharingClientPINVOKE.SessionManagerListener_OnUserLeftSession(swigCPtr, Session.getCPtr(session), User.getCPtr(user)); + } + + public virtual void OnUserChanged(Session session, User user) { + if (SwigDerivedClassHasMethod("OnUserChanged", swigMethodTypes6)) SharingClientPINVOKE.SessionManagerListener_OnUserChangedSwigExplicitSessionManagerListener(swigCPtr, Session.getCPtr(session), User.getCPtr(user)); else SharingClientPINVOKE.SessionManagerListener_OnUserChanged(swigCPtr, Session.getCPtr(session), User.getCPtr(user)); + } + + public virtual void OnServerConnected() { + if (SwigDerivedClassHasMethod("OnServerConnected", swigMethodTypes7)) SharingClientPINVOKE.SessionManagerListener_OnServerConnectedSwigExplicitSessionManagerListener(swigCPtr); else SharingClientPINVOKE.SessionManagerListener_OnServerConnected(swigCPtr); + } + + public virtual void OnServerDisconnected() { + if (SwigDerivedClassHasMethod("OnServerDisconnected", swigMethodTypes8)) SharingClientPINVOKE.SessionManagerListener_OnServerDisconnectedSwigExplicitSessionManagerListener(swigCPtr); else SharingClientPINVOKE.SessionManagerListener_OnServerDisconnected(swigCPtr); + } + + public SessionManagerListener() : this(SharingClientPINVOKE.new_SessionManagerListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnCreateSucceeded", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateSessionManagerListener_0(SwigDirectorOnCreateSucceeded); + if (SwigDerivedClassHasMethod("OnCreateFailed", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateSessionManagerListener_1(SwigDirectorOnCreateFailed); + if (SwigDerivedClassHasMethod("OnSessionAdded", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateSessionManagerListener_2(SwigDirectorOnSessionAdded); + if (SwigDerivedClassHasMethod("OnSessionClosed", swigMethodTypes3)) + swigDelegate3 = new SwigDelegateSessionManagerListener_3(SwigDirectorOnSessionClosed); + if (SwigDerivedClassHasMethod("OnUserJoinedSession", swigMethodTypes4)) + swigDelegate4 = new SwigDelegateSessionManagerListener_4(SwigDirectorOnUserJoinedSession); + if (SwigDerivedClassHasMethod("OnUserLeftSession", swigMethodTypes5)) + swigDelegate5 = new SwigDelegateSessionManagerListener_5(SwigDirectorOnUserLeftSession); + if (SwigDerivedClassHasMethod("OnUserChanged", swigMethodTypes6)) + swigDelegate6 = new SwigDelegateSessionManagerListener_6(SwigDirectorOnUserChanged); + if (SwigDerivedClassHasMethod("OnServerConnected", swigMethodTypes7)) + swigDelegate7 = new SwigDelegateSessionManagerListener_7(SwigDirectorOnServerConnected); + if (SwigDerivedClassHasMethod("OnServerDisconnected", swigMethodTypes8)) + swigDelegate8 = new SwigDelegateSessionManagerListener_8(SwigDirectorOnServerDisconnected); + SharingClientPINVOKE.SessionManagerListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2, swigDelegate3, swigDelegate4, swigDelegate5, swigDelegate6, swigDelegate7, swigDelegate8); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(SessionManagerListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnCreateSucceeded(global::System.IntPtr newSession) { + OnCreateSucceeded((newSession == global::System.IntPtr.Zero) ? null : new Session(newSession, true)); + } + + private void SwigDirectorOnCreateFailed(global::System.IntPtr reason) { + OnCreateFailed((reason == global::System.IntPtr.Zero) ? null : new XString(reason, true)); + } + + private void SwigDirectorOnSessionAdded(global::System.IntPtr newSession) { + OnSessionAdded((newSession == global::System.IntPtr.Zero) ? null : new Session(newSession, true)); + } + + private void SwigDirectorOnSessionClosed(global::System.IntPtr session) { + OnSessionClosed((session == global::System.IntPtr.Zero) ? null : new Session(session, true)); + } + + private void SwigDirectorOnUserJoinedSession(global::System.IntPtr session, global::System.IntPtr newUser) { + OnUserJoinedSession((session == global::System.IntPtr.Zero) ? null : new Session(session, true), (newUser == global::System.IntPtr.Zero) ? null : new User(newUser, true)); + } + + private void SwigDirectorOnUserLeftSession(global::System.IntPtr session, global::System.IntPtr user) { + OnUserLeftSession((session == global::System.IntPtr.Zero) ? null : new Session(session, true), (user == global::System.IntPtr.Zero) ? null : new User(user, true)); + } + + private void SwigDirectorOnUserChanged(global::System.IntPtr session, global::System.IntPtr user) { + OnUserChanged((session == global::System.IntPtr.Zero) ? null : new Session(session, true), (user == global::System.IntPtr.Zero) ? null : new User(user, true)); + } + + private void SwigDirectorOnServerConnected() { + OnServerConnected(); + } + + private void SwigDirectorOnServerDisconnected() { + OnServerDisconnected(); + } + + public delegate void SwigDelegateSessionManagerListener_0(global::System.IntPtr newSession); + public delegate void SwigDelegateSessionManagerListener_1(global::System.IntPtr reason); + public delegate void SwigDelegateSessionManagerListener_2(global::System.IntPtr newSession); + public delegate void SwigDelegateSessionManagerListener_3(global::System.IntPtr session); + public delegate void SwigDelegateSessionManagerListener_4(global::System.IntPtr session, global::System.IntPtr newUser); + public delegate void SwigDelegateSessionManagerListener_5(global::System.IntPtr session, global::System.IntPtr user); + public delegate void SwigDelegateSessionManagerListener_6(global::System.IntPtr session, global::System.IntPtr user); + public delegate void SwigDelegateSessionManagerListener_7(); + public delegate void SwigDelegateSessionManagerListener_8(); + + private SwigDelegateSessionManagerListener_0 swigDelegate0; + private SwigDelegateSessionManagerListener_1 swigDelegate1; + private SwigDelegateSessionManagerListener_2 swigDelegate2; + private SwigDelegateSessionManagerListener_3 swigDelegate3; + private SwigDelegateSessionManagerListener_4 swigDelegate4; + private SwigDelegateSessionManagerListener_5 swigDelegate5; + private SwigDelegateSessionManagerListener_6 swigDelegate6; + private SwigDelegateSessionManagerListener_7 swigDelegate7; + private SwigDelegateSessionManagerListener_8 swigDelegate8; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(Session) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(XString) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(Session) }; + private static global::System.Type[] swigMethodTypes3 = new global::System.Type[] { typeof(Session) }; + private static global::System.Type[] swigMethodTypes4 = new global::System.Type[] { typeof(Session), typeof(User) }; + private static global::System.Type[] swigMethodTypes5 = new global::System.Type[] { typeof(Session), typeof(User) }; + private static global::System.Type[] swigMethodTypes6 = new global::System.Type[] { typeof(Session), typeof(User) }; + private static global::System.Type[] swigMethodTypes7 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes8 = new global::System.Type[] { }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs.meta new file mode 100644 index 0000000..0fe7d5f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionManagerListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8a64c8871bf2c454c9426d5cc20d938e +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs new file mode 100644 index 0000000..a6f6458 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs @@ -0,0 +1,18 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum SessionType { + PERSISTENT = 0, + ADHOC +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs.meta new file mode 100644 index 0000000..2907507 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SessionType.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d5ae279fed5a7144b60f28f84e0879a +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs new file mode 100644 index 0000000..629cd7c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs @@ -0,0 +1,76 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class Settings : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal Settings(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Settings obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~Settings() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_Settings(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public Settings() : this(SharingClientPINVOKE.new_Settings(), true) { + } + + public XString GetServerAddress() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Settings_GetServerAddress(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public int GetServerPort() { + int ret = SharingClientPINVOKE.Settings_GetServerPort(swigCPtr); + return ret; + } + + public XString GetViewerAddress() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Settings_GetViewerAddress(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public int GetViewerPort() { + int ret = SharingClientPINVOKE.Settings_GetViewerPort(swigCPtr); + return ret; + } + + public XString GetLocalUserName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.Settings_GetLocalUserName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs.meta new file mode 100644 index 0000000..623c747 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/Settings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 37fbbbfbb0a44c64094402bdf4aff2a1 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs new file mode 100644 index 0000000..3ff8d32 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SharingClient { + public static ulong kInvalidSocketID { + get { + ulong ret = SharingClientPINVOKE.kInvalidSocketID_get(); + return ret; + } + } + + public static ulong kInvalidConnectionGUID { + get { + ulong ret = SharingClientPINVOKE.kInvalidConnectionGUID_get(); + return ret; + } + } + + public static long kInvalidXGuid { + get { + long ret = SharingClientPINVOKE.kInvalidXGuid_get(); + return ret; + } + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs.meta new file mode 100644 index 0000000..de72788 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClient.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f8f14dae7a2c6cc43882de659d10af8e +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs new file mode 100644 index 0000000..a39bc7f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs @@ -0,0 +1,1709 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +class SharingClientPINVOKE { + + protected class SWIGExceptionHelper { + + public delegate void ExceptionDelegate(string message); + public delegate void ExceptionArgumentDelegate(string message, string paramName); + + static ExceptionDelegate applicationDelegate = new ExceptionDelegate(SetPendingApplicationException); + static ExceptionDelegate arithmeticDelegate = new ExceptionDelegate(SetPendingArithmeticException); + static ExceptionDelegate divideByZeroDelegate = new ExceptionDelegate(SetPendingDivideByZeroException); + static ExceptionDelegate indexOutOfRangeDelegate = new ExceptionDelegate(SetPendingIndexOutOfRangeException); + static ExceptionDelegate invalidCastDelegate = new ExceptionDelegate(SetPendingInvalidCastException); + static ExceptionDelegate invalidOperationDelegate = new ExceptionDelegate(SetPendingInvalidOperationException); + static ExceptionDelegate ioDelegate = new ExceptionDelegate(SetPendingIOException); + static ExceptionDelegate nullReferenceDelegate = new ExceptionDelegate(SetPendingNullReferenceException); + static ExceptionDelegate outOfMemoryDelegate = new ExceptionDelegate(SetPendingOutOfMemoryException); + static ExceptionDelegate overflowDelegate = new ExceptionDelegate(SetPendingOverflowException); + static ExceptionDelegate systemDelegate = new ExceptionDelegate(SetPendingSystemException); + + static ExceptionArgumentDelegate argumentDelegate = new ExceptionArgumentDelegate(SetPendingArgumentException); + static ExceptionArgumentDelegate argumentNullDelegate = new ExceptionArgumentDelegate(SetPendingArgumentNullException); + static ExceptionArgumentDelegate argumentOutOfRangeDelegate = new ExceptionArgumentDelegate(SetPendingArgumentOutOfRangeException); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="SWIGRegisterExceptionCallbacks_SharingClient")] + public static extern void SWIGRegisterExceptionCallbacks_SharingClient( + ExceptionDelegate applicationDelegate, + ExceptionDelegate arithmeticDelegate, + ExceptionDelegate divideByZeroDelegate, + ExceptionDelegate indexOutOfRangeDelegate, + ExceptionDelegate invalidCastDelegate, + ExceptionDelegate invalidOperationDelegate, + ExceptionDelegate ioDelegate, + ExceptionDelegate nullReferenceDelegate, + ExceptionDelegate outOfMemoryDelegate, + ExceptionDelegate overflowDelegate, + ExceptionDelegate systemExceptionDelegate); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="SWIGRegisterExceptionArgumentCallbacks_SharingClient")] + public static extern void SWIGRegisterExceptionCallbacksArgument_SharingClient( + ExceptionArgumentDelegate argumentDelegate, + ExceptionArgumentDelegate argumentNullDelegate, + ExceptionArgumentDelegate argumentOutOfRangeDelegate); + + static void SetPendingApplicationException(string message) { + SWIGPendingException.Set(new global::System.ApplicationException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingArithmeticException(string message) { + SWIGPendingException.Set(new global::System.ArithmeticException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingDivideByZeroException(string message) { + SWIGPendingException.Set(new global::System.DivideByZeroException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingIndexOutOfRangeException(string message) { + SWIGPendingException.Set(new global::System.IndexOutOfRangeException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingInvalidCastException(string message) { + SWIGPendingException.Set(new global::System.InvalidCastException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingInvalidOperationException(string message) { + SWIGPendingException.Set(new global::System.InvalidOperationException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingIOException(string message) { + SWIGPendingException.Set(new global::System.IO.IOException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingNullReferenceException(string message) { + SWIGPendingException.Set(new global::System.NullReferenceException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingOutOfMemoryException(string message) { + SWIGPendingException.Set(new global::System.OutOfMemoryException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingOverflowException(string message) { + SWIGPendingException.Set(new global::System.OverflowException(message, SWIGPendingException.Retrieve())); + } + static void SetPendingSystemException(string message) { + SWIGPendingException.Set(new global::System.SystemException(message, SWIGPendingException.Retrieve())); + } + + static void SetPendingArgumentException(string message, string paramName) { + SWIGPendingException.Set(new global::System.ArgumentException(message, paramName, SWIGPendingException.Retrieve())); + } + static void SetPendingArgumentNullException(string message, string paramName) { + global::System.Exception e = SWIGPendingException.Retrieve(); + if (e != null) message = message + " Inner Exception: " + e.Message; + SWIGPendingException.Set(new global::System.ArgumentNullException(paramName, message)); + } + static void SetPendingArgumentOutOfRangeException(string message, string paramName) { + global::System.Exception e = SWIGPendingException.Retrieve(); + if (e != null) message = message + " Inner Exception: " + e.Message; + SWIGPendingException.Set(new global::System.ArgumentOutOfRangeException(paramName, message)); + } + + static SWIGExceptionHelper() { + SWIGRegisterExceptionCallbacks_SharingClient( + applicationDelegate, + arithmeticDelegate, + divideByZeroDelegate, + indexOutOfRangeDelegate, + invalidCastDelegate, + invalidOperationDelegate, + ioDelegate, + nullReferenceDelegate, + outOfMemoryDelegate, + overflowDelegate, + systemDelegate); + + SWIGRegisterExceptionCallbacksArgument_SharingClient( + argumentDelegate, + argumentNullDelegate, + argumentOutOfRangeDelegate); + } + } + + protected static SWIGExceptionHelper swigExceptionHelper = new SWIGExceptionHelper(); + + public class SWIGPendingException { + [global::System.ThreadStatic] + private static global::System.Exception pendingException = null; + private static int numExceptionsPending = 0; + + public static bool Pending { + get { + bool pending = false; + if (numExceptionsPending > 0) + if (pendingException != null) + pending = true; + return pending; + } + } + + public static void Set(global::System.Exception e) { + if (pendingException != null) + throw new global::System.ApplicationException("FATAL: An earlier pending exception from unmanaged code was missed and thus not thrown (" + pendingException.ToString() + ")", e); + pendingException = e; + lock(typeof(SharingClientPINVOKE)) { + numExceptionsPending++; + } + } + + public static global::System.Exception Retrieve() { + global::System.Exception e = null; + if (numExceptionsPending > 0) { + if (pendingException != null) { + e = pendingException; + pendingException = null; + lock(typeof(SharingClientPINVOKE)) { + numExceptionsPending--; + } + } + } + return e; + } + } + + + protected class SWIGStringHelper { + + public delegate string SWIGStringDelegate(string message); + static SWIGStringDelegate stringDelegate = new SWIGStringDelegate(CreateString); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="SWIGRegisterStringCallback_SharingClient")] + public static extern void SWIGRegisterStringCallback_SharingClient(SWIGStringDelegate stringDelegate); + + static string CreateString(string cString) { + return cString; + } + + static SWIGStringHelper() { + SWIGRegisterStringCallback_SharingClient(stringDelegate); + } + } + + static protected SWIGStringHelper swigStringHelper = new SWIGStringHelper(); + + + static SharingClientPINVOKE() { + } + + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_kInvalidSocketID_get___")] + public static extern ulong kInvalidSocketID_get(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_kInvalidConnectionGUID_get___")] + public static extern ulong kInvalidConnectionGUID_get(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Receipt___")] + public static extern void delete_Receipt(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Receipt_Clear___")] + public static extern void Receipt_Clear(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_Receipt___")] + public static extern global::System.IntPtr new_Receipt(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_LogManager___")] + public static extern void delete_LogManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LogManager_Log___")] + public static extern void LogManager_Log(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]string jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_LogWriter___")] + public static extern void delete_LogWriter(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LogWriter_WriteLogEntry___")] + public static extern void LogWriter_WriteLogEntry(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, string jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LogWriter_WriteLogEntrySwigExplicitLogWriter___")] + public static extern void LogWriter_WriteLogEntrySwigExplicitLogWriter(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, string jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_LogWriter___")] + public static extern global::System.IntPtr new_LogWriter(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LogWriter_director_connect___")] + public static extern void LogWriter_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, LogWriter.SwigDelegateLogWriter_0 delegate0); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Log_Info___")] + public static extern void Log_Info([global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]string jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Log_Warning___")] + public static extern void Log_Warning([global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]string jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Log_Error___")] + public static extern void Log_Error([global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)]string jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_Log___")] + public static extern global::System.IntPtr new_Log(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Log___")] + public static extern void delete_Log(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Listener___")] + public static extern void delete_Listener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Listener_UnregisterAll___")] + public static extern void Listener_UnregisterAll(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Listener_IsRegistered___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool Listener_IsRegistered(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_Listener___")] + public static extern global::System.IntPtr new_Listener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_kInvalidXGuid_get___")] + public static extern long kInvalidXGuid_get(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_XString__SWIG_0___")] + public static extern global::System.IntPtr new_XString__SWIG_0(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_XString__SWIG_1___")] + public static extern global::System.IntPtr new_XString__SWIG_1(string jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_XString___")] + public static extern void delete_XString(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_XString_GetLength___")] + public static extern uint XString_GetLength(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_XString_IsEqual___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool XString_IsEqual(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_XString_GetString___")] + public static extern string XString_GetString(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_0___")] + public static extern void NetworkOutMessage_Write__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_1___")] + public static extern void NetworkOutMessage_Write__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, short jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_2___")] + public static extern void NetworkOutMessage_Write__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_3___")] + public static extern void NetworkOutMessage_Write__SWIG_3(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_4___")] + public static extern void NetworkOutMessage_Write__SWIG_4(global::System.Runtime.InteropServices.HandleRef jarg1, float jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_5___")] + public static extern void NetworkOutMessage_Write__SWIG_5(global::System.Runtime.InteropServices.HandleRef jarg1, double jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Write__SWIG_6___")] + public static extern void NetworkOutMessage_Write__SWIG_6(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_WriteArray___")] + public static extern void NetworkOutMessage_WriteArray(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.IntPtr jarg2, uint jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkOutMessage_Reset___")] + public static extern void NetworkOutMessage_Reset(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_NetworkOutMessage___")] + public static extern void delete_NetworkOutMessage(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_NetworkInMessage___")] + public static extern void delete_NetworkInMessage(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadByte___")] + public static extern byte NetworkInMessage_ReadByte(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadInt16___")] + public static extern short NetworkInMessage_ReadInt16(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadInt32___")] + public static extern int NetworkInMessage_ReadInt32(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadInt64___")] + public static extern long NetworkInMessage_ReadInt64(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadFloat___")] + public static extern float NetworkInMessage_ReadFloat(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadDouble___")] + public static extern double NetworkInMessage_ReadDouble(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadString___")] + public static extern global::System.IntPtr NetworkInMessage_ReadString(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_ReadArray___")] + public static extern void NetworkInMessage_ReadArray(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.IntPtr jarg2, uint jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_GetUnreadBitsCount___")] + public static extern int NetworkInMessage_GetUnreadBitsCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkInMessage_GetSize___")] + public static extern int NetworkInMessage_GetSize(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_NetworkConnectionListener___")] + public static extern void delete_NetworkConnectionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnConnected___")] + public static extern void NetworkConnectionListener_OnConnected(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnConnectedSwigExplicitNetworkConnectionListener___")] + public static extern void NetworkConnectionListener_OnConnectedSwigExplicitNetworkConnectionListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnConnectFailed___")] + public static extern void NetworkConnectionListener_OnConnectFailed(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnConnectFailedSwigExplicitNetworkConnectionListener___")] + public static extern void NetworkConnectionListener_OnConnectFailedSwigExplicitNetworkConnectionListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnDisconnected___")] + public static extern void NetworkConnectionListener_OnDisconnected(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnDisconnectedSwigExplicitNetworkConnectionListener___")] + public static extern void NetworkConnectionListener_OnDisconnectedSwigExplicitNetworkConnectionListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnMessageReceived___")] + public static extern void NetworkConnectionListener_OnMessageReceived(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_OnMessageReceivedSwigExplicitNetworkConnectionListener___")] + public static extern void NetworkConnectionListener_OnMessageReceivedSwigExplicitNetworkConnectionListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_NetworkConnectionListener___")] + public static extern global::System.IntPtr new_NetworkConnectionListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_director_connect___")] + public static extern void NetworkConnectionListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, NetworkConnectionListener.SwigDelegateNetworkConnectionListener_0 delegate0, NetworkConnectionListener.SwigDelegateNetworkConnectionListener_1 delegate1, NetworkConnectionListener.SwigDelegateNetworkConnectionListener_2 delegate2, NetworkConnectionListener.SwigDelegateNetworkConnectionListener_3 delegate3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_User_GetName___")] + public static extern global::System.IntPtr User_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_User_GetID___")] + public static extern int User_GetID(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_User_IsValid___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool User_IsValid(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_User_GetMuteState___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool User_GetMuteState(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_User___")] + public static extern void delete_User(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_IsConnected___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool NetworkConnection_IsConnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_GetConnectionGUID___")] + public static extern ulong NetworkConnection_GetConnectionGUID(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Send__SWIG_0___")] + public static extern void NetworkConnection_Send__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4, int jarg5, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg6); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Send__SWIG_1___")] + public static extern void NetworkConnection_Send__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4, int jarg5); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Send__SWIG_2___")] + public static extern void NetworkConnection_Send__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Send__SWIG_3___")] + public static extern void NetworkConnection_Send__SWIG_3(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Send__SWIG_4___")] + public static extern void NetworkConnection_Send__SWIG_4(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_SendTo__SWIG_0___")] + public static extern void NetworkConnection_SendTo__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, global::System.Runtime.InteropServices.HandleRef jarg4, int jarg5, int jarg6, int jarg7, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg8); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_SendTo__SWIG_1___")] + public static extern void NetworkConnection_SendTo__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, global::System.Runtime.InteropServices.HandleRef jarg4, int jarg5, int jarg6, int jarg7); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_SendTo__SWIG_2___")] + public static extern void NetworkConnection_SendTo__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, global::System.Runtime.InteropServices.HandleRef jarg4, int jarg5, int jarg6); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_SendTo__SWIG_3___")] + public static extern void NetworkConnection_SendTo__SWIG_3(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, global::System.Runtime.InteropServices.HandleRef jarg4, int jarg5); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_SendTo__SWIG_4___")] + public static extern void NetworkConnection_SendTo__SWIG_4(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, global::System.Runtime.InteropServices.HandleRef jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Broadcast__SWIG_0___")] + public static extern void NetworkConnection_Broadcast__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4, int jarg5, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg6); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Broadcast__SWIG_1___")] + public static extern void NetworkConnection_Broadcast__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4, int jarg5); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Broadcast__SWIG_2___")] + public static extern void NetworkConnection_Broadcast__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3, int jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Broadcast__SWIG_3___")] + public static extern void NetworkConnection_Broadcast__SWIG_3(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Broadcast__SWIG_4___")] + public static extern void NetworkConnection_Broadcast__SWIG_4(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_AddListener___")] + public static extern void NetworkConnection_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_RemoveListener___")] + public static extern void NetworkConnection_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_AddListenerAsync___")] + public static extern void NetworkConnection_AddListenerAsync(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_RemoveListenerAsync___")] + public static extern void NetworkConnection_RemoveListenerAsync(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_CreateMessage___")] + public static extern global::System.IntPtr NetworkConnection_CreateMessage(global::System.Runtime.InteropServices.HandleRef jarg1, byte jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_ReturnMessage___")] + public static extern void NetworkConnection_ReturnMessage(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_Disconnect___")] + public static extern void NetworkConnection_Disconnect(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnection_GetRemoteAddress___")] + public static extern global::System.IntPtr NetworkConnection_GetRemoteAddress(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_NetworkConnection___")] + public static extern void delete_NetworkConnection(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Element_GetElementType___")] + public static extern int Element_GetElementType(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Element_GetGUID___")] + public static extern long Element_GetGUID(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Element_GetName___")] + public static extern global::System.IntPtr Element_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Element_GetParent___")] + public static extern global::System.IntPtr Element_GetParent(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Element_IsValid___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool Element_IsValid(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Element___")] + public static extern void delete_Element(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_BoolElement_Cast___")] + public static extern global::System.IntPtr BoolElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_BoolElement_GetValue___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool BoolElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_BoolElement_SetValue___")] + public static extern void BoolElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_BoolElement___")] + public static extern void delete_BoolElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntElement_Cast___")] + public static extern global::System.IntPtr IntElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntElement_GetValue___")] + public static extern int IntElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntElement_SetValue___")] + public static extern void IntElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_IntElement___")] + public static extern void delete_IntElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LongElement_Cast___")] + public static extern global::System.IntPtr LongElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LongElement_GetValue___")] + public static extern long LongElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LongElement_SetValue___")] + public static extern void LongElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_LongElement___")] + public static extern void delete_LongElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatElement_Cast___")] + public static extern global::System.IntPtr FloatElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatElement_GetValue___")] + public static extern float FloatElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatElement_SetValue___")] + public static extern void FloatElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, float jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_FloatElement___")] + public static extern void delete_FloatElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DoubleElement_Cast___")] + public static extern global::System.IntPtr DoubleElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DoubleElement_GetValue___")] + public static extern double DoubleElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DoubleElement_SetValue___")] + public static extern void DoubleElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, double jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DoubleElement___")] + public static extern void delete_DoubleElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringElement_Cast___")] + public static extern global::System.IntPtr StringElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringElement_GetValue___")] + public static extern global::System.IntPtr StringElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringElement_SetValue___")] + public static extern void StringElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_StringElement___")] + public static extern void delete_StringElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_IntArrayListener___")] + public static extern void delete_IntArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueChanged___")] + public static extern void IntArrayListener_OnValueChanged(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueChangedSwigExplicitIntArrayListener___")] + public static extern void IntArrayListener_OnValueChangedSwigExplicitIntArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueInserted___")] + public static extern void IntArrayListener_OnValueInserted(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueInsertedSwigExplicitIntArrayListener___")] + public static extern void IntArrayListener_OnValueInsertedSwigExplicitIntArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueRemoved___")] + public static extern void IntArrayListener_OnValueRemoved(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_OnValueRemovedSwigExplicitIntArrayListener___")] + public static extern void IntArrayListener_OnValueRemovedSwigExplicitIntArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_IntArrayListener___")] + public static extern global::System.IntPtr new_IntArrayListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_director_connect___")] + public static extern void IntArrayListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, IntArrayListener.SwigDelegateIntArrayListener_0 delegate0, IntArrayListener.SwigDelegateIntArrayListener_1 delegate1, IntArrayListener.SwigDelegateIntArrayListener_2 delegate2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_Cast___")] + public static extern global::System.IntPtr IntArrayElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_GetCount___")] + public static extern int IntArrayElement_GetCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_GetValue___")] + public static extern int IntArrayElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_SetValue___")] + public static extern void IntArrayElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_InsertValue___")] + public static extern void IntArrayElement_InsertValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_RemoveValue___")] + public static extern void IntArrayElement_RemoveValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_AddListener___")] + public static extern void IntArrayElement_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_RemoveListener___")] + public static extern void IntArrayElement_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_IntArrayElement___")] + public static extern void delete_IntArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_FloatArrayListener___")] + public static extern void delete_FloatArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueChanged___")] + public static extern void FloatArrayListener_OnValueChanged(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueChangedSwigExplicitFloatArrayListener___")] + public static extern void FloatArrayListener_OnValueChangedSwigExplicitFloatArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueInserted___")] + public static extern void FloatArrayListener_OnValueInserted(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueInsertedSwigExplicitFloatArrayListener___")] + public static extern void FloatArrayListener_OnValueInsertedSwigExplicitFloatArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueRemoved___")] + public static extern void FloatArrayListener_OnValueRemoved(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_OnValueRemovedSwigExplicitFloatArrayListener___")] + public static extern void FloatArrayListener_OnValueRemovedSwigExplicitFloatArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_FloatArrayListener___")] + public static extern global::System.IntPtr new_FloatArrayListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_director_connect___")] + public static extern void FloatArrayListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, FloatArrayListener.SwigDelegateFloatArrayListener_0 delegate0, FloatArrayListener.SwigDelegateFloatArrayListener_1 delegate1, FloatArrayListener.SwigDelegateFloatArrayListener_2 delegate2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_Cast___")] + public static extern global::System.IntPtr FloatArrayElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_GetCount___")] + public static extern int FloatArrayElement_GetCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_GetValue___")] + public static extern float FloatArrayElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_SetValue___")] + public static extern void FloatArrayElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_InsertValue___")] + public static extern void FloatArrayElement_InsertValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_RemoveValue___")] + public static extern void FloatArrayElement_RemoveValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_AddListener___")] + public static extern void FloatArrayElement_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_RemoveListener___")] + public static extern void FloatArrayElement_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_FloatArrayElement___")] + public static extern void delete_FloatArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_StringArrayListener___")] + public static extern void delete_StringArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueChanged___")] + public static extern void StringArrayListener_OnValueChanged(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueChangedSwigExplicitStringArrayListener___")] + public static extern void StringArrayListener_OnValueChangedSwigExplicitStringArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueInserted___")] + public static extern void StringArrayListener_OnValueInserted(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueInsertedSwigExplicitStringArrayListener___")] + public static extern void StringArrayListener_OnValueInsertedSwigExplicitStringArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueRemoved___")] + public static extern void StringArrayListener_OnValueRemoved(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_OnValueRemovedSwigExplicitStringArrayListener___")] + public static extern void StringArrayListener_OnValueRemovedSwigExplicitStringArrayListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_StringArrayListener___")] + public static extern global::System.IntPtr new_StringArrayListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_director_connect___")] + public static extern void StringArrayListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, StringArrayListener.SwigDelegateStringArrayListener_0 delegate0, StringArrayListener.SwigDelegateStringArrayListener_1 delegate1, StringArrayListener.SwigDelegateStringArrayListener_2 delegate2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_Cast___")] + public static extern global::System.IntPtr StringArrayElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_GetCount___")] + public static extern int StringArrayElement_GetCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_GetValue___")] + public static extern global::System.IntPtr StringArrayElement_GetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_SetValue___")] + public static extern void StringArrayElement_SetValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_InsertValue___")] + public static extern void StringArrayElement_InsertValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_RemoveValue___")] + public static extern void StringArrayElement_RemoveValue(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_AddListener___")] + public static extern void StringArrayElement_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_RemoveListener___")] + public static extern void StringArrayElement_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_StringArrayElement___")] + public static extern void delete_StringArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_ObjectElementListener___")] + public static extern void delete_ObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnBoolElementChanged___")] + public static extern void ObjectElementListener_OnBoolElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnBoolElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnBoolElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnIntElementChanged___")] + public static extern void ObjectElementListener_OnIntElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnIntElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnIntElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnLongElementChanged___")] + public static extern void ObjectElementListener_OnLongElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, long jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnLongElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnLongElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, long jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnFloatElementChanged___")] + public static extern void ObjectElementListener_OnFloatElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnFloatElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnFloatElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnDoubleElementChanged___")] + public static extern void ObjectElementListener_OnDoubleElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, double jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnDoubleElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnDoubleElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, double jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnStringElementChanged___")] + public static extern void ObjectElementListener_OnStringElementChanged(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnStringElementChangedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnStringElementChangedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnElementAdded___")] + public static extern void ObjectElementListener_OnElementAdded(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnElementAddedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnElementAddedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnElementDeleted___")] + public static extern void ObjectElementListener_OnElementDeleted(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_OnElementDeletedSwigExplicitObjectElementListener___")] + public static extern void ObjectElementListener_OnElementDeletedSwigExplicitObjectElementListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_ObjectElementListener___")] + public static extern global::System.IntPtr new_ObjectElementListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_director_connect___")] + public static extern void ObjectElementListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, ObjectElementListener.SwigDelegateObjectElementListener_0 delegate0, ObjectElementListener.SwigDelegateObjectElementListener_1 delegate1, ObjectElementListener.SwigDelegateObjectElementListener_2 delegate2, ObjectElementListener.SwigDelegateObjectElementListener_3 delegate3, ObjectElementListener.SwigDelegateObjectElementListener_4 delegate4, ObjectElementListener.SwigDelegateObjectElementListener_5 delegate5, ObjectElementListener.SwigDelegateObjectElementListener_6 delegate6, ObjectElementListener.SwigDelegateObjectElementListener_7 delegate7); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_Cast___")] + public static extern global::System.IntPtr ObjectElement_Cast(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateBoolElement___")] + public static extern global::System.IntPtr ObjectElement_CreateBoolElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateIntElement___")] + public static extern global::System.IntPtr ObjectElement_CreateIntElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateLongElement___")] + public static extern global::System.IntPtr ObjectElement_CreateLongElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, long jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateFloatElement___")] + public static extern global::System.IntPtr ObjectElement_CreateFloatElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, float jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateDoubleElement___")] + public static extern global::System.IntPtr ObjectElement_CreateDoubleElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, double jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateStringElement___")] + public static extern global::System.IntPtr ObjectElement_CreateStringElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateObjectElement__SWIG_0___")] + public static extern global::System.IntPtr ObjectElement_CreateObjectElement__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateObjectElement__SWIG_1___")] + public static extern global::System.IntPtr ObjectElement_CreateObjectElement__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateIntArrayElement___")] + public static extern global::System.IntPtr ObjectElement_CreateIntArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateFloatArrayElement___")] + public static extern global::System.IntPtr ObjectElement_CreateFloatArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_CreateStringArrayElement___")] + public static extern global::System.IntPtr ObjectElement_CreateStringArrayElement(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetElementCount___")] + public static extern int ObjectElement_GetElementCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetElement__SWIG_0___")] + public static extern global::System.IntPtr ObjectElement_GetElement__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetElement__SWIG_1___")] + public static extern global::System.IntPtr ObjectElement_GetElement__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetElementAt___")] + public static extern global::System.IntPtr ObjectElement_GetElementAt(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_RemoveElement__SWIG_0___")] + public static extern void ObjectElement_RemoveElement__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_RemoveElement__SWIG_1___")] + public static extern void ObjectElement_RemoveElement__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, long jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_RemoveElementAt___")] + public static extern void ObjectElement_RemoveElementAt(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_AddListener___")] + public static extern void ObjectElement_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_RemoveListener___")] + public static extern void ObjectElement_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetOwnerID___")] + public static extern int ObjectElement_GetOwnerID(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_GetObjectType___")] + public static extern global::System.IntPtr ObjectElement_GetObjectType(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_ObjectElement___")] + public static extern void delete_ObjectElement(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_OnSyncChangesBegin___")] + public static extern void SyncListener_OnSyncChangesBegin(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_OnSyncChangesBeginSwigExplicitSyncListener___")] + public static extern void SyncListener_OnSyncChangesBeginSwigExplicitSyncListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_OnSyncChangesEnd___")] + public static extern void SyncListener_OnSyncChangesEnd(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_OnSyncChangesEndSwigExplicitSyncListener___")] + public static extern void SyncListener_OnSyncChangesEndSwigExplicitSyncListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_SyncListener___")] + public static extern global::System.IntPtr new_SyncListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_SyncListener___")] + public static extern void delete_SyncListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_director_connect___")] + public static extern void SyncListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, SyncListener.SwigDelegateSyncListener_0 delegate0, SyncListener.SwigDelegateSyncListener_1 delegate1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_SessionListener___")] + public static extern void delete_SessionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoiningSession___")] + public static extern void SessionListener_OnJoiningSession(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoiningSessionSwigExplicitSessionListener___")] + public static extern void SessionListener_OnJoiningSessionSwigExplicitSessionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoinSucceeded___")] + public static extern void SessionListener_OnJoinSucceeded(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoinSucceededSwigExplicitSessionListener___")] + public static extern void SessionListener_OnJoinSucceededSwigExplicitSessionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoinFailed___")] + public static extern void SessionListener_OnJoinFailed(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnJoinFailedSwigExplicitSessionListener___")] + public static extern void SessionListener_OnJoinFailedSwigExplicitSessionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnSessionDisconnected___")] + public static extern void SessionListener_OnSessionDisconnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_OnSessionDisconnectedSwigExplicitSessionListener___")] + public static extern void SessionListener_OnSessionDisconnectedSwigExplicitSessionListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_SessionListener___")] + public static extern global::System.IntPtr new_SessionListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_director_connect___")] + public static extern void SessionListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, SessionListener.SwigDelegateSessionListener_0 delegate0, SessionListener.SwigDelegateSessionListener_1 delegate1, SessionListener.SwigDelegateSessionListener_2 delegate2, SessionListener.SwigDelegateSessionListener_3 delegate3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetMachineSessionState___")] + public static extern int Session_GetMachineSessionState(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_AddListener___")] + public static extern void Session_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_RemoveListener___")] + public static extern void Session_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_IsJoined___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool Session_IsJoined(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_Join___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool Session_Join(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_Leave___")] + public static extern void Session_Leave(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetUserCount___")] + public static extern int Session_GetUserCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetUser___")] + public static extern global::System.IntPtr Session_GetUser(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetSessionType___")] + public static extern int Session_GetSessionType(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetName___")] + public static extern global::System.IntPtr Session_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Session_GetSessionNetworkConnection___")] + public static extern global::System.IntPtr Session_GetSessionNetworkConnection(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Session___")] + public static extern void delete_Session(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_SessionManagerListener___")] + public static extern void delete_SessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnCreateSucceeded___")] + public static extern void SessionManagerListener_OnCreateSucceeded(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnCreateSucceededSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnCreateSucceededSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnCreateFailed___")] + public static extern void SessionManagerListener_OnCreateFailed(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnCreateFailedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnCreateFailedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnSessionAdded___")] + public static extern void SessionManagerListener_OnSessionAdded(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnSessionAddedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnSessionAddedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnSessionClosed___")] + public static extern void SessionManagerListener_OnSessionClosed(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnSessionClosedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnSessionClosedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserJoinedSession___")] + public static extern void SessionManagerListener_OnUserJoinedSession(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserJoinedSessionSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnUserJoinedSessionSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserLeftSession___")] + public static extern void SessionManagerListener_OnUserLeftSession(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserLeftSessionSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnUserLeftSessionSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserChanged___")] + public static extern void SessionManagerListener_OnUserChanged(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnUserChangedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnUserChangedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnServerConnected___")] + public static extern void SessionManagerListener_OnServerConnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnServerConnectedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnServerConnectedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnServerDisconnected___")] + public static extern void SessionManagerListener_OnServerDisconnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_OnServerDisconnectedSwigExplicitSessionManagerListener___")] + public static extern void SessionManagerListener_OnServerDisconnectedSwigExplicitSessionManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_SessionManagerListener___")] + public static extern global::System.IntPtr new_SessionManagerListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_director_connect___")] + public static extern void SessionManagerListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, SessionManagerListener.SwigDelegateSessionManagerListener_0 delegate0, SessionManagerListener.SwigDelegateSessionManagerListener_1 delegate1, SessionManagerListener.SwigDelegateSessionManagerListener_2 delegate2, SessionManagerListener.SwigDelegateSessionManagerListener_3 delegate3, SessionManagerListener.SwigDelegateSessionManagerListener_4 delegate4, SessionManagerListener.SwigDelegateSessionManagerListener_5 delegate5, SessionManagerListener.SwigDelegateSessionManagerListener_6 delegate6, SessionManagerListener.SwigDelegateSessionManagerListener_7 delegate7, SessionManagerListener.SwigDelegateSessionManagerListener_8 delegate8); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_AddListener___")] + public static extern void SessionManager_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_RemoveListener___")] + public static extern void SessionManager_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_CreateSession__SWIG_0___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool SessionManager_CreateSession__SWIG_0(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_CreateSession__SWIG_1___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool SessionManager_CreateSession__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_GetSessionCount___")] + public static extern int SessionManager_GetSessionCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_GetSession___")] + public static extern global::System.IntPtr SessionManager_GetSession(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_GetCurrentSession___")] + public static extern global::System.IntPtr SessionManager_GetCurrentSession(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_GetCurrentUser___")] + public static extern global::System.IntPtr SessionManager_GetCurrentUser(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManager_IsServerConnected___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool SessionManager_IsServerConnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_SessionManager___")] + public static extern void delete_SessionManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_UserPresenceManagerListener___")] + public static extern void delete_UserPresenceManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManagerListener_OnUserPresenceChanged___")] + public static extern void UserPresenceManagerListener_OnUserPresenceChanged(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManagerListener_OnUserPresenceChangedSwigExplicitUserPresenceManagerListener___")] + public static extern void UserPresenceManagerListener_OnUserPresenceChangedSwigExplicitUserPresenceManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_UserPresenceManagerListener___")] + public static extern global::System.IntPtr new_UserPresenceManagerListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManagerListener_director_connect___")] + public static extern void UserPresenceManagerListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, UserPresenceManagerListener.SwigDelegateUserPresenceManagerListener_0 delegate0); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_AddListener___")] + public static extern void UserPresenceManager_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_RemoveListener___")] + public static extern void UserPresenceManager_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_GetMuteState___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool UserPresenceManager_GetMuteState(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_SetMuteState___")] + public static extern void UserPresenceManager_SetMuteState(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_SetName___")] + public static extern void UserPresenceManager_SetName(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_GetName___")] + public static extern global::System.IntPtr UserPresenceManager_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManager_SetUser___")] + public static extern void UserPresenceManager_SetUser(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_UserPresenceManager___")] + public static extern void delete_UserPresenceManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_ClientConfig___")] + public static extern global::System.IntPtr new_ClientConfig(int jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetRole___")] + public static extern int ClientConfig_GetRole(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetServerAddress___")] + public static extern string ClientConfig_GetServerAddress(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_SetServerAddress___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool ClientConfig_SetServerAddress(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetServerPort___")] + public static extern int ClientConfig_GetServerPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_SetServerPort___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool ClientConfig_SetServerPort(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetLogWriter___")] + public static extern global::System.IntPtr ClientConfig_GetLogWriter(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_SetLogWriter___")] + public static extern void ClientConfig_SetLogWriter(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetIsAudioEndpoint___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool ClientConfig_GetIsAudioEndpoint(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_SetIsAudioEndpoint___")] + public static extern void ClientConfig_SetIsAudioEndpoint(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_GetProfilerEnabled___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool ClientConfig_GetProfilerEnabled(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ClientConfig_SetProfilerEnabled___")] + public static extern void ClientConfig_SetProfilerEnabled(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_ClientConfig___")] + public static extern void delete_ClientConfig(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_AudioManager_SetMicrophoneEnabled___")] + public static extern void AudioManager_SetMicrophoneEnabled(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_AudioManager___")] + public static extern void delete_AudioManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_ProfileManager___")] + public static extern void delete_ProfileManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ProfileManager_BeginRange___")] + public static extern void ProfileManager_BeginRange(global::System.Runtime.InteropServices.HandleRef jarg1, string jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ProfileManager_EndRange___")] + public static extern void ProfileManager_EndRange(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ProfileManager_Log___")] + public static extern void ProfileManager_Log(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2, string jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Profile_BeginRange___")] + public static extern void Profile_BeginRange(string jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Profile_EndRange___")] + public static extern void Profile_EndRange(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_Profile___")] + public static extern global::System.IntPtr new_Profile(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Profile___")] + public static extern void delete_Profile(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetName___")] + public static extern global::System.IntPtr Room_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetID___")] + public static extern long Room_GetID(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetUserCount___")] + public static extern int Room_GetUserCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetUserID___")] + public static extern int Room_GetUserID(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetKeepOpen___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool Room_GetKeepOpen(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_SetKeepOpen___")] + public static extern void Room_SetKeepOpen(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetAnchorCount___")] + public static extern int Room_GetAnchorCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Room_GetAnchorName___")] + public static extern global::System.IntPtr Room_GetAnchorName(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Room___")] + public static extern void delete_Room(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_AnchorDownloadRequest_GetAnchorName___")] + public static extern global::System.IntPtr AnchorDownloadRequest_GetAnchorName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_AnchorDownloadRequest_GetRoom___")] + public static extern global::System.IntPtr AnchorDownloadRequest_GetRoom(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_AnchorDownloadRequest_GetDataSize___")] + public static extern int AnchorDownloadRequest_GetDataSize(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_AnchorDownloadRequest_GetData___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool AnchorDownloadRequest_GetData(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.IntPtr jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_AnchorDownloadRequest___")] + public static extern void delete_AnchorDownloadRequest(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_RoomManagerListener___")] + public static extern void delete_RoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnRoomAdded___")] + public static extern void RoomManagerListener_OnRoomAdded(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnRoomAddedSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnRoomAddedSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnRoomClosed___")] + public static extern void RoomManagerListener_OnRoomClosed(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnRoomClosedSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnRoomClosedSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnUserJoinedRoom___")] + public static extern void RoomManagerListener_OnUserJoinedRoom(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnUserJoinedRoomSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnUserJoinedRoomSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnUserLeftRoom___")] + public static extern void RoomManagerListener_OnUserLeftRoom(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnUserLeftRoomSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnUserLeftRoomSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorsChanged___")] + public static extern void RoomManagerListener_OnAnchorsChanged(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorsChangedSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnAnchorsChangedSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorsDownloaded___")] + public static extern void RoomManagerListener_OnAnchorsDownloaded(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorsDownloadedSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnAnchorsDownloadedSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.Runtime.InteropServices.HandleRef jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorUploadComplete___")] + public static extern void RoomManagerListener_OnAnchorUploadComplete(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_OnAnchorUploadCompleteSwigExplicitRoomManagerListener___")] + public static extern void RoomManagerListener_OnAnchorUploadCompleteSwigExplicitRoomManagerListener(global::System.Runtime.InteropServices.HandleRef jarg1, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_RoomManagerListener___")] + public static extern global::System.IntPtr new_RoomManagerListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_director_connect___")] + public static extern void RoomManagerListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, RoomManagerListener.SwigDelegateRoomManagerListener_0 delegate0, RoomManagerListener.SwigDelegateRoomManagerListener_1 delegate1, RoomManagerListener.SwigDelegateRoomManagerListener_2 delegate2, RoomManagerListener.SwigDelegateRoomManagerListener_3 delegate3, RoomManagerListener.SwigDelegateRoomManagerListener_4 delegate4, RoomManagerListener.SwigDelegateRoomManagerListener_5 delegate5, RoomManagerListener.SwigDelegateRoomManagerListener_6 delegate6); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_AddListener___")] + public static extern void RoomManager_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_RemoveListener___")] + public static extern void RoomManager_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_GetRoomCount___")] + public static extern int RoomManager_GetRoomCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_GetRoom___")] + public static extern global::System.IntPtr RoomManager_GetRoom(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_GetCurrentRoom___")] + public static extern global::System.IntPtr RoomManager_GetCurrentRoom(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_CreateRoom___")] + public static extern global::System.IntPtr RoomManager_CreateRoom(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, long jarg3, [global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)]bool jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_JoinRoom___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool RoomManager_JoinRoom(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_LeaveRoom___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool RoomManager_LeaveRoom(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_DownloadAnchor___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool RoomManager_DownloadAnchor(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManager_UploadAnchor___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool RoomManager_UploadAnchor(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3, global::System.IntPtr jarg4, int jarg5); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_RoomManager___")] + public static extern void delete_RoomManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_Settings___")] + public static extern global::System.IntPtr new_Settings(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Settings_GetServerAddress___")] + public static extern global::System.IntPtr Settings_GetServerAddress(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Settings_GetServerPort___")] + public static extern int Settings_GetServerPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Settings_GetViewerAddress___")] + public static extern global::System.IntPtr Settings_GetViewerAddress(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Settings_GetViewerPort___")] + public static extern int Settings_GetViewerPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_Settings_GetLocalUserName___")] + public static extern global::System.IntPtr Settings_GetLocalUserName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_Settings___")] + public static extern void delete_Settings(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_IsReceiver___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairMaker_IsReceiver(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_IsReceiverSwigExplicitPairMaker___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairMaker_IsReceiverSwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetAddressCount___")] + public static extern int PairMaker_GetAddressCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetAddress___")] + public static extern global::System.IntPtr PairMaker_GetAddress(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetAddressSwigExplicitPairMaker___")] + public static extern global::System.IntPtr PairMaker_GetAddressSwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetPort___")] + public static extern ushort PairMaker_GetPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetPortSwigExplicitPairMaker___")] + public static extern ushort PairMaker_GetPortSwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_Update___")] + public static extern void PairMaker_Update(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_UpdateSwigExplicitPairMaker___")] + public static extern void PairMaker_UpdateSwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_IsReadyToConnect___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairMaker_IsReadyToConnect(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_IsReadyToConnectSwigExplicitPairMaker___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairMaker_IsReadyToConnectSwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetLocalKey___")] + public static extern int PairMaker_GetLocalKey(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetLocalKeySwigExplicitPairMaker___")] + public static extern int PairMaker_GetLocalKeySwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetRemoteKey___")] + public static extern int PairMaker_GetRemoteKey(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_GetRemoteKeySwigExplicitPairMaker___")] + public static extern int PairMaker_GetRemoteKeySwigExplicitPairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_PairMaker___")] + public static extern global::System.IntPtr new_PairMaker(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_PairMaker___")] + public static extern void delete_PairMaker(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairMaker_director_connect___")] + public static extern void PairMaker_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, PairMaker.SwigDelegatePairMaker_0 delegate0, PairMaker.SwigDelegatePairMaker_1 delegate1, PairMaker.SwigDelegatePairMaker_2 delegate2, PairMaker.SwigDelegatePairMaker_3 delegate3, PairMaker.SwigDelegatePairMaker_4 delegate4, PairMaker.SwigDelegatePairMaker_5 delegate5, PairMaker.SwigDelegatePairMaker_6 delegate6, PairMaker.SwigDelegatePairMaker_7 delegate7); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_PairingConnectionSucceeded___")] + public static extern void PairingListener_PairingConnectionSucceeded(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_PairingConnectionSucceededSwigExplicitPairingListener___")] + public static extern void PairingListener_PairingConnectionSucceededSwigExplicitPairingListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_PairingConnectionFailed___")] + public static extern void PairingListener_PairingConnectionFailed(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_PairingConnectionFailedSwigExplicitPairingListener___")] + public static extern void PairingListener_PairingConnectionFailedSwigExplicitPairingListener(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_PairingListener___")] + public static extern global::System.IntPtr new_PairingListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_PairingListener___")] + public static extern void delete_PairingListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_director_connect___")] + public static extern void PairingListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, PairingListener.SwigDelegatePairingListener_0 delegate0, PairingListener.SwigDelegatePairingListener_1 delegate1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_HasPairingInfo___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairingManager_HasPairingInfo(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_ClearPairingInfo___")] + public static extern void PairingManager_ClearPairingInfo(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_BeginConnecting___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairingManager_BeginConnecting(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_CancelConnecting___")] + public static extern void PairingManager_CancelConnecting(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_BeginPairing___")] + public static extern int PairingManager_BeginPairing(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, global::System.Runtime.InteropServices.HandleRef jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_CancelPairing___")] + public static extern void PairingManager_CancelPairing(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_IsPairing___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairingManager_IsPairing(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingManager_IsConnected___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool PairingManager_IsConnected(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_PairingManager___")] + public static extern void delete_PairingManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_Create___")] + public static extern global::System.IntPtr SharingManager_Create(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetSessionManager___")] + public static extern global::System.IntPtr SharingManager_GetSessionManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetUserPresenceManager___")] + public static extern global::System.IntPtr SharingManager_GetUserPresenceManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetAudioManager___")] + public static extern global::System.IntPtr SharingManager_GetAudioManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetPairingManager___")] + public static extern global::System.IntPtr SharingManager_GetPairingManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetRoomManager___")] + public static extern global::System.IntPtr SharingManager_GetRoomManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetRootSyncObject___")] + public static extern global::System.IntPtr SharingManager_GetRootSyncObject(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_RegisterSyncListener___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool SharingManager_RegisterSyncListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_Update___")] + public static extern void SharingManager_Update(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetPairedConnection___")] + public static extern global::System.IntPtr SharingManager_GetPairedConnection(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetServerConnection___")] + public static extern global::System.IntPtr SharingManager_GetServerConnection(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetSettings___")] + public static extern global::System.IntPtr SharingManager_GetSettings(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_SetServerConnectionInfo___")] + public static extern void SharingManager_SetServerConnectionInfo(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, uint jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_GetLocalUser___")] + public static extern global::System.IntPtr SharingManager_GetLocalUser(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SharingManager_SetUserName___")] + public static extern void SharingManager_SetUserName(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_SharingManager___")] + public static extern void delete_SharingManager(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DirectPairConnector__SWIG_0___")] + public static extern global::System.IntPtr new_DirectPairConnector__SWIG_0(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DirectPairConnector__SWIG_1___")] + public static extern global::System.IntPtr new_DirectPairConnector__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DirectPairConnector__SWIG_2___")] + public static extern global::System.IntPtr new_DirectPairConnector__SWIG_2(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_IsReceiver___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool DirectPairConnector_IsReceiver(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_GetAddressCount___")] + public static extern int DirectPairConnector_GetAddressCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_GetAddress___")] + public static extern global::System.IntPtr DirectPairConnector_GetAddress(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_GetPort___")] + public static extern ushort DirectPairConnector_GetPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_Update___")] + public static extern void DirectPairConnector_Update(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_IsReadyToConnect___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool DirectPairConnector_IsReadyToConnect(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_SetRemoteAddress___")] + public static extern void DirectPairConnector_SetRemoteAddress(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_SetRemotePort___")] + public static extern void DirectPairConnector_SetRemotePort(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DirectPairConnector___")] + public static extern void delete_DirectPairConnector(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DirectPairReceiver__SWIG_0___")] + public static extern global::System.IntPtr new_DirectPairReceiver__SWIG_0(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DirectPairReceiver__SWIG_1___")] + public static extern global::System.IntPtr new_DirectPairReceiver__SWIG_1(ushort jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_IsReceiver___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool DirectPairReceiver_IsReceiver(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_GetAddressCount___")] + public static extern int DirectPairReceiver_GetAddressCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_GetAddress___")] + public static extern global::System.IntPtr DirectPairReceiver_GetAddress(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_GetPort___")] + public static extern ushort DirectPairReceiver_GetPort(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_Update___")] + public static extern void DirectPairReceiver_Update(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_IsReadyToConnect___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool DirectPairReceiver_IsReadyToConnect(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_SetIncomingPort___")] + public static extern void DirectPairReceiver_SetIncomingPort(global::System.Runtime.InteropServices.HandleRef jarg1, ushort jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DirectPairReceiver___")] + public static extern void delete_DirectPairReceiver(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_TagImage_GetWidth___")] + public static extern int TagImage_GetWidth(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_TagImage_GetHeight___")] + public static extern int TagImage_GetHeight(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_TagImage_CopyImageData___")] + public static extern void TagImage_CopyImageData(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.IntPtr jarg2, int jarg3, int jarg4); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_TagImage___")] + public static extern void delete_TagImage(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairReceiver_Create___")] + public static extern global::System.IntPtr VisualPairReceiver_Create(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairReceiver_CreateTagImage___")] + public static extern global::System.IntPtr VisualPairReceiver_CreateTagImage(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_VisualPairReceiver___")] + public static extern void delete_VisualPairReceiver(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairConnector_Create___")] + public static extern global::System.IntPtr VisualPairConnector_Create(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairConnector_ProcessImage___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool VisualPairConnector_ProcessImage(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.IntPtr jarg2, int jarg3, int jarg4, int jarg5); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairConnector_IsProcessingImage___")] + [return: global::System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I1)] + public static extern bool VisualPairConnector_IsProcessingImage(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_VisualPairConnector___")] + public static extern void delete_VisualPairConnector(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DiscoveredSystem___")] + public static extern global::System.IntPtr new_DiscoveredSystem(string jarg1, string jarg2, int jarg3); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveredSystem_GetName___")] + public static extern string DiscoveredSystem_GetName(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveredSystem_GetAddress___")] + public static extern string DiscoveredSystem_GetAddress(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveredSystem_GetRole___")] + public static extern int DiscoveredSystem_GetRole(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DiscoveredSystem___")] + public static extern void delete_DiscoveredSystem(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DiscoveryClientListener___")] + public static extern void delete_DiscoveryClientListener(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_OnRemoteSystemDiscovered___")] + public static extern void DiscoveryClientListener_OnRemoteSystemDiscovered(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_OnRemoteSystemDiscoveredSwigExplicitDiscoveryClientListener___")] + public static extern void DiscoveryClientListener_OnRemoteSystemDiscoveredSwigExplicitDiscoveryClientListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_OnRemoteSystemLost___")] + public static extern void DiscoveryClientListener_OnRemoteSystemLost(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_OnRemoteSystemLostSwigExplicitDiscoveryClientListener___")] + public static extern void DiscoveryClientListener_OnRemoteSystemLostSwigExplicitDiscoveryClientListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_new_DiscoveryClientListener___")] + public static extern global::System.IntPtr new_DiscoveryClientListener(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_director_connect___")] + public static extern void DiscoveryClientListener_director_connect(global::System.Runtime.InteropServices.HandleRef jarg1, DiscoveryClientListener.SwigDelegateDiscoveryClientListener_0 delegate0, DiscoveryClientListener.SwigDelegateDiscoveryClientListener_1 delegate1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_Create___")] + public static extern global::System.IntPtr DiscoveryClient_Create(); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_Ping___")] + public static extern void DiscoveryClient_Ping(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_GetDiscoveredCount___")] + public static extern uint DiscoveryClient_GetDiscoveredCount(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_GetDiscoveredSystem___")] + public static extern global::System.IntPtr DiscoveryClient_GetDiscoveredSystem(global::System.Runtime.InteropServices.HandleRef jarg1, uint jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_Update___")] + public static extern void DiscoveryClient_Update(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_AddListener___")] + public static extern void DiscoveryClient_AddListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClient_RemoveListener___")] + public static extern void DiscoveryClient_RemoveListener(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_delete_DiscoveryClient___")] + public static extern void delete_DiscoveryClient(global::System.Runtime.InteropServices.HandleRef jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_NetworkConnectionListener_SWIGUpcast___")] + public static extern global::System.IntPtr NetworkConnectionListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_BoolElement_SWIGUpcast___")] + public static extern global::System.IntPtr BoolElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntElement_SWIGUpcast___")] + public static extern global::System.IntPtr IntElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_LongElement_SWIGUpcast___")] + public static extern global::System.IntPtr LongElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatElement_SWIGUpcast___")] + public static extern global::System.IntPtr FloatElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DoubleElement_SWIGUpcast___")] + public static extern global::System.IntPtr DoubleElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringElement_SWIGUpcast___")] + public static extern global::System.IntPtr StringElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayListener_SWIGUpcast___")] + public static extern global::System.IntPtr IntArrayListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_IntArrayElement_SWIGUpcast___")] + public static extern global::System.IntPtr IntArrayElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayListener_SWIGUpcast___")] + public static extern global::System.IntPtr FloatArrayListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_FloatArrayElement_SWIGUpcast___")] + public static extern global::System.IntPtr FloatArrayElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayListener_SWIGUpcast___")] + public static extern global::System.IntPtr StringArrayListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_StringArrayElement_SWIGUpcast___")] + public static extern global::System.IntPtr StringArrayElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElementListener_SWIGUpcast___")] + public static extern global::System.IntPtr ObjectElementListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_ObjectElement_SWIGUpcast___")] + public static extern global::System.IntPtr ObjectElement_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SyncListener_SWIGUpcast___")] + public static extern global::System.IntPtr SyncListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionListener_SWIGUpcast___")] + public static extern global::System.IntPtr SessionListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_SessionManagerListener_SWIGUpcast___")] + public static extern global::System.IntPtr SessionManagerListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_UserPresenceManagerListener_SWIGUpcast___")] + public static extern global::System.IntPtr UserPresenceManagerListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_RoomManagerListener_SWIGUpcast___")] + public static extern global::System.IntPtr RoomManagerListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_PairingListener_SWIGUpcast___")] + public static extern global::System.IntPtr PairingListener_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairConnector_SWIGUpcast___")] + public static extern global::System.IntPtr DirectPairConnector_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DirectPairReceiver_SWIGUpcast___")] + public static extern global::System.IntPtr DirectPairReceiver_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairReceiver_SWIGUpcast___")] + public static extern global::System.IntPtr VisualPairReceiver_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_VisualPairConnector_SWIGUpcast___")] + public static extern global::System.IntPtr VisualPairConnector_SWIGUpcast(global::System.IntPtr jarg1); + + [global::System.Runtime.InteropServices.DllImport("SharingClient", EntryPoint="CSharp_HoloToolkitfSharing_DiscoveryClientListener_SWIGUpcast___")] + public static extern global::System.IntPtr DiscoveryClientListener_SWIGUpcast(global::System.IntPtr jarg1); +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs.meta new file mode 100644 index 0000000..9438c23 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingClientPINVOKE.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0c7446f1018a0e34fbf50d7ef2098a9d +timeCreated: 1456612507 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs new file mode 100644 index 0000000..ef3899d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs @@ -0,0 +1,128 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SharingManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal SharingManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SharingManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~SharingManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_SharingManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public static SharingManager Create(ClientConfig config) { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_Create(ClientConfig.getCPtr(config)); + SharingManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new SharingManager(cPtr, true); + return ret; + } + + public virtual SessionManager GetSessionManager() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetSessionManager(swigCPtr); + SessionManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new SessionManager(cPtr, true); + return ret; + } + + public virtual UserPresenceManager GetUserPresenceManager() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetUserPresenceManager(swigCPtr); + UserPresenceManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new UserPresenceManager(cPtr, true); + return ret; + } + + public virtual AudioManager GetAudioManager() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetAudioManager(swigCPtr); + AudioManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new AudioManager(cPtr, true); + return ret; + } + + public virtual PairingManager GetPairingManager() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetPairingManager(swigCPtr); + PairingManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new PairingManager(cPtr, true); + return ret; + } + + public virtual RoomManager GetRoomManager() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetRoomManager(swigCPtr); + RoomManager ret = (cPtr == global::System.IntPtr.Zero) ? null : new RoomManager(cPtr, true); + return ret; + } + + public virtual ObjectElement GetRootSyncObject() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetRootSyncObject(swigCPtr); + ObjectElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true); + return ret; + } + + public virtual bool RegisterSyncListener(SyncListener listener) { + bool ret = SharingClientPINVOKE.SharingManager_RegisterSyncListener(swigCPtr, SyncListener.getCPtr(listener)); + return ret; + } + + public virtual void Update() { + SharingClientPINVOKE.SharingManager_Update(swigCPtr); + } + + public virtual NetworkConnection GetPairedConnection() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetPairedConnection(swigCPtr); + NetworkConnection ret = (cPtr == global::System.IntPtr.Zero) ? null : new NetworkConnection(cPtr, true); + return ret; + } + + public virtual NetworkConnection GetServerConnection() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetServerConnection(swigCPtr); + NetworkConnection ret = (cPtr == global::System.IntPtr.Zero) ? null : new NetworkConnection(cPtr, true); + return ret; + } + + public virtual Settings GetSettings() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetSettings(swigCPtr); + Settings ret = (cPtr == global::System.IntPtr.Zero) ? null : new Settings(cPtr, true); + return ret; + } + + public virtual void SetServerConnectionInfo(XString address, uint port) { + SharingClientPINVOKE.SharingManager_SetServerConnectionInfo(swigCPtr, XString.getCPtr(address), port); + } + + public virtual User GetLocalUser() { + global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetLocalUser(swigCPtr); + User ret = (cPtr == global::System.IntPtr.Zero) ? null : new User(cPtr, true); + return ret; + } + + public virtual void SetUserName(XString name) { + SharingClientPINVOKE.SharingManager_SetUserName(swigCPtr, XString.getCPtr(name)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs.meta new file mode 100644 index 0000000..319ee8d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SharingManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 69bc1f79e88dcf74e84ac71014b8959d +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs new file mode 100644 index 0000000..3c3b7f6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class StringArrayElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal StringArrayElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.StringArrayElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(StringArrayElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~StringArrayElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_StringArrayElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static StringArrayElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.StringArrayElement_Cast(Element.getCPtr(element)); + StringArrayElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new StringArrayElement(cPtr, true); + return ret; + } + + public virtual int GetCount() { + int ret = SharingClientPINVOKE.StringArrayElement_GetCount(swigCPtr); + return ret; + } + + public virtual XString GetValue(int index) { + global::System.IntPtr cPtr = SharingClientPINVOKE.StringArrayElement_GetValue(swigCPtr, index); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual void SetValue(int index, XString newValue) { + SharingClientPINVOKE.StringArrayElement_SetValue(swigCPtr, index, XString.getCPtr(newValue)); + } + + public virtual void InsertValue(int index, XString value) { + SharingClientPINVOKE.StringArrayElement_InsertValue(swigCPtr, index, XString.getCPtr(value)); + } + + public virtual void RemoveValue(int index) { + SharingClientPINVOKE.StringArrayElement_RemoveValue(swigCPtr, index); + } + + public virtual void AddListener(StringArrayListener newListener) { + SharingClientPINVOKE.StringArrayElement_AddListener(swigCPtr, StringArrayListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(StringArrayListener oldListener) { + SharingClientPINVOKE.StringArrayElement_RemoveListener(swigCPtr, StringArrayListener.getCPtr(oldListener)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs.meta new file mode 100644 index 0000000..49317fd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 86f67b8d77be6ca459d9b07628135fc7 +timeCreated: 1462155795 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs new file mode 100644 index 0000000..7357151 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class StringArrayListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal StringArrayListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.StringArrayListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(StringArrayListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~StringArrayListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_StringArrayListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnValueChanged(int index, XString newValue) { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) SharingClientPINVOKE.StringArrayListener_OnValueChangedSwigExplicitStringArrayListener(swigCPtr, index, XString.getCPtr(newValue)); else SharingClientPINVOKE.StringArrayListener_OnValueChanged(swigCPtr, index, XString.getCPtr(newValue)); + } + + public virtual void OnValueInserted(int index, XString value) { + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) SharingClientPINVOKE.StringArrayListener_OnValueInsertedSwigExplicitStringArrayListener(swigCPtr, index, XString.getCPtr(value)); else SharingClientPINVOKE.StringArrayListener_OnValueInserted(swigCPtr, index, XString.getCPtr(value)); + } + + public virtual void OnValueRemoved(int index, XString value) { + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) SharingClientPINVOKE.StringArrayListener_OnValueRemovedSwigExplicitStringArrayListener(swigCPtr, index, XString.getCPtr(value)); else SharingClientPINVOKE.StringArrayListener_OnValueRemoved(swigCPtr, index, XString.getCPtr(value)); + } + + public StringArrayListener() : this(SharingClientPINVOKE.new_StringArrayListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnValueChanged", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateStringArrayListener_0(SwigDirectorOnValueChanged); + if (SwigDerivedClassHasMethod("OnValueInserted", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateStringArrayListener_1(SwigDirectorOnValueInserted); + if (SwigDerivedClassHasMethod("OnValueRemoved", swigMethodTypes2)) + swigDelegate2 = new SwigDelegateStringArrayListener_2(SwigDirectorOnValueRemoved); + SharingClientPINVOKE.StringArrayListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1, swigDelegate2); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(StringArrayListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnValueChanged(int index, global::System.IntPtr newValue) { + OnValueChanged(index, (newValue == global::System.IntPtr.Zero) ? null : new XString(newValue, true)); + } + + private void SwigDirectorOnValueInserted(int index, global::System.IntPtr value) { + OnValueInserted(index, (value == global::System.IntPtr.Zero) ? null : new XString(value, true)); + } + + private void SwigDirectorOnValueRemoved(int index, global::System.IntPtr value) { + OnValueRemoved(index, (value == global::System.IntPtr.Zero) ? null : new XString(value, true)); + } + + public delegate void SwigDelegateStringArrayListener_0(int index, global::System.IntPtr newValue); + public delegate void SwigDelegateStringArrayListener_1(int index, global::System.IntPtr value); + public delegate void SwigDelegateStringArrayListener_2(int index, global::System.IntPtr value); + + private SwigDelegateStringArrayListener_0 swigDelegate0; + private SwigDelegateStringArrayListener_1 swigDelegate1; + private SwigDelegateStringArrayListener_2 swigDelegate2; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(int), typeof(XString) }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { typeof(int), typeof(XString) }; + private static global::System.Type[] swigMethodTypes2 = new global::System.Type[] { typeof(int), typeof(XString) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs.meta new file mode 100644 index 0000000..6df9a33 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringArrayListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2ee5b4b9363ca7b4b82104bda998b64e +timeCreated: 1462155791 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs new file mode 100644 index 0000000..e5c5fbd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class StringElement : Element { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal StringElement(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.StringElement_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(StringElement obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~StringElement() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_StringElement(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static StringElement Cast(Element element) { + global::System.IntPtr cPtr = SharingClientPINVOKE.StringElement_Cast(Element.getCPtr(element)); + StringElement ret = (cPtr == global::System.IntPtr.Zero) ? null : new StringElement(cPtr, true); + return ret; + } + + public virtual XString GetValue() { + global::System.IntPtr cPtr = SharingClientPINVOKE.StringElement_GetValue(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual void SetValue(XString newString) { + SharingClientPINVOKE.StringElement_SetValue(swigCPtr, XString.getCPtr(newString)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs.meta new file mode 100644 index 0000000..e4e6683 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/StringElement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9a100833b0ac71f418b99081a6bdd679 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs new file mode 100644 index 0000000..00aa1df --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class SyncListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal SyncListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.SyncListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(SyncListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~SyncListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_SyncListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnSyncChangesBegin() { + if (SwigDerivedClassHasMethod("OnSyncChangesBegin", swigMethodTypes0)) SharingClientPINVOKE.SyncListener_OnSyncChangesBeginSwigExplicitSyncListener(swigCPtr); else SharingClientPINVOKE.SyncListener_OnSyncChangesBegin(swigCPtr); + } + + public virtual void OnSyncChangesEnd() { + if (SwigDerivedClassHasMethod("OnSyncChangesEnd", swigMethodTypes1)) SharingClientPINVOKE.SyncListener_OnSyncChangesEndSwigExplicitSyncListener(swigCPtr); else SharingClientPINVOKE.SyncListener_OnSyncChangesEnd(swigCPtr); + } + + public SyncListener() : this(SharingClientPINVOKE.new_SyncListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnSyncChangesBegin", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateSyncListener_0(SwigDirectorOnSyncChangesBegin); + if (SwigDerivedClassHasMethod("OnSyncChangesEnd", swigMethodTypes1)) + swigDelegate1 = new SwigDelegateSyncListener_1(SwigDirectorOnSyncChangesEnd); + SharingClientPINVOKE.SyncListener_director_connect(swigCPtr, swigDelegate0, swigDelegate1); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(SyncListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnSyncChangesBegin() { + OnSyncChangesBegin(); + } + + private void SwigDirectorOnSyncChangesEnd() { + OnSyncChangesEnd(); + } + + public delegate void SwigDelegateSyncListener_0(); + public delegate void SwigDelegateSyncListener_1(); + + private SwigDelegateSyncListener_0 swigDelegate0; + private SwigDelegateSyncListener_1 swigDelegate1; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { }; + private static global::System.Type[] swigMethodTypes1 = new global::System.Type[] { }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs.meta new file mode 100644 index 0000000..4c06053 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SyncListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 96401c9744e9a8f4db74d255e81b2011 +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs new file mode 100644 index 0000000..14b9122 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public enum SystemRole { + SessionDiscoveryServerRole = 0, + SessionServerRole, + PrimaryClientRole, + SecondaryClientRole +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs.meta new file mode 100644 index 0000000..b219032 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/SystemRole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11f25bddcb4fa2849ab8e795ecb63578 +timeCreated: 1469576082 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs new file mode 100644 index 0000000..789f0f6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class TagImage : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal TagImage(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(TagImage obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~TagImage() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_TagImage(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual int GetWidth() { + int ret = SharingClientPINVOKE.TagImage_GetWidth(swigCPtr); + return ret; + } + + public virtual int GetHeight() { + int ret = SharingClientPINVOKE.TagImage_GetHeight(swigCPtr); + return ret; + } + + public virtual void CopyImageData(byte[] data, int bufferSize, int bytesPerPixel) { + global::System.Runtime.InteropServices.GCHandle pinHandle_data = global::System.Runtime.InteropServices.GCHandle.Alloc(data, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + SharingClientPINVOKE.TagImage_CopyImageData(swigCPtr, (global::System.IntPtr)pinHandle_data.AddrOfPinnedObject(), bufferSize, bytesPerPixel); + } + } finally { pinHandle_data.Free(); } + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs.meta new file mode 100644 index 0000000..ccbd415 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/TagImage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5d540aba5fbcc324ba58af008010b355 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs new file mode 100644 index 0000000..54154be --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs @@ -0,0 +1,67 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class User : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal User(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(User obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~User() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_User(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual XString GetName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.User_GetName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual int GetID() { + int ret = SharingClientPINVOKE.User_GetID(swigCPtr); + return ret; + } + + public virtual bool IsValid() { + bool ret = SharingClientPINVOKE.User_IsValid(swigCPtr); + return ret; + } + + public virtual bool GetMuteState() { + bool ret = SharingClientPINVOKE.User_GetMuteState(swigCPtr); + return ret; + } + + public const int kInvalidUserID = -1; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs.meta new file mode 100644 index 0000000..e494209 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/User.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d03e1bbf9db35aa48817e1a22390badd +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs new file mode 100644 index 0000000..03f927e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs @@ -0,0 +1,76 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class UserPresenceManager : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal UserPresenceManager(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(UserPresenceManager obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~UserPresenceManager() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_UserPresenceManager(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public virtual void AddListener(UserPresenceManagerListener newListener) { + SharingClientPINVOKE.UserPresenceManager_AddListener(swigCPtr, UserPresenceManagerListener.getCPtr(newListener)); + } + + public virtual void RemoveListener(UserPresenceManagerListener oldListener) { + SharingClientPINVOKE.UserPresenceManager_RemoveListener(swigCPtr, UserPresenceManagerListener.getCPtr(oldListener)); + } + + public virtual bool GetMuteState() { + bool ret = SharingClientPINVOKE.UserPresenceManager_GetMuteState(swigCPtr); + return ret; + } + + public virtual void SetMuteState(bool muteState) { + SharingClientPINVOKE.UserPresenceManager_SetMuteState(swigCPtr, muteState); + } + + public virtual void SetName(XString name) { + SharingClientPINVOKE.UserPresenceManager_SetName(swigCPtr, XString.getCPtr(name)); + } + + public virtual XString GetName() { + global::System.IntPtr cPtr = SharingClientPINVOKE.UserPresenceManager_GetName(swigCPtr); + XString ret = (cPtr == global::System.IntPtr.Zero) ? null : new XString(cPtr, true); + return ret; + } + + public virtual void SetUser(User localUser) { + SharingClientPINVOKE.UserPresenceManager_SetUser(swigCPtr, User.getCPtr(localUser)); + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs.meta new file mode 100644 index 0000000..bfeae10 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cddf97b7fbb11c84eadcf3213214b663 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs new file mode 100644 index 0000000..e819ce3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Sharing +{ + /// + /// Allows users of UserPresenceManager to register to receive event callbacks without + /// having their classes inherit directly from UserPresenceManagerListener + /// + public class UserPresenceManagerAdapter : UserPresenceManagerListener + { + public event System.Action UserPresenceChangedEvent; + + public UserPresenceManagerAdapter() { } + + public override void OnUserPresenceChanged(User user) + { + if (this.UserPresenceChangedEvent != null) + { + this.UserPresenceChangedEvent(user); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs.meta new file mode 100644 index 0000000..062cedb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1bd28f662c870fd4a9b7ce081e2d7404 +timeCreated: 1458941821 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs new file mode 100644 index 0000000..248b737 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class UserPresenceManagerListener : Listener { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal UserPresenceManagerListener(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.UserPresenceManagerListener_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(UserPresenceManagerListener obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~UserPresenceManagerListener() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_UserPresenceManagerListener(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public virtual void OnUserPresenceChanged(User user) { + if (SwigDerivedClassHasMethod("OnUserPresenceChanged", swigMethodTypes0)) SharingClientPINVOKE.UserPresenceManagerListener_OnUserPresenceChangedSwigExplicitUserPresenceManagerListener(swigCPtr, User.getCPtr(user)); else SharingClientPINVOKE.UserPresenceManagerListener_OnUserPresenceChanged(swigCPtr, User.getCPtr(user)); + } + + public UserPresenceManagerListener() : this(SharingClientPINVOKE.new_UserPresenceManagerListener(), true) { + SwigDirectorConnect(); + } + + private void SwigDirectorConnect() { + if (SwigDerivedClassHasMethod("OnUserPresenceChanged", swigMethodTypes0)) + swigDelegate0 = new SwigDelegateUserPresenceManagerListener_0(SwigDirectorOnUserPresenceChanged); + SharingClientPINVOKE.UserPresenceManagerListener_director_connect(swigCPtr, swigDelegate0); + } + + private bool SwigDerivedClassHasMethod(string methodName, global::System.Type[] methodTypes) { + global::System.Reflection.MethodInfo methodInfo = this.GetType().GetMethod(methodName, global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, methodTypes, null); + bool hasDerivedMethod = methodInfo.DeclaringType.IsSubclassOf(typeof(UserPresenceManagerListener)); + return hasDerivedMethod; + } + + private void SwigDirectorOnUserPresenceChanged(global::System.IntPtr user) { + OnUserPresenceChanged((user == global::System.IntPtr.Zero) ? null : new User(user, true)); + } + + public delegate void SwigDelegateUserPresenceManagerListener_0(global::System.IntPtr user); + + private SwigDelegateUserPresenceManagerListener_0 swigDelegate0; + + private static global::System.Type[] swigMethodTypes0 = new global::System.Type[] { typeof(User) }; +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs.meta new file mode 100644 index 0000000..cded18a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/UserPresenceManagerListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f203015ed1c31c04a89f0cfa71dc702c +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs new file mode 100644 index 0000000..8e99513 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class VisualPairConnector : PairMaker { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal VisualPairConnector(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.VisualPairConnector_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(VisualPairConnector obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~VisualPairConnector() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_VisualPairConnector(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static VisualPairConnector Create() { + global::System.IntPtr cPtr = SharingClientPINVOKE.VisualPairConnector_Create(); + VisualPairConnector ret = (cPtr == global::System.IntPtr.Zero) ? null : new VisualPairConnector(cPtr, true); + return ret; + } + + public virtual bool ProcessImage(byte[] image, int width, int height, int bytesPerPixel) { + global::System.Runtime.InteropServices.GCHandle pinHandle_image = global::System.Runtime.InteropServices.GCHandle.Alloc(image, global::System.Runtime.InteropServices.GCHandleType.Pinned); try { + { + bool ret = SharingClientPINVOKE.VisualPairConnector_ProcessImage(swigCPtr, (global::System.IntPtr)pinHandle_image.AddrOfPinnedObject(), width, height, bytesPerPixel); + return ret; + } + } finally { pinHandle_image.Free(); } + } + + public virtual bool IsProcessingImage() { + bool ret = SharingClientPINVOKE.VisualPairConnector_IsProcessingImage(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs.meta new file mode 100644 index 0000000..6250d91 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairConnector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 96faff5b959398e43bee4052ebf68df6 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs new file mode 100644 index 0000000..e22ab82 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class VisualPairReceiver : PairMaker { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + + internal VisualPairReceiver(global::System.IntPtr cPtr, bool cMemoryOwn) : base(SharingClientPINVOKE.VisualPairReceiver_SWIGUpcast(cPtr), cMemoryOwn) { + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(VisualPairReceiver obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~VisualPairReceiver() { + Dispose(); + } + + public override void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_VisualPairReceiver(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + base.Dispose(); + } + } + + public static VisualPairReceiver Create() { + global::System.IntPtr cPtr = SharingClientPINVOKE.VisualPairReceiver_Create(); + VisualPairReceiver ret = (cPtr == global::System.IntPtr.Zero) ? null : new VisualPairReceiver(cPtr, true); + return ret; + } + + public virtual TagImage CreateTagImage() { + global::System.IntPtr cPtr = SharingClientPINVOKE.VisualPairReceiver_CreateTagImage(swigCPtr); + TagImage ret = (cPtr == global::System.IntPtr.Zero) ? null : new TagImage(cPtr, true); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs.meta new file mode 100644 index 0000000..4b7869c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/VisualPairReceiver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 52a291a08fef3064eac0386055cd5bd7 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs new file mode 100644 index 0000000..437eb8d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// +// This file was automatically generated by SWIG (http://www.swig.org). +// Version 3.0.10 +// +// Do not make changes to this file unless you know what you are doing--modify +// the SWIG interface file instead. +//------------------------------------------------------------------------------ + +namespace HoloToolkit.Sharing { + +public class XString : global::System.IDisposable { + private global::System.Runtime.InteropServices.HandleRef swigCPtr; + protected bool swigCMemOwn; + + internal XString(global::System.IntPtr cPtr, bool cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr); + } + + internal static global::System.Runtime.InteropServices.HandleRef getCPtr(XString obj) { + return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr; + } + + ~XString() { + Dispose(); + } + + public virtual void Dispose() { + lock(this) { + if (swigCPtr.Handle != global::System.IntPtr.Zero) { + if (swigCMemOwn) { + swigCMemOwn = false; + SharingClientPINVOKE.delete_XString(swigCPtr); + } + swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero); + } + global::System.GC.SuppressFinalize(this); + } + } + + public override string ToString() { + return GetString(); + } + + public override bool Equals(object obj) + { + XString s = obj as XString; + if (ReferenceEquals(s, null)) { + return false; + } + else { + return IsEqual(s); + } + } + + public override int GetHashCode() + { + return GetString().GetHashCode(); + } + + public static bool operator ==(XString lhs, XString rhs) + { + if (ReferenceEquals(lhs, rhs)) { + return true; + } + else if (ReferenceEquals(lhs, null) || ReferenceEquals(rhs, null)) { + return false; + } else { + return lhs.IsEqual(rhs); + } + } + + public static bool operator !=(XString lhs, XString rhs) + { + return !(lhs == rhs); + } + + public static implicit operator XString(string s) { + return new XString(s); + } + + public static implicit operator string(XString s) + { + return s.GetString(); + } + + public XString() : this(SharingClientPINVOKE.new_XString__SWIG_0(), true) { + } + + public XString(string str) : this(SharingClientPINVOKE.new_XString__SWIG_1(str), true) { + if (SharingClientPINVOKE.SWIGPendingException.Pending) throw SharingClientPINVOKE.SWIGPendingException.Retrieve(); + } + + public uint GetLength() { + uint ret = SharingClientPINVOKE.XString_GetLength(swigCPtr); + return ret; + } + + public bool IsEqual(XString otherStr) { + bool ret = SharingClientPINVOKE.XString_IsEqual(swigCPtr, XString.getCPtr(otherStr)); + return ret; + } + + public string GetString() { + string ret = SharingClientPINVOKE.XString_GetString(swigCPtr); + return ret; + } + +} + +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs.meta new file mode 100644 index 0000000..9ddd4bb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SDK/XString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bb226cc31f45568428e450bb18e01d2f +timeCreated: 1456612508 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs new file mode 100644 index 0000000..5ae16b2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs @@ -0,0 +1,244 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Collections.Generic; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing +{ + /// + /// The ServerSessionsTracker manages the list of sessions on the server and the users in these sessions. + /// Instance is created by Sharing Stage when a connection is found. + /// + public class ServerSessionsTracker : IDisposable + { + private bool disposed; + private SessionManager sessionManager; + private SessionManagerAdapter sessionManagerAdapter; + + public event Action SessionCreated; + public event Action SessionAdded; + public event Action SessionClosed; + + public event Action UserChanged; + public event Action UserJoined; + public event Action UserLeft; + public event Action CurrentUserLeft; + public event Action CurrentUserJoined; + + public event Action ServerConnected; + public event Action ServerDisconnected; + + /// + /// List of sessions on the server. + /// + public List Sessions { get; private set; } + + /// + /// Indicates whether there is a connection to the server or not. + /// + public bool IsServerConnected { get; private set; } + + public ServerSessionsTracker(SessionManager sessionMgr) + { + sessionManager = sessionMgr; + Sessions = new List(); + + if (sessionManager != null) + { + sessionManagerAdapter = new SessionManagerAdapter(); + sessionManager.AddListener(sessionManagerAdapter); + sessionManagerAdapter.ServerConnectedEvent += OnServerConnected; + sessionManagerAdapter.ServerDisconnectedEvent += OnServerDisconnected; + sessionManagerAdapter.SessionClosedEvent += OnSessionClosed; + sessionManagerAdapter.SessionAddedEvent += OnSessionAdded; + sessionManagerAdapter.CreateSucceededEvent += OnSessionCreatedSuccess; + sessionManagerAdapter.CreateFailedEvent += OnSessionCreatedFail; + sessionManagerAdapter.UserChangedEvent += OnUserChanged; + sessionManagerAdapter.UserJoinedSessionEvent += OnUserJoined; + sessionManagerAdapter.UserLeftSessionEvent += OnUserLeft; + } + } + + /// + /// Retrieves the current session, if any. + /// + /// Current session the app is in. Null if no session is joined. + public Session GetCurrentSession() + { + return sessionManager.GetCurrentSession(); + } + + /// + /// Join the specified session. + /// + /// Session to join. + /// True if the session is being joined or is already joined. + public bool JoinSession(Session session) + { + // TODO Should prevent joining multiple sessions at the same time + if (session != null) + { + return session.IsJoined() || session.Join(); + } + + return false; + } + + /// + /// Leave the current session. + /// + public void LeaveCurrentSession() + { + using (Session currentSession = GetCurrentSession()) + { + if (currentSession != null) + { + currentSession.Leave(); + } + } + } + + /// + /// Creates a new session on the server. + /// + /// Name of the session. + /// True if a session was created, false if not. + public bool CreateSession(string sessionName) + { + if (disposed) + { + return false; + } + + return sessionManager.CreateSession(sessionName); + } + + private void OnSessionCreatedFail(XString reason) + { + using (reason) + { + SessionCreated.RaiseEvent(false, reason.GetString()); + } + } + + private void OnSessionCreatedSuccess(Session session) + { + using (session) + { + SessionCreated.RaiseEvent(true, session.GetName().GetString()); + } + } + + private void OnUserChanged(Session session, User user) + { + UserChanged.RaiseEvent(session, user); + } + + private void OnUserLeft(Session session, User user) + { + UserLeft.RaiseEvent(session, user); + + if (IsLocalUser(user)) + { + CurrentUserLeft.RaiseEvent(session); + } + } + + private void OnUserJoined(Session session, User newUser) + { + UserJoined.RaiseEvent(session, newUser); + + if (IsLocalUser(newUser)) + { + CurrentUserJoined.RaiseEvent(session); + } + } + + private void OnSessionAdded(Session newSession) + { + Sessions.Add(newSession); + SessionAdded.RaiseEvent(newSession); + } + + private void OnSessionClosed(Session session) + { + SessionClosed.RaiseEvent(session); + Sessions.Remove(session); + } + + private void OnServerDisconnected() + { + IsServerConnected = false; + + // Remove all sessions + for (int i = 0; i < Sessions.Count; i++) + { + Sessions[i].Dispose(); + } + + Sessions.Clear(); + ServerDisconnected.RaiseEvent(); + } + + private void OnServerConnected() + { + IsServerConnected = true; + ServerConnected.RaiseEvent(); + } + + private bool IsLocalUser(User user) + { + int changedUserId = user.GetID(); + using (User localUser = sessionManager.GetCurrentUser()) + { + int localUserId = localUser.GetID(); + return localUserId == changedUserId; + } + } + + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + OnServerDisconnected(); + + if (sessionManagerAdapter != null) + { + sessionManagerAdapter.ServerConnectedEvent -= OnServerConnected; + sessionManagerAdapter.ServerDisconnectedEvent -= OnServerDisconnected; + sessionManagerAdapter.SessionClosedEvent -= OnSessionClosed; + sessionManagerAdapter.SessionAddedEvent -= OnSessionAdded; + sessionManagerAdapter.CreateSucceededEvent -= OnSessionCreatedSuccess; + sessionManagerAdapter.CreateFailedEvent -= OnSessionCreatedFail; + sessionManagerAdapter.UserChangedEvent -= OnUserChanged; + sessionManagerAdapter.UserJoinedSessionEvent -= OnUserJoined; + sessionManagerAdapter.UserLeftSessionEvent -= OnUserLeft; + sessionManagerAdapter.Dispose(); + sessionManagerAdapter = null; + } + + if (sessionManager != null) + { + sessionManager.Dispose(); + sessionManager = null; + } + } + + disposed = true; + } + + #endregion + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs.meta new file mode 100644 index 0000000..b80029d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/ServerSessionsTracker.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d5e6900a95948c74899ef82b81cdcb2c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs new file mode 100644 index 0000000..70a25cb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs @@ -0,0 +1,169 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing +{ + /// + /// Keeps track of the users in the current session. + /// Instance is created by Sharing Stage when a connection is found. + /// + public class SessionUsersTracker : IDisposable + { + /// + /// UserJoined event notifies when a user joins the current session. + /// + public event Action UserJoined; + + /// + /// UserLeft event notifies when a user leaves the current session. + /// + public event Action UserLeft; + + /// + /// Local cached pointer to the sessions tracker.. + /// + private readonly ServerSessionsTracker serverSessionsTracker; + + /// + /// List of users that are in the current session. + /// + public List CurrentUsers { get; private set; } + + public SessionUsersTracker(ServerSessionsTracker sessionsTracker) + { + CurrentUsers = new List(); + + serverSessionsTracker = sessionsTracker; + serverSessionsTracker.CurrentUserJoined += OnCurrentUserJoinedSession; + serverSessionsTracker.CurrentUserLeft += OnCurrentUserLeftSession; + + serverSessionsTracker.UserJoined += OnUserJoinedSession; + serverSessionsTracker.UserLeft += OnUserLeftSession; + } + + /// + /// Finds and returns an object representing a user who has the supplied id number. Returns null if the user is not found. + /// + /// The numerical id of the session User to find + /// The User with the specified id or null (if not found) + public User GetUserById(int userId) + { + for (int u = 0; u < CurrentUsers.Count; u++) + { + User user = CurrentUsers[u]; + if (user.GetID() == userId) + { + return user; + } + } + return null; + } + + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + serverSessionsTracker.CurrentUserJoined -= OnCurrentUserJoinedSession; + serverSessionsTracker.CurrentUserLeft -= OnCurrentUserLeftSession; + + serverSessionsTracker.UserJoined -= OnUserJoinedSession; + serverSessionsTracker.UserLeft -= OnUserLeftSession; + } + } + + #endregion + + private void OnCurrentUserJoinedSession(Session joinedSession) + { + //Debug.LogFormat("Joining session {0}.", joinedSession.GetName()); + + // If joining a new session, any user in the previous session (if any) have left + ClearCurrentSession(); + + // Send a join event for every user currently in the session we joined + for (int i = 0; i < joinedSession.GetUserCount(); i++) + { + User user = joinedSession.GetUser(i); + CurrentUsers.Add(user); + UserJoined.RaiseEvent(user); + } + } + + private void OnCurrentUserLeftSession(Session leftSession) + { + //Debug.Log("Left current session."); + + // If we leave a session, notify that every user has left the current session of this app + ClearCurrentSession(); + } + + private void OnUserJoinedSession(Session session, User user) + { + if (!session.IsJoined()) + { + return; + } + + if (!CurrentUsers.Contains(user)) + { + // Remove any old users with the same ID + for (int i = CurrentUsers.Count - 1; i >= 0; i--) + { + if (CurrentUsers[i].GetID() == user.GetID()) + { + CurrentUsers.RemoveAt(i); + } + } + + CurrentUsers.Add(user); + UserJoined.RaiseEvent(user); + // Debug.LogFormat("User {0} joined current session.", user.GetName()); + } + } + + private void OnUserLeftSession(Session session, User user) + { + if (!session.IsJoined()) + { + return; + } + + for (int i = CurrentUsers.Count - 1; i >= 0; i--) + { + if (CurrentUsers[i].GetID() == user.GetID()) + { + CurrentUsers.RemoveAt(i); + UserLeft.RaiseEvent(user); + // Debug.LogFormat("User {0} left current session.", user.GetName()); + } + } + } + + /// + /// Clears the current session, removing any users being tracked. + /// This should be called whenever the current session changes, to reset this class + /// and handle a new curren session. + /// + private void ClearCurrentSession() + { + for (int i = 0; i < CurrentUsers.Count; i++) + { + UserLeft.RaiseEvent(CurrentUsers[i]); + } + + CurrentUsers.Clear(); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs.meta new file mode 100644 index 0000000..ec6f3c0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SessionUsersTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9b9c87aaa636d31488ddd2b3e3fe29e3 +timeCreated: 1456611863 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs new file mode 100644 index 0000000..1d7a999 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs @@ -0,0 +1,435 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using HoloToolkit.Sharing.Utilities; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing +{ + /// + /// The SharingStage is in charge of managing the core networking layer for the application. + /// + public class SharingStage : Singleton + { + /// + /// SharingManagerConnected event notifies when the sharing manager is created and connected. + /// + public event EventHandler SharingManagerConnected; + + /// + /// Default username to use when joining a session. + /// + /// User code should set the user name by setting the UserName property. + private const string DefaultUserName = "User "; + + /// + /// Set whether this app should be a Primary or Secondary client. + /// Primary: Connects directly to the Session Server, can create/join/leave sessions + /// Secondary: Connects to a Primary client. Cannot do any session management + /// + public ClientRole ClientRole = ClientRole.Primary; + + /// + /// Address of the sharing server. + /// + [Tooltip("Address of the sharing server")] + public string ServerAddress = "localhost"; + + /// + /// Port of the sharing server. + /// + [Tooltip("Port of the sharing server")] + public int ServerPort = 20602; + + [Tooltip("Should the app connect to the server at startup")] + [SerializeField] + private bool connectOnAwake = true; + + /// + /// Sharing manager used by the application. + /// + public SharingManager Manager { get; private set; } + + public bool AutoDiscoverServer; + + [Tooltip("Determines how often the discovery service should ping the network in search of a server.")] + public float PingIntervalSec = 2; + + /// + /// Set whether this app should provide audio input / output features. + /// + public bool IsAudioEndpoint = true; + + /// + /// Pipes XTools console output to Unity's output window for debugging + /// + private ConsoleLogWriter logWriter; + + /// + /// Root element of our data model + /// + public SyncRoot Root { get; private set; } + + /// + /// Server sessions tracker. + /// + public ServerSessionsTracker SessionsTracker { get; private set; } + + /// + /// Current session users tracker. + /// + public SessionUsersTracker SessionUsersTracker { get; private set; } + + /// + /// Sync State Listener sending events indicating the current sharing sync state. + /// + public SyncStateListener SyncStateListener { get; private set; } + + /// + /// Unique ID used to uniquely identify anything spawned by this application's instance, + /// in order to prevent conflicts when spawning objects. + /// + public string AppInstanceUniqueId { get; private set; } + + /// + /// Invoked when the local user changes their user name. + /// + public event Action UserNameChanged; + + /// + /// Enables Server Discovery on the network + /// + private DiscoveryClient discoveryClient; + + /// + /// Provides callbacks when server is discovered or lost. + /// + private DiscoveryClientAdapter discoveryClientAdapter; + + /// + /// The current ping interval during AutoDiscovery updates. + /// + private float pingIntervalCurrent; + + /// + /// True when AutoDiscovery is actively searching, otherwise false. + /// + private bool isTryingToFindServer; + + [Tooltip("Show Detailed Information for server connections")] + public bool ShowDetailedLogs; + + public string UserName + { + get + { + using (User user = Manager.GetLocalUser()) + { + using (XString userName = user.GetName()) + { + return userName.GetString(); + } + } + } + set + { + using (var userName = new XString(value)) + { + Manager.SetUserName(userName); + } + + UserNameChanged.RaiseEvent(value); + } + } + + private NetworkConnectionAdapter networkConnectionAdapter; + private NetworkConnection networkConnection; + public NetworkConnection Connection + { + get + { + if (networkConnection == null && Manager != null) + { + networkConnection = Manager.GetServerConnection(); + } + return networkConnection; + } + } + + /// + /// Returns true if connected to a Sharing Service server. + /// + public bool IsConnected + { + get + { + if (Manager != null && Connection != null) + { + return Connection.IsConnected(); + } + + return false; + } + } + + protected override void Awake() + { + base.Awake(); + + AppInstanceUniqueId = Guid.NewGuid().ToString(); + logWriter = new ConsoleLogWriter(); + logWriter.ShowDetailedLogs = ShowDetailedLogs; + + if (AutoDiscoverServer) + { + AutoDiscoverInit(); + } + else + { + Connect(); + } + } + + protected override void OnDestroy() + { + if (discoveryClient != null) + { + discoveryClient.RemoveListener(discoveryClientAdapter); + discoveryClient.Dispose(); + discoveryClient = null; + + if (discoveryClientAdapter != null) + { + discoveryClientAdapter.Dispose(); + discoveryClientAdapter = null; + } + } + + if (Manager != null) + { + // Force a disconnection so that we can stop and start Unity without connections hanging around + Manager.GetPairedConnection().Disconnect(); + Manager.GetServerConnection().Disconnect(); + } + + // Release the Sharing resources + if (SessionUsersTracker != null) + { + SessionUsersTracker.Dispose(); + SessionUsersTracker = null; + } + + if (SessionsTracker != null) + { + SessionsTracker.Dispose(); + SessionsTracker = null; + } + + if (networkConnection != null) + { + networkConnection.RemoveListener((byte)MessageID.StatusOnly, networkConnectionAdapter); + networkConnection.Dispose(); + networkConnection = null; + + if (networkConnectionAdapter != null) + { + networkConnectionAdapter.Dispose(); + networkConnectionAdapter = null; + } + } + + if (Manager != null) + { + Manager.Dispose(); + Manager = null; + } + + // Forces a garbage collection to try to clean up any additional reference to SWIG-wrapped objects + GC.Collect(); + + base.OnDestroy(); + } + + private void LateUpdate() + { + if (isTryingToFindServer) + { + AutoDiscoverUpdate(); + } + + if (Manager != null) + { + // Update the XToolsManager to processes any network messages that have arrived + Manager.Update(); + } + } + + private void Connect() + { + var config = new ClientConfig(ClientRole); + config.SetIsAudioEndpoint(IsAudioEndpoint); + config.SetLogWriter(logWriter); + + // Only set the server info is we are connecting on awake + if (connectOnAwake) + { + config.SetServerAddress(ServerAddress); + config.SetServerPort(ServerPort); + } + + Manager = SharingManager.Create(config); + + //set up callbacks so that we know when we've connected successfully + networkConnection = Manager.GetServerConnection(); + networkConnectionAdapter = new NetworkConnectionAdapter(); + networkConnectionAdapter.ConnectedCallback += NetworkConnectionAdapter_ConnectedCallback; + networkConnection.AddListener((byte)MessageID.StatusOnly, networkConnectionAdapter); + + SyncStateListener = new SyncStateListener(); + Manager.RegisterSyncListener(SyncStateListener); + + Root = new SyncRoot(Manager.GetRootSyncObject()); + + SessionsTracker = new ServerSessionsTracker(Manager.GetSessionManager()); + SessionUsersTracker = new SessionUsersTracker(SessionsTracker); + + using (var userName = new XString(DefaultUserName)) + { +#if UNITY_WSA && !UNITY_EDITOR + Manager.SetUserName(SystemInfo.deviceName); +#else + if (!string.IsNullOrEmpty(Environment.UserName)) + { + Manager.SetUserName(Environment.UserName); + } + else + { + User localUser = Manager.GetLocalUser(); + Manager.SetUserName(userName + localUser.GetID().ToString()); + } +#endif + } + } + + private void NetworkConnectionAdapter_ConnectedCallback(NetworkConnection obj) + { + SendConnectedNotification(); + } + + private void SendConnectedNotification() + { + if (Manager.GetServerConnection().IsConnected()) + { + //Send notification that we're connected + EventHandler connectedEvent = SharingManagerConnected; + if (connectedEvent != null) + { + connectedEvent(this, EventArgs.Empty); + } + } + else + { + Log.Error(string.Format("Cannot connect to server {0}:{1}", ServerAddress, ServerPort.ToString())); + } + } + + private void AutoDiscoverInit() + { + if (ShowDetailedLogs) + { + Debug.Log("Looking for servers..."); + } + discoveryClientAdapter = new DiscoveryClientAdapter(); + discoveryClientAdapter.DiscoveredEvent += OnSystemDiscovered; + + discoveryClient = DiscoveryClient.Create(); + discoveryClient.AddListener(discoveryClientAdapter); + + //Start Finding Server + isTryingToFindServer = true; + } + + private void AutoDiscoverUpdate() + { + //Searching Enabled-> Update DiscoveryClient to check results, Wait Interval then Ping network. + pingIntervalCurrent += Time.deltaTime; + if (pingIntervalCurrent > PingIntervalSec) + { + if (ShowDetailedLogs) + { + Debug.Log("Looking for servers..."); + } + pingIntervalCurrent = 0; + discoveryClient.Ping(); + } + discoveryClient.Update(); + } + + private void OnSystemDiscovered(DiscoveredSystem obj) + { + if (obj.GetRole() == SystemRole.SessionDiscoveryServerRole) + { + //Found a server. Stop pinging the network and connect + isTryingToFindServer = false; + ServerAddress = obj.GetAddress(); + if (ShowDetailedLogs) + { + Debug.Log("Server discovered at: " + ServerAddress); + } + Connect(); + if (ShowDetailedLogs) + { + Debug.LogFormat("Connected to: {0}:{1}", ServerAddress, ServerPort.ToString()); + } + } + } + + public void ConnectToServer(string serverAddress, int port) + { + ServerAddress = serverAddress; + ServerPort = port; + ConnectToServer(); + } + + public void ConnectToServer() + { + Manager.SetServerConnectionInfo(ServerAddress, (uint)ServerPort); + } + + private void OnEnable() + { + Application.logMessageReceived += HandleLog; + } + + private void OnDisable() + { + Application.logMessageReceived -= HandleLog; + } + + private void HandleLog(string logString, string stackTrace, LogType type) + { + switch (type) + { + case LogType.Error: + case LogType.Assert: + case LogType.Exception: + Log.Error(string.Format("{0} \n {1}", logString, stackTrace)); + break; + + case LogType.Warning: + Log.Warning(string.Format("{0} \n {1}", logString, stackTrace)); + break; + + case LogType.Log: + default: + if (ShowDetailedLogs) + { + Log.Info(logString); + } + break; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs.meta new file mode 100644 index 0000000..5d85159 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SharingStage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9af4ac91e9017f34c971bbf5e12948d3 +timeCreated: 1456611863 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning.meta new file mode 100644 index 0000000..3743f47 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b0aba8bbc779db14391ff2406b808559 +folderAsset: yes +timeCreated: 1463011691 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs new file mode 100644 index 0000000..0fbaf88 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs @@ -0,0 +1,247 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Collections.Generic; +using UnityEngine; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing.Spawning +{ + /// + /// Structure linking a prefab and a data model class. + /// + [Serializable] + public struct PrefabToDataModel + { + // TODO Should this be a Type? Or at least have a custom editor to have a dropdown list + public string DataModelClassName; + public GameObject Prefab; + } + + /// + /// Spawn manager that creates a GameObject based on a prefab when a new + /// SyncSpawnedObject is created in the data model. + /// + public class PrefabSpawnManager : SpawnManager + { + /// + /// List of prefabs that can be spawned by this application. + /// + /// It is assumed that this list is the same on all connected applications. + [SerializeField] + private List spawnablePrefabs = null; + + private Dictionary typeToPrefab; + + /// + /// Counter used to create objects and make sure that no two objects created + /// by the local application have the same name. + /// + private int objectCreationCounter; + + private void Awake() + { + InitializePrefabs(); + } + + private void InitializePrefabs() + { + typeToPrefab = new Dictionary(spawnablePrefabs.Count); + for (int i = 0; i < spawnablePrefabs.Count; i++) + { + typeToPrefab.Add(spawnablePrefabs[i].DataModelClassName, spawnablePrefabs[i].Prefab); + } + } + + protected override void InstantiateFromNetwork(SyncSpawnedObject spawnedObject) + { + GameObject prefab = GetPrefab(spawnedObject, null); + if (!prefab) + { + return; + } + + // Find the parent object + GameObject parent = null; + if (!string.IsNullOrEmpty(spawnedObject.ParentPath.Value)) + { + parent = GameObject.Find(spawnedObject.ParentPath.Value); + if (parent == null) + { + Debug.LogErrorFormat("Parent object '{0}' could not be found to instantiate object.", spawnedObject.ParentPath); + return; + } + } + + CreatePrefabInstance(spawnedObject, prefab, parent, spawnedObject.Name.Value); + } + + protected override void RemoveFromNetwork(SyncSpawnedObject removedObject) + { + if (removedObject.GameObject != null) + { + Destroy(removedObject.GameObject); + removedObject.GameObject = null; + } + } + + protected virtual string CreateInstanceName(string baseName) + { + string instanceName = string.Format("{0}{1}_{2}", baseName, objectCreationCounter.ToString(), NetworkManager.AppInstanceUniqueId); + objectCreationCounter++; + return instanceName; + } + + protected virtual string GetPrefabLookupKey(SyncSpawnedObject dataModel, string baseName) + { + return dataModel.GetType().Name; + } + + protected virtual GameObject GetPrefab(SyncSpawnedObject dataModel, string baseName) + { + GameObject prefabToSpawn; + string dataModelTypeName = GetPrefabLookupKey(dataModel, baseName); + if (dataModelTypeName == null || !typeToPrefab.TryGetValue(dataModelTypeName, out prefabToSpawn)) + { + Debug.LogErrorFormat("Trying to instantiate an object from unregistered data model {0}.", dataModelTypeName); + return null; + } + return prefabToSpawn; + } + + /// + /// Spawns content with the given parent. If no parent is specified it will be parented to the spawn manager itself. + /// + /// Data model to use for spawning. + /// Local position for the new instance. + /// Local rotation for the new instance. + /// optional local scale for the new instance. If not specified, uses the prefabs scale. + /// Parent to assign to the object. + /// Base name to use to name the created game object. + /// + /// Indicates if the spawned object is owned by this device or not. + /// An object that is locally owned will be removed from the sync system when its owner leaves the session. + /// + /// True if spawning succeeded, false if not. + public bool Spawn(SyncSpawnedObject dataModel, Vector3 localPosition, Quaternion localRotation, Vector3? localScale, GameObject parent, string baseName, bool isOwnedLocally) + { + if (SyncSource == null) + { + Debug.LogError("Can't spawn an object: PrefabSpawnManager is not initialized."); + return false; + } + + if (dataModel == null) + { + Debug.LogError("Can't spawn an object: dataModel argument is null."); + return false; + } + + if (parent == null) + { + parent = gameObject; + } + + // Validate that the prefab is valid + GameObject prefabToSpawn = GetPrefab(dataModel, baseName); + if (!prefabToSpawn) + { + return false; + } + + // Get a name for the object to create + string instanceName = CreateInstanceName(baseName); + + // Add the data model object to the networked array, for networking and history purposes + dataModel.Initialize(instanceName, parent.transform.GetFullPath("/")); + dataModel.Transform.Position.Value = localPosition; + dataModel.Transform.Rotation.Value = localRotation; + if (localScale.HasValue) + { + dataModel.Transform.Scale.Value = localScale.Value; + } + else + { + dataModel.Transform.Scale.Value = prefabToSpawn.transform.localScale; + } + + User owner = null; + if (isOwnedLocally) + { + owner = SharingStage.Instance.Manager.GetLocalUser(); + } + + SyncSource.AddObject(dataModel, owner); + return true; + } + + /// + /// Instantiate data model on the network with the given parent. If no parent is specified it will be parented to the spawn manager itself. + /// + /// Data model to use for spawning. + /// Local space position for the new instance. + /// Local space rotation for the new instance. + /// Parent to assign to the object. + /// Base name to use to name the created game object. + /// + /// Indicates if the spawned object is owned by this device or not. + /// An object that is locally owned will be removed from the sync system when its owner leaves the session. + /// + /// True if the function succeeded, false if not. + public bool Spawn(SyncSpawnedObject dataModel, Vector3 localPosition, Quaternion localRotation, GameObject parent, string baseName, bool isOwnedLocally) + { + return Spawn(dataModel, localPosition, localRotation, null, parent, baseName, isOwnedLocally); + } + + protected override void SetDataModelSource() + { + SyncSource = NetworkManager.Root.InstantiatedPrefabs; + } + + public override void Delete(SyncSpawnedObject objectToDelete) + { + SyncSource.RemoveObject(objectToDelete); + } + + /// + /// Create a prefab instance in the scene, in reaction to data being added to the data model. + /// + /// Object to spawn's data model. + /// Prefab to instantiate. + /// Parent object under which the prefab should be. + /// Name of the object. + /// + protected virtual GameObject CreatePrefabInstance(SyncSpawnedObject dataModel, GameObject prefabToInstantiate, GameObject parentObject, string objectName) + { + GameObject instance = Instantiate(prefabToInstantiate, dataModel.Transform.Position.Value, dataModel.Transform.Rotation.Value); + instance.transform.localScale = dataModel.Transform.Scale.Value; + instance.transform.SetParent(parentObject.transform, false); + instance.gameObject.name = objectName; + + dataModel.GameObject = instance; + + // Set the data model on the various ISyncModelAccessor components of the spawned game obejct + ISyncModelAccessor[] syncModelAccessors = instance.GetComponentsInChildren(true); + if (syncModelAccessors.Length <= 0) + { + // If no ISyncModelAccessor component exists, create a default one that gives access to the SyncObject instance + ISyncModelAccessor defaultAccessor = instance.EnsureComponent(); + defaultAccessor.SetSyncModel(dataModel); + } + + for (int i = 0; i < syncModelAccessors.Length; i++) + { + syncModelAccessors[i].SetSyncModel(dataModel); + } + + // Setup the transform synchronization + TransformSynchronizer transformSynchronizer = instance.EnsureComponent(); + transformSynchronizer.TransformDataModel = dataModel.Transform; + + return instance; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs.meta new file mode 100644 index 0000000..97a0ebf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/PrefabSpawnManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 50ea9b56756ce4549ac9331b03af784f +timeCreated: 1462393871 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs new file mode 100644 index 0000000..f3d4821 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs @@ -0,0 +1,88 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using UnityEngine; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing.Spawning +{ + /// + /// A SpawnManager is in charge of spawning the appropriate objects based on changes to an array of data model objects + /// to which it is registered. + /// It also manages the lifespan of these spawned objects. + /// + /// Type of SyncObject in the array being monitored by the SpawnManager. + public abstract class SpawnManager : MonoBehaviour where T : SyncObject, new() + { + protected SharingStage NetworkManager { get; private set; } + + protected SyncArray SyncSource; + + protected virtual void Start() + { + // SharingStage should be valid at this point, but we may not be connected. + NetworkManager = SharingStage.Instance; + if (NetworkManager.IsConnected) + { + Connected(); + } + else + { + NetworkManager.SharingManagerConnected += Connected; + } + } + + protected virtual void Connected(object sender = null, EventArgs e = null) + { + NetworkManager.SharingManagerConnected -= Connected; + + SetDataModelSource(); + RegisterToDataModel(); + } + + /// + /// Sets the data model source for the spawn manager. + /// + protected abstract void SetDataModelSource(); + + /// + /// Register to data model updates; + /// + private void RegisterToDataModel() + { + SyncSource.ObjectAdded += OnObjectAdded; + SyncSource.ObjectRemoved += OnObjectRemoved; + } + + private void OnObjectAdded(T addedObject) + { + InstantiateFromNetwork(addedObject); + } + + private void OnObjectRemoved(T removedObject) + { + RemoveFromNetwork(removedObject); + } + + /// + /// Delete the data model for an object and all its related game objects. + /// + /// Object that needs to be deleted. + public abstract void Delete(T objectToDelete); + + /// + /// Instantiate game objects based on data model that was created on the network. + /// + /// Object that was added to the data model. + protected abstract void InstantiateFromNetwork(T addedObject); + + /// + /// Remove an object based on data model that was removed on the network. + /// + /// Object that was removed from the data model. + protected abstract void RemoveFromNetwork(T removedObject); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs.meta new file mode 100644 index 0000000..2e5535a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SpawnManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8319a6fa4dcacfb4ea57e80961afa55b +timeCreated: 1462486532 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs new file mode 100644 index 0000000..fa969d3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using UnityEngine; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing.Spawning +{ + /// + /// This array is meant to hold SyncSpawnedObject and objects of subclasses. + /// Compared to SyncArray, this supports dynamic types for objects. + /// + /// Type of object that the array contains + public class SyncSpawnArray : SyncArray where T : SyncSpawnedObject, new() + { + public SyncSpawnArray(string field) : base(field) { } + + public SyncSpawnArray() : base(string.Empty) { } + + protected override T CreateObject(ObjectElement objectElement) + { + string objectType = objectElement.GetObjectType(); + + Type typeToInstantiate = Type.GetType(objectType); + if (typeToInstantiate == null) + { + Debug.LogError("Could not find the SyncModel type to instantiate."); + return null; + } + + object createdObject = Activator.CreateInstance(typeToInstantiate); + + T spawnedDataModel = (T)createdObject; + spawnedDataModel.Element = objectElement; + spawnedDataModel.FieldName = objectElement.GetName(); + // TODO: this should not query SharingStage, but instead query the underlying session layer + spawnedDataModel.Owner = SharingStage.Instance.SessionUsersTracker.GetUserById(objectElement.GetOwnerID()); + + return spawnedDataModel; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs.meta new file mode 100644 index 0000000..f04c7eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnArray.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bf27ff59d97cfeb4a9f82496059df880 +timeCreated: 1462819584 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs new file mode 100644 index 0000000..f0610cb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing.Spawning +{ + /// + /// A SpawnedObject contains all the information needed for another device to spawn an object in the same location + /// as where it was originally created on this device. + /// + [SyncDataClass] + public class SyncSpawnedObject : SyncObject + { + /// + /// Transform (position, orientation and scale) for the object. + /// + [SyncData] public SyncTransform Transform; + + /// + /// Name of the object. + /// + [SyncData] public SyncString Name; + + /// + /// Path to the parent object in the game object. + /// + [SyncData] public SyncString ParentPath; + + /// + /// Path to the object + /// + [SyncData] public SyncString ObjectPath; + + + public GameObject GameObject { get; set; } + + public virtual void Initialize(string name, string parentPath) + { + Name.Value = name; + ParentPath.Value = parentPath; + + ObjectPath.Value = string.Empty; + if (!string.IsNullOrEmpty(ParentPath.Value)) + { + ObjectPath.Value = ParentPath.Value + "/"; + } + + ObjectPath.Value += Name.Value; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs.meta new file mode 100644 index 0000000..33d44f7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Spawning/SyncSpawnedObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 89991b23f71485c498eb3b0ac0ca6628 +timeCreated: 1454377560 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel.meta new file mode 100644 index 0000000..2627af0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6ed94313b5a29b64ababc59033c998e7 +folderAsset: yes +timeCreated: 1463011620 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs new file mode 100644 index 0000000..2500d20 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs @@ -0,0 +1,229 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// The SyncArray class provides the functionality of an array in the data model. + /// The array holds entire objects, not primitives, since each object is indexed by unique name. + /// Note that this array is unordered. + /// + /// Type of SyncObject in the array. + public class SyncArray : SyncObject, IEnumerable where T : SyncObject, new() + { + /// + /// Called when a new object has been added to the array. + /// + public event Action ObjectAdded; + + /// + /// Called when an existing object has been removed from the array + /// + public event Action ObjectRemoved; + + /// + /// // Maps the unique id to object + /// + private readonly Dictionary dataArray; + + /// + /// Type of objects in the array. + /// This is cached so that we don't have to call typeof(T) more than once. + /// + protected readonly Type arrayType; + + public SyncArray(string field) + : base(field) + { + dataArray = new Dictionary(); + arrayType = typeof(T); + } + + public SyncArray() : this(string.Empty) { } + + /// + /// Creates the object in the array, based on its underlying object element that came from the sync system. + /// + /// Object element on which the data model object is based. + /// The created data model object of the appropriate type. + protected virtual T CreateObject(ObjectElement objectElement) + { + Type objectType = SyncSettings.Instance.GetDataModelType(objectElement.GetObjectType()).AsType(); + if (!objectType.IsSubclassOf(arrayType) && objectType != arrayType) + { + throw new InvalidCastException(string.Format("Object of incorrect type added to SyncArray: Expected {0}, got {1} ", objectType, objectElement.GetObjectType().GetString())); + } + + object createdObject = Activator.CreateInstance(objectType); + + T spawnedDataModel = (T)createdObject; + spawnedDataModel.Element = objectElement; + spawnedDataModel.FieldName = objectElement.GetName(); + + // TODO: this should not query SharingStage, but instead query the underlying session layer + spawnedDataModel.Owner = SharingStage.Instance.SessionUsersTracker.GetUserById(objectElement.GetOwnerID()); + + return spawnedDataModel; + } + + /// + /// Adds a new entry into the array. + /// + /// New object to add. + /// Owner the object. Set to null if the object has no owner. + /// Object that was added, with its networking elements setup. + public T AddObject(T newSyncObject, User owner = null) + { + // Create our object element for our target + string id = System.Guid.NewGuid().ToString(); + string dataModelName = SyncSettings.Instance.GetDataModelName(newSyncObject.GetType()); + ObjectElement existingElement = Element.CreateObjectElement(new XString(id), dataModelName, owner); + + // Create a new object and assign the element + newSyncObject.Element = existingElement; + newSyncObject.FieldName = id; + newSyncObject.Owner = owner; + + // Register the child with the object + AddChild(newSyncObject); + + // Update internal map + dataArray[id] = newSyncObject; + + // Initialize it so it can be used immediately. + newSyncObject.InitializeLocal(Element); + + // Notify listeners that an object was added. + if (ObjectAdded != null) + { + ObjectAdded(newSyncObject); + } + + return newSyncObject; + } + + /// + /// Removes an entry from the array + /// + /// Object to remove. + /// True if removal succeeded, false if not. + public bool RemoveObject(T existingObject) + { + bool success = false; + if (existingObject != null) + { + string uniqueName = existingObject.Element.GetName(); + if (dataArray.Remove(uniqueName)) + { + RemoveChild(existingObject); + + if (ObjectRemoved != null) + { + ObjectRemoved(existingObject); + } + + success = true; + } + } + + return success; + } + + // Returns a full list of the objects + public T[] GetDataArray() + { + var childrenList = new List(dataArray.Count); + foreach (KeyValuePair pair in dataArray) + { + childrenList.Add(pair.Value); + } + + return childrenList.ToArray(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return dataArray.Values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return dataArray.Values.GetEnumerator(); + } + + public void Clear() + { + // TODO: We need a way of resetting in a consistent way across all object types and hierarchies. + T[] array = GetDataArray(); + for (int i = 0; i < array.Length; i++) + { + RemoveObject(array[i]); + } + } + + protected override void OnElementAdded(Element element) + { + if (element.GetElementType() == ElementType.ObjectType) + { + // Add the new object and listen for when the initialization has fully completed since it can take time. + T newObject = AddObject(ObjectElement.Cast(element)); + newObject.InitializationComplete += OnInitializationComplete; + } + else + { + Debug.LogError("Error: Adding unknown element to SyncArray"); + } + + base.OnElementAdded(element); + } + + protected override void OnElementDeleted(Element element) + { + base.OnElementDeleted(element); + + string uniqueName = element.GetName(); + if (dataArray.ContainsKey(uniqueName)) + { + T obj = dataArray[uniqueName]; + RemoveObject(obj); + } + } + + private void OnInitializationComplete(SyncObject obj) + { + // Notify listeners know that an object was added + if (ObjectAdded != null) + { + ObjectAdded(obj as T); + } + } + + /// + /// Adds a new entry into the array. + /// + /// Element from which the object should be created. + /// + private T AddObject(ObjectElement existingElement) + { + string id = existingElement.GetName(); + + // Create a new object and assign the element + T newObject = CreateObject(existingElement); + + // Register the child with the object + AddChild(newObject); + + // Update internal map + dataArray[id] = newObject; + + return newObject; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs.meta new file mode 100644 index 0000000..d2cc9de --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncArray.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c02ef9356d3e1814e8c651f9856f5233 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs new file mode 100644 index 0000000..7e7476b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the boolean primitive for the syncing system. + /// It does the heavy lifting to make adding new bools to a class easy. + /// + public class SyncBool : SyncPrimitive + { + private BoolElement element; + private bool value; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public bool Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(value); + } + } + } + } + + public SyncBool(string field) : base(field) { } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateBoolElement(XStringFieldName, value); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, bool localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = BoolElement.Cast(remoteElement); + value = element.GetValue(); + } + + public override void UpdateFromRemote(bool remoteValue) + { + value = remoteValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs.meta new file mode 100644 index 0000000..fc9e667 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncBool.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9cf9ba8dbd1c494d906717cc1fb8ccf +timeCreated: 1463176323 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs new file mode 100644 index 0000000..7f2199b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// Used to markup SyncPrimitives within a class. + /// + [AttributeUsage(AttributeTargets.Field)] + public class SyncDataAttribute : Attribute + { + public string CustomFieldName; + } + + /// + /// Used to markup SyncObject classes, so that they properly get instantiated + /// when using a hierarchical data model that inherits from SyncObject. + /// + [AttributeUsage(AttributeTargets.Class)] + public class SyncDataClassAttribute : Attribute + { + public string CustomClassName; + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs.meta new file mode 100644 index 0000000..5b51b33 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDataAttributes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a259cd4797848ea429ec4375fd8bbc5f +timeCreated: 1476318287 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs new file mode 100644 index 0000000..9a0c554 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the double primitive for the syncing system. + /// It does the heavy lifting to make adding new doubles to a class easy. + /// + public class SyncDouble : SyncPrimitive + { + private DoubleElement element; + private double value; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public double Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(value); + } + } + } + } + + public SyncDouble(string field) : base(field) { } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateDoubleElement(XStringFieldName, value); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, double localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = DoubleElement.Cast(remoteElement); + value = element.GetValue(); + } + + public override void UpdateFromRemote(double remoteValue) + { + value = remoteValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs.meta new file mode 100644 index 0000000..0134b90 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncDouble.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a0fefe5244ec4a643b7939a25ffcb60e +timeCreated: 1461739807 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs new file mode 100644 index 0000000..9a8f782 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the float primitive for the syncing system. + /// It does the heavy lifting to make adding new floats to a class easy. + /// + public class SyncFloat : SyncPrimitive + { + private FloatElement element; + private float value; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public float Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(value); + } + } + } + } + + public SyncFloat(string field) : base(field) { } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateFloatElement(XStringFieldName, value); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, float localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = FloatElement.Cast(remoteElement); + value = element.GetValue(); + } + + public override void UpdateFromRemote(float remoteValue) + { + // Change the value + value = remoteValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs.meta new file mode 100644 index 0000000..4eb5883 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncFloat.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2149d2c0c0e35f64b8c902c21f099b43 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs new file mode 100644 index 0000000..b4b91ce --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the integer primitive for the syncing system. + /// It does the heavy lifting to make adding new integers to a class easy. + /// + public class SyncInteger : SyncPrimitive + { + private IntElement element; + private int value; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public int Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(value); + } + } + } + } + + public SyncInteger(string field) + : base(field) + { + } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateIntElement(XStringFieldName, value); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, int localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = IntElement.Cast(remoteElement); + value = element.GetValue(); + } + + public override void UpdateFromRemote(int remoteValue) + { + value = remoteValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs.meta new file mode 100644 index 0000000..c87e891 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncInteger.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4cbe741e569c9694287c5ba32a03ff19 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs new file mode 100644 index 0000000..b5769cd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the long primitive for the syncing system. + /// It does the heavy lifting to make adding new longs to a class easy. + /// + public class SyncLong : SyncPrimitive + { + private LongElement element; + private long value; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public long Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(value); + } + } + } + } + + public SyncLong(string field) + : base(field) + { + } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateLongElement(XStringFieldName, value); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, long localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = LongElement.Cast(remoteElement); + value = element.GetValue(); + } + + public override void UpdateFromRemote(long remoteValue) + { + value = remoteValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs.meta new file mode 100644 index 0000000..4b6e6d9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncLong.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 84c127400efd9854997fcde30864a212 +timeCreated: 1463176323 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs new file mode 100644 index 0000000..b20e1d4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs @@ -0,0 +1,465 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +#if UNITY_WINRT && !UNITY_EDITOR +#define USE_WINRT +#endif + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using UnityEngine; +using UnityEngine.Assertions; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// The SyncObject class is a container object that can hold multiple SyncPrimitives. + /// + public class SyncObject : SyncPrimitive + { + private ObjectElementAdapter syncListener; // The sync object that we use to get sync events for this element + private Dictionary primitiveMap; // A dictionary of all of the primitives that are children of this object. Maps element GUID to data + private List primitives; // Raw list of child primitives + + public event Action ObjectChanged; // Invoked when one of the child primitives has changed + public event Action InitializationComplete; // Invoked when this object has been fully initialized + + private ObjectElement internalObjectElement; + /// + /// This is the sync element for this object. + /// + public ObjectElement Element + { + get { return internalObjectElement; } + internal set + { + if (internalObjectElement == null) + { + internalObjectElement = value; + NetworkElement = value; + + if (internalObjectElement != null) + { + CreateSyncListener(internalObjectElement); + } + } + } + } + +#if UNITY_EDITOR + /// + /// Raw Value used when displaying sync objects in the inspector. + /// + public override object RawValue + { + get { return null; } + } +#endif + + private User owner; + /// + /// Optional user that owns this object. + /// + public User Owner + { + get { return owner; } + set + { + if (owner == null) + { + owner = value; + } + } + } + + /// + /// The Object Type as string. + /// + public string ObjectType + { + get + { + return internalObjectElement != null ? internalObjectElement.GetObjectType().GetString() : null; + } + } + + /// + /// Returns the object element registered owner id. + /// + public int OwnerId + { + get { return internalObjectElement != null ? internalObjectElement.GetOwnerID() : int.MaxValue; } + } + + public SyncObject(string field) + : base(field) + { + InitializePrimitives(); + } + + public SyncObject() + : base(string.Empty) + { + InitializePrimitives(); + } + + /// + /// Returns a list of all child primitives. + /// + /// Array of SyncPrimitives. + public SyncPrimitive[] GetChildren() + { + return primitives.ToArray(); + } + + private void InitializePrimitives() + { + primitiveMap = new Dictionary(); + primitives = new List(); + + // Scan the type of object this is a look for the SyncDataAttribute + Type baseType = GetType(); + +#if USE_WINRT + var typeFields = baseType.GetRuntimeFields(); +#else + var typeFields = baseType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); +#endif + + foreach (FieldInfo typeField in typeFields) + { + SyncDataAttribute attribute = null; + +#if USE_WINRT + attribute = typeField.GetCustomAttribute(true); +#else + object[] customAttributes = typeField.GetCustomAttributes(typeof(SyncDataAttribute), true); + if (customAttributes.Length > 0) + { + attribute = customAttributes[0] as SyncDataAttribute; + } +#endif + + if (attribute != null) + { + Type fieldType = typeField.FieldType; + string memberName = typeField.Name; + + // Override the member name if provided + if (!string.IsNullOrEmpty(attribute.CustomFieldName)) + { + memberName = attribute.CustomFieldName; + } + + // Auto instantiate the primitive if it doesn't already exist + SyncPrimitive dataPrimitive = typeField.GetValue(this) as SyncPrimitive; + if (dataPrimitive == null) + { + try + { + // Constructors are not inherited, as per Section 1.6.7.1 of the C# Language Specification. + // This means that if a class subclasses Object or Primitive, they must either declare a constructor + // that takes the "memberName" property or use the default (parameter less constructor). + + // First check if there is a constructor that takes the member name and if so call it + bool hasConstructor = fieldType.GetConstructor(new[] { typeof(string) }) != null; + if (hasConstructor) + { + dataPrimitive = (SyncPrimitive)Activator.CreateInstance(fieldType, memberName); + } + else + { + // Fallback on using the default constructor and manually assign the member name + dataPrimitive = (SyncPrimitive)Activator.CreateInstance(fieldType, null); + dataPrimitive.FieldName = memberName; + } + + typeField.SetValue(this, dataPrimitive); + } + catch (Exception ex) + { + Debug.LogWarningFormat("Unable to create SyncPrimitive of type {0}. Exception: {1}", memberName, ex); + } + } + + if (dataPrimitive != null) + { + // Register the child + AddChild(dataPrimitive); + } + } + } + } + + /// + /// Register a new data model primitive as part of this object. Can be called multiple times on the same child. + /// + /// Sync Primitive Data + protected void AddChild(SyncPrimitive data) + { + if (data.HasNetworkElement) + { + long guid = data.Guid; + Assert.AreNotEqual(SharingClient.kInvalidXGuid, guid, "A primitive GUID should never be invalid if it is networked."); + primitiveMap.Add(guid, data); + } + + if (!primitives.Contains(data)) + { + primitives.Add(data); + } + } + + /// + /// Remove a child primitive that belongs to this object. + /// + /// Sync Primitive Data + protected void RemoveChild(SyncPrimitive data) + { + // Manually remove from maps + if (primitives.Remove(data) && data.HasNetworkElement) + { + primitiveMap.Remove(data.NetworkElement.GetGUID()); + + // Object has been removed internally, notify network + ObjectElement parentElement = ObjectElement.Cast(data.NetworkElement.GetParent()); + if (parentElement != null) + { + parentElement.RemoveElement(data.NetworkElement); + } + } + } + + /// + /// Handler for if a child is added. + /// + /// Added Element + protected virtual void OnElementAdded(Element element) + { + // Find the existing element. + bool primitiveDataChanged = false; + for (int i = 0; i < primitives.Count; i++) + { + if (primitives[i].XStringFieldName.IsEqual(element.GetName())) + { + // Found it, register the element so it knows where to pull data from + primitives[i].AddFromRemote(element); + + // Update the internal map + long guid = element.GetGUID(); + primitiveMap[guid] = primitives[i]; + primitiveDataChanged = true; + break; + } + } + + if (primitiveDataChanged) + { + // If there are no more primitives waiting to be added, finish the initialization + if (primitiveMap.Count == primitives.Count) + { + if (InitializationComplete != null) + { + InitializationComplete(this); + } + } + } + } + + /// + /// Handler for if a child is deleted. + /// + /// Deleted Element + protected virtual void OnElementDeleted(Element element) + { + // If the child exists, then remove it. + long guid = element.GetGUID(); + if (primitiveMap.ContainsKey(guid)) + { + RemoveChild(primitiveMap[guid]); + } + } + + /// + /// Handler for if a child bool changes. + /// + /// Element Id + /// New Value + protected virtual void OnBoolElementChanged(long elementID, bool newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.ToString(), typeof(bool)); + } + } + + /// + /// Handler for if a child int changes. + /// + /// Element Id + /// New Value + protected virtual void OnIntElementChanged(long elementID, int newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.ToString(), typeof(int)); + } + } + + /// + /// Handler for if a child long changes + /// + /// Element Id + /// New Value + protected virtual void OnLongElementChanged(long elementID, long newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.ToString(), typeof(long)); + } + } + + /// + /// Handler for if a child float changes + /// + /// Element Id + /// New Value + protected virtual void OnFloatElementChanged(long elementID, float newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.ToString(CultureInfo.InvariantCulture), typeof(float)); + } + } + + /// + /// Handler for if a child double changes + /// + /// Element Id + /// New Value + protected virtual void OnDoubleElementChanged(long elementID, double newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.ToString(CultureInfo.InvariantCulture), typeof(double)); + } + } + + /// + /// Handler for if a child string changes + /// + /// Element Id + /// New Value + protected virtual void OnStringElementChanged(long elementID, XString newValue) + { + if (primitiveMap.ContainsKey(elementID)) + { + SyncPrimitive primitive = primitiveMap[elementID]; + primitive.UpdateFromRemote(newValue); + NotifyPrimitiveChanged(primitive); + } + else + { + LogUnknownElement(elementID.ToString(), newValue.GetString(), typeof(string)); + } + } + + private void LogUnknownElement(string elementName, string elementValue, Type elementType) + { + Debug.LogWarningFormat("Error: Trying to update an unknown child element! Discarding update. Type: {0}, Value: {1}, Id: {2}", elementType, elementValue, elementName); + } + + protected virtual void NotifyPrimitiveChanged(SyncPrimitive primitive) + { + ObjectChanged.RaiseEvent(this); + } + + private void CreateSyncListener(ObjectElement element) + { + // Create a listener for this + syncListener = new ObjectElementAdapter(); + syncListener.ElementAddedEvent += OnElementAdded; + syncListener.ElementDeletedEvent += OnElementDeleted; + syncListener.BoolChangedEvent += OnBoolElementChanged; + syncListener.IntChangedEvent += OnIntElementChanged; + syncListener.LongChangedEvent += OnLongElementChanged; + syncListener.FloatChangedEvent += OnFloatElementChanged; + syncListener.DoubleChangedEvent += OnDoubleElementChanged; + syncListener.StringChangedEvent += OnStringElementChanged; + element.AddListener(syncListener); + } + + #region From SyncPrimitive + + /// + /// Initializes this object for local use. Doesn't wait for network initialization. + /// + /// Parent element of this SyncObject. + public override void InitializeLocal(ObjectElement parentElement) + { + // Auto create element if needed + if (Element == null) + { + Element = parentElement.CreateObjectElement(XStringFieldName, GetType().FullName, Owner); + NetworkElement = Element; + } + + // Initialize all primitives + for (int i = 0; i < primitives.Count; i++) + { + SyncPrimitive data = primitives[i]; + data.InitializeLocal(Element); + primitiveMap[data.Guid] = data; + } + + // Complete the initialization + if (InitializationComplete != null) + { + InitializationComplete(this); + } + } + + public override void AddFromRemote(Element remoteElement) + { + Element = ObjectElement.Cast(remoteElement); + NetworkElement = remoteElement; + } + + #endregion //From SyncPrimitive + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs.meta new file mode 100644 index 0000000..5adbca7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncObject.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 46c9b1f2e4d0d69499aeb84457f55e97 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs new file mode 100644 index 0000000..e6e7766 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// Base primitive used to define an element within the data model. + /// The primitive is defined by a field and a value. + /// + public abstract class SyncPrimitive + { + protected string fieldName; + private XString xStringFieldName; + protected Element internalElement; + + /// + /// Unique identifier for primitive. Returns kInvalidXGuid if uninitialized. + /// + public long Guid + { + get + { + return internalElement != null ? internalElement.GetGUID() : SharingClient.kInvalidXGuid; + } + } + + /// + /// Network Element that represents the sync primitive's value on the server. + /// + public virtual Element NetworkElement + { + get { return internalElement; } + protected set { internalElement = value; } + } + + /// + /// Indicates if the primitive has a network element. + /// The primitive can only be modified if this returns true. + /// + public bool HasNetworkElement + { + get { return internalElement != null; } + } + + /// + /// The field name of the primitive. + /// + public XString XStringFieldName + { + get { return xStringFieldName; } + } + + /// + /// The field name of the primitive. + /// + public string FieldName + { + get { return fieldName; } + + set + { + fieldName = value; + xStringFieldName = new XString(value); + } + } + +#if UNITY_EDITOR + /// + /// Returns the raw boxed object this primitive holds. + /// Used by SharingStageEditor.cs + /// + public abstract object RawValue + { + get; + } +#endif + + /// + /// Base Constructor for Sync Primitives. + /// + /// field + public SyncPrimitive(string field) + { + FieldName = field; + } + + /// + /// Initializes this object for local use. Doesn't wait for network initialization. + /// + /// Object Element Parent + public abstract void InitializeLocal(ObjectElement parentElement); + + /// + /// Called when being remotely initialized. + /// + /// Remote Element + public abstract void AddFromRemote(Element remoteElement); + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(XString remoteValue) { } + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(float remoteValue) { } + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(double remoteValue) { } + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(int remoteValue) { } + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(long remoteValue) { } + + /// + /// Called when the primitive value has changed from a remote action. + /// + /// Remote Value + public virtual void UpdateFromRemote(bool remoteValue) { } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs.meta new file mode 100644 index 0000000..814b39e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncPrimitive.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89140e4798c8c0d4f9c3544ecbdfc198 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs new file mode 100644 index 0000000..343d59c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs @@ -0,0 +1,42 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the Quaternion object primitive for the syncing system. + /// It does the heavy lifting to make adding new Quaternion to a class easy. + /// + public class SyncQuaternion : SyncObject + { + [SyncData] private SyncFloat x = null; + [SyncData] private SyncFloat y = null; + [SyncData] private SyncFloat z = null; + [SyncData] private SyncFloat w = null; + +#if UNITY_EDITOR + public override object RawValue + { + get { return Value; } + } +#endif + + public Quaternion Value + { + get { return new Quaternion(x.Value, y.Value, z.Value, w.Value); } + set + { + x.Value = value.x; + y.Value = value.y; + z.Value = value.z; + w.Value = value.w; + } + } + + public SyncQuaternion(string field) : base(field) { } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs.meta new file mode 100644 index 0000000..c4eab3e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncQuaternion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0b08288019c3f0540a624e2c82302702 +timeCreated: 1462475206 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs new file mode 100644 index 0000000..2f3596d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs @@ -0,0 +1,71 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the string primitive for the syncing system. + /// It does the heavy lifting to make adding new strings to a class easy. + /// + public class SyncString : SyncPrimitive + { + private StringElement element; + private string value = ""; + +#if UNITY_EDITOR + public override object RawValue + { + get { return value; } + } +#endif + + public string Value + { + get { return value; } + + set + { + // Has the value actually changed? + if (this.value != value) + { + // Change the value + this.value = value; + + if (element != null) + { + // Notify network that the value has changed + element.SetValue(new XString(value)); + } + } + } + } + + public SyncString(string field) : base(field) { } + + public override void InitializeLocal(ObjectElement parentElement) + { + element = parentElement.CreateStringElement(XStringFieldName, new XString(value)); + NetworkElement = element; + } + + public void AddFromLocal(ObjectElement parentElement, string localValue) + { + InitializeLocal(parentElement); + Value = localValue; + } + + public override void AddFromRemote(Element remoteElement) + { + NetworkElement = remoteElement; + element = StringElement.Cast(remoteElement); + value = element.GetValue().GetString(); + } + + public override void UpdateFromRemote(XString remoteValue) + { + value = remoteValue.GetString(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs.meta new file mode 100644 index 0000000..e6c352f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncString.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf232d359eba35a438f02959ffc16a6e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs new file mode 100644 index 0000000..0a9f639 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs @@ -0,0 +1,49 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the Transform object primitive for the syncing system. + /// It does the heavy lifting to make adding new transforms to a class easy. + /// A transform defines the position, rotation and scale of an object. + /// + public class SyncTransform : SyncObject + { + [SyncData] public SyncVector3 Position = new SyncVector3("Position"); + [SyncData] public SyncQuaternion Rotation = new SyncQuaternion("Rotation"); + [SyncData] public SyncVector3 Scale = new SyncVector3("Scale"); + + public event Action PositionChanged; + public event Action RotationChanged; + public event Action ScaleChanged; + + public SyncTransform(string field) + : base(field) + { + Position.ObjectChanged += OnPositionChanged; + Rotation.ObjectChanged += OnRotationChanged; + Scale.ObjectChanged += OnScaleChanged; + } + + private void OnPositionChanged(SyncObject obj) + { + PositionChanged.RaiseEvent(); + } + + private void OnRotationChanged(SyncObject obj) + { + RotationChanged.RaiseEvent(); + } + + private void OnScaleChanged(SyncObject obj) + { + ScaleChanged.RaiseEvent(); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs.meta new file mode 100644 index 0000000..1bf135e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncTransform.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3561a5b48dcc4db428b1678be90a07ca +timeCreated: 1462554808 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs new file mode 100644 index 0000000..d1f6ef3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs @@ -0,0 +1,40 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// This class implements the Vector3 object primitive for the syncing system. + /// It does the heavy lifting to make adding new Vector3 to a class easy. + /// + public class SyncVector3 : SyncObject + { + [SyncData] private SyncFloat x = null; + [SyncData] private SyncFloat y = null; + [SyncData] private SyncFloat z = null; + +#if UNITY_EDITOR + public override object RawValue + { + get { return Value; } + } +#endif + + public Vector3 Value + { + get { return new Vector3(x.Value, y.Value, z.Value); } + set + { + x.Value = value.x; + y.Value = value.y; + z.Value = value.z; + } + } + + public SyncVector3(string field) : base(field) { } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs.meta new file mode 100644 index 0000000..29c47cd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncModel/SyncVector3.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a1c5d337c0c7a9d4ea6712d7150cd94f +timeCreated: 1462475206 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs new file mode 100644 index 0000000..ef84fcd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs @@ -0,0 +1,47 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using HoloToolkit.Sharing.Spawning; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing +{ + /// + /// Root of the synchronization data model used by this application. + /// + public class SyncRoot : SyncObject + { + /// + /// Children of the root. + /// + [SyncData] + public SyncArray InstantiatedPrefabs; + + /// + /// Constructor. + /// + /// Root Element from Sharing Stage + public SyncRoot(ObjectElement rootElement) + { + Element = rootElement; + FieldName = Element.GetName().GetString(); + InitializeSyncSettings(); + InitializeDataModel(); + } + + private void InitializeSyncSettings() + { + SyncSettings.Instance.Initialize(); + } + + /// + /// Initializes any data models that need to have a local state. + /// + private void InitializeDataModel() + { + InstantiatedPrefabs.InitializeLocal(Element); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs.meta new file mode 100644 index 0000000..5dacf75 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncRoot.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5d3b6abb3904fc84784fc64e84b34ae0 +timeCreated: 1462393372 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs new file mode 100644 index 0000000..58ebe1f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs @@ -0,0 +1,115 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace HoloToolkit.Sharing.SyncModel +{ + /// + /// Collection of sharing sync settings, used by the HoloToolkit Sharing sync system + /// to figure out which data model classes need to be instantiated when receiving + /// data that inherits from SyncObject. + /// + public class SyncSettings + { +#if UNITY_METRO && !UNITY_EDITOR + private readonly Dictionary dataModelTypeToName = new Dictionary(); + private readonly Dictionary dataModelNameToType = new Dictionary(); +#else + private readonly Dictionary dataModelTypeToName = new Dictionary(); + private readonly Dictionary dataModelNameToType = new Dictionary(); +#endif + + private static SyncSettings instance; + public static SyncSettings Instance + { + get + { + if (instance == null) + { + instance = new SyncSettings(); + } + return instance; + } + } + + public string GetDataModelName(Type type) + { + var typeInfo = type.GetTypeInfo(); + string retVal; + dataModelTypeToName.TryGetValue(typeInfo, out retVal); + return retVal; + } + +#if UNITY_METRO && !UNITY_EDITOR + public TypeInfo GetDataModelType(string name) + { + TypeInfo retVal; +#else + public Type GetDataModelType(string name) + { + Type retVal; +#endif + + dataModelNameToType.TryGetValue(name, out retVal); + return retVal; + } + + public void Initialize() + { + dataModelNameToType.Clear(); + dataModelTypeToName.Clear(); + + foreach (var assembly in GetAssemblies()) + { + // We currently skip all assemblies except Unity-generated ones + // This could be modified to be customizable by the user + if (!assembly.FullName.StartsWith("Assembly-")) + { + continue; + } + +#if UNITY_WSA && !UNITY_EDITOR + foreach (TypeInfo type in assembly.GetTypes()) +#else + foreach (Type type in assembly.GetTypes()) +#endif + { + object customAttribute = type.GetCustomAttributes(typeof(SyncDataClassAttribute), false).FirstOrDefault(); + SyncDataClassAttribute attribute = customAttribute as SyncDataClassAttribute; + + if (attribute != null) + { + string dataModelName = type.Name; + + // Override the class name if provided + if (!string.IsNullOrEmpty(attribute.CustomClassName)) + { + dataModelName = attribute.CustomClassName; + } + + dataModelNameToType.Add(dataModelName, type); + dataModelTypeToName.Add(type, dataModelName); + } + } + } + } + + private static Assembly[] GetAssemblies() + { +#if UNITY_WSA && !UNITY_EDITOR + return new Assembly[] + { + typeof(SyncSettings).GetTypeInfo().Assembly + }; +#else + return AppDomain.CurrentDomain.GetAssemblies(); +#endif + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs.meta new file mode 100644 index 0000000..cc99301 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ca254e81287810c45966c3e1fbafce50 +timeCreated: 1476393424 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs new file mode 100644 index 0000000..0699c75 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs @@ -0,0 +1,37 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; + +namespace HoloToolkit.Sharing +{ + /// + /// C# wrapper for the Sharing SyncListener, making changes available through the Action class. + /// + public class SyncStateListener : SyncListener + { + /// + /// Event sent when + /// + public event Action SyncChangesBeginEvent; + public event Action SyncChangesEndEvent; + + public override void OnSyncChangesBegin() + { + if (SyncChangesBeginEvent != null) + { + SyncChangesBeginEvent(); + } + } + + public override void OnSyncChangesEnd() + { + if (SyncChangesEndEvent != null) + { + SyncChangesEndEvent(); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs.meta new file mode 100644 index 0000000..5af3a51 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/SyncStateListener.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 71335f9816182fe4e8b6c726e8b1ebc7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity.meta new file mode 100644 index 0000000..64a724d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7367214f370c40b4ab6839eed78a74cd +folderAsset: yes +timeCreated: 1462829582 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs new file mode 100644 index 0000000..534a229 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs @@ -0,0 +1,24 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing +{ + /// + /// Default implementation of a behaviour that allows other components of a game object access the shared data model + /// as a raw SyncObject instance. + /// + public class DefaultSyncModelAccessor : MonoBehaviour, ISyncModelAccessor + { + public SyncObject SyncModel { get; private set; } + + public void SetSyncModel(SyncObject syncObject) + { + SyncModel = syncObject; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs.meta new file mode 100644 index 0000000..8090111 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/DefaultSyncModelAccessor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef662ab2ff31aba40a19a5b6d7e2bad1 +timeCreated: 1462829601 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs new file mode 100644 index 0000000..e9f7cf9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs @@ -0,0 +1,21 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing +{ + /// + /// Interface that allows a components of a game object access the shared data model set by a SpawnManager. + /// + public interface ISyncModelAccessor + { + /// + /// Sets the synchronized data model to use for this object. + /// + /// Sync object to set as the model. + void SetSyncModel(SyncObject syncObject); + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs.meta new file mode 100644 index 0000000..b089a66 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/ISyncModelAccessor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 679d5c341eb44c34eab39d440498c0bb +timeCreated: 1463507843 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs new file mode 100644 index 0000000..b8d360a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs @@ -0,0 +1,142 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; +using HoloToolkit.Unity; +using HoloToolkit.Sharing.SyncModel; + +namespace HoloToolkit.Sharing +{ + /// + /// Synchronizer to update and broadcast a transform object through our data model. + /// + public class TransformSynchronizer : MonoBehaviour + { + protected Vector3Interpolated Position; + protected QuaternionInterpolated Rotation; + protected Vector3Interpolated Scale; + + private SyncTransform transformDataModel; + + /// + /// Data model to which this transform synchronization is tied to. + /// + public SyncTransform TransformDataModel + { + private get { return transformDataModel; } + set + { + if (transformDataModel != value) + { + if (transformDataModel != null) + { + transformDataModel.PositionChanged -= OnPositionChanged; + transformDataModel.RotationChanged -= OnRotationChanged; + transformDataModel.ScaleChanged -= OnScaleChanged; + } + + transformDataModel = value; + + if (transformDataModel != null) + { + // Set the position, rotation and scale to what they should be + transform.localPosition = transformDataModel.Position.Value; + transform.localRotation = transformDataModel.Rotation.Value; + transform.localScale = transformDataModel.Scale.Value; + + // Initialize + Initialize(); + + // Register to changes + transformDataModel.PositionChanged += OnPositionChanged; + transformDataModel.RotationChanged += OnRotationChanged; + transformDataModel.ScaleChanged += OnScaleChanged; + } + } + } + } + + private void Start() + { + Initialize(); + } + + private void Initialize() + { + if (Position == null) + { + Position = new Vector3Interpolated(transform.localPosition); + } + if (Rotation == null) + { + Rotation = new QuaternionInterpolated(transform.localRotation); + } + if (Scale == null) + { + Scale = new Vector3Interpolated(transform.localScale); + } + } + + private void Update() + { + // Apply transform changes, if any + if (Position.HasUpdate()) + { + transform.localPosition = Position.GetUpdate(Time.deltaTime); + } + if (Rotation.HasUpdate()) + { + transform.localRotation = Rotation.GetUpdate(Time.deltaTime); + } + if (Scale.HasUpdate()) + { + transform.localScale = Scale.GetUpdate(Time.deltaTime); + } + } + + private void LateUpdate() + { + // Determine if the transform has changed locally, in which case we need to update the data model + if (transform.localPosition != Position.Value || + Quaternion.Angle(transform.localRotation, Rotation.Value) > 0.2f || + transform.localScale != Scale.Value) + { + transformDataModel.Position.Value = transform.localPosition; + transformDataModel.Rotation.Value = transform.localRotation; + transformDataModel.Scale.Value = transform.localScale; + + // The object was moved locally, so reset the target positions to the current position + Position.Reset(transform.localPosition); + Rotation.Reset(transform.localRotation); + Scale.Reset(transform.localScale); + } + } + + private void OnDestroy() + { + if (transformDataModel != null) + { + transformDataModel.PositionChanged -= OnPositionChanged; + transformDataModel.RotationChanged -= OnRotationChanged; + transformDataModel.ScaleChanged -= OnScaleChanged; + } + } + + private void OnPositionChanged() + { + Position.SetTarget(transformDataModel.Position.Value); + } + + private void OnRotationChanged() + { + Rotation.SetTarget(transformDataModel.Rotation.Value); + } + + private void OnScaleChanged() + { + Scale.SetTarget(transformDataModel.Scale.Value); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs.meta new file mode 100644 index 0000000..ad1044e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Unity/TransformSynchronizer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e623389d0f1a40d418cefd9fa059dd07 +timeCreated: 1462558847 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities.meta new file mode 100644 index 0000000..7b9babc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0e5fab096886797478a02d8021f8ee03 +folderAsset: yes +timeCreated: 1456611862 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs new file mode 100644 index 0000000..44a77e7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Sharing.Utilities +{ + /// + /// Utility class for automatically joining shared sessions without needing to go through a lobby. + /// + public class AutoJoinSession : MonoBehaviour + { + /// + /// Name of the session to join. + /// + public string SessionName = "Default"; + + /// + /// Cached pointer to the sessions tracker. + /// + private ServerSessionsTracker sessionsTracker; + + private bool sessionCreationRequested; + private string previousSessionName; + + private void Start() + { + // Get the ServerSessionsTracker to use later. + // Note that if this processes takes the role of a secondary client, + // then the sessionsTracker will always be null + if (SharingStage.Instance != null && SharingStage.Instance.Manager != null) + { + sessionsTracker = SharingStage.Instance.SessionsTracker; + } + } + + private void Update() + { + if (previousSessionName != SessionName) + { + sessionCreationRequested = false; + previousSessionName = SessionName; + } + + // If we are a Primary Client and can join sessions... + if (sessionsTracker != null && sessionsTracker.Sessions.Count > 0) + { + // Check to see if we aren't already in the desired session + Session currentSession = sessionsTracker.GetCurrentSession(); + + if (currentSession == null || // We aren't in any session + currentSession.GetName().GetString() != SessionName || // We're in the wrong session + currentSession.GetMachineSessionState() == MachineSessionState.DISCONNECTED) // We aren't joined or joining the right session + { + if (SharingStage.Instance.ShowDetailedLogs) + { + Debug.LogFormat("AutoJoinSession: Session connected is {0} with {1} Sessions.", sessionsTracker.IsServerConnected.ToString(), sessionsTracker.Sessions.Count.ToString()); + Debug.Log("AutoJoinSession: Looking for " + SessionName); + } + bool sessionFound = false; + + for (int i = 0; i < sessionsTracker.Sessions.Count; ++i) + { + Session session = sessionsTracker.Sessions[i]; + + if (session.GetName().GetString() == SessionName) + { + sessionsTracker.JoinSession(session); + sessionFound = true; + break; + } + } + + if (sessionsTracker.IsServerConnected && !sessionFound && !sessionCreationRequested) + { + if (SharingStage.Instance.ShowDetailedLogs) + { + Debug.Log("Didn't find session, making a new one"); + } + + if (sessionsTracker.CreateSession(new XString(SessionName))) + { + sessionCreationRequested = true; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs.meta new file mode 100644 index 0000000..d3ef7c5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/AutoJoinSession.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8fa5da1314a4aa745a5be3f0f6ab6bd6 +timeCreated: 1456611863 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs new file mode 100644 index 0000000..6a7a13b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Sharing.Utilities +{ + /// + /// Utility class that writes the sharing service log messages to the Unity Engine's console. + /// + public class ConsoleLogWriter : LogWriter + { + public bool ShowDetailedLogs = false; + + public override void WriteLogEntry(LogSeverity severity, string message) + { + switch (severity) + { + case LogSeverity.Warning: + Debug.LogWarning(message); + break; + case LogSeverity.Error: + Debug.LogError(message); + break; + case LogSeverity.Info: + default: + if (ShowDetailedLogs) + { + Debug.Log(message); + } + break; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs.meta new file mode 100644 index 0000000..fa233ad --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/ConsoleLogWriter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7e11a1dc59a9d784e88af9e92ea5bdf7 +timeCreated: 1456611863 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs new file mode 100644 index 0000000..6eb2850 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Sharing.Utilities +{ + /// + /// This class enables users to pair with a remote client directly. + /// One side should use the Receiver role, the other side should use the Connector role. + /// RemoteAddress and RemotePort are used by the Connector role, LocalPort is used by the Receiver. + /// + public class DirectPairing : MonoBehaviour + { + public enum Role + { + Connector, + Receiver + } + + public Role PairingRole = Role.Connector; + public string RemoteAddress = "localhost"; + public ushort RemotePort = 0x507B; + public ushort LocalPort = 0x507B; + public bool AutoReconnect = true; + + private SharingManager sharingMgr; + private PairMaker pairMaker; + private PairingAdapter pairingAdapter; + private NetworkConnectionAdapter connectionAdapter; + + private void Start() + { + if (PairingRole == Role.Connector) + { + pairMaker = new DirectPairConnector(RemoteAddress, RemotePort); + } + else + { + pairMaker = new DirectPairReceiver(LocalPort); + } + + pairingAdapter = new PairingAdapter(); + pairingAdapter.SuccessEvent += OnPairingConnectionSucceeded; + pairingAdapter.FailureEvent += OnPairingConnectionFailed; + + // Register to listen for disconnections, so we can reconnect automatically + if (SharingStage.Instance != null) + { + sharingMgr = SharingStage.Instance.Manager; + + if (sharingMgr != null) + { + connectionAdapter = new NetworkConnectionAdapter(); + connectionAdapter.DisconnectedCallback += OnDisconnected; + + NetworkConnection pairedConnection = sharingMgr.GetPairedConnection(); + pairedConnection.AddListener((byte)MessageID.StatusOnly, connectionAdapter); + } + } + + StartPairing(); + } + + private void OnDestroy() + { + // SharingStage's OnDestroy() might execute first in the script order. Therefore we should check if + // SharingStage.Instance still exists. Without the instance check, the execution of GetPairingManager + // on a disposed sharing manager will crash the Unity Editor and application. + if (SharingStage.Instance != null && sharingMgr != null) + { + PairingManager pairingMgr = sharingMgr.GetPairingManager(); + pairingMgr.CancelPairing(); // Safe to call, even if no pairing is in progress. Will not cause a disconnect + + // Remove our listener from the paired connection + NetworkConnection pairedConnection = sharingMgr.GetPairedConnection(); + pairedConnection.RemoveListener((byte)MessageID.StatusOnly, connectionAdapter); + } + } + + private void OnPairingConnectionSucceeded() + { + if (SharingStage.Instance.ShowDetailedLogs) + { + Debug.Log("Direct Pairing Succeeded"); + } + } + + private void OnPairingConnectionFailed(PairingResult result) + { + Debug.LogWarning("Direct pairing failed: " + result); + + if (AutoReconnect) + { + Debug.LogWarning("Attempting to reconnect..."); + StartPairing(); + } + } + + private void OnDisconnected(NetworkConnection connection) + { + Debug.LogWarning("Remote client disconnected"); + + if (AutoReconnect) + { + StartPairing(); + } + } + + private void StartPairing() + { + if (sharingMgr != null) + { + PairingManager pairingMgr = sharingMgr.GetPairingManager(); + + PairingResult result = pairingMgr.BeginPairing(pairMaker, pairingAdapter); + if (result != PairingResult.Ok) + { + Debug.LogError("Failed to start pairing"); + } + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs.meta new file mode 100644 index 0000000..965d3e0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/Utilities/DirectPairing.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f7e1f5c1abbd334191ed4302b8d2bd1 +timeCreated: 1459038308 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat.meta new file mode 100644 index 0000000..f4414df --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b605ec12fba0e1e4ca30af2b14874479 +folderAsset: yes +timeCreated: 1468279868 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs new file mode 100644 index 0000000..e610122 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs @@ -0,0 +1,399 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Threading; +using UnityEngine; +using HoloToolkit.Unity; + +namespace HoloToolkit.Sharing.VoiceChat +{ + /// + /// Receives and plays voice data transmitted through the session server. This data comes from other clients running the MicrophoneTransmitter behaviour. + /// + [RequireComponent(typeof(AudioSource))] + public class MicrophoneReceiver : MonoBehaviour + { + private readonly BitManipulator versionExtractor = new BitManipulator(0x7, 0); // 3 bits, 0 shift + private readonly BitManipulator audioStreamCountExtractor = new BitManipulator(0x38, 3); // 3 bits, 3 shift + private readonly BitManipulator channelCountExtractor = new BitManipulator(0x1c0, 6); // 3 bits, 6 shift + private readonly BitManipulator sampleRateExtractor = new BitManipulator(0x600, 9); // 2 bits, 9 shift + private readonly BitManipulator sampleTypeExtractor = new BitManipulator(0x1800, 11); // 2 bits, 11 shift + private readonly BitManipulator sampleCountExtractor = new BitManipulator(0x7fe000, 13); // 10 bits, 13 shift + private readonly BitManipulator codecTypeExtractor = new BitManipulator(0x1800000, 23); // 2 bits, 23 shift + private readonly BitManipulator sequenceNumberExtractor = new BitManipulator(0x7C000000, 26); // 6 bits, 26 shift + + public Transform GlobalAnchorTransform; + + public class ProminentSpeakerInfo + { + public UInt32 SourceId; + public float AverageAmplitude; + public Vector3 HrtfPosition; + } + + /// + /// Maximum number of prominent speakers we should ever encounter + /// + public const int MaximumProminentSpeakers = 4; + + /// + /// The information for current prominent speakers + /// + private int prominentSpeakerCount; + + /// + /// The information for current prominent speakers. NOTE: preallocated to avoid any runtime allocations. + /// + private ProminentSpeakerInfo[] prominentSpeakerList; + + private NetworkConnectionAdapter listener; + + private readonly Mutex audioDataMutex = new Mutex(); + + private const float KDropOffMaximum = 5f; + private const float KPanMaximum = 5f; + + public float DropOffMaximumMetres = 5.0f; + public float PanMaximumMetres = 5.0f; + + public float MinimumDistance = .01f; + + private byte[] networkPacketBufferBytes; + private CircularBuffer circularBuffer; + + #region DebugVariables + private readonly CircularBuffer testCircularBuffer = new CircularBuffer(48000 * 2 * 4 * 3, true); + private AudioSource testSource; + public AudioClip TestClip; + public bool SaveTestClip; + #endregion + + private void Awake() + { + prominentSpeakerList = new ProminentSpeakerInfo[MaximumProminentSpeakers]; + for (int prominentSpeaker = 0; prominentSpeaker < MaximumProminentSpeakers; prominentSpeaker++) + { + prominentSpeakerList[prominentSpeaker] = new ProminentSpeakerInfo(); + } + + networkPacketBufferBytes = new byte[4 * MicrophoneTransmitter.AudioPacketSize]; + circularBuffer = new CircularBuffer(48000 * 4); + } + + private void TryConnect() + { + try + { + if (listener == null) + { + SharingStage sharingStage = SharingStage.Instance; + if (sharingStage && sharingStage.Manager != null) + { + NetworkConnection connection = SharingStage.Instance.Manager.GetServerConnection(); + + listener = new NetworkConnectionAdapter(); + listener.ConnectedCallback += OnConnected; + listener.DisconnectedCallback += OnDisconnected; + listener.ConnectionFailedCallback += OnConnectedFailed; + listener.MessageReceivedCallback += OnMessageReceived; + + connection.AddListener((byte)MessageID.AudioSamples, listener); + + Debug.Log("SpeakerController Start called"); + } + } + } + catch (Exception ex) + { + Debug.Log("Exception: " + ex); + } + } + + private void OnDestroy() + { + if (listener != null) + { + listener.ConnectedCallback -= OnConnected; + listener.DisconnectedCallback -= OnDisconnected; + listener.ConnectionFailedCallback -= OnConnectedFailed; + listener.MessageReceivedCallback -= OnMessageReceived; + } + } + + private void OnConnected(NetworkConnection connection) + { + Profile.BeginRange("SpeakerController.OnConnected"); + InternalStartSpeaker(); + Debug.Log("SpeakerController: Connection to session server succeeded!"); + Profile.EndRange(); + } + + private void OnDisconnected(NetworkConnection connection) + { + InternalStopSpeaker(); + + prominentSpeakerCount = 0; + + Debug.Log("SpeakerController: Session server disconnected!"); + } + + private void OnConnectedFailed(NetworkConnection connection) + { + InternalStopSpeaker(); + Debug.Log("SpeakerController: Connection to session server failed!"); + } + + /// + /// Starts playing the audio stream out to the speaker. + /// + private void InternalStartSpeaker() + { + GetComponent().Play(); + } + + /// + /// Stops playing the audio stream out to the speaker. + /// + private void InternalStopSpeaker() + { + GetComponent().Stop(); + } + + private void Update() + { + TryConnect(); + + AudioSource audioSource = GetComponent(); + GameObject remoteHead = GameObject.Find("mixamorig:Head"); + if (remoteHead) + { + transform.parent = remoteHead.transform; + transform.localPosition = new Vector3(); + transform.localRotation = Quaternion.identity; + + audioSource.spatialize = true; + audioSource.spatialBlend = 1; + } + else + { + audioSource.spatialize = false; + audioSource.spatialBlend = 0; + } + + #region debuginfo + if (SaveTestClip && testCircularBuffer.UsedCapacity == testCircularBuffer.TotalCapacity) + { + float[] testBuffer = new float[testCircularBuffer.UsedCapacity / 4]; + testCircularBuffer.Read(testBuffer, 0, testBuffer.Length * 4); + testCircularBuffer.Reset(); + TestClip = AudioClip.Create("testclip", testBuffer.Length / 2, 2, 48000, false); + TestClip.SetData(testBuffer, 0); + if (!testSource) + { + GameObject testObj = new GameObject("testclip"); + testObj.transform.parent = transform; + testSource = testObj.AddComponent(); + } + testSource.PlayClip(TestClip, true); + SaveTestClip = false; + } + #endregion + } + + /// + /// Now that we've gotten a message, examine it and dissect the audio data. + /// + /// + /// + public void OnMessageReceived(NetworkConnection connection, NetworkInMessage message) + { + // Unused byte headerSize + message.ReadByte(); + + Int32 pack = message.ReadInt32(); + + // Unused int version + versionExtractor.GetBitsValue(pack); + int audioStreamCount = audioStreamCountExtractor.GetBitsValue(pack); + int channelCount = channelCountExtractor.GetBitsValue(pack); + int sampleRate = sampleRateExtractor.GetBitsValue(pack); + int sampleType = sampleTypeExtractor.GetBitsValue(pack); + int bytesPerSample = sizeof(float); + if (sampleType == 1) + { + bytesPerSample = sizeof(Int16); + } + + int sampleCount = sampleCountExtractor.GetBitsValue(pack); + int codecType = codecTypeExtractor.GetBitsValue(pack); + + // Unused int sequenceNumber + sequenceNumberExtractor.GetBitsValue(pack); + + if (sampleRate == 0) + { + // Unused int extendedSampleRate + message.ReadInt32(); + } + + try + { + audioDataMutex.WaitOne(); + + prominentSpeakerCount = 0; + + for (int i = 0; i < audioStreamCount; i++) + { + float averageAmplitude = message.ReadFloat(); + UInt32 hrtfSourceID = (UInt32)message.ReadInt32(); + Vector3 hrtfPosition = new Vector3(); + //Vector3 hrtfDirection = new Vector3(); + if (hrtfSourceID != 0) + { + hrtfPosition.x = message.ReadFloat(); + hrtfPosition.y = message.ReadFloat(); + hrtfPosition.z = message.ReadFloat(); + + //hrtfDirection.x = message.ReadFloat(); + //hrtfDirection.y = message.ReadFloat(); + //hrtfDirection.z = message.ReadFloat(); + + Vector3 cameraPosRelativeToGlobalAnchor = Vector3.zero; + Vector3 cameraDirectionRelativeToGlobalAnchor = Vector3.zero; + + if (GlobalAnchorTransform != null) + { + cameraPosRelativeToGlobalAnchor = MathUtils.TransformPointFromTo( + null, + GlobalAnchorTransform, + Camera.main.transform.position); + cameraDirectionRelativeToGlobalAnchor = MathUtils.TransformDirectionFromTo( + null, + GlobalAnchorTransform, + Camera.main.transform.position); + + } + + cameraPosRelativeToGlobalAnchor.Normalize(); + cameraDirectionRelativeToGlobalAnchor.Normalize(); + + Vector3 soundVector = hrtfPosition - cameraPosRelativeToGlobalAnchor; + soundVector.Normalize(); + + // x is forward + float fltx = (KDropOffMaximum / DropOffMaximumMetres) * Vector3.Dot(soundVector, cameraDirectionRelativeToGlobalAnchor); + // y is right + Vector3 myRight = Quaternion.Euler(0, 90, 0) * cameraDirectionRelativeToGlobalAnchor; + float flty = -(KPanMaximum / PanMaximumMetres) * Vector3.Dot(soundVector, myRight); + // z is up + Vector3 myUp = Quaternion.Euler(90, 0, 0) * cameraDirectionRelativeToGlobalAnchor; + float fltz = (KPanMaximum / PanMaximumMetres) * Vector3.Dot(soundVector, myUp); + + // Hacky distance check so we don't get too close to source. + Vector3 flt = new Vector3(fltx, flty, fltz); + if (flt.magnitude < (MinimumDistance * KDropOffMaximum)) + { + flt = flt.normalized * MinimumDistance * KDropOffMaximum; + fltx = flt.x; + flty = flt.y; + fltz = flt.z; + } + + AddProminentSpeaker(hrtfSourceID, averageAmplitude, fltx, flty, fltz); + } + + for (int j = 0; j < channelCount; j++) + { + // if uncompressed, size = sampleCount + Int16 size = (Int16)sampleCount; + if (codecType != 0) + { + // if compressed, size is first 2 bytes, sampleCount should be number of bytes after decompression + size = message.ReadInt16(); + } + + // make this array big enough to hold all of the uncompressed data only if the + // buffer is not the right size, minimize new operations + int totalBytes = size * bytesPerSample; + if (networkPacketBufferBytes.Length != totalBytes) + { + networkPacketBufferBytes = new byte[totalBytes]; + } + message.ReadArray(networkPacketBufferBytes, (uint)(totalBytes)); + + if (codecType != 0) + { + // in place decompression please - should fill out the data buffer + // ... + } + + if (hrtfSourceID > 0) + { + // hrtf processing here + } + + circularBuffer.Write(networkPacketBufferBytes, 0, networkPacketBufferBytes.Length); + } + } + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + finally + { + audioDataMutex.ReleaseMutex(); + } + } + + private void OnAudioFilterRead(float[] data, int numChannels) + { + try + { + audioDataMutex.WaitOne(); + int byteCount = data.Length * 4; + circularBuffer.Read(data, 0, byteCount); + if (SaveTestClip) + { + testCircularBuffer.Write(data, 0, byteCount); + } + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + finally + { + audioDataMutex.ReleaseMutex(); + } + } + + private void AddProminentSpeaker(UInt32 sourceID, float averageAmplitude, float posX, float posY, float posZ) + { + if (prominentSpeakerCount < MaximumProminentSpeakers) + { + ProminentSpeakerInfo prominentSpeakerInfo = prominentSpeakerList[prominentSpeakerCount++]; + prominentSpeakerInfo.SourceId = sourceID; + prominentSpeakerInfo.AverageAmplitude = averageAmplitude; + prominentSpeakerInfo.HrtfPosition.x = posX; + prominentSpeakerInfo.HrtfPosition.y = posY; + prominentSpeakerInfo.HrtfPosition.z = posZ; + } + } + + public int GetNumProminentSpeakers() + { + return prominentSpeakerCount; + } + + public ProminentSpeakerInfo GetProminentSpeaker(int index) + { + if (index < prominentSpeakerCount) + { + return prominentSpeakerList[index]; + } + return null; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs.meta new file mode 100644 index 0000000..634328b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneReceiver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8fef36dec57996841a6a9009471a6d8f +timeCreated: 1468279868 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs new file mode 100644 index 0000000..5686fac --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs @@ -0,0 +1,323 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Globalization; +using System.Threading; +using UnityEngine; +using HoloToolkit.Unity; +using HoloToolkit.Unity.InputModule; + +namespace HoloToolkit.Sharing.VoiceChat +{ + /// + /// Transmits data from your microphone to other clients connected to a SessionServer. Requires any receiving client to be running the MicrophoneReceiver script. + /// + [RequireComponent(typeof(AudioSource))] + public class MicrophoneTransmitter : MonoBehaviour + { + /// + /// Which type of microphone/quality to access + /// + public MicStream.StreamCategory Streamtype = MicStream.StreamCategory.HIGH_QUALITY_VOICE; + + /// + /// You can boost volume here as desired. 1 is default but probably too quiet. You can change during operation. + /// + public float InputGain = 2; + + /// + /// Whether or not to send the microphone data across the network + /// + public bool ShouldTransmitAudio = true; + + /// + /// Whether other users should be able to hear the transmitted audio + /// + public bool Mute; + + public Transform GlobalAnchorTransform; + + public bool ShowInterPacketTime; + + private DateTime timeOfLastPacketSend; + private float worstTimeBetweenPackets; + + private int sequenceNumber; + + private int sampleRateType = 3; // 48000Hz + + private AudioSource audioSource; + + private bool hasServerConnection; + private bool micStarted; + + public const int AudioPacketSize = 960; + private CircularBuffer micBuffer = new CircularBuffer(AudioPacketSize * 10 * 2 * 4, true); + private byte[] packetSamples = new byte[AudioPacketSize * 4]; + + // bit packers + private readonly BitManipulator versionPacker = new BitManipulator(0x7, 0); // 3 bits, 0 shift + private readonly BitManipulator audioStreamCountPacker = new BitManipulator(0x38, 3); // 3 bits, 3 shift + private readonly BitManipulator channelCountPacker = new BitManipulator(0x1c0, 6); // 3 bits, 6 shift + private readonly BitManipulator sampleRatePacker = new BitManipulator(0x600, 9); // 2 bits, 9 shift + private readonly BitManipulator sampleTypePacker = new BitManipulator(0x1800, 11); // 2 bits, 11 shift + private readonly BitManipulator sampleCountPacker = new BitManipulator(0x7fe000, 13); // 10 bits, 13 shift + private readonly BitManipulator codecTypePacker = new BitManipulator(0x1800000, 23); // 2 bits, 23 shift + private readonly BitManipulator mutePacker = new BitManipulator(0x2000000, 25); // 1 bits, 25 shift + private readonly BitManipulator sequenceNumberPacker = new BitManipulator(0x7C000000, 26); // 6 bits, 26 shift + + private readonly Mutex audioDataMutex = new Mutex(); + + #region DebugVariables + public bool HearSelf; + + private readonly CircularBuffer testCircularBuffer = new CircularBuffer(48000 * 2 * 4 * 3, true); + private AudioSource testSource; + public AudioClip TestClip; + public bool SaveTestClip; + #endregion + + private NetworkConnection GetActiveConnection() + { + NetworkConnection connection = null; + var stage = SharingStage.Instance; + if (stage && stage.Manager != null) + { + connection = stage.Manager.GetServerConnection(); + } + if (connection == null || !connection.IsConnected()) + { + return null; + } + return connection; + } + + private void Awake() + { + audioSource = GetComponent(); + + int errorCode = MicStream.MicInitializeCustomRate((int)Streamtype, AudioSettings.outputSampleRate); + CheckForErrorOnCall(errorCode); + if (errorCode == 0 || errorCode == (int)MicStream.ErrorCodes.ALREADY_RUNNING) + { + if (CheckForErrorOnCall(MicStream.MicSetGain(InputGain))) + { + audioSource.volume = HearSelf ? 1.0f : 0.0f; + micStarted = CheckForErrorOnCall(MicStream.MicStartStream(false, false)); + } + } + } + + private void OnAudioFilterRead(float[] buffer, int numChannels) + { + try + { + audioDataMutex.WaitOne(); + + if (micStarted && hasServerConnection) + { + if (CheckForErrorOnCall(MicStream.MicGetFrame(buffer, buffer.Length, numChannels))) + { + int dataSize = buffer.Length * 4; + if (micBuffer.Write(buffer, 0, dataSize) != dataSize) + { + Debug.LogError("Send buffer filled up. Some audio will be lost."); + } + } + } + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + finally + { + audioDataMutex.ReleaseMutex(); + } + } + + private void Update() + { + CheckForErrorOnCall(MicStream.MicSetGain(InputGain)); + audioSource.volume = HearSelf ? 1.0f : 0.0f; + + try + { + audioDataMutex.WaitOne(); + + var connection = GetActiveConnection(); + hasServerConnection = (connection != null); + if (hasServerConnection) + { + while (micBuffer.UsedCapacity >= 4 * AudioPacketSize) + { + TransmitAudio(connection); + } + } + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + finally + { + audioDataMutex.ReleaseMutex(); + } + + #region debuginfo + if (SaveTestClip && testCircularBuffer.UsedCapacity == testCircularBuffer.TotalCapacity) + { + float[] testBuffer = new float[testCircularBuffer.UsedCapacity / 4]; + testCircularBuffer.Read(testBuffer, 0, testBuffer.Length * 4); + testCircularBuffer.Reset(); + TestClip = AudioClip.Create("testclip", testBuffer.Length / 2, 2, 48000, false); + TestClip.SetData(testBuffer, 0); + if (!testSource) + { + GameObject testObj = new GameObject("testclip"); + testObj.transform.parent = transform; + testSource = testObj.AddComponent(); + } + testSource.PlayClip(TestClip); + SaveTestClip = false; + } + #endregion + } + + private void TransmitAudio(NetworkConnection connection) + { + micBuffer.Read(packetSamples, 0, 4 * AudioPacketSize); + SendFixedSizedChunk(connection, packetSamples, packetSamples.Length); + + if (SaveTestClip) + { + testCircularBuffer.Write(packetSamples, 0, packetSamples.Length); + } + } + + private void SendFixedSizedChunk(NetworkConnection connection, byte[] data, int dataSize) + { + DateTime currentTime = DateTime.Now; + float seconds = (float)(currentTime - timeOfLastPacketSend).TotalSeconds; + timeOfLastPacketSend = currentTime; + if (seconds < 10.0) + { + if (worstTimeBetweenPackets < seconds) + { + worstTimeBetweenPackets = seconds; + } + + if (ShowInterPacketTime) + { + Debug.LogFormat("Microphone: Millisecs since last sent: {0}, Worst: {1}", + (seconds * 1000.0).ToString(CultureInfo.InvariantCulture), + (worstTimeBetweenPackets * 1000.0).ToString(CultureInfo.InvariantCulture)); + } + } + + int clientId = SharingStage.Instance.Manager.GetLocalUser().GetID(); + + // pack the header + NetworkOutMessage msg = connection.CreateMessage((byte)MessageID.AudioSamples); + + int dataCountFloats = dataSize / 4; + + msg.Write((byte)5); // 8 byte header size + + Int32 pack = 0; + versionPacker.SetBits(ref pack, 1); // version + audioStreamCountPacker.SetBits(ref pack, 1); // AudioStreamCount + channelCountPacker.SetBits(ref pack, 1); // ChannelCount + sampleRatePacker.SetBits(ref pack, sampleRateType); // SampleRate: 1 = 16000, 3 = 48000 + sampleTypePacker.SetBits(ref pack, 0); // SampleType + sampleCountPacker.SetBits(ref pack, dataCountFloats); // SampleCount (data count is in bytes and the actual data is in floats, so div by 4) + codecTypePacker.SetBits(ref pack, 0); // CodecType + mutePacker.SetBits(ref pack, Mute ? 1 : 0); + sequenceNumberPacker.SetBits(ref pack, sequenceNumber++); + sequenceNumber %= 32; + + msg.Write(pack); // the packed bits + + // This is where stream data starts. Write all data for one stream + + msg.Write(0.0f); // average amplitude. Not needed in direction from client to server. + msg.Write(clientId); // non-zero client ID for this client. + + // HRTF position bits + + Vector3 cameraPosRelativeToGlobalAnchor = Vector3.zero; + Vector3 cameraDirectionRelativeToGlobalAnchor = Vector3.zero; + + if (GlobalAnchorTransform != null) + { + cameraPosRelativeToGlobalAnchor = MathUtils.TransformPointFromTo( + null, + GlobalAnchorTransform, + Camera.main.transform.position); + + cameraDirectionRelativeToGlobalAnchor = MathUtils.TransformDirectionFromTo( + null, + GlobalAnchorTransform, + Camera.main.transform.position); + } + + cameraPosRelativeToGlobalAnchor.Normalize(); + cameraDirectionRelativeToGlobalAnchor.Normalize(); + + // Camera position + msg.Write(cameraPosRelativeToGlobalAnchor.x); + msg.Write(cameraPosRelativeToGlobalAnchor.y); + msg.Write(cameraPosRelativeToGlobalAnchor.z); + + // HRTF direction bits + msg.Write(cameraDirectionRelativeToGlobalAnchor.x); + msg.Write(cameraDirectionRelativeToGlobalAnchor.y); + msg.Write(cameraDirectionRelativeToGlobalAnchor.z); + + msg.WriteArray(data, (uint)dataCountFloats * 4); + + connection.Send(msg, MessagePriority.Immediate, MessageReliability.ReliableOrdered, MessageChannel.Audio, true); + } + + private void OnDestroy() + { + CheckForErrorOnCall(MicStream.MicDestroy()); + } + + private bool CheckForErrorOnCall(int returnCode) + { + return MicStream.CheckForErrorOnCall(returnCode); + } + +#if DOTNET_FX + // on device, deal with all the ways that we could suspend our program in as few lines as possible + private void OnApplicationPause(bool pause) + { + if (pause) + { + CheckForErrorOnCall(MicStream.MicPause()); + } + else + { + CheckForErrorOnCall(MicStream.MicResume()); + } + } + + private void OnApplicationFocus(bool focused) + { + OnApplicationPause(!focused); + } + + private void OnDisable() + { + OnApplicationPause(true); + } + + private void OnEnable() + { + OnApplicationPause(false); + } +#endif + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs.meta b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs.meta new file mode 100644 index 0000000..0c0976f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Sharing/Scripts/VoiceChat/MicrophoneTransmitter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 813b4dd5d1e4f08429c5dc26dc571200 +timeCreated: 1468279868 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping.meta new file mode 100644 index 0000000..641beec --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a2eaeab7e0387ee4a87b9af8077a546b +folderAsset: yes +timeCreated: 1455735874 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials.meta new file mode 100644 index 0000000..4aa73ac --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5cec88232c4c1054ca274e873da683a4 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat new file mode 100644 index 0000000..ed1dac5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Occlusion + m_Shader: {fileID: 4800000, guid: 86a383aa28d6d9d438388de19d876240, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 1999 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat.meta new file mode 100644 index 0000000..5f544a3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Occlusion.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df172103f5fba4a4d8636aeca60cb0d7 +timeCreated: 1455735893 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat new file mode 100644 index 0000000..e8a1823 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat @@ -0,0 +1,151 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SpatialMappingTap + m_Shader: {fileID: 4800000, guid: 23beda61782381042848d512379b9e11, type: 3} + m_ShaderKeywords: _EMISSION _USEWIREFRAME_ON + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _PulseWidth + second: 0.99 + - first: + name: _Radius + second: 4.55 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _UseWireframe + second: 1 + - first: + name: _WireframeFill + second: 0.13 + - first: + name: _WireframeThick + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Center + second: {r: 0, g: 0, b: 0, a: -1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _PulseColor + second: {r: 0.6544118, g: 0.7887331, b: 1, a: 1} + - first: + name: _WireframeColor + second: {r: 0.5514706, g: 0.20274653, b: 0.20274653, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat.meta new file mode 100644 index 0000000..2c8b122 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/SpatialMappingTap.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75737e67271928f49a52005076d84d01 +timeCreated: 1479967363 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat new file mode 100644 index 0000000..041830b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Wireframe + m_Shader: {fileID: 4800000, guid: 0d08dd59087697b44a68a02cc9a7c3a2, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 2000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _WireThickness + second: 100 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _WireColor + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat.meta new file mode 100644 index 0000000..0bec06b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Materials/Wireframe.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d698790d3facd3d4289a13fa1243030a +timeCreated: 1455735893 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins.meta new file mode 100644 index 0000000..a15a505 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 534566cd964265f48a9001473d406964 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA.meta new file mode 100644 index 0000000..f71b219 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2871ca123c6a7e74288fbe655c491523 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86.meta new file mode 100644 index 0000000..f0d6255 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 74c5c89c08e228344aa9ffbad3dcf27a +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll new file mode 100644 index 0000000..7f13f73 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll.meta new file mode 100644 index 0000000..4617617 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/WSA/x86/PlaneFinding.dll.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: f670afcb463c4a8448e54449d2193cf9 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64.meta new file mode 100644 index 0000000..6cafbce --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 83620a8802ef0c3409a5612d7efb56f0 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll new file mode 100644 index 0000000..33ed9fe Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll.meta new file mode 100644 index 0000000..7dabd7f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x64/PlaneFinding.dll.meta @@ -0,0 +1,62 @@ +fileFormatVersion: 2 +guid: eddbe51e6dc99b140927438b9a702d80 +timeCreated: 1456266478 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86.meta new file mode 100644 index 0000000..884e517 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 673919c0d8a985c4090c8675ce04b6c7 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll new file mode 100644 index 0000000..5f093b7 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll.meta new file mode 100644 index 0000000..336fe6e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Plugins/x86/PlaneFinding.dll.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: d0499d67557ffef4abc380ff3154ff6d +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs.meta new file mode 100644 index 0000000..18ba205 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a4ea461bc5294b149a25fd3a1e5e77b4 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab new file mode 100644 index 0000000..8bef954 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab @@ -0,0 +1,94 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012046505862} + m_IsPrefabParent: 1 +--- !u!1 &1000012046505862 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013382681936} + - 114: {fileID: 114000013950815180} + - 114: {fileID: 114000010791004466} + - 114: {fileID: 114000012256053342} + - 114: {fileID: 114000013862356290} + m_Layer: 0 + m_Name: RemoteMapping + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000013382681936 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012046505862} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114000010791004466 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012046505862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f035d23cade9e364aa49c03bf785c6a7, type: 3} + m_Name: + m_EditorClassIdentifier: + ServerIP: + ConnectionPort: 11000 +--- !u!114 &114000012256053342 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012046505862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e0e40e7a40c41984bbec8aaa64292522, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000013862356290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012046505862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c96e5de2c5d6ff048a7008e554de2a56, type: 3} + m_Name: + m_EditorClassIdentifier: + MeshFileName: roombackup +--- !u!114 &114000013950815180 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012046505862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 44f5d303f60f1d14a8fe83f324ff52ff, type: 3} + m_Name: + m_EditorClassIdentifier: + ServerIP: + ConnectionPort: 11000 diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab.meta new file mode 100644 index 0000000..127858d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/RemoteMapping.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e76e513cfbb87a4285cfa0abb05afbd +timeCreated: 1455933125 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab new file mode 100644 index 0000000..a2183ea --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010302963436} + m_IsPrefabParent: 1 +--- !u!1 &1000010302963436 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013298573622} + - 114: {fileID: 114000012698980792} + - 114: {fileID: 114000011154029958} + - 114: {fileID: 114000012149591842} + m_Layer: 0 + m_Name: SpatialMapping + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000013298573622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010302963436} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114000011154029958 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010302963436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d587b71ba3b55e44f9654cec8898c32f, type: 3} + m_Name: + m_EditorClassIdentifier: + PhysicsLayer: 31 + surfaceMaterial: {fileID: 2100000, guid: d698790d3facd3d4289a13fa1243030a, type: 2} + autoStartObserver: 1 + drawVisualMeshes: 1 + castShadows: 0 +--- !u!114 &114000012149591842 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010302963436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 13d883c0118351e4890753200e0ac916, type: 3} + m_Name: + m_EditorClassIdentifier: + roomModel: {fileID: 0} +--- !u!114 &114000012698980792 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010302963436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b2a98b181acba5549af3d852c7664623, type: 3} + m_Name: + m_EditorClassIdentifier: + TrianglesPerCubicMeter: 500 + Extents: {x: 10, y: 10, z: 10} + TimeBetweenUpdates: 3.5 diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab.meta new file mode 100644 index 0000000..eb1615e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ed75ffdf9031c94e8bce4b3d17b9928 +timeCreated: 1455933163 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab new file mode 100644 index 0000000..6b74422 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab @@ -0,0 +1,114 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010593991404} + m_IsPrefabParent: 1 +--- !u!1 &1000010593991404 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012375631134} + - 33: {fileID: 33000012042644992} + - 65: {fileID: 65000010549037612} + - 23: {fileID: 23000010797497162} + - 114: {fileID: 114000011287056714} + m_Layer: 0 + m_Name: SurfacePlane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000012375631134 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010593991404} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &23000010797497162 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010593991404} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 474f0e0481d4aa14e92a5ada98042f3a, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000012042644992 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010593991404} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65000010549037612 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010593991404} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &114000011287056714 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010593991404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d29c05be38579034196d7b7692e52bc1, type: 3} + m_Name: + m_EditorClassIdentifier: + PlaneThickness: 0.01 + UpNormalThreshold: 0.9 + FloorBuffer: 0.1 + CeilingBuffer: 0.1 + WallMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + FloorMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + CeilingMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + TableMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + UnknownMaterial: {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + PlaneType: 16 diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab.meta new file mode 100644 index 0000000..9e0e828 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Prefabs/SurfacePlane.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 184d6e9ce2d89844489583805253eb83 +timeCreated: 1455933340 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md b/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md new file mode 100644 index 0000000..a041175 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md @@ -0,0 +1,187 @@ +## [SpatialMapping]() +Scripts that leverage SpatialMapping related features. + +1. Enable the "SpatialPerception" capability in Player Settings -> Windows Store -> Publishing Settings -> Capabilities. +2. If using the RemoteMapping components, you will also need to set the InternetClientServer, PrivateNetworkClientServer, and Microphone capabilities. + +**IMPORTANT**: Please make sure to add the Spatial Perception capability in your app, in Unity under +Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities +or in your Visual Studio Package.appxmanifest capabilities. + +### [Plugins](Plugins) +PlaneFinding addon that can be used to find planar surfaces (ie: walls/floors/tables/etc) in the mesh data returned by Spatial Mapping. + +### [Prefabs](Prefabs) + +The following prefabs make it easy to quickly access and visualize spatial mapping data in the HoloLens or in the Unity Editor. + +#### RemoteMapping.prefab +Use with SpatialMapping prefab, it allows you to send meshes from the HoloLens to Unity and save/load the meshes for use later. + +#### SpatialMapping.prefab +Base prefab which allows you to visualize and access spatial mapping data on the HoloLens. It can also save/load room models that were captured from the Windows Device Portal. + +#### SurfacePlane.prefab +Helper prefab which should be referenced by the SurfaceMeshesToPlanes component for classifying planes as floor, ceiling, wall, etc during processing. + +### [Scripts](Scripts) + +The following scripts give you the ability to access spatial mapping data on the HoloLens and load spatial mapping data in the Unity Editor. + +#### ObjectSurfaceObserver.cs +A SpatialMappingSource that loads spatial mapping data saved from the Windows Device Portal. + +**RoomModel** The room model to use when loading meshes in Unity. + +#### SpatialMappingManager.cs +Manages interactions between the application and all spatial mapping data sources (file, observer, network). + +**PhysicsLayer** The physics layer to use for all spatial mapping mesh data. + +**SurfaceMaterial** The material to apply when rendering the spatial mapping mesh data. + +**DrawVisualMeshes** Determines if spatial mapping meshes will be rendered. + +**CastShadows** Determines if spatial mapping meshes can cast shadows. + +#### SpatialMappingObserver.cs +Adds and updates spatial mapping data for all surfaces discovered by the SurfaceObserver running on the HoloLens. + +**TrianglesPerCubicMeter** Level of detail to use for each mesh found by the SurfaceObserver. + +**Extents** Extents of the observation volume which expand out from the camera's position. + +**TimeBetweenUpdates** Time to wait (sec) before processing updates from the SurfaceObserver. + +#### SpatialMappingSource.cs +Generates and retrieves meshes based on spatial mapping data coming from the current source object (file, observer, network). +SpatialMappingManager.cs manages switching between source types and interacting with this class. + +#### TapToPlace.cs +Simple extendable script to add to a GameObject that allows users to tap and place the GameObject along the spatial mapping mesh. + +TapToPlace also allows the user to specify a parent GameObject to move along with the selected GameObject. + +Requires GazeManager, GestureManager, and SpatialMappingManager in the scene. + +### [Scripts\RemoteMapping](Scripts/RemoteMapping) + +The following scripts allow you to send spatial mapping data from the HoloLens to the Unity Editor and to save/load the meshes for use later. + +#### FileSurfaceObserver.cs +A SpatialMappingSource that loads spatial mapping data saved during a remote mapping session. + +**MeshFileName** Name of file to use when saving mesh data from the network or loading surface mesh data into Unity. + +**SaveFileKey** Key to press when running in the Unity Editor to save meshes that came from the network. + +**LoadFileKey** Key to press when running in the Unity Editor to load meshes that were save from the network. + +#### MeshSaver.cs +Static class that can read and write mesh data sent during a remote mapping session to the file specified in FileSurfaceObserver.cs. + +#### RemoteMappingManager.cs +Allows sending meshes remotely from HoloLens to Unity. + +**RemoteMappingKey** The key to press when running in the Unity editor to enable spatial mapping over the network. + +**SendMeshesKeyword** The phrase to speak when you are ready to send meshes over the network from HoloLens to Unity. + +#### RemoteMeshSource.cs +Networking component that runs on the HoloLens and can send meshes to Unity. + +**ServerIP** The IPv4 address of the machine running the Unity editor. + +**ConnectionPort** The network port of the Unity machine that will receive spatial mapping data from the HoloLens. + +#### RemoteMeshTarget.cs +SpatialMappingSource object that runs in the Unity editor and receive spatial mapping data from the HoloLens. + +**ServerIP** The IPv4 address of the machine running the Unity editor. + +**ConnectionPort** The network port of the Unity machine that will receive mesh data from the HoloLens. + +#### SimpleMeshSerializer.cs +Static class that converts a Unity mesh to an array of bytes. Used by MeshSaver.cs to serialize and deserialize mesh data sent during a remote mapping session. + +### [Scripts\SpatialProcessing](Scripts) + +The following scripts allow you to process the raw spatial mapping data in order to find planes, remove vertices, etc. + +#### PlaneFinding.cs +Unity script that wraps the native PlaneFinding DLL. Used by SurfaceMeshesToPlanes.cs. + +#### RemoveSurfaceVertices.cs +A spatial processing component that will remove any spatial mapping vertices that fall within the specified bounding volumes. + +**BoundsExpansion** The amount, if any, to expand each bounding volume by. + +#### SurfaceMeshesToPlanes.cs +A spatial processing component that can find and create planes based on spatial mapping meshes. Uses PlaneFinding.cs and requires the PlaneFinding plug-in. + +**ActivePlanes** Collection of planes found within the spatial mapping data. + +**_SurfacePlanePrefab_** A GameObject that will be used for generating planes. If no prefab is provided, a Unity cube primitive will be used instead. + +**MinArea** Minimum area required for a plane to be created. + +**DrawPlanes** Bit mask which specifies the type of planes that should be rendered (walls, floors, ceilings, etc). + +**DestroyPlanes** Bit mask which specifies the type of planes that should be discarded. + +#### SurfacePlane.cs +Generates planes and classifies them by type (wall, ceiling, floor, table, unknown). Should be a component on the SurfacePlanePrefab used by SurfaceMeshesToPlanes.cs. + +**PlaneThickness** How thick each plane should be. + +**UpNormalThreshold** Threshold for acceptable normals. Used to determine if a plane is horizontal or vertical. + +**FloorBuffer** Max distance from the largest floor plane before a horizontal plane will be classified as a table. + +**CeilingBuffer** Max distance from the largest ceiling plane before a horizontal plane will be classified as a table. + +**WallMaterial** Material to use when rendering wall plane types. + +**FloorMaterial** Material to use when rendering ceiling plane types. + +**TableMaterial** Material to use when rendering table plane types. + +**UnknownMaterial** Material to use when rendering unknown plane types. + +### [Shaders](Shaders) + +#### Occlusion.shader +A basic occlusion shader that can be used to occlude objects behind spatial mapping meshes. Use SpatialMappingManager.SetSurfaceMaterial() to use this material with the spatial mapping data. If you want to create an occlusion 'window', a better shader to use is WindowOcclusion.shader. + +#### Wireframe.shader +A basic wire frame shader that can be used for rendering spatial mapping meshes. Use SpatialMappingManager.SetSurfaceMaterial() to use this material with the spatial mapping data. + +#### SpatialMappingTap.shader +Draws a ring originating from a location in space. Useful for showing where a user tapped. Requires a component to drive it's radius and set the tap location in world space. + +### [Tests Scenes](Tests/Scenes) + +#### PlaneFinding.unity +To use this sample code, load the PlaneFinding scene and hit Play. The PlaneFinding algorithm will run in a loop. Switch to the scene view to see a visualization of the planes found. +The PlaneFindingTest component exposes a couple of properties that let you manipulate the PlaneFinding API parameters in real-time and observe their impact on the algorithm. + +NOTE: In the interest of simplicity, this test script calls the PlaneFinding APIs directly from the main Unity thread in Update(). +In a real application, the PlaneFinding APIs **MUST** be called from a background thread in order to avoid stalling the rendering thread and causing a drop in frame rate. + +#### RemoteMapping.unity +The RemoteMapping scene uses the SpatialMapping and RemoteMapping prefabs to send spatial mapping data between the HoloLens and the app running in the Unity editor. +To run this test, you must first open port 11000 on your firewall and then set the IPv4 address of your PC in the 'RemoteMeshTarget' and 'RemoteMeshSource' components. +You can then build and deploy to the HoloLens. Once you see the wireframe mesh appear in your HoloLens, press the 'play' button in Unity to run the app in Editor. Ensure that the 'Game view' has focus, and then press the 'N' key (RemoteMappingKey) to switch to using the network as the spatial mapping source in the Editor. +Once you are confident that you have a good mesh, say the 'Send Meshes' (SendMeshesKeyword) to send the meshes from the HoloLens to the Unity Editor. +Press the 'S' key (SaveFileKey) to save the mesh to your PC. Press the 'play' button to stop the app from running in the Unity editor. Now, press 'play' one more time to restart the app. This time, press the 'L' key (LoadFileKey) to load the mesh that you previously saved into the Editor. + +#### SpatialProcessing.unity +The SpatialProcessing scene tests the two processing scripts available in HoloToolkit: SufraceMeshesToPlanes and RemoveSurfaceVertices. +If running in the Editor, the ObjectSurfaceObserver will load the SRMesh.obj file set in the SpatialMapping object of the scene. If you don't already have a file, you can capture one from the '3D View' page of the Windows Device Portal. If running on the HoloLens, real-world surfaces will be scanned. After 15 seconds, the meshes will be converted to planes. If a floor plane is found, the test will remove vertices from surface meshes that fall within the bounds of any active plane. + +#### TapToPlace.unity +This scene is the minimum setup to use the TapToPlace script. It includes GazeManager, GestureManager, and SpatialMapping prefab. BasicCursor prefab is included for ease of use. There is a cube in the scene with TapToPlace added on it. Gaze at and tap the cube. It will move along the spatial mapping mesh based on user's gaze. While the cube is in 'placement' mode, the spatial mapping mesh will be visible. When tap is performed again, the cube will be placed on the mesh and the mesh will no longer be visible. + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md.meta new file mode 100644 index 0000000..201b299 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecf194ccc63734249bf006b8b276471b +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts.meta new file mode 100644 index 0000000..5b5e8a1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 732b1aaa8df9fbe429d8d78acc0d0488 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs new file mode 100644 index 0000000..ad4145e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs @@ -0,0 +1,93 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + public class ObjectSurfaceObserver : SpatialMappingSource + { + [Tooltip("The room model to use when loading meshes in Unity.")] + public GameObject RoomModel; + + [Tooltip("If greater than or equal to zero, surface objects will claim to be updated at this period. This is useful when working with libraries that respond to updates (such as the SpatialUnderstanding library). If negative, surfaces will not claim to be updated.")] + public float SimulatedUpdatePeriodInSeconds = -1; + + // Use this for initialization. + private void Start() + { +#if UNITY_EDITOR + if (!UnityEngine.VR.VRDevice.isPresent) + { + // When in the Unity editor and not remoting, try loading saved meshes from a model. + Load(RoomModel); + + if (GetMeshFilters().Count > 0) + { + SpatialMappingManager.Instance.SetSpatialMappingSource(this); + } + } +#endif + } + + /// + /// Loads the SpatialMapping mesh from the specified room object. + /// + /// The room model to load meshes from. + public void Load(GameObject roomModel) + { + if (roomModel == null) + { + Debug.Log("No room model specified."); + return; + } + + GameObject roomObject = Instantiate(roomModel); + Cleanup(); + + try + { + MeshFilter[] roomFilters = roomObject.GetComponentsInChildren(); + + for (int iMesh = 0; iMesh < roomFilters.Length; iMesh++) + { + AddSurfaceObject(CreateSurfaceObject( + mesh: roomFilters[iMesh].sharedMesh, + objectName: "roomMesh-" + iMesh, + parentObject: transform, + meshID: iMesh + )); + } + } + catch + { + Debug.Log("Failed to load object " + roomModel.name); + } + finally + { + if (roomObject != null) + { + DestroyImmediate(roomObject); + } + } + } + + private float lastUpdateUnscaledTimeInSeconds = 0; + + private void Update() + { + if (SimulatedUpdatePeriodInSeconds >= 0) + { + if ((Time.unscaledTime - lastUpdateUnscaledTimeInSeconds) >= SimulatedUpdatePeriodInSeconds) + { + for (int iSurface = 0; iSurface < SurfaceObjects.Count; iSurface++) + { + UpdateOrAddSurfaceObject(SurfaceObjects[iSurface]); + } + + lastUpdateUnscaledTimeInSeconds = Time.unscaledTime; + } + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs.meta new file mode 100644 index 0000000..8888925 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/ObjectSurfaceObserver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 13d883c0118351e4890753200e0ac916 +timeCreated: 1470190912 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping.meta new file mode 100644 index 0000000..6d272ad --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 49cc0b39b5dc81b48b54e235206745ea +folderAsset: yes +timeCreated: 1470190832 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor.meta new file mode 100644 index 0000000..6abd1cc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5376111b31305f4aa858ce47a5097b9 +folderAsset: yes +timeCreated: 1476300842 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs new file mode 100644 index 0000000..b920f7f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs @@ -0,0 +1,247 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEditor; +using UnityEngine; +using HoloToolkit.Unity.SpatialMapping; + +namespace HoloToolkit.Unity +{ + public static class RoomMeshExporter + { + private const string ExportDirectoryKey = "ExportDirectory"; + private const string ExportDirectoryDefault = "MeshExport"; + private const string ExportDialogErrorTitle = "Export Error"; + private const string WavefrontFileExtension = ".obj"; + + public static string ExportDirectory + { + get + { + return EditorPrefs.GetString(ExportDirectoryKey, ExportDirectoryDefault); + } + set + { + if (string.IsNullOrEmpty(value)) + { + value = ExportDirectoryDefault; + } + + EditorPrefs.SetString(ExportDirectoryKey, value); + } + } + + private static bool MakeExportDirectory() + { + try + { + Directory.CreateDirectory(ExportDirectory); + } + catch + { + return false; + } + + return true; + } + + [MenuItem("HoloToolkit/Export/Export Room (.room) To Wavefront (.obj)...")] + public static void ExportRoomToWavefront() + { + string selectedFile = EditorUtility.OpenFilePanelWithFilters("Select Room File", MeshSaver.MeshFolderName, new string[] { "Room", "room" }); + if (string.IsNullOrEmpty(selectedFile)) + { + return; + } + + string fileName = Path.GetFileNameWithoutExtension(selectedFile); + IEnumerable meshes = null; + try + { + meshes = MeshSaver.Load(fileName); + } + catch + { + // Handling exceptions, and null returned by MeshSaver.Load, by checking if meshes + // is still null below. + } + + if (meshes == null) + { + EditorUtility.DisplayDialog(ExportDialogErrorTitle, "Unable to parse selected file.", "Ok"); + return; + } + + SaveMeshesToWavefront(fileName, meshes); + + // Open the location on where the mesh was saved. + System.Diagnostics.Process.Start(ExportDirectory); + } + + [MenuItem("HoloToolkit/Export/Export Selection To Wavefront (.obj)")] + public static void ExportSelectionToWavefront() + { + Transform[] selectedTransforms = Selection.transforms; + if (selectedTransforms.Length <= 0) + { + EditorUtility.DisplayDialog(ExportDialogErrorTitle, "Please select GameObject(s) within the scene that you want saved.", "OK"); + return; + } + + List meshFilters = new List(selectedTransforms.Length); + for (int i = 0, iLength = selectedTransforms.Length; i < iLength; ++i) + { + meshFilters.AddRange(selectedTransforms[i].GetComponentsInChildren()); + } + + if (meshFilters.Count == 0) + { + EditorUtility.DisplayDialog(ExportDialogErrorTitle, "Nothing selected contains a MeshFilter.", "Ok"); + return; + } + + SaveMeshFiltersToWavefront("Selection", meshFilters); + + // Open the location on where the mesh was saved. + System.Diagnostics.Process.Start(ExportDirectory); + } + + /// + /// Saves meshes without any modifications during serialization. + /// + /// Name of the file, without path and extension. + public static void SaveMeshesToWavefront(string fileName, IEnumerable meshes) + { + if (!MakeExportDirectory()) + { + EditorUtility.DisplayDialog(ExportDialogErrorTitle, "Failed to create export directory.", "Ok"); + return; + } + + string filePath = Path.Combine(ExportDirectory, fileName + WavefrontFileExtension); + using (StreamWriter stream = new StreamWriter(filePath)) + { + stream.Write(SerializeMeshes(meshes)); + } + } + + /// + /// Transform all vertices and normals of the meshes into world space during serialization. + /// + /// Name of the file, without path and extension. + public static void SaveMeshFiltersToWavefront(string fileName, IEnumerable meshes) + { + if (!MakeExportDirectory()) + { + EditorUtility.DisplayDialog(ExportDialogErrorTitle, "Failed to create export directory.", "Ok"); + return; + } + + string filePath = Path.Combine(ExportDirectory, fileName + WavefrontFileExtension); + using (StreamWriter stream = new StreamWriter(filePath)) + { + stream.Write(SerializeMeshFilters(meshes)); + } + } + + private static string SerializeMeshes(IEnumerable meshes) + { + StringWriter stream = new StringWriter(); + int offset = 0; + foreach (var mesh in meshes) + { + SerializeMesh(mesh, stream, ref offset); + } + return stream.ToString(); + } + + private static string SerializeMeshFilters(IEnumerable meshes) + { + StringWriter stream = new StringWriter(); + int offset = 0; + foreach (var mesh in meshes) + { + SerializeMeshFilter(mesh, stream, ref offset); + } + return stream.ToString(); + } + + /// + /// Write single mesh to the stream passed in. + /// + /// Mesh to be serialized. + /// Stream to write the mesh into. + /// Index offset for handling multiple meshes in a single stream. + private static void SerializeMesh(Mesh mesh, TextWriter stream, ref int offset) + { + // Write vertices to .obj file. Need to make sure the points are transformed so everything is at a single origin. + foreach (Vector3 vertex in mesh.vertices) + { + stream.WriteLine(string.Format("v {0} {1} {2}", -vertex.x, vertex.y, vertex.z)); + } + + // Write normals. Need to transform the direction. + foreach (Vector3 normal in mesh.normals) + { + stream.WriteLine(string.Format("vn {0} {1} {2}", normal.x, normal.y, normal.z)); + } + + // Write indices. + for (int s = 0, sLength = mesh.subMeshCount; s < sLength; ++s) + { + int[] indices = mesh.GetTriangles(s); + for (int i = 0, iLength = indices.Length - indices.Length % 3; i < iLength; i += 3) + { + // Format is "vertex index / material index / normal index" + stream.WriteLine(string.Format("f {0}//{0} {1}//{1} {2}//{2}", + indices[i + 2] + 1 + offset, + indices[i + 1] + 1 + offset, + indices[i + 0] + 1 + offset)); + } + } + + offset += mesh.vertices.Length; + } + + /// + /// Write single, transformed, mesh to the stream passed in. + /// + /// Contains the mesh to be transformed and serialized. + /// Stream to write the transformed mesh into. + /// Index offset for handling multiple meshes in a single stream. + private static void SerializeMeshFilter(MeshFilter meshFilter, TextWriter stream, ref int offset) + { + Mesh mesh = meshFilter.sharedMesh; + + // Write vertices to .obj file. Need to make sure the points are transformed so everything is at a single origin. + foreach (Vector3 vertex in mesh.vertices) + { + Vector3 pos = meshFilter.transform.TransformPoint(vertex); + stream.WriteLine(string.Format("v {0} {1} {2}", -pos.x, pos.y, pos.z)); + } + + // Write normals. Need to transform the direction. + foreach (Vector3 meshNormal in mesh.normals) + { + Vector3 normal = meshFilter.transform.TransformDirection(meshNormal); + stream.WriteLine(string.Format("vn {0} {1} {2}", normal.x, normal.y, normal.z)); + } + + // Write indices. + for (int s = 0, sLength = mesh.subMeshCount; s < sLength; ++s) + { + int[] indices = mesh.GetTriangles(s); + for (int i = 0, iLength = indices.Length - indices.Length % 3; i < iLength; i += 3) + { + // Format is "vertex index / material index / normal index" + stream.WriteLine(string.Format("f {0}//{0} {1}//{1} {2}//{2}", + indices[i + 0] + 1 + offset, + indices[i + 1] + 1 + offset, + indices[i + 2] + 1 + offset)); + } + } + + offset += mesh.vertices.Length; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs.meta new file mode 100644 index 0000000..d4a6a6c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/Editor/RoomMeshExporter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fc23ba6f202772142beea841179d5ef7 +timeCreated: 1476220100 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs new file mode 100644 index 0000000..d6ee6f5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs @@ -0,0 +1,95 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace HoloToolkit.Unity.SpatialMapping +{ + public class FileSurfaceObserver : SpatialMappingSource + { + [Tooltip("The file name to use when saving and loading meshes.")] + public string MeshFileName = "roombackup"; + + [Tooltip("Key to press in editor to load a spatial mapping mesh from a .room file.")] + public KeyCode LoadFileKey = KeyCode.L; + + [Tooltip("Key to press in editor to save a spatial mapping mesh to file.")] + public KeyCode SaveFileKey = KeyCode.S; + + /// + /// Loads the SpatialMapping mesh from the specified file. + /// + /// The name, without path or extension, of the file to load. + public void Load(string fileName) + { + if (string.IsNullOrEmpty(fileName)) + { + Debug.Log("No mesh file specified."); + return; + } + + Cleanup(); + + try + { + IList storedMeshes = MeshSaver.Load(fileName); + + for(int iMesh = 0; iMesh < storedMeshes.Count; iMesh++) + { + AddSurfaceObject(CreateSurfaceObject( + mesh: storedMeshes[iMesh], + objectName: "storedmesh-" + iMesh, + parentObject: transform, + meshID: iMesh + )); + } + } + catch + { + Debug.Log("Failed to load " + fileName); + } + } + + // Called every frame. + private void Update() + { + // Keyboard commands for saving and loading a remotely generated mesh file. +#if UNITY_EDITOR || UNITY_STANDALONE + // S - saves the active mesh + if (Input.GetKeyUp(SaveFileKey)) + { + MeshSaver.Save(MeshFileName, SpatialMappingManager.Instance.GetMeshes()); + } + + // L - loads the previously saved mesh into editor and sets it to be the spatial mapping source. + if (Input.GetKeyUp(LoadFileKey)) + { + SpatialMappingManager.Instance.SetSpatialMappingSource(this); + Load(MeshFileName); + } +#endif + } + } + +#if UNITY_EDITOR + [CustomEditor(typeof(FileSurfaceObserver))] + public class FileSurfaceObserverEditor : Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + // Quick way for the user to get access to the room file location. + if (GUILayout.Button("Open File Location")) + { + System.Diagnostics.Process.Start(MeshSaver.MeshFolderName); + } + } + } +#endif +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs.meta new file mode 100644 index 0000000..3416707 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/FileSurfaceObserver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c96e5de2c5d6ff048a7008e554de2a56 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs new file mode 100644 index 0000000..8d99f64 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs @@ -0,0 +1,199 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +#if !UNITY_EDITOR && UNITY_METRO +using System.Threading.Tasks; +using Windows.Storage; +#endif + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// MeshSaver is a static class containing methods used for saving and loading meshes. + /// + public static class MeshSaver + { + /// + /// The extension given to mesh files. + /// + private static string fileExtension = ".room"; + + /// + /// Read-only property which returns the folder path where mesh files are stored. + /// + public static string MeshFolderName + { + get + { +#if !UNITY_EDITOR && UNITY_METRO + return ApplicationData.Current.RoamingFolder.Path; +#else + return Application.persistentDataPath; +#endif + } + } + + /// + /// Transforms all the mesh vertices into world position before saving to file. + /// + /// Name to give the saved mesh file. Exclude path and extension. + /// The collection of Mesh objects to save. + /// Fully qualified name of the saved mesh file. + /// Determines the save path to use and automatically applies the file extension. + public static string Save(string fileName, IEnumerable meshFilters) + { + if (string.IsNullOrEmpty(fileName)) + { + throw new ArgumentException("Must specify a valid fileName."); + } + + if (meshFilters == null) + { + throw new ArgumentNullException("Value of meshFilters cannot be null."); + } + + // Create the mesh file. + String folderName = MeshFolderName; + Debug.Log(String.Format("Saving mesh file: {0}", Path.Combine(folderName, fileName + fileExtension))); + + using (Stream stream = OpenFileForWrite(folderName, fileName + fileExtension)) + { + // Serialize and write the meshes to the file. + byte[] data = SimpleMeshSerializer.Serialize(meshFilters); + stream.Write(data, 0, data.Length); + stream.Flush(); + } + + Debug.Log("Mesh file saved."); + + return Path.Combine(folderName, fileName + fileExtension); + } + + /// + /// Saves the provided meshes to the specified file. + /// + /// Name to give the saved mesh file. Exclude path and extension. + /// The collection of Mesh objects to save. + /// Fully qualified name of the saved mesh file. + /// Determines the save path to use and automatically applies the file extension. + public static string Save(string fileName, IEnumerable meshes) + { + if (string.IsNullOrEmpty(fileName)) + { + throw new ArgumentException("Must specify a valid fileName."); + } + + if (meshes == null) + { + throw new ArgumentNullException("Value of meshes cannot be null."); + } + + // Create the mesh file. + String folderName = MeshFolderName; + Debug.Log(String.Format("Saving mesh file: {0}", Path.Combine(folderName, fileName + fileExtension))); + + using (Stream stream = OpenFileForWrite(folderName, fileName + fileExtension)) + { + // Serialize and write the meshes to the file. + byte[] data = SimpleMeshSerializer.Serialize(meshes); + stream.Write(data, 0, data.Length); + stream.Flush(); + } + + Debug.Log("Mesh file saved."); + + return Path.Combine(folderName, fileName + fileExtension); + } + + /// + /// Loads the specified mesh file. + /// + /// Name of the saved mesh file. Exclude path and extension. + /// Collection of Mesh objects read from the file. + /// Determines the path from which to load and automatically applies the file extension. + public static IList Load(string fileName) + { + if (string.IsNullOrEmpty(fileName)) + { + throw new ArgumentException("Must specify a valid fileName."); + } + + List meshes = new List(); + + // Open the mesh file. + String folderName = MeshFolderName; + Debug.Log(String.Format("Loading mesh file: {0}", Path.Combine(folderName, fileName + fileExtension))); + + using (Stream stream = OpenFileForRead(folderName, fileName + fileExtension)) + { + // Read the file and deserialize the meshes. + byte[] data = new byte[stream.Length]; + stream.Read(data, 0, data.Length); + + meshes.AddRange(SimpleMeshSerializer.Deserialize(data)); + } + + Debug.Log("Mesh file loaded."); + + return meshes; + } + + /// + /// Opens the specified file for reading. + /// + /// The name of the folder containing the file. + /// The name of the file, including extension. + /// Stream used for reading the file's data. + private static Stream OpenFileForRead(string folderName, string fileName) + { + Stream stream = null; + +#if !UNITY_EDITOR && UNITY_METRO + Task task = Task.Factory.StartNew( + async () => + { + StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderName); + StorageFile file = await folder.GetFileAsync(fileName); + stream = await file.OpenStreamForReadAsync(); + }); + task.Wait(); + task.Result.Wait(); +#else + stream = new FileStream(Path.Combine(folderName, fileName), FileMode.Open, FileAccess.Read); +#endif + return stream; + } + + /// + /// Opens the specified file for writing. + /// + /// The name of the folder containing the file. + /// The name of the file, including extension. + /// Stream used for writing the file's data. + /// If the specified file already exists, it will be overwritten. + private static Stream OpenFileForWrite(string folderName, string fileName) + { + Stream stream = null; + +#if !UNITY_EDITOR && UNITY_METRO + Task task = Task.Factory.StartNew( + async () => + { + StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderName); + StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); + stream = await file.OpenStreamForWriteAsync(); + }); + task.Wait(); + task.Result.Wait(); +#else + stream = new FileStream(Path.Combine(folderName, fileName), FileMode.Create, FileAccess.Write); +#endif + return stream; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs.meta new file mode 100644 index 0000000..6d680d2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/MeshSaver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 04428b85e80f24744866d700e45435e6 +timeCreated: 1455735876 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs new file mode 100644 index 0000000..ae37e86 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs @@ -0,0 +1,118 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Windows.Speech; + +namespace HoloToolkit.Unity.SpatialMapping +{ + [RequireComponent(typeof(RemoteMeshTarget))] + public partial class RemoteMappingManager : Singleton + { + [Tooltip("Key to press in editor to enable spatial mapping over the network.")] + public KeyCode RemoteMappingKey = KeyCode.N; + + [Tooltip("Keyword for sending meshes from HoloLens to Unity over the network.")] + public string SendMeshesKeyword = "send meshes"; + +#if UNITY_EDITOR || UNITY_STANDALONE + /// + /// Receives meshes collected over the network. + /// + private RemoteMeshTarget remoteMeshTarget; +#endif + + /// + /// Used for voice commands. + /// + private KeywordRecognizer keywordRecognizer; + + /// + /// Collection of supported keywords and their associated actions. + /// + private Dictionary keywordCollection; + + // Use this for initialization. + private void Start() + { + // Create our keyword collection. + keywordCollection = new Dictionary(); + keywordCollection.Add(SendMeshesKeyword, () => SendMeshes()); + + // Tell the KeywordRecognizer about our keywords. + keywordRecognizer = new KeywordRecognizer(keywordCollection.Keys.ToArray()); + + // Register a callback for the KeywordRecognizer and start recognizing. + keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized; + keywordRecognizer.Start(); + +#if UNITY_EDITOR || UNITY_STANDALONE + remoteMeshTarget = GetComponent(); + + if (remoteMeshTarget != null && SpatialMappingManager.Instance.Source == null) + { + // Use the network-based mapping source to receive meshes in the Unity editor. + SpatialMappingManager.Instance.SetSpatialMappingSource(remoteMeshTarget); + } +#endif + } + + // Called every frame by the Unity engine. + private void Update() + { +#if UNITY_EDITOR || UNITY_STANDALONE + // Use the 'network' sourced mesh. + if (Input.GetKeyUp(RemoteMappingKey)) + { + SpatialMappingManager.Instance.SetSpatialMappingSource(remoteMeshTarget); + } +#endif + } + + /// + /// Called by keywordRecognizer when a phrase we registered for is heard. + /// + /// Information about the recognition event. + private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) + { + System.Action keywordAction; + + if (keywordCollection.TryGetValue(args.text, out keywordAction)) + { + keywordAction.Invoke(); + } + } + + /// + /// Sends the spatial mapping surfaces from the HoloLens to a remote system running the Unity editor. + /// + private void SendMeshes() + { +#if !UNITY_EDITOR && UNITY_METRO + List MeshFilters = SpatialMappingManager.Instance.GetMeshFilters(); + for (int index = 0; index < MeshFilters.Count; index++) + { + List meshesToSend = new List(); + MeshFilter filter = MeshFilters[index]; + Mesh source = filter.sharedMesh; + Mesh clone = new Mesh(); + List verts = new List(); + verts.AddRange(source.vertices); + + for(int vertIndex=0; vertIndex < verts.Count; vertIndex++) + { + verts[vertIndex] = filter.transform.TransformPoint(verts[vertIndex]); + } + + clone.SetVertices(verts); + clone.SetTriangles(source.triangles, 0); + meshesToSend.Add(clone); + byte[] serialized = SimpleMeshSerializer.Serialize(meshesToSend); + RemoteMeshSource.Instance.SendData(serialized); + } +#endif + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs.meta new file mode 100644 index 0000000..2386557 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMappingManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e0e40e7a40c41984bbec8aaa64292522 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs new file mode 100644 index 0000000..3f269c4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs @@ -0,0 +1,202 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +#if !UNITY_EDITOR && UNITY_METRO +using System.Collections.Generic; +using Windows.Networking.Sockets; +using Windows.Storage.Streams; +using Windows.Networking; +using Windows.Foundation; +#endif + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// RemoteMeshSource will try to send meshes from the HoloLens to a remote system that is running the Unity editor. + /// + public class RemoteMeshSource : Singleton + { + [Tooltip("The IPv4 Address of the machine running the Unity editor. Copy and paste this value from RemoteMeshTarget.")] + public string ServerIP; + + [Tooltip("The connection port on the machine to use.")] + public int ConnectionPort = 11000; + +#if !UNITY_EDITOR && UNITY_METRO + /// + /// Tracks the network connection to the remote machine we are sending meshes to. + /// + private StreamSocket networkConnection; + + /// + /// Tracks if we are currently sending a mesh. + /// + private bool Sending = false; + + /// + /// Temporary buffer for the data we are sending. + /// + private byte[] nextDataBufferToSend; + + /// + /// A queue of data buffers to send. + /// + private Queue dataQueue = new Queue(); + + /// + /// If we cannot connect to the server, we will wait before trying to reconnect. + /// + private float deferTime = 0.0f; + + /// + /// If we cannot connect to the server, this is how long we will wait before retrying. + /// + private float timeToDeferFailedConnections = 10.0f; + + public void Update() + { + // Check to see if deferTime has been set. + // DeferUpdates will set the Sending flag to true for + // deferTime seconds. + if (deferTime > 0.0f) + { + DeferUpdates(deferTime); + deferTime = 0.0f; + } + + // If we aren't sending a mesh, but we have a mesh to send, send it. + if (!Sending && dataQueue.Count > 0) + { + byte[] nextPacket = dataQueue.Dequeue(); + SendDataOverNetwork(nextPacket); + } + } + + /// + /// Handles waiting for some amount of time before trying to reconnect. + /// + /// Time in seconds to wait. + void DeferUpdates(float timeout) + { + Sending = true; + Invoke("EnableUpdates", timeout); + } + + /// + /// Stops waiting to reconnect. + /// + void EnableUpdates() + { + Sending = false; + } + + /// + /// Queues up a data buffer to send over the network. + /// + /// The data buffer to send. + public void SendData(byte[] dataBufferToSend) + { + dataQueue.Enqueue(dataBufferToSend); + } + + /// + /// Sends the data over the network. + /// + /// The data buffer to send. + private void SendDataOverNetwork(byte[] dataBufferToSend) + { + if (Sending) + { + // This shouldn't happen, but just in case. + Debug.Log("one at a time please"); + return; + } + + // Track that we are sending a data buffer. + Sending = true; + + // Set the next buffer to send when the connection is made. + nextDataBufferToSend = dataBufferToSend; + + // Setup a connection to the server. + HostName networkHost = new HostName(ServerIP.Trim()); + networkConnection = new StreamSocket(); + + // Connections are asynchronous. + // !!! NOTE These do not arrive on the main Unity Thread. Most Unity operations will throw in the callback !!! + IAsyncAction outstandingAction = networkConnection.ConnectAsync(networkHost, ConnectionPort.ToString()); + AsyncActionCompletedHandler aach = new AsyncActionCompletedHandler(NetworkConnectedHandler); + outstandingAction.Completed = aach; + } + + /// + /// Called when a connection attempt complete, successfully or not. + /// !!! NOTE These do not arrive on the main Unity Thread. Most Unity operations will throw in the callback !!! + /// + /// Data about the async operation. + /// The status of the operation. + public void NetworkConnectedHandler(IAsyncAction asyncInfo, AsyncStatus status) + { + // Status completed is successful. + if (status == AsyncStatus.Completed) + { + DataWriter networkDataWriter; + + // Since we are connected, we can send the data we set aside when establishing the connection. + using(networkDataWriter = new DataWriter(networkConnection.OutputStream)) + { + // Write how much data we are sending. + networkDataWriter.WriteInt32(nextDataBufferToSend.Length); + + // Then write the data. + networkDataWriter.WriteBytes(nextDataBufferToSend); + + // Again, this is an async operation, so we'll set a callback. + DataWriterStoreOperation dswo = networkDataWriter.StoreAsync(); + dswo.Completed = new AsyncOperationCompletedHandler(DataSentHandler); + } + } + else + { + Debug.Log("Failed to establish connection. Error Code: " + asyncInfo.ErrorCode); + // In the failure case we'll requeue the data and wait before trying again. + networkConnection.Dispose(); + + // Didn't send, so requeue the data. + dataQueue.Enqueue(nextDataBufferToSend); + + // And set the defer time so the update loop can do the 'Unity things' + // on the main Unity thread. + deferTime = timeToDeferFailedConnections; + } + } + + /// + /// Called when sending data has completed. + /// !!! NOTE These do not arrive on the main Unity Thread. Most Unity operations will throw in the callback !!! + /// + /// The operation in flight. + /// The status of the operation. + public void DataSentHandler(IAsyncOperation operation, AsyncStatus status) + { + // If we failed, requeue the data and set the deferral time. + if (status == AsyncStatus.Error) + { + // didn't send, so requeue + dataQueue.Enqueue(nextDataBufferToSend); + deferTime = timeToDeferFailedConnections; + } + else + { + // If we succeeded, clear the sending flag so we can send another mesh + Sending = false; + } + + // Always disconnect here since we will reconnect when sending the next mesh. + networkConnection.Dispose(); + } +#endif + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs.meta new file mode 100644 index 0000000..8cfb338 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshSource.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f035d23cade9e364aa49c03bf785c6a7 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs new file mode 100644 index 0000000..e663d00 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +#if UNITY_EDITOR || UNITY_STANDALONE +using System.Net; +using System.Net.Sockets; +#endif +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// RemoteMeshTarget will listen for meshes being sent from a remote system (HoloLens). + /// It is intended to run in the Unity Editor with exactly one + /// HoloLens device sending data. + /// + public class RemoteMeshTarget : SpatialMappingSource + { + [Tooltip("The IPv4 Address of the machine running the Unity editor.")] + public string ServerIP; + + [Tooltip("The connection port on the machine to use.")] + public int ConnectionPort = 11000; + +#if UNITY_EDITOR || UNITY_STANDALONE + /// + /// Listens for network connections over TCP. + /// + private TcpListener networkListener; + + /// + /// Keeps client information when a connection happens. + /// + private TcpClient networkClient; + + /// + /// Tracks if a client is connected. + /// + private bool clientConnected; + + // Use this for initialization. + private void Start() + { + // Setup the network listener. + IPAddress localAddr = IPAddress.Parse(ServerIP.Trim()); + networkListener = new TcpListener(localAddr, ConnectionPort); + networkListener.Start(); + + // Request the network listener to wait for connections asynchronously. + AsyncCallback callback = OnClientConnect; + networkListener.BeginAcceptTcpClient(callback, this); + } + + // Update is called once per frame. + private void Update() + { + // If we have a connected client, presumably the client wants to send some meshes. + if (clientConnected) + { + // Get the clients stream. + NetworkStream stream = networkClient.GetStream(); + + // Make sure there is data in the stream. + if (stream.DataAvailable) + { + // The first 4 bytes will be the size of the data containing the mesh(es). + int datasize = ReadInt(stream); + + // Allocate a buffer to hold the data. + byte[] dataBuffer = new byte[datasize]; + + // Read the data. + // The data can come in chunks. + int readsize = 0; + + while (readsize != datasize) + { + readsize += stream.Read(dataBuffer, readsize, datasize - readsize); + } + + if (readsize != datasize) + { + Debug.Log("reading mesh failed: " + readsize + " != " + datasize); + } + + // Pass the data to the mesh serializer. + List meshes = new List(SimpleMeshSerializer.Deserialize(dataBuffer)); + + // For each mesh, create a GameObject to render it. + for (int index = 0; index < meshes.Count; index++) + { + int meshID = SurfaceObjects.Count; + + SurfaceObject surface = CreateSurfaceObject( + mesh: meshes[index], + objectName: "Beamed-" + meshID, + parentObject: transform, + meshID: meshID + ); + + surface.Object.transform.parent = SpatialMappingManager.Instance.transform; + + AddSurfaceObject(surface); + } + + // Finally disconnect. + clientConnected = false; + networkClient.Close(); + + // And wait for the next connection. + AsyncCallback callback = OnClientConnect; + networkListener.BeginAcceptTcpClient(callback, this); + } + } + } + + /// + /// Reads an int from the next 4 bytes of the supplied stream. + /// + /// The stream to read the bytes from. + /// An integer representing the bytes. + private int ReadInt(Stream stream) + { + // The bytes arrive in the wrong order, so swap them. + byte[] bytes = new byte[4]; + stream.Read(bytes, 0, 4); + byte t = bytes[0]; + bytes[0] = bytes[3]; + bytes[3] = t; + + t = bytes[1]; + bytes[1] = bytes[2]; + bytes[2] = t; + + // Then bitconverter can read the int32. + return BitConverter.ToInt32(bytes, 0); + } + + /// + /// Called when a client connects. + /// + /// The result of the connection. + private void OnClientConnect(IAsyncResult result) + { + if (result.IsCompleted) + { + networkClient = networkListener.EndAcceptTcpClient(result); + if (networkClient != null) + { + Debug.Log("Connected"); + clientConnected = true; + } + } + } +#endif + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs.meta new file mode 100644 index 0000000..90840b8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/RemoteMeshTarget.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 44f5d303f60f1d14a8fe83f324ff52ff +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs new file mode 100644 index 0000000..76136e5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs @@ -0,0 +1,263 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using SysDiag = System.Diagnostics; +using System.IO; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// SimpleMeshSerializer converts a UnityEngine.Mesh object to and from an array of bytes. + /// This class saves minimal mesh data (vertices and triangle indices) in the following format: + /// File header: vertex count (32 bit integer), triangle count (32 bit integer) + /// Vertex list: vertex.x, vertex.y, vertex.z (all 32 bit float) + /// Triangle index list: 32 bit integers + /// + public static class SimpleMeshSerializer + { + /// + /// The mesh header consists of two 32 bit integers. + /// + private static int HeaderSize = sizeof(int) * 2; + + /// + /// Serializes a list of Mesh objects into a byte array. + /// + /// List of Mesh objects to be serialized. + /// Binary representation of the Mesh objects. + public static byte[] Serialize(IEnumerable meshes) + { + byte[] data; + + using (MemoryStream stream = new MemoryStream()) + { + using (BinaryWriter writer = new BinaryWriter(stream)) + { + foreach (Mesh mesh in meshes) + { + WriteMesh(writer, mesh); + } + + stream.Position = 0; + data = new byte[stream.Length]; + stream.Read(data, 0, data.Length); + } + } + + return data; + } + + /// + /// Serializes a list of MeshFilter objects into a byte array. + /// Transforms vertices into world space before writing to the file. + /// + /// List of MeshFilter objects to be serialized. + /// Binary representation of the Mesh objects. + public static byte[] Serialize(IEnumerable meshes) + { + byte[] data = null; + + using (MemoryStream stream = new MemoryStream()) + { + using (BinaryWriter writer = new BinaryWriter(stream)) + { + foreach (MeshFilter meshFilter in meshes) + { + WriteMesh(writer, meshFilter.sharedMesh, meshFilter.transform); + } + + stream.Position = 0; + data = new byte[stream.Length]; + stream.Read(data, 0, data.Length); + } + } + + return data; + } + + /// + /// Deserializes a list of Mesh objects from the provided byte array. + /// + /// Binary data to be deserialized into a list of Mesh objects. + /// List of Mesh objects. + public static IEnumerable Deserialize(byte[] data) + { + List meshes = new List(); + + using (MemoryStream stream = new MemoryStream(data)) + { + using (BinaryReader reader = new BinaryReader(stream)) + { + while (reader.BaseStream.Length - reader.BaseStream.Position >= HeaderSize) + { + meshes.Add(ReadMesh(reader)); + } + } + } + + return meshes; + } + + /// + /// Writes a Mesh object to the data stream. + /// + /// BinaryWriter representing the data stream. + /// The Mesh object to be written. + /// If provided, will transform all vertices into world space before writing. + private static void WriteMesh(BinaryWriter writer, Mesh mesh, Transform transform = null) + { + SysDiag.Debug.Assert(writer != null); + + // Write the mesh data. + WriteMeshHeader(writer, mesh.vertexCount, mesh.triangles.Length); + WriteVertices(writer, mesh.vertices, transform); + WriteTriangleIndicies(writer, mesh.triangles); + } + + /// + /// Reads a single Mesh object from the data stream. + /// + /// BinaryReader representing the data stream. + /// Mesh object read from the stream. + private static Mesh ReadMesh(BinaryReader reader) + { + SysDiag.Debug.Assert(reader != null); + + int vertexCount = 0; + int triangleIndexCount = 0; + + // Read the mesh data. + ReadMeshHeader(reader, out vertexCount, out triangleIndexCount); + Vector3[] vertices = ReadVertices(reader, vertexCount); + int[] triangleIndices = ReadTriangleIndicies(reader, triangleIndexCount); + + // Create the mesh. + Mesh mesh = new Mesh(); + mesh.vertices = vertices; + mesh.triangles = triangleIndices; + // Reconstruct the normals from the vertices and triangles. + mesh.RecalculateNormals(); + + return mesh; + } + + /// + /// Writes a mesh header to the data stream. + /// + /// BinaryWriter representing the data stream. + /// Count of vertices in the mesh. + /// Count of triangle indices in the mesh. + private static void WriteMeshHeader(BinaryWriter writer, int vertexCount, int triangleIndexCount) + { + SysDiag.Debug.Assert(writer != null); + + writer.Write(vertexCount); + writer.Write(triangleIndexCount); + + } + + /// + /// Reads a mesh header from the data stream. + /// + /// BinaryReader representing the data stream. + /// Count of vertices in the mesh. + /// Count of triangle indices in the mesh. + private static void ReadMeshHeader(BinaryReader reader, out int vertexCount, out int triangleIndexCount) + { + SysDiag.Debug.Assert(reader != null); + + vertexCount = reader.ReadInt32(); + triangleIndexCount = reader.ReadInt32(); + } + + /// + /// Writes a mesh's vertices to the data stream. + /// + /// BinaryReader representing the data stream. + /// Array of Vector3 structures representing each vertex. + /// If provided, will convert all vertices into world space before writing. + private static void WriteVertices(BinaryWriter writer, Vector3[] vertices, Transform transform = null) + { + SysDiag.Debug.Assert(writer != null); + + if (transform != null) + { + for (int v = 0, vLength = vertices.Length; v < vLength; ++v) + { + Vector3 vertex = transform.TransformPoint(vertices[v]); + writer.Write(vertex.x); + writer.Write(vertex.y); + writer.Write(vertex.z); + } + } + else + { + foreach (Vector3 vertex in vertices) + { + writer.Write(vertex.x); + writer.Write(vertex.y); + writer.Write(vertex.z); + } + } + } + + /// + /// Reads a mesh's vertices from the data stream. + /// + /// BinaryReader representing the data stream. + /// Count of vertices to read. + /// Array of Vector3 structures representing the mesh's vertices. + private static Vector3[] ReadVertices(BinaryReader reader, int vertexCount) + { + SysDiag.Debug.Assert(reader != null); + + Vector3[] vertices = new Vector3[vertexCount]; + + for (int i = 0; i < vertices.Length; i++) + { + vertices[i] = new Vector3(reader.ReadSingle(), + reader.ReadSingle(), + reader.ReadSingle()); + } + + return vertices; + } + + /// + /// Writes the vertex indices that represent a mesh's triangles to the data stream + /// + /// BinaryWriter representing the data stream. + /// Array of integers that describe how the vertex indices form triangles. + private static void WriteTriangleIndicies(BinaryWriter writer, int[] triangleIndices) + { + SysDiag.Debug.Assert(writer != null); + + foreach (int index in triangleIndices) + { + writer.Write(index); + } + } + + /// + /// Reads the vertex indices that represent a mesh's triangles from the data stream + /// + /// BinaryReader representing the data stream. + /// Count of indices to read. + /// Array of integers that describe how the vertex indices form triangles. + private static int[] ReadTriangleIndicies(BinaryReader reader, int triangleIndexCount) + { + SysDiag.Debug.Assert(reader != null); + + int[] triangleIndices = new int[triangleIndexCount]; + + for (int i = 0; i < triangleIndices.Length; i++) + { + triangleIndices[i] = reader.ReadInt32(); + } + + return triangleIndices; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs.meta new file mode 100644 index 0000000..a6e73d0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/RemoteMapping/SimpleMeshSerializer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 088ad37b7824ce1449ef005936680709 +timeCreated: 1455735876 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs new file mode 100644 index 0000000..733a0c4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs @@ -0,0 +1,327 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// The SpatialMappingManager class allows applications to use a SurfaceObserver or a stored + /// Spatial Mapping mesh (loaded from a file). + /// When an application loads a mesh file, the SurfaceObserver is stopped. + /// Calling StartObserver() clears the stored mesh and enables real-time SpatialMapping updates. + /// + [RequireComponent(typeof(SpatialMappingObserver))] + public partial class SpatialMappingManager : Singleton + { + [Tooltip("The physics layer for spatial mapping objects to be set to.")] + public int PhysicsLayer = 31; + + [Tooltip("The material to use for rendering spatial mapping data.")] + [SerializeField] + private Material surfaceMaterial; + + [Tooltip("Determines if the surface observer should be automatically started.")] + [SerializeField] + private bool autoStartObserver = true; + + [Tooltip("Determines if spatial mapping data will be rendered.")] + [SerializeField] + private bool drawVisualMeshes = false; + + [Tooltip("Determines if spatial mapping data will cast shadows.")] + [SerializeField] + private bool castShadows = false; + + /// + /// Used for gathering real-time Spatial Mapping data on the HoloLens. + /// + private SpatialMappingObserver surfaceObserver; + + /// + /// Time when StartObserver() was called. + /// + [HideInInspector] + public float StartTime { get; private set; } + + /// + /// The current source of spatial mapping data. + /// + public SpatialMappingSource Source + { + get { return source; } + + private set + { + if (source != value) + { + UpdateRendering(false); + + var oldSource = source; + source = value; + + UpdateRendering(DrawVisualMeshes); + + var handlers = SourceChanged; + if (handlers != null) + { + handlers(this, PropertyChangedEventArgsEx.Create(() => Source, oldSource, source)); + } + } + } + } + private SpatialMappingSource source; + + /// + /// Occurs when changes. + /// + public event EventHandler> SourceChanged; + + // Called when the GameObject is first created. + protected override void Awake() + { + base.Awake(); + + surfaceObserver = gameObject.GetComponent(); + Source = surfaceObserver; + } + + // Use for initialization. + private void Start() + { + if (autoStartObserver) + { + StartObserver(); + } + } + + /// + /// Returns the layer as a bit mask. + /// + public int LayerMask + { + get { return (1 << PhysicsLayer); } + } + + /// + /// The material to use when rendering surfaces. + /// + public Material SurfaceMaterial + { + get + { + return surfaceMaterial; + } + set + { + if (value != surfaceMaterial) + { + surfaceMaterial = value; + SetSurfaceMaterial(surfaceMaterial); + } + } + } + + /// + /// Specifies whether or not the SpatialMapping meshes are to be rendered. + /// + public bool DrawVisualMeshes + { + get + { + return drawVisualMeshes; + } + set + { + if (value != drawVisualMeshes) + { + drawVisualMeshes = value; + UpdateRendering(drawVisualMeshes); + } + } + } + + /// + /// Specifies whether or not the SpatialMapping meshes can cast shadows. + /// + public bool CastShadows + { + get + { + return castShadows; + } + set + { + if (value != castShadows) + { + castShadows = value; + SetShadowCasting(castShadows); + } + } + } + + /// + /// Sets the source of surface information. + /// + /// The source to switch to. Null means return to the live stream if possible. + public void SetSpatialMappingSource(SpatialMappingSource mappingSource) + { + Source = (mappingSource ?? surfaceObserver); + } + + /// + /// Sets the material used by all Spatial Mapping meshes. + /// + /// New material to apply. + public void SetSurfaceMaterial(Material setSurfaceMaterial) + { + SurfaceMaterial = setSurfaceMaterial; + if (DrawVisualMeshes) + { + foreach (MeshRenderer sourceRenderer in Source.GetMeshRenderers()) + { + if (sourceRenderer != null) + { + sourceRenderer.sharedMaterial = setSurfaceMaterial; + } + } + } + } + + /// + /// Checks to see if the SurfaceObserver is currently running. + /// + /// True, if the observer state is running. + public bool IsObserverRunning() + { + return surfaceObserver.ObserverState == ObserverStates.Running; + } + + /// + /// Instructs the SurfaceObserver to start updating the SpatialMapping mesh. + /// + public void StartObserver() + { +#if UNITY_EDITOR || UNITY_UWP + // Allow observering if a device is present (Holographic Remoting) + if (!UnityEngine.VR.VRDevice.isPresent) return; +#endif + if (!IsObserverRunning()) + { + surfaceObserver.StartObserving(); + StartTime = Time.unscaledTime; + } + } + + /// + /// Instructs the SurfaceObserver to stop updating the SpatialMapping mesh. + /// + public void StopObserver() + { +#if UNITY_EDITOR || UNITY_UWP + // Allow observering if a device is present (Holographic Remoting) + if (!UnityEngine.VR.VRDevice.isPresent) return; +#endif + if (IsObserverRunning()) + { + surfaceObserver.StopObserving(); + } + } + + /// + /// Instructs the SurfaceObserver to stop and cleanup all meshes. + /// + public void CleanupObserver() + { + surfaceObserver.CleanupObserver(); + } + + /// + /// Gets all meshes that are associated with the SpatialMapping mesh. + /// + /// + /// Collection of Mesh objects representing the SpatialMapping mesh. + /// + public List GetMeshes() + { + List meshes = new List(); + List meshFilters = GetMeshFilters(); + + // Get all valid mesh filters for observed surfaces. + for (int i = 0; i < meshFilters.Count; i++) + { + // GetMeshFilters ensures that both filter and filter.sharedMesh are not null. + meshes.Add(meshFilters[i].sharedMesh); + } + + return meshes; + } + + /// + /// Gets all the surface objects associated with the Spatial Mapping mesh. + /// + /// Collection of SurfaceObjects. + public ReadOnlyCollection GetSurfaceObjects() + { + return Source.SurfaceObjects; + } + + /// + /// Gets all Mesh Filter objects associated with the Spatial Mapping mesh. + /// + /// Collection of Mesh Filter objects. + public List GetMeshFilters() + { + return Source.GetMeshFilters(); + } + + /// + /// Sets the Cast Shadows property for each Spatial Mapping mesh renderer. + /// + private void SetShadowCasting(bool canCastShadows) + { + CastShadows = canCastShadows; + foreach (MeshRenderer sourceRenderer in Source.GetMeshRenderers()) + { + if (sourceRenderer != null) + { + if (canCastShadows) + { + sourceRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On; + } + else + { + sourceRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + } + } + } + } + + /// + /// Updates the rendering state on the currently enabled surfaces. + /// Updates the material and shadow casting mode for each renderer. + /// + /// True, if meshes should be rendered. + private void UpdateRendering(bool enable) + { + if (Source != null) + { + List renderers = Source.GetMeshRenderers(); + for (int index = 0; index < renderers.Count; index++) + { + if (renderers[index] != null) + { + renderers[index].enabled = enable; + if (enable) + { + renderers[index].sharedMaterial = SurfaceMaterial; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs.meta new file mode 100644 index 0000000..c0cf84d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d587b71ba3b55e44f9654cec8898c32f +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs new file mode 100644 index 0000000..70e32bc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs @@ -0,0 +1,505 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.VR.WSA; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// Spatial Mapping Observer states. + /// + public enum ObserverStates + { + /// + /// The SurfaceObserver is currently running. + /// + Running = 0, + + /// + /// The SurfaceObserver is currently idle. + /// + Stopped = 1 + } + + /// + /// Spatial Mapping Volume Type + /// + public enum ObserverVolumeTypes + { + /// + /// The observed volume is an axis aligned box. + /// + AxisAlignedBox = 0, + + /// + /// The observed volume is an oriented box. + /// + OrientedBox = 1, + + /// + /// The observed volume is a sphere. + /// + Sphere = 2 + } + + /// + /// The SpatialMappingObserver class encapsulates the SurfaceObserver into an easy to use + /// object that handles managing the observed surfaces and the rendering of surface geometry. + /// + public class SpatialMappingObserver : SpatialMappingSource + { + [Tooltip("The number of triangles to calculate per cubic meter.")] + public float TrianglesPerCubicMeter = 500f; + + [Tooltip("How long to wait (in sec) between Spatial Mapping updates.")] + public float TimeBetweenUpdates = 3.5f; + + /// + /// Indicates the current state of the Surface Observer. + /// + public ObserverStates ObserverState { get; private set; } + + /// + /// Indicates the current type of the observed volume + /// + [SerializeField][Tooltip("The shape of the observation volume.")] + private ObserverVolumeTypes observerVolumeType = ObserverVolumeTypes.AxisAlignedBox; + public ObserverVolumeTypes ObserverVolumeType + { + get + { + return observerVolumeType; + } + set + { + if(observerVolumeType != value) + { + observerVolumeType = value; + SwitchObservedVolume(); + } + } + } + + /// + /// Our Surface Observer object for generating/updating Spatial Mapping data. + /// + private SurfaceObserver observer; + + /// + /// A queue of surfaces that need their meshes created (or updated). + /// + private readonly Queue surfaceWorkQueue = new Queue(); + + /// + /// To prevent too many meshes from being generated at the same time, we will + /// only request one mesh to be created at a time. This variable will track + /// if a mesh creation request is in flight. + /// + private SurfaceObject? outstandingMeshRequest = null; + + /// + /// When surfaces are replaced or removed, rather than destroying them, we'll keep + /// one as a spare for use in outstanding mesh requests. That way, we'll have fewer + /// game object create/destroy cycles, which should help performance. + /// + private SurfaceObject? spareSurfaceObject = null; + + /// + /// Used to track when the Observer was last updated. + /// + private float updateTime; + + [SerializeField][Tooltip("The extents of the observation volume.")] + private Vector3 extents = Vector3.one * 10.0f; + public Vector3 Extents + { + get + { + return extents; + } + set + { + if(extents != value) + { + extents = value; + SwitchObservedVolume(); + } + } + } + + /// + /// The origin of the observation volume. + /// + [SerializeField][Tooltip("The origin of the observation volume.")] + private Vector3 origin = Vector3.zero; + public Vector3 Origin + { + get + { + return origin; + } + set + { + if(origin != value) + { + origin = value; + SwitchObservedVolume(); + } + } + } + + /// + /// The direction of the observed volume, if an oriented box is choosen. + /// + [SerializeField][Tooltip("The direction of the observation volume.")] + private Quaternion orientation = Quaternion.identity; + public Quaternion Orientation + { + get + { + return orientation; + } + set + { + if(orientation != value) + { + orientation = value; + // Only needs to be changed if the corresponding mode is active. + if(ObserverVolumeType == ObserverVolumeTypes.OrientedBox) + { + SwitchObservedVolume(); + } + } + } + } + + protected override void Awake() + { + base.Awake(); + + ObserverState = ObserverStates.Stopped; + } + + /// + /// Called once per frame. + /// + private void Update() + { + if ((ObserverState == ObserverStates.Running) && (outstandingMeshRequest == null)) + { + if (surfaceWorkQueue.Count > 0) + { + // We're using a simple first-in-first-out rule for requesting meshes, but a more sophisticated algorithm could prioritize + // the queue based on distance to the user or some other metric. + SurfaceId surfaceID = surfaceWorkQueue.Dequeue(); + + string surfaceName = ("Surface-" + surfaceID.handle); + + SurfaceObject newSurface; + WorldAnchor worldAnchor; + + if (spareSurfaceObject == null) + { + newSurface = CreateSurfaceObject( + mesh: null, + objectName: surfaceName, + parentObject: transform, + meshID: surfaceID.handle, + drawVisualMeshesOverride: false + ); + + worldAnchor = newSurface.Object.AddComponent(); + } + else + { + newSurface = spareSurfaceObject.Value; + spareSurfaceObject = null; + + Debug.Assert(!newSurface.Object.activeSelf); + newSurface.Object.SetActive(true); + + Debug.Assert(newSurface.Filter.sharedMesh == null); + Debug.Assert(newSurface.Collider.sharedMesh == null); + newSurface.Object.name = surfaceName; + Debug.Assert(newSurface.Object.transform.parent == transform); + newSurface.ID = surfaceID.handle; + newSurface.Renderer.enabled = false; + + worldAnchor = newSurface.Object.GetComponent(); + Debug.Assert(worldAnchor != null); + } + + var surfaceData = new SurfaceData( + surfaceID, + newSurface.Filter, + worldAnchor, + newSurface.Collider, + TrianglesPerCubicMeter, + _bakeCollider: true + ); + + if (observer.RequestMeshAsync(surfaceData, SurfaceObserver_OnDataReady)) + { + outstandingMeshRequest = newSurface; + } + else + { + Debug.LogErrorFormat("Mesh request for failed. Is {0} a valid Surface ID?", surfaceID.handle); + + Debug.Assert(outstandingMeshRequest == null); + ReclaimSurface(newSurface); + } + } + else if ((Time.unscaledTime - updateTime) >= TimeBetweenUpdates) + { + observer.Update(SurfaceObserver_OnSurfaceChanged); + updateTime = Time.unscaledTime; + } + } + } + + /// + /// Starts the Surface Observer. + /// + public void StartObserving() + { + if (observer == null) + { + observer = new SurfaceObserver(); + SwitchObservedVolume(); + } + + if (ObserverState != ObserverStates.Running) + { + Debug.Log("Starting the observer."); + ObserverState = ObserverStates.Running; + + // We want the first update immediately. + updateTime = 0; + } + } + + /// + /// Stops the Surface Observer. + /// + /// Sets the Surface Observer state to ObserverStates.Stopped. + public void StopObserving() + { + if (ObserverState == ObserverStates.Running) + { + Debug.Log("Stopping the observer."); + ObserverState = ObserverStates.Stopped; + + surfaceWorkQueue.Clear(); + updateTime = 0; + } + } + + /// + /// Cleans up all memory and objects associated with the observer. + /// + public void CleanupObserver() + { + StopObserving(); + + if (observer != null) + { + observer.Dispose(); + observer = null; + } + + if (outstandingMeshRequest != null) + { + CleanUpSurface(outstandingMeshRequest.Value); + outstandingMeshRequest = null; + } + + if (spareSurfaceObject != null) + { + CleanUpSurface(spareSurfaceObject.Value); + spareSurfaceObject = null; + } + + Cleanup(); + } + + /// + /// Can be called to override the default origin for the observed volume. Can only be called while observer has been started. + /// Kept for compatibility with Examples/SpatialUnderstanding + /// + public bool SetObserverOrigin(Vector3 origin) + { + bool originUpdated = false; + + if (observer != null) + { + Origin = origin; + originUpdated = true; + } + + return originUpdated; + } + + /// + /// Change the observed volume according to ObserverVolumeType. + /// + private void SwitchObservedVolume() + { + if (observer == null) + { + return; + } + + switch (observerVolumeType) + { + case ObserverVolumeTypes.AxisAlignedBox: + observer.SetVolumeAsAxisAlignedBox(origin, extents); + break; + case ObserverVolumeTypes.OrientedBox: + observer.SetVolumeAsOrientedBox(origin, extents, orientation); + break; + case ObserverVolumeTypes.Sphere: + observer.SetVolumeAsSphere(origin, extents.magnitude); //workaround + break; + default: + observer.SetVolumeAsAxisAlignedBox(origin, extents); + break; + } + + } + + /// + /// Handles the SurfaceObserver's OnDataReady event. + /// + /// Struct containing output data. + /// Set to true if output has been written. + /// Seconds between mesh cook request and propagation of this event. + private void SurfaceObserver_OnDataReady(SurfaceData cookedData, bool outputWritten, float elapsedCookTimeSeconds) + { + if (outstandingMeshRequest == null) + { + Debug.LogErrorFormat("Got OnDataReady for surface {0} while no request was outstanding.", + cookedData.id.handle + ); + + return; + } + + if (!IsMatchingSurface(outstandingMeshRequest.Value, cookedData)) + { + Debug.LogErrorFormat("Got mismatched OnDataReady for surface {0} while request for surface {1} was outstanding.", + cookedData.id.handle, + outstandingMeshRequest.Value.ID + ); + + ReclaimSurface(outstandingMeshRequest.Value); + outstandingMeshRequest = null; + + return; + } + + if (ObserverState != ObserverStates.Running) + { + Debug.LogFormat("Got OnDataReady for surface {0}, but observer was no longer running.", + cookedData.id.handle + ); + + ReclaimSurface(outstandingMeshRequest.Value); + outstandingMeshRequest = null; + + return; + } + + if (!outputWritten) + { + ReclaimSurface(outstandingMeshRequest.Value); + outstandingMeshRequest = null; + + return; + } + + Debug.Assert(outstandingMeshRequest.Value.Object.activeSelf); + outstandingMeshRequest.Value.Renderer.enabled = SpatialMappingManager.Instance.DrawVisualMeshes; + + SurfaceObject? replacedSurface = UpdateOrAddSurfaceObject(outstandingMeshRequest.Value, destroyGameObjectIfReplaced: false); + outstandingMeshRequest = null; + + if (replacedSurface != null) + { + ReclaimSurface(replacedSurface.Value); + } + } + + /// + /// Handles the SurfaceObserver's OnSurfaceChanged event. + /// + /// The identifier assigned to the surface which has changed. + /// The type of change that occurred on the surface. + /// The bounds of the surface. + /// The date and time at which the change occurred. + private void SurfaceObserver_OnSurfaceChanged(SurfaceId id, SurfaceChange changeType, Bounds bounds, DateTime updateTime) + { + // Verify that the client of the Surface Observer is expecting updates. + if (ObserverState != ObserverStates.Running) + { + return; + } + + switch (changeType) + { + case SurfaceChange.Added: + case SurfaceChange.Updated: + surfaceWorkQueue.Enqueue(id); + break; + + case SurfaceChange.Removed: + SurfaceObject? removedSurface = RemoveSurfaceIfFound(id.handle, destroyGameObject: false); + if (removedSurface != null) + { + ReclaimSurface(removedSurface.Value); + } + break; + + default: + Debug.LogErrorFormat("Unexpected {0} value: {1}.", changeType.GetType(), changeType); + break; + } + } + + /// + /// Called when the GameObject is unloaded. + /// + private void OnDestroy() + { + CleanupObserver(); + } + + private void ReclaimSurface(SurfaceObject availableSurface) + { + if (spareSurfaceObject == null) + { + CleanUpSurface(availableSurface, destroyGameObject: false); + + availableSurface.Object.name = "Unused Surface"; + availableSurface.Object.SetActive(false); + + spareSurfaceObject = availableSurface; + } + else + { + CleanUpSurface(availableSurface); + } + } + + private bool IsMatchingSurface(SurfaceObject surfaceObject, SurfaceData surfaceData) + { + return (surfaceObject.ID == surfaceData.id.handle) + && (surfaceObject.Filter == surfaceData.outputMesh) + && (surfaceObject.Collider == surfaceData.outputCollider) + ; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs.meta new file mode 100644 index 0000000..e1e6c84 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingObserver.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b2a98b181acba5549af3d852c7664623 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs new file mode 100644 index 0000000..a61656c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs @@ -0,0 +1,339 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; +using UnityEngine.Rendering; + +namespace HoloToolkit.Unity.SpatialMapping +{ + public class SpatialMappingSource : MonoBehaviour + { + /// + /// Surface object + /// + public struct SurfaceObject + { + public int ID; + public GameObject Object; + public MeshRenderer Renderer; + public MeshFilter Filter; + public MeshCollider Collider; + } + + public struct SurfaceUpdate + { + public SurfaceObject Old; + public SurfaceObject New; + } + + /// + /// Collection of surface objects that have been created for this spatial mapping source. + /// + public ReadOnlyCollection SurfaceObjects + { + get { return surfaceObjects; } + } + + public event EventHandler> SurfaceAdded; + public event EventHandler> SurfaceUpdated; + public event EventHandler> SurfaceRemoved; + public event EventHandler RemovingAllSurfaces; + + /// + /// When a mesh is created we will need to create a game object with a minimum + /// set of components to contain the mesh. These are the required component types. + /// + protected readonly Type[] componentsRequiredForSurfaceMesh = + { + typeof(MeshFilter), + typeof(MeshRenderer), + typeof(MeshCollider) + }; + + /// + /// Material to use for rendering the mesh + /// + protected virtual Material RenderMaterial { get { return SpatialMappingManager.Instance.SurfaceMaterial; } } + + private readonly List surfaceObjectsWriteable; + private readonly ReadOnlyCollection surfaceObjects; + + public SpatialMappingSource() + { + surfaceObjectsWriteable = new List(); + surfaceObjects = new ReadOnlyCollection(surfaceObjectsWriteable); + } + + protected virtual void Awake() + { + // Nothing. + } + + /// + /// Create a new surface object. + /// + /// The mesh to attach. Can be null. + /// What to name this object. + /// What to parent this object to. + /// Optional user specified ID for the mesh. + /// If specified, overrides the default value for enabling/disabling the mesh renderer. + /// If specified, overrides the default value for casting shadows. + /// The newly created surface object. + protected SurfaceObject CreateSurfaceObject( + Mesh mesh, + string objectName, + Transform parentObject, + int meshID = 0, + bool? drawVisualMeshesOverride = null, + bool? castShadowsOverride = null + ) + { + SurfaceObject surfaceObject = new SurfaceObject(); + surfaceObject.ID = meshID; + + surfaceObject.Object = new GameObject(objectName, componentsRequiredForSurfaceMesh); + surfaceObject.Object.transform.SetParent(parentObject); + surfaceObject.Object.layer = SpatialMappingManager.Instance.PhysicsLayer; + + surfaceObject.Filter = surfaceObject.Object.GetComponent(); + surfaceObject.Filter.sharedMesh = mesh; + + surfaceObject.Renderer = surfaceObject.Object.GetComponent(); + surfaceObject.Renderer.sharedMaterial = RenderMaterial; + surfaceObject.Renderer.enabled = (drawVisualMeshesOverride ?? SpatialMappingManager.Instance.DrawVisualMeshes); + surfaceObject.Renderer.shadowCastingMode = ((castShadowsOverride ?? SpatialMappingManager.Instance.CastShadows) ? ShadowCastingMode.On : ShadowCastingMode.Off); + + surfaceObject.Collider = surfaceObject.Object.GetComponent(); + + // Reset the surface mesh collider to fit the updated mesh. + // Unity tribal knowledge indicates that to change the mesh assigned to a + // mesh collider, the mesh must first be set to null. Presumably there + // is a side effect in the setter when setting the shared mesh to null. + surfaceObject.Collider.sharedMesh = null; + surfaceObject.Collider.sharedMesh = surfaceObject.Filter.sharedMesh; + + return surfaceObject; + } + + /// + /// Add the surface to . + /// + /// The surface to add. + protected void AddSurfaceObject(SurfaceObject toAdd) + { + surfaceObjectsWriteable.Add(toAdd); + + var handlers = SurfaceAdded; + if (handlers != null) + { + handlers(this, DataEventArgs.Create(toAdd)); + } + } + + /// + /// Update the first surface with a matching ID if one exists in , otherwise add the surface as new. + /// + /// The surface to be updated or added. + /// If a surface is updated, and a game object is being replaced, pass true to destroy the outgoing game object or false otherwise. + /// If a surface is updated, and new meshes are replacing old meshes, pass true to destroy the outgoing meshes or false otherwise. + /// The surface object that was updated or null if one was not found meaning a new surface was added. + protected SurfaceObject? UpdateOrAddSurfaceObject(SurfaceObject toUpdateOrAdd, bool destroyGameObjectIfReplaced = true, bool destroyMeshesIfReplaced = true) + { + SurfaceObject? replaced = null; + + for (int iSurface = 0; iSurface < surfaceObjectsWriteable.Count; iSurface++) + { + SurfaceObject existing = surfaceObjectsWriteable[iSurface]; + + if (existing.ID == toUpdateOrAdd.ID) + { + surfaceObjectsWriteable[iSurface] = toUpdateOrAdd; + + var handlers = SurfaceUpdated; + if (handlers != null) + { + handlers(this, DataEventArgs.Create(new SurfaceUpdate { Old = existing, New = toUpdateOrAdd })); + } + + CleanUpSurface( + existing, + destroyGameObjectIfReplaced, + destroyMeshesIfReplaced, + objectToPreserve: toUpdateOrAdd.Object, + meshToPreserveA: toUpdateOrAdd.Filter.sharedMesh, + meshToPreserveB: toUpdateOrAdd.Collider.sharedMesh + ); + + replaced = existing; + break; + } + } + + if (replaced == null) + { + AddSurfaceObject(toUpdateOrAdd); + } + + return replaced; + } + + /// + /// Remove the first surface with the specified ID if one exists in . + /// + /// The ID of the surface to remove. + /// True to destroy the associated with the surface, false otherwise. + /// True to destroy the meshes associated with the surface, false otherwise. + /// The surface object if one was found and removed or null if one was not found. + protected SurfaceObject? RemoveSurfaceIfFound(int surfaceID, bool destroyGameObject = true, bool destroyMeshes = true) + { + SurfaceObject? removed = null; + + for (int iSurface = 0; iSurface < surfaceObjectsWriteable.Count; iSurface++) + { + SurfaceObject surface = surfaceObjectsWriteable[iSurface]; + + if (surface.ID == surfaceID) + { + surfaceObjectsWriteable.RemoveAt(iSurface); + + var handlers = SurfaceRemoved; + if (handlers != null) + { + handlers(this, DataEventArgs.Create(surface)); + } + + CleanUpSurface(surface, destroyGameObject, destroyMeshes); + + removed = surface; + break; + } + } + + return removed; + } + + /// + /// Clean up the resources associated with the surface. + /// + /// The surface whose resources will be cleaned up. + /// + /// + /// If the surface's game object matches this parameter, it will not be destroyed. + /// If either of the surface's meshes matches this parameter, it will not be destroyed. + /// If either of the surface's meshes matches this parameter, it will not be destroyed. + protected void CleanUpSurface( + SurfaceObject surface, + bool destroyGameObject = true, + bool destroyMeshes = true, + GameObject objectToPreserve = null, + Mesh meshToPreserveA = null, + Mesh meshToPreserveB = null + ) + { + if (destroyGameObject + && (surface.Object != null) + && (surface.Object != objectToPreserve) + ) + { + Destroy(surface.Object); + Debug.Assert(surface.GetType().IsValueType(), "If surface is no longer a value type, you should probably set surface.Object to null."); + } + + Mesh filterMesh = surface.Filter.sharedMesh; + Mesh colliderMesh = surface.Collider.sharedMesh; + + if (destroyMeshes + && (filterMesh != null) + && (filterMesh != meshToPreserveA) + && (filterMesh != meshToPreserveB) + ) + { + Destroy(filterMesh); + surface.Filter.sharedMesh = null; + } + + if (destroyMeshes + && (colliderMesh != null) + && (colliderMesh != filterMesh) + && (colliderMesh != meshToPreserveA) + && (colliderMesh != meshToPreserveB) + ) + { + Destroy(colliderMesh); + surface.Collider.sharedMesh = null; + } + } + + /// + /// Cleans up references to objects that we have created. + /// + /// True to destroy the game objects of each surface, false otherwise. + /// True to destroy the meshes of each surface, false otherwise. + protected void Cleanup(bool destroyGameObjects = true, bool destroyMeshes = true) + { + var handlers = RemovingAllSurfaces; + if (handlers != null) + { + handlers(this, EventArgs.Empty); + } + + for (int index = 0; index < surfaceObjectsWriteable.Count; index++) + { + CleanUpSurface(surfaceObjectsWriteable[index], destroyGameObjects, destroyMeshes); + } + surfaceObjectsWriteable.Clear(); + } + + /// + /// Gets all mesh filters that have a valid mesh. + /// + /// A list of filters, each with a mesh containing at least one triangle. + public virtual List GetMeshFilters() + { + List meshFilters = new List(); + + for (int index = 0; index < surfaceObjectsWriteable.Count; index++) + { + if (surfaceObjectsWriteable[index].Filter != null && + surfaceObjectsWriteable[index].Filter.sharedMesh != null && + surfaceObjectsWriteable[index].Filter.sharedMesh.vertexCount > 2) + { + meshFilters.Add(surfaceObjectsWriteable[index].Filter); + } + } + + return meshFilters; + } + + /// + /// Gets all mesh renderers that have been created. + /// + /// + public virtual List GetMeshRenderers() + { + List meshRenderers = new List(); + + for (int index = 0; index < surfaceObjectsWriteable.Count; index++) + { + if (surfaceObjectsWriteable[index].Renderer != null) + { + meshRenderers.Add(surfaceObjectsWriteable[index].Renderer); + } + } + + return meshRenderers; + } + + /// + /// Saves all the currently created spatial source meshes in world space. + /// + /// Name to give the mesh file. Exclude path and extension. + public void SaveSpatialMeshes(string fileName) + { + MeshSaver.Save(fileName, GetMeshFilters()); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs.meta new file mode 100644 index 0000000..4e933a6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialMappingSource.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 294730f65392a4646bd60a17686da210 +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing.meta new file mode 100644 index 0000000..5142484 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a52a050b94d6d8645a4fd8c551674741 +folderAsset: yes +timeCreated: 1470190843 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs new file mode 100644 index 0000000..abbe18f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs @@ -0,0 +1,339 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + [StructLayout(LayoutKind.Sequential)] + public struct OrientedBoundingBox + { + public Vector3 Center; + public Vector3 Extents; + public Quaternion Rotation; + }; + + [StructLayout(LayoutKind.Sequential)] + public struct BoundedPlane + { + public Plane Plane; + public OrientedBoundingBox Bounds; + public float Area; + + /// + /// Builds the bounded plane to match the obb defined by xform + /// + public BoundedPlane(Transform xform) + { + Plane = new Plane(xform.forward, xform.position); + Bounds = new OrientedBoundingBox() + { + Center = xform.position, + Extents = xform.localScale / 2, + Rotation = xform.rotation + }; + Area = Bounds.Extents.x * Bounds.Extents.y; + } + }; + + public class PlaneFinding + { + #region Public APIs + + /// + /// PlaneFinding is an expensive task that should not be run from Unity's main thread as it + /// will stall the thread and cause a frame rate dip. Instead, the PlaneFinding APIs should be + /// exclusively called from background threads. Unfortunately, Unity's built-in data types + /// (such as MeshFilter) are not thread safe and cannot be accessed from background threads. + /// The MeshData struct exists to work-around this limitation. When you want to find planes + /// in a collection of MeshFilter objects, start by constructing a list of MeshData structs + /// from those MeshFilters. You can then take the resulting list of MeshData structs, and + /// safely pass it to the FindPlanes() API from a background thread. + /// + public struct MeshData + { + public Matrix4x4 Transform; + public Vector3[] Verts; + public Vector3[] Normals; + public Int32[] Indices; + + public MeshData(MeshFilter meshFilter) + { + Transform = meshFilter.transform.localToWorldMatrix; + Verts = meshFilter.sharedMesh.vertices; + Normals = meshFilter.sharedMesh.normals; + Indices = meshFilter.sharedMesh.triangles; + } + } + + /// + /// Finds small planar patches that are contained within individual meshes. The output of this + /// API can then be passed to MergeSubPlanes() in order to find larger planar surfaces that + /// potentially span across multiple meshes. + /// + /// + /// List of meshes to run the plane finding algorithm on. + /// + /// + /// Planes whose normal vectors are within this threshold (in degrees) from vertical/horizontal + /// will be snapped to be perfectly gravity aligned. When set to something other than zero, the + /// bounding boxes for each plane will be gravity aligned as well, rather than rotated for an + /// optimally tight fit. Pass 0.0 for this parameter to completely disable the gravity alignment + /// logic. + /// + public static BoundedPlane[] FindSubPlanes(List meshes, float snapToGravityThreshold = 0.0f) + { + StartPlaneFinding(); + + try + { + int planeCount; + IntPtr planesPtr; + IntPtr pinnedMeshData = PinMeshDataForMarshalling(meshes); + DLLImports.FindSubPlanes(meshes.Count, pinnedMeshData, snapToGravityThreshold, out planeCount, out planesPtr); + return MarshalBoundedPlanesFromIntPtr(planesPtr, planeCount); + } + finally + { + FinishPlaneFinding(); + } + } + + /// + /// Takes the subplanes returned by one or more previous calls to FindSubPlanes() and merges + /// them together into larger planes that can potentially span across multiple meshes. + /// Overlapping subplanes that have similar plane equations will be merged together to form + /// larger planes. + /// + /// + /// The output from one or more previous calls to FindSubPlanes(). + /// + /// + /// Planes whose normal vectors are within this threshold (in degrees) from vertical/horizontal + /// will be snapped to be perfectly gravity aligned. When set to something other than zero, the + /// bounding boxes for each plane will be gravity aligned as well, rather than rotated for an + /// optimally tight fit. Pass 0.0 for this parameter to completely disable the gravity alignment + /// logic. + /// + /// + /// While merging subplanes together, any candidate merged plane whose constituent mesh + /// triangles have a total area less than this threshold are ignored. + /// + public static BoundedPlane[] MergeSubPlanes(BoundedPlane[] subPlanes, float snapToGravityThreshold = 0.0f, float minArea = 0.0f) + { + StartPlaneFinding(); + + try + { + int planeCount; + IntPtr planesPtr; + DLLImports.MergeSubPlanes(subPlanes.Length, PinObject(subPlanes), minArea, snapToGravityThreshold, out planeCount, out planesPtr); + return MarshalBoundedPlanesFromIntPtr(planesPtr, planeCount); + } + finally + { + FinishPlaneFinding(); + } + } + + /// + /// Convenience wrapper that executes FindSubPlanes followed by MergeSubPlanes via a single + /// call into native code (which improves performance by avoiding a bunch of unnecessary data + /// marshalling and a managed-to-native transition). + /// + /// + /// List of meshes to run the plane finding algorithm on. + /// + /// + /// Planes whose normal vectors are within this threshold (in degrees) from vertical/horizontal + /// will be snapped to be perfectly gravity aligned. When set to something other than zero, the + /// bounding boxes for each plane will be gravity aligned as well, rather than rotated for an + /// optimally tight fit. Pass 0.0 for this parameter to completely disable the gravity alignment + /// logic. + /// + /// + /// While merging subplanes together, any candidate merged plane whose constituent mesh + /// triangles have a total area less than this threshold are ignored. + /// + public static BoundedPlane[] FindPlanes(List meshes, float snapToGravityThreshold = 0.0f, float minArea = 0.0f) + { + StartPlaneFinding(); + + try + { + int planeCount; + IntPtr planesPtr; + IntPtr pinnedMeshData = PinMeshDataForMarshalling(meshes); + DLLImports.FindPlanes(meshes.Count, pinnedMeshData, minArea, snapToGravityThreshold, out planeCount, out planesPtr); + return MarshalBoundedPlanesFromIntPtr(planesPtr, planeCount); + } + finally + { + FinishPlaneFinding(); + } + } + + #endregion + + #region Internal + + private static bool findPlanesRunning = false; + private static System.Object findPlanesLock = new System.Object(); + private static DLLImports.ImportedMeshData[] reusedImportedMeshesForMarshalling; + private static List reusedPinnedMemoryHandles = new List(); + + /// + /// Validate that no other PlaneFinding API call is currently in progress. As a performance + /// optimization to avoid unnecessarily thrashing the garbage collector, each call into the + /// PlaneFinding DLL reuses a couple of static data structures. As a result, we can't handle + /// multiple concurrent calls into these APIs. + /// + private static void StartPlaneFinding() + { + lock (findPlanesLock) + { + if (findPlanesRunning) + { + throw new Exception("PlaneFinding is already running. You can not call these APIs from multiple threads."); + } + findPlanesRunning = true; + } + } + + /// + /// Cleanup after finishing a PlaneFinding API call by unpinning any memory that was pinned + /// for the call into the driver, and then reset the findPlanesRunning bool. + /// + private static void FinishPlaneFinding() + { + UnpinAllObjects(); + findPlanesRunning = false; + } + + /// + /// Pins the specified object so that the backing memory can not be relocated, adds the pinned + /// memory handle to the tracking list, and then returns that address of the pinned memory so + /// that it can be passed into the DLL to be access directly from native code. + /// + private static IntPtr PinObject(System.Object obj) + { + GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned); + reusedPinnedMemoryHandles.Add(h); + return h.AddrOfPinnedObject(); + } + + /// + /// Unpins all of the memory previously pinned by calls to PinObject(). + /// + private static void UnpinAllObjects() + { + for (int i = 0; i < reusedPinnedMemoryHandles.Count; ++i) + { + reusedPinnedMemoryHandles[i].Free(); + } + reusedPinnedMemoryHandles.Clear(); + } + + /// + /// Copies the supplied mesh data into the reusedMeshesForMarhsalling array. All managed arrays + /// are pinned so that the marshalling only needs to pass a pointer and the native code can + /// reference the memory in place without needing the marshaller to create a complete copy of + /// the data. + /// + private static IntPtr PinMeshDataForMarshalling(List meshes) + { + // if we have a big enough array reuse it, otherwise create new + if (reusedImportedMeshesForMarshalling == null || reusedImportedMeshesForMarshalling.Length < meshes.Count) + { + reusedImportedMeshesForMarshalling = new DLLImports.ImportedMeshData[meshes.Count]; + } + + for (int i = 0; i < meshes.Count; ++i) + { + reusedImportedMeshesForMarshalling[i] = new DLLImports.ImportedMeshData + { + transform = meshes[i].Transform, + vertCount = meshes[i].Verts.Length, + indexCount = meshes[i].Indices.Length, + verts = PinObject(meshes[i].Verts), + normals = PinObject(meshes[i].Normals), + indices = PinObject(meshes[i].Indices), + }; + } + + return PinObject(reusedImportedMeshesForMarshalling); + } + + /// + /// Marshals BoundedPlane data returned from a DLL API call into a managed BoundedPlane array + /// and then frees the memory that was allocated within the DLL. + /// + /// Disabling warning 618 when calling Marshal.SizeOf(), because + /// Unity does not support .Net 4.5.1+ for using the preferred Marshal.SizeOf(T) method."/>, + private static BoundedPlane[] MarshalBoundedPlanesFromIntPtr(IntPtr outArray, int size) + { + BoundedPlane[] resArray = new BoundedPlane[size]; +#pragma warning disable 618 + int structsize = Marshal.SizeOf(typeof(BoundedPlane)); +#pragma warning restore 618 + IntPtr current = outArray; + for (int i = 0; i < size; i++) + { +#pragma warning disable 618 + resArray[i] = (BoundedPlane)Marshal.PtrToStructure(current, typeof(BoundedPlane)); +#pragma warning restore 618 + current = (IntPtr)((long)current + structsize); + } + Marshal.FreeCoTaskMem(outArray); + return resArray; + } + + /// + /// Raw PlaneFinding.dll imports + /// + private class DLLImports + { + [StructLayout(LayoutKind.Sequential)] + public struct ImportedMeshData + { + public Matrix4x4 transform; + public Int32 vertCount; + public Int32 indexCount; + public IntPtr verts; + public IntPtr normals; + public IntPtr indices; + }; + + [DllImport("PlaneFinding")] + public static extern void FindPlanes( + [In] int meshCount, + [In] IntPtr meshes, + [In] float minArea, + [In] float snapToGravityThreshold, + [Out] out int planeCount, + [Out] out IntPtr planesPtr); + + [DllImport("PlaneFinding")] + public static extern void FindSubPlanes( + [In] int meshCount, + [In] IntPtr meshes, + [In] float snapToGravityThreshold, + [Out] out int planeCount, + [Out] out IntPtr planesPtr); + + [DllImport("PlaneFinding")] + public static extern void MergeSubPlanes( + [In] int subPlaneCount, + [In] IntPtr subPlanes, + [In] float minArea, + [In] float snapToGravityThreshold, + [Out] out int planeCount, + [Out] out IntPtr planesPtr); + } + + #endregion + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs.meta new file mode 100644 index 0000000..5cb1258 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/PlaneFinding.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 45aeb9dbd6db38b438fb3a33a19f90d5 +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs new file mode 100644 index 0000000..4a02276 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// RemoveSurfaceVertices will remove any vertices from the Spatial Mapping Mesh that fall within the bounding volume. + /// This can be used to create holes in the environment, or to help reduce triangle count after finding planes. + /// + public class RemoveSurfaceVertices : Singleton + { + [Tooltip("The amount, if any, to expand each bounding volume by.")] + public float BoundsExpansion = 0.0f; + + /// + /// Delegate which is called when the RemoveVerticesComplete event is triggered. + /// + /// + /// + public delegate void EventHandler(object source, EventArgs args); + + /// + /// EventHandler which is triggered when the RemoveSurfaceVertices is finished. + /// + public event EventHandler RemoveVerticesComplete; + + /// + /// Indicates if RemoveSurfaceVertices is currently removing vertices from the Spatial Mapping Mesh. + /// + private bool removingVerts = false; + + /// + /// Queue of bounding objects to remove surface vertices from. + /// Bounding objects are queued so that RemoveSurfaceVerticesWithinBounds can be called even when the previous task has not finished. + /// + private Queue boundingObjectsQueue; + +#if UNITY_EDITOR || UNITY_STANDALONE + /// + /// How much time (in sec), while running in the Unity Editor, to allow RemoveSurfaceVertices to consume before returning control to the main program. + /// + private static readonly float FrameTime = .016f; +#else + /// + /// How much time (in sec) to allow RemoveSurfaceVertices to consume before returning control to the main program. + /// + private static readonly float FrameTime = .008f; +#endif + + // GameObject initialization. + private void Start() + { + boundingObjectsQueue = new Queue(); + removingVerts = false; + } + + /// + /// Removes portions of the surface mesh that exist within the bounds of the boundingObjects. + /// + /// Collection of GameObjects that define the bounds where spatial mesh vertices should be removed. + public void RemoveSurfaceVerticesWithinBounds(IEnumerable boundingObjects) + { + if (boundingObjects == null) + { + return; + } + + if (!removingVerts) + { + removingVerts = true; + AddBoundingObjectsToQueue(boundingObjects); + + // We use Coroutine to split the work across multiple frames and avoid impacting the frame rate too much. + StartCoroutine(RemoveSurfaceVerticesWithinBoundsRoutine()); + } + else + { + // Add new boundingObjects to end of queue. + AddBoundingObjectsToQueue(boundingObjects); + } + } + + /// + /// Adds new bounding objects to the end of the Queue. + /// + /// Collection of GameObjects which define the bounds where spatial mesh vertices should be removed. + private void AddBoundingObjectsToQueue(IEnumerable boundingObjects) + { + foreach (GameObject item in boundingObjects) + { + Collider boundingCollider = item.GetComponent(); + if (boundingCollider != null) + { + Bounds bounds = boundingCollider.bounds; + + // Expand the bounds, if requested. + if (BoundsExpansion > 0.0f) + { + bounds.Expand(BoundsExpansion); + } + + boundingObjectsQueue.Enqueue(bounds); + } + } + } + + /// + /// Iterator block, analyzes surface meshes to find vertices existing within the bounds of any boundingObject and removes them. + /// + /// Yield result. + private IEnumerator RemoveSurfaceVerticesWithinBoundsRoutine() + { + List meshFilters = SpatialMappingManager.Instance.GetMeshFilters(); + float start = Time.realtimeSinceStartup; + + while (boundingObjectsQueue.Count > 0) + { + // Get the current boundingObject. + Bounds bounds = boundingObjectsQueue.Dequeue(); + + foreach (MeshFilter filter in meshFilters) + { + // Since this is amortized across frames, the filter can be destroyed by the time + // we get here. + if (filter == null) + { + continue; + } + + Mesh mesh = filter.sharedMesh; + MeshRenderer meshRenderer = filter.GetComponent(); + + // The mesh renderer bounds are in world space. + // If the mesh is null there is nothing to process + // If the renderer is null we can't get the renderer bounds + // If the renderer's bounds aren't contained inside of the current + // bounds from the bounds queue there is no reason to process + // If any of the above conditions are met, then we should go to the next meshfilter. + if (mesh == null || meshRenderer == null || !meshRenderer.bounds.Intersects(bounds)) + { + // We don't need to do anything to this mesh, move to the next one. + continue; + } + + // Remove vertices from any mesh that intersects with the bounds. + Vector3[] verts = mesh.vertices; + HashSet vertsToRemove = new HashSet(); + + // Find which mesh vertices are within the bounds. + for (int i = 0; i < verts.Length; ++i) + { + if (bounds.Contains(filter.transform.TransformPoint(verts[i]))) + { + // These vertices are within bounds, so mark them for removal. + vertsToRemove.Add(i); + } + + // If too much time has passed, we need to return control to the main game loop. + if ((Time.realtimeSinceStartup - start) > FrameTime) + { + // Pause our work here, and continue finding vertices to remove on the next frame. + yield return null; + start = Time.realtimeSinceStartup; + } + } + + if (vertsToRemove.Count == 0) + { + // We did not find any vertices to remove, so move to the next mesh. + continue; + } + + // We found vertices to remove, so now we need to remove any triangles that reference these vertices. + int[] indices = mesh.GetTriangles(0); + List updatedIndices = new List(); + + for (int index = 0; index < indices.Length; index += 3) + { + // Each triangle utilizes three slots in the index buffer, check to see if any of the + // triangle indices contain a vertex that should be removed. + if (vertsToRemove.Contains(indices[index]) || + vertsToRemove.Contains(indices[index + 1]) || + vertsToRemove.Contains(indices[index + 2])) + { + // Do nothing, we don't want to save this triangle... + } + else + { + // Every vertex in this triangle is good, so let's save it. + updatedIndices.Add(indices[index]); + updatedIndices.Add(indices[index + 1]); + updatedIndices.Add(indices[index + 2]); + } + + // If too much time has passed, we need to return control to the main game loop. + if ((Time.realtimeSinceStartup - start) > FrameTime) + { + // Pause our work, and continue making additional planes on the next frame. + yield return null; + start = Time.realtimeSinceStartup; + } + } + + if (indices.Length == updatedIndices.Count) + { + // None of the verts to remove were being referenced in the triangle list. + continue; + } + + // Update mesh to use the new triangles. + mesh.SetTriangles(updatedIndices.ToArray(), 0); + mesh.RecalculateBounds(); + yield return null; + start = Time.realtimeSinceStartup; + + // Reset the mesh collider to fit the new mesh. + MeshCollider meshCollider = filter.gameObject.GetComponent(); + if (meshCollider != null) + { + meshCollider.sharedMesh = null; + meshCollider.sharedMesh = mesh; + } + } + } + + Debug.Log("Finished removing vertices."); + + // We are done removing vertices, trigger an event. + EventHandler handler = RemoveVerticesComplete; + if (handler != null) + { + handler(this, EventArgs.Empty); + } + + removingVerts = false; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs.meta new file mode 100644 index 0000000..33e3041 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/RemoveSurfaceVertices.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d4077c41b4858904d8088a87ef45baed +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs new file mode 100644 index 0000000..63a7f05 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs @@ -0,0 +1,344 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +#if !UNITY_EDITOR && UNITY_METRO +using System.Threading; +using System.Threading.Tasks; +#endif + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// SurfaceMeshesToPlanes will find and create planes based on the meshes returned by the SpatialMappingManager's Observer. + /// + public class SurfaceMeshesToPlanes : Singleton + { + [Tooltip("Currently active planes found within the Spatial Mapping Mesh.")] + public List ActivePlanes; + + [Tooltip("Object used for creating and rendering Surface Planes.")] + public GameObject SurfacePlanePrefab; + + [Tooltip("Minimum area required for a plane to be created.")] + public float MinArea = 0.025f; + + /// + /// Determines which plane types should be rendered. + /// + [HideInInspector] + public PlaneTypes drawPlanesMask = + (PlaneTypes.Wall | PlaneTypes.Floor | PlaneTypes.Ceiling | PlaneTypes.Table); + + /// + /// Determines which plane types should be discarded. + /// Use this when the spatial mapping mesh is a better fit for the surface (ex: round tables). + /// + [HideInInspector] + public PlaneTypes destroyPlanesMask = PlaneTypes.Unknown; + + /// + /// Floor y value, which corresponds to the maximum horizontal area found below the user's head position. + /// This value is reset by SurfaceMeshesToPlanes when the max floor plane has been found. + /// + public float FloorYPosition { get; private set; } + + /// + /// Ceiling y value, which corresponds to the maximum horizontal area found above the user's head position. + /// This value is reset by SurfaceMeshesToPlanes when the max ceiling plane has been found. + /// + public float CeilingYPosition { get; private set; } + + /// + /// Delegate which is called when the MakePlanesCompleted event is triggered. + /// + /// + /// + public delegate void EventHandler(object source, EventArgs args); + + /// + /// EventHandler which is triggered when the MakePlanesRoutine is finished. + /// + public event EventHandler MakePlanesComplete; + + /// + /// Empty game object used to contain all planes created by the SurfaceToPlanes class. + /// + private GameObject planesParent; + + /// + /// Used to align planes with gravity so that they appear more level. + /// + private float snapToGravityThreshold = 5.0f; + + /// + /// Indicates if SurfaceToPlanes is currently creating planes based on the Spatial Mapping Mesh. + /// + private bool makingPlanes = false; + +#if UNITY_EDITOR || UNITY_STANDALONE + /// + /// How much time (in sec), while running in the Unity Editor, to allow RemoveSurfaceVertices to consume before returning control to the main program. + /// + private static readonly float FrameTime = .016f; +#else + /// + /// How much time (in sec) to allow RemoveSurfaceVertices to consume before returning control to the main program. + /// + private static readonly float FrameTime = .008f; +#endif + + // GameObject initialization. + private void Start() + { + makingPlanes = false; + ActivePlanes = new List(); + planesParent = new GameObject("SurfacePlanes"); + planesParent.transform.position = Vector3.zero; + planesParent.transform.rotation = Quaternion.identity; + } + + /// + /// Creates planes based on meshes gathered by the SpatialMappingManager's SurfaceObserver. + /// + public void MakePlanes() + { + if (!makingPlanes) + { + makingPlanes = true; + // Processing the mesh can be expensive... + // We use Coroutine to split the work across multiple frames and avoid impacting the frame rate too much. + StartCoroutine(MakePlanesRoutine()); + } + } + + /// + /// Gets all active planes of the specified type(s). + /// + /// A flag which includes all plane type(s) that should be returned. + /// A collection of planes that match the expected type(s). + public List GetActivePlanes(PlaneTypes planeTypes) + { + List typePlanes = new List(); + + foreach (GameObject plane in ActivePlanes) + { + SurfacePlane surfacePlane = plane.GetComponent(); + + if (surfacePlane != null) + { + if ((planeTypes & surfacePlane.PlaneType) == surfacePlane.PlaneType) + { + typePlanes.Add(plane); + } + } + } + + return typePlanes; + } + + /// + /// Iterator block, analyzes surface meshes to find planes and create new 3D cubes to represent each plane. + /// + /// Yield result. + private IEnumerator MakePlanesRoutine() + { + // Remove any previously existing planes, as they may no longer be valid. + for (int index = 0; index < ActivePlanes.Count; index++) + { + Destroy(ActivePlanes[index]); + } + + // Pause our work, and continue on the next frame. + yield return null; + float start = Time.realtimeSinceStartup; + + ActivePlanes.Clear(); + + // Get the latest Mesh data from the Spatial Mapping Manager. + List meshData = new List(); + List filters = SpatialMappingManager.Instance.GetMeshFilters(); + + for (int index = 0; index < filters.Count; index++) + { + MeshFilter filter = filters[index]; + if (filter != null && filter.sharedMesh != null) + { + // fix surface mesh normals so we can get correct plane orientation. + filter.mesh.RecalculateNormals(); + meshData.Add(new PlaneFinding.MeshData(filter)); + } + + if ((Time.realtimeSinceStartup - start) > FrameTime) + { + // Pause our work, and continue to make more PlaneFinding objects on the next frame. + yield return null; + start = Time.realtimeSinceStartup; + } + } + + // Pause our work, and continue on the next frame. + yield return null; + +#if !UNITY_EDITOR && UNITY_METRO + // When not in the unity editor we can use a cool background task to help manage FindPlanes(). + Task planeTask = Task.Run(() => PlaneFinding.FindPlanes(meshData, snapToGravityThreshold, MinArea)); + + while (planeTask.IsCompleted == false) + { + yield return null; + } + + BoundedPlane[] planes = planeTask.Result; +#else + // In the unity editor, the task class isn't available, but perf is usually good, so we'll just wait for FindPlanes to complete. + BoundedPlane[] planes = PlaneFinding.FindPlanes(meshData, snapToGravityThreshold, MinArea); +#endif + + // Pause our work here, and continue on the next frame. + yield return null; + start = Time.realtimeSinceStartup; + + float maxFloorArea = 0.0f; + float maxCeilingArea = 0.0f; + FloorYPosition = 0.0f; + CeilingYPosition = 0.0f; + float upNormalThreshold = 0.9f; + + if (SurfacePlanePrefab != null && SurfacePlanePrefab.GetComponent() != null) + { + upNormalThreshold = SurfacePlanePrefab.GetComponent().UpNormalThreshold; + } + + // Find the floor and ceiling. + // We classify the floor as the maximum horizontal surface below the user's head. + // We classify the ceiling as the maximum horizontal surface above the user's head. + for (int i = 0; i < planes.Length; i++) + { + BoundedPlane boundedPlane = planes[i]; + if (boundedPlane.Bounds.Center.y < 0 && boundedPlane.Plane.normal.y >= upNormalThreshold) + { + maxFloorArea = Mathf.Max(maxFloorArea, boundedPlane.Area); + if (maxFloorArea == boundedPlane.Area) + { + FloorYPosition = boundedPlane.Bounds.Center.y; + } + } + else if (boundedPlane.Bounds.Center.y > 0 && boundedPlane.Plane.normal.y <= -(upNormalThreshold)) + { + maxCeilingArea = Mathf.Max(maxCeilingArea, boundedPlane.Area); + if (maxCeilingArea == boundedPlane.Area) + { + CeilingYPosition = boundedPlane.Bounds.Center.y; + } + } + } + + // Create SurfacePlane objects to represent each plane found in the Spatial Mapping mesh. + for (int index = 0; index < planes.Length; index++) + { + GameObject destPlane; + BoundedPlane boundedPlane = planes[index]; + + // Instantiate a SurfacePlane object, which will have the same bounds as our BoundedPlane object. + if (SurfacePlanePrefab != null && SurfacePlanePrefab.GetComponent() != null) + { + destPlane = Instantiate(SurfacePlanePrefab); + } + else + { + destPlane = GameObject.CreatePrimitive(PrimitiveType.Cube); + destPlane.AddComponent(); + destPlane.GetComponent().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + } + + destPlane.transform.parent = planesParent.transform; + SurfacePlane surfacePlane = destPlane.GetComponent(); + + // Set the Plane property to adjust transform position/scale/rotation and determine plane type. + surfacePlane.Plane = boundedPlane; + + SetPlaneVisibility(surfacePlane); + + if ((destroyPlanesMask & surfacePlane.PlaneType) == surfacePlane.PlaneType) + { + DestroyImmediate(destPlane); + } + else + { + // Set the plane to use the same layer as the SpatialMapping mesh. + destPlane.layer = SpatialMappingManager.Instance.PhysicsLayer; + ActivePlanes.Add(destPlane); + } + + // If too much time has passed, we need to return control to the main game loop. + if ((Time.realtimeSinceStartup - start) > FrameTime) + { + // Pause our work here, and continue making additional planes on the next frame. + yield return null; + start = Time.realtimeSinceStartup; + } + } + + Debug.Log("Finished making planes."); + + // We are done creating planes, trigger an event. + EventHandler handler = MakePlanesComplete; + if (handler != null) + { + handler(this, EventArgs.Empty); + } + + makingPlanes = false; + } + + /// + /// Sets visibility of planes based on their type. + /// + /// + private void SetPlaneVisibility(SurfacePlane surfacePlane) + { + surfacePlane.IsVisible = ((drawPlanesMask & surfacePlane.PlaneType) == surfacePlane.PlaneType); + } + } + +#if UNITY_EDITOR + /// + /// Editor extension class to enable multi-selection of the 'Draw Planes' and 'Destroy Planes' options in the Inspector. + /// + [CustomEditor(typeof(SurfaceMeshesToPlanes))] + public class PlaneTypesEnumEditor : Editor + { + public SerializedProperty drawPlanesMask; + public SerializedProperty destroyPlanesMask; + + void OnEnable() + { + drawPlanesMask = serializedObject.FindProperty("drawPlanesMask"); + destroyPlanesMask = serializedObject.FindProperty("destroyPlanesMask"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + + drawPlanesMask.intValue = (int)((PlaneTypes)EditorGUILayout.EnumMaskField + ("Draw Planes", (PlaneTypes)drawPlanesMask.intValue)); + + destroyPlanesMask.intValue = (int)((PlaneTypes)EditorGUILayout.EnumMaskField + ("Destroy Planes", (PlaneTypes)destroyPlanesMask.intValue)); + + serializedObject.ApplyModifiedProperties(); + } + } +#endif +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs.meta new file mode 100644 index 0000000..8b4e4f7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfaceMeshesToPlanes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: acbc42345d6a90543ab66003022593fa +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs new file mode 100644 index 0000000..5e0005e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs @@ -0,0 +1,228 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// All possible plane types that a SurfacePlane can be. + /// + [Flags] + public enum PlaneTypes + { + Wall = 0x1, + Floor = 0x2, + Ceiling = 0x4, + Table = 0x8, + Unknown = 0x10 + } + + /// + /// The SurfacePlane class is used by SurfaceMeshesToPlanes to create different types of planes (walls, floors, tables, etc.) + /// based on the Spatial Mapping data returned by the SpatialMappingManager's source. + /// This script should be a component on the SufacePlane prefab, which is used by SurfaceMeshesToPlanes. + /// + public class SurfacePlane : MonoBehaviour + { + [Tooltip("Thickness to make each plane.")] + [Range(0.0f, 1.0f)] + public float PlaneThickness = 0.01f; + + [Tooltip("Threshold for acceptable normals (the closer to 1, the stricter the standard). Used when determining plane type.")] + [Range(0.0f, 1.0f)] + public float UpNormalThreshold = 0.9f; + + [Tooltip("Buffer to use when determining if a horizontal plane near the floor should be considered part of the floor.")] + [Range(0.0f, 1.0f)] + public float FloorBuffer = 0.1f; + + [Tooltip("Buffer to use when determining if a horizontal plane near the ceiling should be considered part of the ceiling.")] + [Range(0.0f, 1.0f)] + public float CeilingBuffer = 0.1f; + + [Tooltip("Material to use when rendering Wall planes.")] + public Material WallMaterial; + + [Tooltip("Material to use when rendering floor planes.")] + public Material FloorMaterial; + + [Tooltip("Material to use when rendering ceiling planes.")] + public Material CeilingMaterial; + + [Tooltip("Material to use when rendering table planes.")] + public Material TableMaterial; + + [Tooltip("Material to use when rendering planes of the unknown type.")] + public Material UnknownMaterial; + + [Tooltip("Type of plane that the object has been classified as.")] + public PlaneTypes PlaneType = PlaneTypes.Unknown; + + /// + /// The BoundedPlane associated with the SurfacePlane object. + /// + private BoundedPlane plane = new BoundedPlane(); + + /// + /// Gets or Sets the BoundedPlane, which determines the orientation/size/position of the gameObject. + /// + public BoundedPlane Plane + { + get + { + return plane; + } + set + { + plane = value; + UpdateSurfacePlane(); + } + } + + /// + /// Gets the normal of the plane that was determined by the BoundedPlane object. + /// + public Vector3 SurfaceNormal { get; private set; } + + /// + /// Gets or sets the visibility of the current gameObject. + /// + public bool IsVisible + { + get + { + return gameObject.GetComponent().enabled; + } + set + { + if (IsVisible != value) + { + gameObject.GetComponent().enabled = value; + } + } + } + + private void Awake() + { + plane = new BoundedPlane(transform); + } + + private void Start() + { + UpdateSurfacePlane(); + } + + /// + /// Updates the SurfacePlane object to have the same configuration of the BoundingPlane object. + /// Determine what type of plane the SurfacePlane aligns to. + /// Sets the material based on the plane type. + /// + private void UpdateSurfacePlane() + { + SetPlaneGeometry(); + SetPlaneType(); + SetPlaneMaterialByType(); + } + + /// + /// Updates the plane geometry to match the bounded plane found by SurfaceMeshesToPlanes. + /// + private void SetPlaneGeometry() + { + // Set the SurfacePlane object to have the same extents as the BoundingPlane object. + gameObject.transform.position = plane.Bounds.Center; + gameObject.transform.rotation = plane.Bounds.Rotation; + Vector3 extents = plane.Bounds.Extents * 2; + gameObject.transform.localScale = new Vector3(extents.x, extents.y, PlaneThickness); + } + + /// + /// Classifies the surface as a floor, wall, ceiling, table, etc. + /// + private void SetPlaneType() + { + SurfaceNormal = plane.Plane.normal; + float floorYPosition = SurfaceMeshesToPlanes.Instance.FloorYPosition; + float ceilingYPosition = SurfaceMeshesToPlanes.Instance.CeilingYPosition; + + // Determine what type of plane this is. + // Use the upNormalThreshold to help determine if we have a horizontal or vertical surface. + if (SurfaceNormal.y >= UpNormalThreshold) + { + // If we have a horizontal surface with a normal pointing up, classify it as a floor. + PlaneType = PlaneTypes.Floor; + + if (gameObject.transform.position.y > (floorYPosition + FloorBuffer)) + { + // If the plane is too high to be considered part of the floor, classify it as a table. + PlaneType = PlaneTypes.Table; + } + } + else if (SurfaceNormal.y <= -(UpNormalThreshold)) + { + // If we have a horizontal surface with a normal pointing down, classify it as a ceiling. + PlaneType = PlaneTypes.Ceiling; + + if (gameObject.transform.position.y < (ceilingYPosition - CeilingBuffer)) + { + // If the plane is not high enough to be considered part of the ceiling, classify it as a table. + PlaneType = PlaneTypes.Table; + } + } + else if (Mathf.Abs(SurfaceNormal.y) <= (1 - UpNormalThreshold)) + { + // If the plane is vertical, then classify it as a wall. + PlaneType = PlaneTypes.Wall; + } + else + { + // The plane has a strange angle, classify it as 'unknown'. + PlaneType = PlaneTypes.Unknown; + } + } + + /// + /// Sets the renderer material to match the object's plane type. + /// + private void SetPlaneMaterialByType() + { + Renderer renderer = gameObject.GetComponent(); + + switch (PlaneType) + { + case PlaneTypes.Floor: + if (FloorMaterial != null) + { + renderer.material = FloorMaterial; + } + break; + case PlaneTypes.Table: + if (TableMaterial != null) + { + renderer.material = TableMaterial; + } + break; + case PlaneTypes.Ceiling: + if (CeilingMaterial != null) + { + renderer.material = CeilingMaterial; + } + break; + case PlaneTypes.Wall: + if (WallMaterial != null) + { + renderer.material = WallMaterial; + } + break; + default: + if (UnknownMaterial != null) + { + renderer.material = UnknownMaterial; + } + break; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs.meta new file mode 100644 index 0000000..d01ef25 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/SpatialProcessing/SurfacePlane.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d29c05be38579034196d7b7692e52bc1 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs new file mode 100644 index 0000000..2b3a42f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs @@ -0,0 +1,166 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using HoloToolkit.Unity.InputModule; +using UnityEngine; + +namespace HoloToolkit.Unity.SpatialMapping +{ + /// + /// The TapToPlace class is a basic way to enable users to move objects + /// and place them on real world surfaces. + /// Put this script on the object you want to be able to move. + /// Users will be able to tap objects, gaze elsewhere, and perform the + /// tap gesture again to place. + /// This script is used in conjunction with GazeManager, GestureManager, + /// and SpatialMappingManager. + /// TapToPlace also adds a WorldAnchor component to enable persistence. + /// + + public class TapToPlace : MonoBehaviour, IInputClickHandler + { + [Tooltip("Supply a friendly name for the anchor as the key name for the WorldAnchorStore.")] + public string SavedAnchorFriendlyName = "SavedAnchorFriendlyName"; + + [Tooltip("Place parent on tap instead of current game object.")] + public bool PlaceParentOnTap; + + [Tooltip("Specify the parent game object to be moved on tap, if the immediate parent is not desired.")] + public GameObject ParentGameObjectToPlace; + + /// + /// Keeps track of if the user is moving the object or not. + /// Setting this to true will enable the user to move and place the object in the scene. + /// Useful when you want to place an object immediately. + /// + [Tooltip("Setting this to true will enable the user to move and place the object in the scene without needing to tap on the object. Useful when you want to place an object immediately.")] + public bool IsBeingPlaced; + + /// + /// Manages persisted anchors. + /// + protected WorldAnchorManager anchorManager; + + /// + /// Controls spatial mapping. In this script we access spatialMappingManager + /// to control rendering and to access the physics layer mask. + /// + protected SpatialMappingManager spatialMappingManager; + + protected virtual void Start() + { + // Make sure we have all the components in the scene we need. + anchorManager = WorldAnchorManager.Instance; + if (anchorManager == null) + { + Debug.LogError("This script expects that you have a WorldAnchorManager component in your scene."); + } + + spatialMappingManager = SpatialMappingManager.Instance; + if (spatialMappingManager == null) + { + Debug.LogError("This script expects that you have a SpatialMappingManager component in your scene."); + } + + if (anchorManager != null && spatialMappingManager != null) + { + anchorManager.AttachAnchor(gameObject, SavedAnchorFriendlyName); + } + else + { + // If we don't have what we need to proceed, we may as well remove ourselves. + Destroy(this); + } + + if (PlaceParentOnTap) + { + if (ParentGameObjectToPlace != null && !gameObject.transform.IsChildOf(ParentGameObjectToPlace.transform)) + { + Debug.LogError("The specified parent object is not a parent of this object."); + } + + DetermineParent(); + } + } + + protected virtual void Update() + { + // If the user is in placing mode, + // update the placement to match the user's gaze. + if (IsBeingPlaced) + { + // Do a raycast into the world that will only hit the Spatial Mapping mesh. + Vector3 headPosition = Camera.main.transform.position; + Vector3 gazeDirection = Camera.main.transform.forward; + + RaycastHit hitInfo; + if (Physics.Raycast(headPosition, gazeDirection, out hitInfo, 30.0f, spatialMappingManager.LayerMask)) + { + // Rotate this object to face the user. + Quaternion toQuat = Camera.main.transform.localRotation; + toQuat.x = 0; + toQuat.z = 0; + + // Move this object to where the raycast + // hit the Spatial Mapping mesh. + // Here is where you might consider adding intelligence + // to how the object is placed. For example, consider + // placing based on the bottom of the object's + // collider so it sits properly on surfaces. + if (PlaceParentOnTap) + { + // Place the parent object as well but keep the focus on the current game object + Vector3 currentMovement = hitInfo.point - gameObject.transform.position; + ParentGameObjectToPlace.transform.position += currentMovement; + ParentGameObjectToPlace.transform.rotation = toQuat; + } + else + { + gameObject.transform.position = hitInfo.point; + gameObject.transform.rotation = toQuat; + } + } + } + } + + public virtual void OnInputClicked(InputClickedEventData eventData) + { + // On each tap gesture, toggle whether the user is in placing mode. + IsBeingPlaced = !IsBeingPlaced; + + // If the user is in placing mode, display the spatial mapping mesh. + if (IsBeingPlaced) + { + spatialMappingManager.DrawVisualMeshes = true; + + Debug.Log(gameObject.name + " : Removing existing world anchor if any."); + + anchorManager.RemoveAnchor(gameObject); + } + // If the user is not in placing mode, hide the spatial mapping mesh. + else + { + spatialMappingManager.DrawVisualMeshes = false; + // Add world anchor when object placement is done. + anchorManager.AttachAnchor(gameObject, SavedAnchorFriendlyName); + } + } + + private void DetermineParent() + { + if (ParentGameObjectToPlace == null) + { + if (gameObject.transform.parent == null) + { + Debug.LogError("The selected GameObject has no parent."); + PlaceParentOnTap = false; + } + else + { + Debug.LogError("No parent specified. Using immediate parent instead: " + gameObject.transform.parent.gameObject.name); + ParentGameObjectToPlace = gameObject.transform.parent.gameObject; + } + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs.meta new file mode 100644 index 0000000..e61a514 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dbad991a9894486418e4988222483ef8 +timeCreated: 1463001318 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders.meta new file mode 100644 index 0000000..b6fc599 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 79ab341a0a8c1e64a8656ce6f8e49269 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader new file mode 100644 index 0000000..695eeed --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader @@ -0,0 +1,55 @@ +/// +/// Basic occlusion shader that can be used with spatial mapping meshes. +/// No pixels will be rendered at the object's location. +/// +Shader "HoloToolkit/Occlusion" +{ + Properties + { + } + SubShader + { + Tags + { + "RenderType" = "Opaque" + "Queue" = "Geometry-1" + } + + Pass + { + ColorMask 0 // Color will not be rendered. + Offset 50, 100 + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #include "UnityCG.cginc" + + struct v2f + { + float4 pos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_base v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2f o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + half4 frag(v2f i) : COLOR + { + return float4(1,1,1,1); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader.meta new file mode 100644 index 0000000..b9ce650 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Occlusion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 86a383aa28d6d9d438388de19d876240 +timeCreated: 1455735888 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader new file mode 100644 index 0000000..7976ac1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader @@ -0,0 +1,125 @@ +Shader "Spatial Mapping/Spatial Mappping Tap" +{ + Properties + { + // Main knobs + _Center ("Center", Vector) = (0, 0, 0, -1) // world space position + _Radius ("Radius", Range(0, 10)) = 1 // grows the pulse + + // Pulse knobs + _PulseColor ("Pulse Color", Color) = (.145, .447, .922) + _PulseWidth ("Pulse Width", Float) = 1 + + // Wireframe knobs + [MaterialToggle] _UseWireframe ("Use Wireframe", Int) = 1 + _WireframeColor ("Wireframe Color", Color) = (.5, .5, .5) + _WireframeFill ("Wireframe Fill", Range(0, 1)) = .1 + } + + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass + { + Offset 50, 100 + + CGPROGRAM + + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + #include "UnityCG.cginc" + + half _Radius; + half3 _Center; + half3 _PulseColor; + half _PulseWidth; + half3 _WireframeColor; + half _WireframeFill; + int _UseWireframe; + + // http://www.iquilezles.org/www/articles/functions/functions.htm + half cubicPulse(half c, half w, half x) + { + x = abs(x - c); + if ( x > w ) + return 0; + x /= w; + return 1 - x * x * (3 - 2 * x); + } + + struct v2g + { + half4 viewPos : SV_POSITION; + half pulse : COLOR; + }; + + v2g vert(appdata_base v) + { + v2g o; + + o.viewPos = mul(UNITY_MATRIX_MVP, v.vertex); + + float4 worldPos = mul(unity_ObjectToWorld, v.vertex); + half distToCenter = distance(_Center, worldPos.xyz); + half pulse = cubicPulse(_Radius, _PulseWidth, distToCenter); + + o.pulse = pulse; + + return o; + } + + struct g2f + { + float4 viewPos : SV_POSITION; + half3 bary : COLOR; + half pulse : COLOR1; + }; + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triStream) + { + // For wireframe + half3 barys[3] = { + half3(1, 0, 0), + half3(0, 1, 0), + half3(0, 0, 1) + }; + + g2f o; + + [unroll] + for (uint idx = 0; idx < 3; ++idx) + { + o.viewPos = i[idx].viewPos; + o.bary = barys[idx]; + o.pulse = i[idx].pulse; + triStream.Append(o); + } + } + + half4 frag(g2f i) : COLOR + { + half3 result = i.pulse * _PulseColor; + + if (!_UseWireframe) + return half4(result, 1); + + half triBary = min( min(i.bary.x, i.bary.y), i.bary.z) * 3; + half fwt = fwidth(triBary); + half w = smoothstep(fwt, 0, triBary - _WireframeFill); + + result += w * _WireframeColor * i.pulse; + + return half4(result, 1); + } + + ENDCG + } + } + + FallBack "Diffuse" +} + diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader.meta new file mode 100644 index 0000000..1ad9322 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/SpatialMappingTap.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 23beda61782381042848d512379b9e11 +timeCreated: 1479967222 +licenseType: Free +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader new file mode 100644 index 0000000..c4d4e3f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader @@ -0,0 +1,119 @@ +/// +/// Basic wireframe shader that can be used for rendering spatial mapping meshes. +/// +Shader "HoloToolkit/Wireframe" +{ + Properties + { + _BaseColor("Base color", Color) = (0.0, 0.0, 0.0, 1.0) + _WireColor("Wire color", Color) = (1.0, 1.0, 1.0, 1.0) + _WireThickness("Wire thickness", Range(0, 800)) = 100 + } + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass + { + Offset 50, 100 + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #include "UnityCG.cginc" + + float4 _BaseColor; + float4 _WireColor; + float _WireThickness; + + // Based on approach described in Shader-Based Wireframe Drawing (2008) + // http://orbit.dtu.dk/en/publications/id(13e2122d-bec7-48de-beca-03ce6ea1c3f1).html + + struct v2g + { + float4 viewPos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert(appdata_base v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2g o; + o.viewPos = mul(UNITY_MATRIX_MVP, v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + // inverseW is to counteract the effect of perspective-correct interpolation so that the lines + // look the same thickness regardless of their depth in the scene. + struct g2f + { + float4 viewPos : SV_POSITION; + float inverseW : TEXCOORD0; + float3 dist : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triStream) + { + // Calculate the vectors that define the triangle from the input points. + float2 point0 = i[0].viewPos.xy / i[0].viewPos.w; + float2 point1 = i[1].viewPos.xy / i[1].viewPos.w; + float2 point2 = i[2].viewPos.xy / i[2].viewPos.w; + + // Calculate the area of the triangle. + float2 vector0 = point2 - point1; + float2 vector1 = point2 - point0; + float2 vector2 = point1 - point0; + float area = abs(vector1.x * vector2.y - vector1.y * vector2.x); + + float3 distScale[3]; + distScale[0] = float3(area / length(vector0), 0, 0); + distScale[1] = float3(0, area / length(vector1), 0); + distScale[2] = float3(0, 0, area / length(vector2)); + + float wireScale = 800 - _WireThickness; + + // Output each original vertex with its distance to the opposing line defined + // by the other two vertices. + g2f o; + + [unroll] + for (uint idx = 0; idx < 3; ++idx) + { + o.viewPos = i[idx].viewPos; + o.inverseW = 1.0 / o.viewPos.w; + o.dist = distScale[idx] * o.viewPos.w * wireScale; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[idx], o); + triStream.Append(o); + } + } + + float4 frag(g2f i) : COLOR + { + // Calculate minimum distance to one of the triangle lines, making sure to correct + // for perspective-correct interpolation. + float dist = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.inverseW; + + // Make the intensity of the line very bright along the triangle edges but fall-off very + // quickly. + float I = exp2(-2 * dist * dist); + + // Fade out the alpha but not the color so we don't get any weird halo effects from + // a fade to a different color. + float4 color = I * _WireColor + (1 - I) * _BaseColor; + color.a = I; + return color; + } + ENDCG + } + } + FallBack "Diffuse" +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader.meta b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader.meta new file mode 100644 index 0000000..10b7e03 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialMapping/Shaders/Wireframe.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0d08dd59087697b44a68a02cc9a7c3a2 +timeCreated: 1455735883 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound.meta b/HoloBot/Assets/HoloToolkit/SpatialSound.meta new file mode 100644 index 0000000..87d6290 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 35860c998c21740428c71f14e4d1c363 +folderAsset: yes +timeCreated: 1456605236 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/README.md b/HoloBot/Assets/HoloToolkit/SpatialSound/README.md new file mode 100644 index 0000000..4195ac3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/README.md @@ -0,0 +1,44 @@ +## [SpatialSound]() + +### [Scripts](Scripts) +Scripts related to the audio features. + +**IMPORTANT**: Please make sure to set the MS HRTF Spatializer in your audio settings, in Unity under +Edit -> Project Settings -> Audio -> Spatializer. You can confirm this setting by adding an AudioSource component to an object and making sure the "Spatialize" checkbox is present. + +#### AudioEmitter.cs +A class that encapsulates an AudioSource and supports applying audio influences, for example occlusion. + +#### AudioOccluder.cs +Class implementing a simple form of audio occlusion using a low pass filter and volume attenuation. + +#### IAudioInfluencer.cs +Interface defining the methods required of an audio influencer. + +#### UAudioManager\UAudioManager.cs +1. Allows sound designers to set up audio events with playback behaviors. +2. Plays audio events via singleton API. + +**PlayEvent(string eventName)** Plays the event matching eventName on an AudioSource component placed on the GameObject containing the UAudioManager component. + +**PlayEvent(string eventName, AudioSource primarySource)** Plays the event matching eventName on the AudioSource primarySource. This should be used if you already have an AudioSource component on which to play the sound, as opposed to the previous function, which will look for one or add it if there is no AudioSource present. + +**Global Event Instance Limit** The total number of audio events that can be active at once at any given time. + +**Global Instance Behavior** Whether the oldest or newest event should be cancelled to honor the instance limit. + +**Name** The name of the audio event to be called in script. + +**Positioning** Whether a sound should be played in stereo, 3D or using Spatial Sound. + +**Room Size** The room model used for Spatial Sound. + +**Min Gain** The lowest attenuation value caused by distance. + +**Max Gain** The maximum level boost from the sound being closer than Unity Gain Distance. + +**Unity Gain Distance** The distance, in meters, at which the sound is neither boosted nor attenuated. + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/README.md.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/README.md.meta new file mode 100644 index 0000000..8c25a6a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c0d8f694e5a75649a838e3a1a4e122b +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts.meta new file mode 100644 index 0000000..b96ac90 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ecb734a87c4089d4caacb7b907d8c88a +folderAsset: yes +timeCreated: 1463155223 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs new file mode 100644 index 0000000..994d0e8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Class which supports IAudioInfluencers being used with audio sources. + /// + [RequireComponent(typeof(AudioSource))] + public class AudioEmitter : MonoBehaviour + { + [Tooltip("Time, in seconds, between audio influence updates. 0 indicates to update every frame.")] + [Range(0.0f, 1.0f)] + public float UpdateInterval = 0.25f; + + [Tooltip("Maximum distance, in m, to look when attempting to find the user and any influencers.")] + [Range(1.0f, 50.0f)] + public float MaxDistance = 20.0f; + + [Tooltip("Maximum number of objects that will be considered when looking for influencers.")] + [Range(1, 25)] + [SerializeField] + private int MaxObjects = 10; + + // Time of last audio processing update. + private DateTime lastUpdate = DateTime.MinValue; + + /// + /// The source of the audio. + /// + private AudioSource audioSource; + + /// + /// The initial volume level of the audio source. + /// + private float initialAudioSourceVolume; + + /// + /// The hits returned by Physics.RaycastAll + /// + private RaycastHit[] hits; + + /// + /// The collection of previously applied audio influencers. + /// + private List previousInfluencers = new List(); + + + private void Awake() + { + audioSource = gameObject.GetComponent(); + initialAudioSourceVolume = audioSource.volume; + + // Pre-allocate the array that will be used to collect RaycastHit structures. + hits = new RaycastHit[MaxObjects]; + } + + private void Update() + { + DateTime now = DateTime.Now; + + // Audio influences are not updated every frame. + if ((UpdateInterval * 1000.0f) <= (now - lastUpdate).Milliseconds) + { + audioSource.volume = initialAudioSourceVolume; + + // Get the audio influencers that should apply to the audio source. + List influencers = GetInfluencers(); + foreach (IAudioInfluencer influencer in influencers) + { + // Apply the influencer's effect. + influencer.ApplyEffect(gameObject, audioSource); + } + + // Find and remove the audio influencers that are to be removed from the audio source. + List influencersToRemove = new List(); + foreach (IAudioInfluencer prev in previousInfluencers) + { + if (!influencers.Contains(prev)) + { + influencersToRemove.Add(prev); + } + } + RemoveInfluencers(influencersToRemove); + + previousInfluencers = influencers; + lastUpdate = now; + } + } + + /// + /// Removes the effects applied by specified audio influencers. + /// + /// Collection of IAudioInfluencer objects. + private void RemoveInfluencers(List influencers) + { + foreach (IAudioInfluencer influencer in influencers) + { + influencer.RemoveEffect(gameObject, audioSource); + } + } + + /// + /// Finds the IAudioInfluencer objects that are to be applied to the audio source. + /// + /// Collection of IAudioInfluencer objects. + private List GetInfluencers() + { + List influencers = new List(); + + // For influencers that take effect only when between the emitter and the user, perform a raycast + // from the user toward the object. + Vector3 direction = (gameObject.transform.position - Camera.main.transform.position).normalized; + float distance = Vector3.Distance(Camera.main.transform.position, gameObject.transform.position); + + int count = Physics.RaycastNonAlloc(Camera.main.transform.position, + direction, + hits, + distance, + Physics.DefaultRaycastLayers, + QueryTriggerInteraction.Ignore); + + for (int i = 0; i < count; i++) + { + IAudioInfluencer ai = hits[i].collider.gameObject.GetComponentInParent(); + if (ai != null) + { + influencers.Add(ai); + } + } + + return influencers; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs.meta new file mode 100644 index 0000000..4895d83 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioEmitter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bf2a32f9ebc013148a3bb80b5c03d479 +timeCreated: 1465336685 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs new file mode 100644 index 0000000..8599d70 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Class that implements IAudioInfluencer to provide an occlusion effect. + /// + public class AudioOccluder : MonoBehaviour, IAudioInfluencer + { + /// + /// Frequency above the nominal range of human hearing. Applying this frequency to the filter will have no perceived impact on the audio source. + /// + private readonly float NeutralFrequency = 22000f; + + [Tooltip("Frequency above which sound will not be heard.")] + [Range(10.0f, 22000.0f)] + public float CutoffFrequency = 5000.0f; + + [Tooltip("Percentage of the audio source volume that will be heard after applying occlusion.")] + [Range(0.0f, 1.0f)] + public float VolumePassThrough = 1.0f; + + // Update is not used, but is kept so that this component can be enabled/disabled. + private void Update() + { } + + /// + /// Applies the audio effect. + /// + /// The GameObject on which the effect is to be applied. + /// The AudioSource that will be impacted by the effect. + public void ApplyEffect(GameObject emitter, + AudioSource audioSource) + { + if (!isActiveAndEnabled) + { return; } + + if (audioSource == null) + { + Debug.LogWarning("The specified emitter does not have an attached AudioSource component."); + return; + } + + // Audio occlusion is performed using a low pass filter. + AudioLowPassFilter lowPass = emitter.GetComponent(); + if (lowPass == null) + { + lowPass = emitter.AddComponent(); + } + lowPass.enabled = true; + + // In the real world, chaining multiple low-pass filters will result in the + // lowest of the cutoff frequencies being the highest pitches heard. + lowPass.cutoffFrequency = Mathf.Min(lowPass.cutoffFrequency, CutoffFrequency); + + // Unlike the cutoff frequency, volume pass-through is cumulative. + audioSource.volume *= VolumePassThrough; + } + + /// + /// Removes the previously applied audio effect. + /// + /// The GameObject from which the effect is to be removed. + /// The AudioSource that will be impacted by the effect. + public void RemoveEffect(GameObject emitter, + AudioSource audioSource) + { + // Note: The audioSource parameter is unused. + + // Audio occlusion is performed using a low pass filter. + AudioLowPassFilter lowPass = emitter.GetComponent(); + if (lowPass == null) { return; } + lowPass.cutoffFrequency = NeutralFrequency; + lowPass.enabled = false; + + // Note: Volume attenuation is reset in the emitter. + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs.meta new file mode 100644 index 0000000..885a076 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/AudioOccluder.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef9fbaad78bdb3243bc2de3a08ab8bf3 +timeCreated: 1463074945 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs new file mode 100644 index 0000000..a781641 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Interface that is implemented by any class that wishes to influence how an audio source sounds. + /// + public interface IAudioInfluencer + { + /// + /// Applies an audio effect. + /// + /// The GameObject on which the effect is to be applied. + /// The AudioSource that will be impacted by the effect. + void ApplyEffect(GameObject emitter, + AudioSource audioSource); + + /// + /// Removes a previously applied audio effect. + /// + /// The GameObject from which the effect is to be removed. + /// The AudioSource that will be impacted by the effect. + void RemoveEffect(GameObject emitter, + AudioSource audioSource); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs.meta new file mode 100644 index 0000000..6a2f487 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/IAudioInfluencer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0fe38ed55fd84d548aadc453d4485300 +timeCreated: 1463074305 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager.meta new file mode 100644 index 0000000..a8b198f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6cc925b5d51249645883c7938def8792 +folderAsset: yes +timeCreated: 1463155223 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs new file mode 100644 index 0000000..2e9862d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs @@ -0,0 +1,265 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Currently active AudioEvents along with their AudioSource components for instance limiting events + /// + public class ActiveEvent : IDisposable + { + private AudioSource primarySource = null; + public AudioSource PrimarySource + { + get + { + return primarySource; + } + private set + { + primarySource = value; + if (primarySource != null) + { + primarySource.enabled = true; + } + } + } + + private AudioSource secondarySource = null; + public AudioSource SecondarySource + { + get + { + return secondarySource; + } + private set + { + secondarySource = value; + if (secondarySource != null) + { + secondarySource.enabled = true; + } + } + } + + public bool IsPlaying + { + get + { + return + (primarySource != null && primarySource.isPlaying) || + (secondarySource != null && secondarySource.isPlaying); + } + } + + public GameObject AudioEmitter + { + get; + private set; + } + + public string MessageOnAudioEnd + { + get; + private set; + } + + public AudioEvent audioEvent = null; + public bool isStoppable = true; + public float volDest = 1; + public float altVolDest = 1; + public float currentFade = 0; + public bool playingAlt = false; + public bool isActiveTimeComplete = false; + public float activeTime = 0; + public bool cancelEvent = false; + + public ActiveEvent(AudioEvent audioEvent, GameObject emitter, AudioSource primarySource, AudioSource secondarySource, string messageOnAudioEnd = null) + { + this.audioEvent = audioEvent; + AudioEmitter = emitter; + PrimarySource = primarySource; + SecondarySource = secondarySource; + MessageOnAudioEnd = messageOnAudioEnd; + SetSourceProperties(); + } + + public static AnimationCurve SpatialRolloff; + + /// + /// Set the volume, spatialization, etc., on our AudioSources to match the settings on the event to play. + /// + private void SetSourceProperties() + { + Action> forEachSource = (action) => + { + action(PrimarySource); + if (SecondarySource != null) + { + action(SecondarySource); + } + }; + + AudioEvent audioEvent = this.audioEvent; + switch (audioEvent.spatialization) + { + case SpatialPositioningType.TwoD: + forEachSource((source) => + { + source.spatialBlend = 0f; + source.spatialize = false; + }); + break; + case SpatialPositioningType.ThreeD: + forEachSource((source) => + { + source.spatialBlend = 1f; + source.spatialize = false; + }); + break; + case SpatialPositioningType.SpatialSound: + forEachSource((source) => + { + source.spatialBlend = 1f; + source.spatialize = true; + }); + break; + default: + Debug.LogErrorFormat("Unexpected spatialization type: {0}", audioEvent.spatialization.ToString()); + break; + } + + if (audioEvent.spatialization == SpatialPositioningType.SpatialSound) + { + CreateFlatSpatialRolloffCurve(); + forEachSource((source) => + { + source.rolloffMode = AudioRolloffMode.Custom; + source.SetCustomCurve(AudioSourceCurveType.CustomRolloff, SpatialRolloff); + SpatialSoundSettings.SetRoomSize(source, audioEvent.roomSize); + SpatialSoundSettings.SetMinGain(source, audioEvent.minGain); + SpatialSoundSettings.SetMaxGain(source, audioEvent.maxGain); + SpatialSoundSettings.SetUnityGainDistance(source, audioEvent.unityGainDistance); + }); + } + else + { + forEachSource((source) => + { + if (audioEvent.spatialization == SpatialPositioningType.ThreeD) + { + source.rolloffMode = AudioRolloffMode.Custom; + source.maxDistance = audioEvent.maxDistanceAttenuation3D; + source.SetCustomCurve(AudioSourceCurveType.CustomRolloff, audioEvent.attenuationCurve); + source.SetCustomCurve(AudioSourceCurveType.SpatialBlend, audioEvent.spatialCurve); + source.SetCustomCurve(AudioSourceCurveType.Spread, audioEvent.spreadCurve); + source.SetCustomCurve(AudioSourceCurveType.ReverbZoneMix, audioEvent.reverbCurve); + } + else + { + source.rolloffMode = AudioRolloffMode.Logarithmic; + } + }); + } + + if (audioEvent.bus != null) + { + forEachSource((source) => source.outputAudioMixerGroup = audioEvent.bus); + } + + float pitch = 1f; + + if (audioEvent.pitchRandomization != 0) + { + pitch = UnityEngine.Random.Range(audioEvent.pitchCenter - audioEvent.pitchRandomization, audioEvent.pitchCenter + audioEvent.pitchRandomization); + } + else + { + pitch = audioEvent.pitchCenter; + } + forEachSource((source) => source.pitch = pitch); + + float vol = 1f; + if (audioEvent.fadeInTime > 0) + { + forEachSource((source) => source.volume = 0f); + this.currentFade = audioEvent.fadeInTime; + if (audioEvent.volumeRandomization != 0) + { + vol = UnityEngine.Random.Range(audioEvent.volumeCenter - audioEvent.volumeRandomization, audioEvent.volumeCenter + audioEvent.volumeRandomization); + } + else + { + vol = audioEvent.volumeCenter; + } + this.volDest = vol; + } + else + { + if (audioEvent.volumeRandomization != 0) + { + vol = UnityEngine.Random.Range(audioEvent.volumeCenter - audioEvent.volumeRandomization, audioEvent.volumeCenter + audioEvent.volumeRandomization); + } + else + { + vol = audioEvent.volumeCenter; + } + forEachSource((source) => source.volume = vol); + } + + float pan = audioEvent.panCenter; + if (audioEvent.panRandomization != 0) + { + pan = UnityEngine.Random.Range(audioEvent.panCenter - audioEvent.panRandomization, audioEvent.panCenter + audioEvent.panRandomization); + } + forEachSource((source) => source.panStereo = pan); + } + + /// + /// Sets the pitch value for the primary source. + /// + /// The value to set the pitch, between 0 (exclusive) and 3 (inclusive). + public void SetPitch(float newPitch) + { + if (newPitch <= 0 || newPitch > 3) + { + Debug.LogErrorFormat("Invalid pitch {0} set for event", newPitch); + return; + } + + this.PrimarySource.pitch = newPitch; + } + + public void Dispose() + { + if (this.primarySource != null) + { + this.primarySource.enabled = false; + this.primarySource = null; + } + + if (this.secondarySource != null) + { + this.secondarySource.enabled = false; + this.secondarySource = null; + } + } + + /// + /// Creates a flat animation curve to negate Unity's distance attenuation when using Spatial Sound + /// + public static void CreateFlatSpatialRolloffCurve() + { + if (SpatialRolloff != null) + { + return; + } + SpatialRolloff = new AnimationCurve(); + SpatialRolloff.AddKey(0, 1); + SpatialRolloff.AddKey(1, 1); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs.meta new file mode 100644 index 0000000..6c762ef --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/ActiveEvent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3e15d252e1e01c340a9b88dd7b4c04e9 +timeCreated: 1456605238 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs new file mode 100644 index 0000000..db80933 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Unity +{ + /// + /// Encapsulate a single Unity AudioClip with playback settings. + /// + [Serializable] + public class UAudioClip + { + public UnityEngine.AudioClip sound = null; + public bool looping = false; + + public float delayCenter = 0; + public float delayRandomization = 0; + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs.meta new file mode 100644 index 0000000..559c94a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioClip.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7145c53c2fed227448e5df11c9b4f9d8 +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs new file mode 100644 index 0000000..d95c125 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The AudioContainer class is sound container for an AudioEvent. It also specifies the rules of how to + /// play back the contained AudioClips. + /// + [Serializable] + public class AudioContainer + { + [Tooltip("The type of the audio container.")] + public AudioContainerType containerType = AudioContainerType.Random; + + public bool looping = false; + public float loopTime = 0; + public UAudioClip[] sounds = null; + public float crossfadeTime = 0f; + public int currentClip = 0; + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs.meta new file mode 100644 index 0000000..14b5eb4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioContainer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0fc614944e525ec4e9d20d19bf6c3f53 +timeCreated: 1456605238 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs new file mode 100644 index 0000000..684c2f3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs @@ -0,0 +1,189 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The different rules for how audio should be played back. + /// + public enum AudioContainerType + { + Random, + Sequence, + Simultaneous, + ContinuousSequence, + ContinuousRandom + } + + /// + /// Defines the behavior for when the instance limit is reached for a particular event. + /// + public enum AudioEventInstanceBehavior + { + KillOldest, + KillNewest + } + + /// + /// The different types of spatial positioning. + /// + public enum SpatialPositioningType + { + TwoD, // Stereo + ThreeD, // 3D audio + SpatialSound, // Microsoft Spatial Sound + } + + /// + /// The AudioEvent class is the main component of UAudioManager and contains settings and a container for playing audio clips. + /// + [System.Serializable] + public class AudioEvent : IComparable, IComparable + { + [Tooltip("The name of this AudioEvent.")] + public string name = "_NewAudioEvent"; + + [Tooltip("How this sound is to be positioned.")] + public SpatialPositioningType spatialization = SpatialPositioningType.TwoD; + + [Tooltip("The size of the Microsoft Spatial Sound room. Only used when positioning is set to SpatialSound.")] + public SpatialSoundRoomSizes roomSize = SpatialSoundSettings.DefaultSpatialSoundRoom; + + [Tooltip("The minimum gain, in decibels. Only used when positioning is set to SpatialSound.")] + [Range(SpatialSoundSettings.MinimumGainDecibels, SpatialSoundSettings.MaximumGainDecibels)] + public float minGain = SpatialSoundSettings.DefaultMinGain; + + [Tooltip("The maximum gain, in decibels. Only used when positioning is set to SpatialSound.")] + [Range(SpatialSoundSettings.MinimumGainDecibels, SpatialSoundSettings.MaximumGainDecibels)] + public float maxGain = SpatialSoundSettings.DefaultMaxGain; + + [Tooltip("The volume attenuation curve for simple 3D sounds. Only used when positioning is set to 3D")] + public AnimationCurve attenuationCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); // By default simple attenuation + + [Tooltip("The spatial attenuation curve for simple 3D sounds. Only used when positioning is set to 3D")] + public AnimationCurve spatialCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 1f); // by default Full 3D sound + + [Tooltip("The spread attenuation curve for simple 3D sounds. Only used when positioning is set to 3D")] + public AnimationCurve spreadCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 0f); // by default no spread + + [Tooltip("The lowpass attenuation curve for simple 3D sounds. Only used when positioning is set to 3D")] + public AnimationCurve lowPassCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 0f); // by default no lowpass + + [Tooltip("The reverb attenuation curve for simple 3D sounds. Only used when positioning is set to 3D")] + public AnimationCurve reverbCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 0f); // by default no reverb + + [Tooltip("The maximum attenuation distance for simple 3D sounds. Only used when positioning is set to 3D")] + [Range(1f, 500f)] + public float maxDistanceAttenuation3D = 100f; + + [Tooltip("The distance, in meters at which the gain is 0 decibels. Only used when positioning is set to SpatialSound.")] + [Range(SpatialSoundSettings.MinimumUnityGainDistanceMeters, SpatialSoundSettings.MaximumUnityGainDistanceMeters)] + public float unityGainDistance = SpatialSoundSettings.DefaultUnityGainDistance; + + [Tooltip("The AudioMixerGroup to use when playing.")] + public UnityEngine.Audio.AudioMixerGroup bus = null; + + [Tooltip("The default or center pitch around which randomization can be done.")] + [Range(-3.0f, 3.0f)] + public float pitchCenter = 1.0f; + + /// + /// The amount in either direction from Pitch Center that the pitch can randomly vary upon playing the event. + /// + /// The supported range is 0.0f - 2.0f. + [HideInInspector] + public float pitchRandomization = 0.0f; + + [Tooltip("The default or center volume level around which randomization can be done.")] + [Range(0.0f, 1.0f)] + public float volumeCenter = 1.0f; + + /// + /// The amount in either direction from Volume Center that the volume can randomly vary upon playing the event. + /// + /// The supported range is 0.0f - 0.5f. + [HideInInspector] + public float volumeRandomization = 0.0f; + + [Tooltip("The default or center panning. Only used when positioning is set to 2D.")] + [Range(-1.0f, 1.0f)] + public float panCenter = 0; + + /// + /// The amount in either direction from Pan Center that panning can randomly vary upon playing the event. + /// + /// The supported range is 0.0f - 0.5f. + [HideInInspector] + public float panRandomization = 0.0f; + + + [Tooltip("Time, in seconds, for the audio to fade from 0 to the selected volume. Does not apply to continuous containers in which the Crossfade TGime property is used.")] + [Range(0f, 20f)] + public float fadeInTime = 0.0f; + + [Tooltip("Time, in seconds, for the audio to fade out from the selected volume to 0. Does not apply to continuous containers in which the Crossfade TGime property is used.")] + [Range(0f, 20f)] + public float fadeOutTime = 0.0f; + + [Tooltip("The maximum number of instances that should be allowed at a time for this event. Any new instances will be suppressed.")] + public int instanceLimit = 0; + + [Tooltip("The amount of time in seconds that an event will remain active past when the sound ends. Useful for limiting the instances of an event beyond the clip play time.")] + public float instanceTimeBuffer = 0.0f; + + [Tooltip("The behavior when the instance limit is reached.")] + public AudioEventInstanceBehavior instanceBehavior = AudioEventInstanceBehavior.KillOldest; + + /// + /// Contains the sounds associated with this AudioEvent. + /// + public AudioContainer container = new AudioContainer(); + + /// + /// Is this AudioEvent's container a continuous container? + /// + /// True if this AudioEvent's container is one of the continuous types (random or sequential), otherwise false. + public bool IsContinuous() + { + return container.containerType == AudioContainerType.ContinuousRandom || + container.containerType == AudioContainerType.ContinuousSequence; + } + + /// + /// Compares this AudioEvent with another object. + /// + /// The object to compare against. + /// An integer that indicates whether this AudioEvent precedes (-1), follows (1), + /// or appears in the same position (0) in the sort order as the AudioEvent being compared. + /// If the specified object is not an AudioEvent, the return value is 1. + public int CompareTo(object obj) + { + if (obj == null) return 1; + + AudioEvent tempEvent = obj as AudioEvent; + if (tempEvent != null) + { + return CompareTo(tempEvent); + } + else + { + throw new ArgumentException("Object is not an AudioEvent"); + } + } + + /// + /// Compares this AudioEvent with another AudioEvent. + /// + /// The AudioEvent to compare against. + /// An integer that indicates whether this AudioEvent precedes (-1), follows (1), + /// or appears in the same position (0) in the sort order as the AudioEvent being compared. + public int CompareTo(AudioEvent other) + { + if (other == null) return 1; + return string.Compare(name, other.name); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs.meta new file mode 100644 index 0000000..b0f3858 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioEvent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0d24e90a445079545850f6654903acb3 +timeCreated: 1456605238 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs new file mode 100644 index 0000000..efb8bbf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A shortcut to assign a clip to an AudioSource component and play the source + /// + public static class AudioSourcePlayClipExtension + { + public static void PlayClip(this AudioSource source, UnityEngine.AudioClip clip, bool loop = false) + { + source.clip = clip; + source.loop = loop; + source.Play(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs.meta new file mode 100644 index 0000000..46048e5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcePlayClipExtension.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5482069df07338140b883d8ce2cf3305 +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs new file mode 100644 index 0000000..ab4dd3b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The AudioSourcesReference class encapsulates a cache of references to audio source components on a given + /// local audio emitter game object. Used primarily by UAudioManager, it improves performance by bypassing + /// having to requery for list of attached components on each use. + /// + public class AudioSourcesReference : MonoBehaviour + { + private List audioSources; + public List AudioSources + { + get + { + return audioSources; + } + } + + public AudioSource AddNewAudioSource() + { + var source = this.gameObject.AddComponent(); + source.playOnAwake = false; + source.dopplerLevel = 0f; + source.enabled = false; + audioSources.Add(source); + return source; + } + + private void Awake() + { + audioSources = new List(); + foreach (AudioSource audioSource in GetComponents()) + { + audioSources.Add(audioSource); + } + } + + private void OnDestroy() + { + // AudioSourcesReference created all these components and nothing else should use them. + foreach (AudioSource audioSource in audioSources) + { + Object.Destroy(audioSource); + } + + audioSources = null; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs.meta new file mode 100644 index 0000000..7b0d961 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/AudioSourcesReference.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 70b9e436777519e4ba940d25e15a1a14 +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor.meta new file mode 100644 index 0000000..f3c2a28 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b2be6d5d7e2e5e74a8edecf0ede9dc84 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs new file mode 100644 index 0000000..5da6e6a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs @@ -0,0 +1,356 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + public class UAudioManagerBaseEditor : Editor where TEvent : AudioEvent, new() + { + protected UAudioManagerBase myTarget; + private string[] eventNames; + private int selectedEventIndex = 0; + private readonly string[] posTypes = { "2D", "3D", "Spatial Sound" }; + private Rect editorCurveSize = new Rect(0f, 0f, 1f, 1f); + + protected void SetUpEditor() + { + // Having a null array of events causes too many errors and should only happen on first adding anyway. + if (this.myTarget.EditorEvents == null) + { + this.myTarget.EditorEvents = new TEvent[0]; + } + this.eventNames = new string[this.myTarget.EditorEvents.Length]; + UpdateEventNames(this.myTarget.EditorEvents); + } + + protected void DrawInspectorGUI(bool showEmitters) + { + this.serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + DrawEventHeader(this.myTarget.EditorEvents); + + if (this.myTarget.EditorEvents != null && this.myTarget.EditorEvents.Length > 0) + { + // Display current event in dropdown. + EditorGUI.indentLevel++; + this.selectedEventIndex = EditorGUILayout.Popup(this.selectedEventIndex, this.eventNames); + + if (this.selectedEventIndex < this.myTarget.EditorEvents.Length) + { + TEvent selectedEvent; + + selectedEvent = this.myTarget.EditorEvents[this.selectedEventIndex]; + SerializedProperty selectedEventProperty = this.serializedObject.FindProperty("events.Array.data[" + this.selectedEventIndex.ToString() + "]"); + EditorGUILayout.Space(); + + if (selectedEventProperty != null) + { + DrawEventInspector(selectedEventProperty, selectedEvent, this.myTarget.EditorEvents, showEmitters); + if (!DrawContainerInspector(selectedEventProperty, selectedEvent)) + { + EditorGUI.indentLevel++; + DrawSoundClipInspector(selectedEventProperty, selectedEvent); + EditorGUI.indentLevel--; + } + } + + EditorGUI.indentLevel--; + } + } + + EditorGUI.EndChangeCheck(); + this.serializedObject.ApplyModifiedProperties(); + + if (UnityEngine.GUI.changed) + { + EditorUtility.SetDirty(this.myTarget); + } + } + + private void DrawEventHeader(TEvent[] EditorEvents) + { + // Add or remove current event. + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + EditorGUILayoutExtensions.Label("Events"); + + using (new EditorGUI.DisabledScope((EditorEvents != null) && (EditorEvents.Length < 1))) + { + if (EditorGUILayoutExtensions.Button("Remove")) + { + this.myTarget.EditorEvents = RemoveAudioEvent(EditorEvents, this.selectedEventIndex); + } + } + + if (EditorGUILayoutExtensions.Button("Add")) + { + this.myTarget.EditorEvents = AddAudioEvent(EditorEvents); + } + + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + } + + private void DrawEventInspector(SerializedProperty selectedEventProperty, TEvent selectedEvent, TEvent[] EditorEvents, bool showEmitters) + { + // Get current event's properties. + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("name")); + + if (selectedEvent.name != this.eventNames[this.selectedEventIndex]) + { + UpdateEventNames(EditorEvents); + } + + if (showEmitters) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("primarySource")); + if (selectedEvent.IsContinuous()) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("secondarySource")); + } + } + + // Positioning + selectedEvent.spatialization = (SpatialPositioningType)EditorGUILayout.Popup("Positioning", (int)selectedEvent.spatialization, this.posTypes); + + if (selectedEvent.spatialization == SpatialPositioningType.SpatialSound) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("roomSize")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("minGain")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("maxGain")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("unityGainDistance")); + EditorGUILayout.Space(); + } + else if (selectedEvent.spatialization == SpatialPositioningType.ThreeD) + { + //Quick this : needs an update or the serialized object is not saving the threeD value + this.serializedObject.Update(); + + float curveHeight = 30f; + float curveWidth = 300f; + + //Simple 3D Sounds properties + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("maxDistanceAttenuation3D")); + + //volume attenuation + selectedEventProperty.FindPropertyRelative("attenuationCurve").animationCurveValue = EditorGUILayout.CurveField("Attenuation", selectedEventProperty.FindPropertyRelative("attenuationCurve").animationCurveValue, Color.red, editorCurveSize, GUILayout.Height(curveHeight), GUILayout.Width(curveWidth), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true)); + //Spatial green + selectedEventProperty.FindPropertyRelative("spatialCurve").animationCurveValue = EditorGUILayout.CurveField("Spatial", selectedEventProperty.FindPropertyRelative("spatialCurve").animationCurveValue, Color.green, editorCurveSize, GUILayout.Height(curveHeight), GUILayout.Width(curveWidth), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true)); + //spread lightblue + selectedEventProperty.FindPropertyRelative("spreadCurve").animationCurveValue = EditorGUILayout.CurveField("Spread", selectedEventProperty.FindPropertyRelative("spreadCurve").animationCurveValue, Color.blue, editorCurveSize, GUILayout.Height(curveHeight), GUILayout.Width(curveWidth), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true)); + //lowpass purple + selectedEventProperty.FindPropertyRelative("lowPassCurve").animationCurveValue = EditorGUILayout.CurveField("LowPass", selectedEventProperty.FindPropertyRelative("lowPassCurve").animationCurveValue, Color.magenta, editorCurveSize, GUILayout.Height(curveHeight), GUILayout.Width(curveWidth), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true)); + //Yellow reverb + selectedEventProperty.FindPropertyRelative("reverbCurve").animationCurveValue = EditorGUILayout.CurveField("Reverb", selectedEventProperty.FindPropertyRelative("reverbCurve").animationCurveValue, Color.yellow, editorCurveSize, GUILayout.Height(curveHeight), GUILayout.Width(curveWidth), GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(true)); + + EditorGUILayout.Space(); + } + + // Bus + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("bus")); + + // Fades + if (!selectedEvent.IsContinuous()) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("fadeInTime")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("fadeOutTime")); + } + + // Pitch Settings + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("pitchCenter")); + + // Volume settings + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("volumeCenter")); + + // Pan Settings + if (selectedEvent.spatialization == SpatialPositioningType.TwoD) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("panCenter")); + } + // Instancing + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("instanceLimit")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("instanceTimeBuffer")); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("instanceBehavior")); + + // Container + EditorGUILayout.Space(); + } + + private bool DrawContainerInspector(SerializedProperty selectedEventProperty, TEvent selectedEvent) + { + bool addedSound = false; + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.containerType")); + + if (!selectedEvent.IsContinuous()) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.looping")); + + if (selectedEvent.container.looping) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.loopTime")); + } + } + + // Sounds + EditorGUILayout.Space(); + + if (selectedEvent.IsContinuous()) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.crossfadeTime")); + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Sounds"); + + if (EditorGUILayoutExtensions.Button("Add")) + { + AddSound(selectedEvent); + + // Skip drawing sound inspector after adding a new sound. + addedSound = true; + } + EditorGUILayout.EndHorizontal(); + return addedSound; + } + + private void DrawSoundClipInspector(SerializedProperty selectedEventProperty, TEvent selectedEvent) + { + bool allowLoopingClip = !selectedEvent.container.looping; + + if (allowLoopingClip) + { + if (selectedEvent.IsContinuous()) + { + allowLoopingClip = false; + } + } + + for (int i = 0; i < selectedEvent.container.sounds.Length; i++) + { + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.sounds.Array.data[" + i + "].sound")); + + if (EditorGUILayoutExtensions.Button("Remove")) + { + selectedEventProperty.FindPropertyRelative("container.sounds.Array.data[" + i + "]").DeleteCommand(); + break; + } + + EditorGUILayout.EndHorizontal(); + + if (!selectedEvent.IsContinuous()) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.sounds.Array.data[" + i + "].delayCenter")); + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.sounds.Array.data[" + i + "].delayRandomization")); + EditorGUILayout.EndHorizontal(); + + //Disable looping next clips in a simultaneous container only. + if (allowLoopingClip) + { + EditorGUILayout.PropertyField(selectedEventProperty.FindPropertyRelative("container.sounds.Array.data[" + i + "].looping")); + + if (selectedEvent.container.sounds[i].looping && selectedEvent.container.containerType == AudioContainerType.Simultaneous) + { + allowLoopingClip = false; + } + } + else + { + selectedEvent.container.sounds[i].looping = false; + } + } + } + } + + private void UpdateEventNames(TEvent[] EditorEvents) + { + HashSet previousEventNames = new HashSet(); + + for (int i = 0; i < EditorEvents.Length; i++) + { + if (string.IsNullOrEmpty(EditorEvents[i].name)) + { + EditorEvents[i].name = "_NewEvent" + i.ToString(); + } + + while (previousEventNames.Contains(EditorEvents[i].name)) + { + EditorEvents[i].name = "_" + EditorEvents[i].name; + } + + this.eventNames[i] = EditorEvents[i].name; + previousEventNames.Add(this.eventNames[i]); + } + } + + private void AddSound(TEvent selectedEvent) + { + + UAudioClip[] tempClips = new UAudioClip[selectedEvent.container.sounds.Length + 1]; + selectedEvent.container.sounds.CopyTo(tempClips, 0); + tempClips[tempClips.Length - 1] = new UAudioClip(); + selectedEvent.container.sounds = tempClips; + } + + private TEvent[] AddAudioEvent(TEvent[] EditorEvents) + { + TEvent tempEvent = new TEvent(); + TEvent[] tempEventArray = new TEvent[EditorEvents.Length + 1]; + tempEvent.container = new AudioContainer(); + tempEvent.container.sounds = new UAudioClip[0]; + EditorEvents.CopyTo(tempEventArray, 0); + tempEventArray[EditorEvents.Length] = tempEvent; + this.eventNames = new string[tempEventArray.Length]; + UpdateEventNames(tempEventArray); + this.selectedEventIndex = this.eventNames.Length - 1; + return tempEventArray; + } + + private TEvent[] RemoveAudioEvent(TEvent[] editorEvents, int eventToRemove) + { + editorEvents = RemoveElement(editorEvents, eventToRemove); + this.eventNames = new string[editorEvents.Length]; + UpdateEventNames(editorEvents); + + if (this.selectedEventIndex >= editorEvents.Length) + { + this.selectedEventIndex--; + } + + return editorEvents; + } + + /// + /// Returns a new array that has the item at the given index removed. + /// + /// The array. + /// Index to remove. + /// The new array. + public static T[] RemoveElement(T[] array, int index) + { + T[] newArray = new T[array.Length - 1]; + + for (int i = 0; i < array.Length; i++) + { + // Send the clip to the previous item in the new array if we have passed the removed clip. + if (i > index) + { + newArray[i - 1] = array[i]; + } + else if (i < index) + { + newArray[i] = array[i]; + } + } + + return newArray; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs.meta new file mode 100644 index 0000000..c73c41f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerBaseEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e32721627fdb3a44188591318a46de0e +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs new file mode 100644 index 0000000..b67aaa1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; + +namespace HoloToolkit.Unity +{ + [CustomEditor(typeof(UAudioManager))] + public class UAudioManagerEditor : UAudioManagerBaseEditor + { + private void OnEnable() + { + this.myTarget = (UAudioManager)target; + SetUpEditor(); + } + + public override void OnInspectorGUI() + { + EditorGUILayout.PropertyField(this.serializedObject.FindProperty("globalEventInstanceLimit")); + EditorGUILayout.PropertyField(this.serializedObject.FindProperty("globalInstanceBehavior")); + DrawInspectorGUI(false); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs.meta new file mode 100644 index 0000000..4f853a8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioManagerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 69f4044a5eb7642468213a8e2c77ea30 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs new file mode 100644 index 0000000..ca20594 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; + +namespace HoloToolkit.Unity +{ + [CustomEditor(typeof(UAudioMiniManager))] + public class UAudioMiniManagerEditor : UAudioManagerBaseEditor + { + private void OnEnable() + { + this.myTarget = (UAudioMiniManager)target; + SetUpEditor(); + } + + public override void OnInspectorGUI() + { + DrawInspectorGUI(true); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs.meta new file mode 100644 index 0000000..9a51d9c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioMiniManagerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 900d99927577df241908a2508ef83131 +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs new file mode 100644 index 0000000..4905f28 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs @@ -0,0 +1,126 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + public class UAudioProfiler : EditorWindow + { + private int currentFrame = 0; + private List eventTimeline; + private Vector2 scrollOffset = new Vector2(); + private const int MaxFrames = 300; + + private class ProfilerEvent + { + public string EventName = ""; + public string EmitterName = ""; + public string BusName = ""; + } + + [MenuItem("HoloToolkit/UAudioTools/Profiler", false, 200)] + static void ShowEditor() + { + UAudioProfiler profilerWindow = GetWindow(); + if (profilerWindow.eventTimeline == null) + { + profilerWindow.currentFrame = 0; + profilerWindow.eventTimeline = new List(); + } + profilerWindow.Show(); + } + + // Only update the currently-playing events 10 times a second - we don't need millisecond-accurate profiling + private void OnInspectorUpdate() + { + if (!EditorApplication.isPlaying) + { + return; + } + + ProfilerEvent[] currentEvents = new ProfilerEvent[0]; + + if (this.eventTimeline == null) + { + this.eventTimeline = new List(); + } + + if (UAudioManager.Instance != null && !EditorApplication.isPaused) + { + CollectProfilerEvents(currentEvents); + } + + Repaint(); + } + + // Populate an array of the active events, and add it to the timeline list of all captured audio frames. + private void CollectProfilerEvents(ProfilerEvent[] currentEvents) + { + List activeEvents = UAudioManager.Instance.ProfilerEvents; + currentEvents = new ProfilerEvent[activeEvents.Count]; + for (int i = 0; i < currentEvents.Length; i++) + { + ActiveEvent currentEvent = activeEvents[i]; + ProfilerEvent tempEvent = new ProfilerEvent(); + tempEvent.EventName = currentEvent.audioEvent.name; + tempEvent.EmitterName = currentEvent.AudioEmitter.name; + + // The bus might be null, Unity defaults to Editor-hidden master bus. + if (currentEvent.audioEvent.bus == null) + { + tempEvent.BusName = "-MasterBus-"; + } + else + { + tempEvent.BusName = currentEvent.audioEvent.bus.name; + } + + currentEvents[i] = tempEvent; + } + this.eventTimeline.Add(currentEvents); + + // Trim the first event if we have exceeded the maximum stored frames. + if (this.eventTimeline.Count > MaxFrames) + { + this.eventTimeline.RemoveAt(0); + } + this.currentFrame = this.eventTimeline.Count - 1; + } + + // Draw the profiler window. + private void OnGUI() + { + if (!EditorApplication.isPlaying) + { + EditorGUILayoutExtensions.Label("Profiler only active in play mode!"); + return; + } + + //Fix null reference exception when launching with profiler is open + if(eventTimeline!=null) + { + this.currentFrame = EditorGUILayout.IntSlider(this.currentFrame, 0, this.eventTimeline.Count - 1); + scrollOffset = EditorGUILayout.BeginScrollView(scrollOffset); + + if (this.eventTimeline.Count > this.currentFrame) + { + for (int i = 0; i < this.eventTimeline[this.currentFrame].Length; i++) + { + DrawEventButton(this.eventTimeline[this.currentFrame][i], i); + } + } + + EditorGUILayout.EndScrollView(); + } + + } + + private void DrawEventButton(ProfilerEvent currentEvent, int id) + { + EditorGUILayout.SelectableLabel(currentEvent.EventName + "-->(" + currentEvent.EmitterName + ")-->(" + currentEvent.BusName + ")"); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs.meta new file mode 100644 index 0000000..6abe4e7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/Editor/UAudioProfiler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 491c8f41cb5f4ad469d53b03bcb9b1fc +timeCreated: 1458941822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs new file mode 100644 index 0000000..8fe2a65 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The MiniAudioEvent class is the main component of UAudioMiniManager and contains settings and a container for playing audio clips. + /// + [Serializable] + public class MiniAudioEvent : AudioEvent + { + [Tooltip("The primary AudioSource.")] + public AudioSource primarySource = null; + + [Tooltip("The secondary AudioSource for continuous containers.")] + public AudioSource secondarySource = null; + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs.meta new file mode 100644 index 0000000..cec222d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/MiniAudioEvent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b8d4f41ccc5667c4a8bf2f57a56763d4 +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs new file mode 100644 index 0000000..a2f9ee7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Room sizes for the Microsoft Spatial Sound Spatializer. + /// + public enum SpatialSoundRoomSizes + { + Small, // Office to small conference room + Medium, // Large conference room + Large, // Auditorium + None // Similar to being outdoors + } + + /// + /// The SpatialSoundSettings class provides a set of methods that simplify making modifications + /// to Microsoft Spatial Sound Spatializer parameters. + /// + public static class SpatialSoundSettings + { + public const SpatialSoundRoomSizes DefaultSpatialSoundRoom = SpatialSoundRoomSizes.Small; + + // Ranges and default values for the Microsoft Spatial Sound Spatializer parameters. + // See: + // for more details. + public const float MinimumGainDecibels = -96.0f; + public const float MaximumGainDecibels = 12.0f; + public const float MinimumUnityGainDistanceMeters = 0.05f; + public const float MaximumUnityGainDistanceMeters = float.MaxValue; + public const float DefaultMinGain = MinimumGainDecibels; + public const float DefaultMaxGain = MaximumGainDecibels; + public const float DefaultUnityGainDistance = 1.0f; + + /// + /// The available Microsoft Spatial Sound Spatializer parameters. + /// + private enum SpatialSoundParameters + { + RoomSize = 1, + MinGain, + MaxGain, + UnityGainDistance + } + + /// + /// Sets the Spatial Sound room size. + /// + /// The AudioSource on which the room size will be set. + /// The desired room size. + public static void SetRoomSize(AudioSource audioSource, SpatialSoundRoomSizes room) + { + SetParameter(audioSource, SpatialSoundParameters.RoomSize, (float)room); + } + + /// + /// Sets the Spatial Sound minimum gain. + /// + /// The AudioSource on which the minimum gain will be set. + /// The desired minimum gain, in decibels. + public static void SetMinGain(AudioSource audioSource, float gain) + { + SetParameter(audioSource, SpatialSoundParameters.MinGain, gain); + } + + /// + /// Sets the Spatial Sound maximum gain. + /// + /// The AudioSource on which the maximum gain will be set. + /// The desired maximum gain, in decibels. + public static void SetMaxGain(AudioSource audioSource, float gain) + { + SetParameter(audioSource, SpatialSoundParameters.MaxGain, gain); + } + + /// + /// Sets the Spatial Sound unity gain distance. + /// + /// The AudioSource on which the unity gain distance will be set. + /// The distance, in meters, at which the AudioSource gain will be 0 decibels. + public static void SetUnityGainDistance(AudioSource audioSource, float distance) + { + SetParameter(audioSource, SpatialSoundParameters.UnityGainDistance, distance); + } + + /// + /// Sets a Spatial Sound parameter on an AudioSource. + /// + /// The AudioSource on which the specified parameter will be set. + /// The Spatial Sound parameter to set. + /// The value to set for the Spatial Sound parameter. + private static void SetParameter(AudioSource audioSource, SpatialSoundParameters param, float value) + { + audioSource.SetSpatializerFloat((int)param, value); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs.meta new file mode 100644 index 0000000..17f53d1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/SpatialSoundSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c8ac83bd8c9fbcf4f8a419abe32a5d5e +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs new file mode 100644 index 0000000..ae5147e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs @@ -0,0 +1,470 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The UAudioManager class is a singleton that provides organization and control of an application's AudioEvents. + /// Designers and coders can share the names of the AudioEvents to enable rapid iteration on the application's + /// sound similar to how XAML is used for user interfaces. + /// + public partial class UAudioManager : UAudioManagerBase + { + [Tooltip("The maximum number of AudioEvents that can be played at once. Zero (0) indicates there is no limit.")] + [SerializeField] + private int globalEventInstanceLimit = 0; + + [Tooltip("The desired behavior when the instance limit is reached.")] + [SerializeField] + private AudioEventInstanceBehavior globalInstanceBehavior = AudioEventInstanceBehavior.KillOldest; + + /// + /// Optional transformation applied to the audio event emitter passed to calls to play event. + /// This allows events to be redirected to a different emitter. + /// + /// This class is a singleton, the last transform set will be applied to all audio + /// emitters when their state changes (from stopped to playing, volume changes, etc). + public Func AudioEmitterTransform { get; set; } + + /// + /// Dictionary for quick lookup of events by name. + /// + private Dictionary eventsDictionary; + + private static UAudioManager _Instance; + public static UAudioManager Instance + { + get + { + if (_Instance == null) + { + _Instance = FindObjectOfType(); + } + return _Instance; + } + } + + protected new void Awake() + { + base.Awake(); + + CreateEventsDictionary(); + } + + /// + /// Plays an AudioEvent. + /// + /// The name associated with the AudioEvent. + /// The AudioEvent is attached to the same GameObject as this script. + public void PlayEvent(string eventName) + { + PlayEvent(eventName, gameObject); + } + + /// + /// Plays an AudioEvent. + /// + /// The name associated with the AudioEvent. + /// The GameObject on which the AudioEvent is to be played. + /// The Message to Send to the GameObject when the sound has finished playing. + public void PlayEvent(string eventName, GameObject emitter, string messageOnAudioEnd = null) + { + PlayEvent(eventName, emitter, null, null, messageOnAudioEnd); + } + + /// + /// Plays an AudioEvent. + /// + /// The name associated with the AudioEvent. + /// The AudioSource component to use as the primary source for the event. + /// The AudioSource component to use as the secondary source for the event. + public void PlayEvent(string eventName, AudioSource primarySource, AudioSource secondarySource = null) + { + PlayEvent(eventName, primarySource.gameObject, primarySource, secondarySource); + } + + /// + /// Plays an AudioEvent. + /// + /// The name associated with the AudioEvent. + /// The GameObject on which the AudioEvent is to be played. + /// The AudioSource component to use as the primary source for the event. + /// The AudioSource component to use as the secondary source for the event. + /// The Message to Send to the GameObject when the sound has finished playing. + private void PlayEvent(string eventName, GameObject emitter, AudioSource primarySource, AudioSource secondarySource, string messageOnAudioEnd = null) + { + if (!CanPlayNewEvent()) + { + return; + } + emitter = ApplyAudioEmitterTransform(emitter); + if (emitter == null) + { + //if emitter is null, use the uaudiomanager gameobject(2dsound) + emitter = gameObject; + } + + if (string.IsNullOrEmpty(eventName)) + { + Debug.LogWarning("Audio Event string is null or empty!"); + return; + } + + AudioEvent currentEvent; + + if (!eventsDictionary.TryGetValue(eventName, out currentEvent)) + { + Debug.LogFormat("Could not find event \"{0}\"", eventName); + return; + } + + // If the instance limit has been reached... + if (currentEvent.instanceLimit != 0 && GetInstances(eventName) >= currentEvent.instanceLimit) + { + if (currentEvent.instanceBehavior == AudioEventInstanceBehavior.KillNewest) + { + // Do not play the event. + Debug.LogFormat(this, "Instance limit reached, not playing event \"{0}\"", eventName); + return; + } + else + { + // Top the oldest instance of this event. + KillOldestInstance(eventName); + } + } + + if (primarySource == null) + { + primarySource = GetUnusedAudioSource(emitter); + } + + if (currentEvent.IsContinuous() && secondarySource == null) + { + secondarySource = GetUnusedAudioSource(emitter); + } + + PlayEvent(currentEvent, emitter, primarySource, secondarySource, messageOnAudioEnd); + } + + /// + /// Plays an AudioEvent. + /// + /// The AudioEvent to play. + /// The GameObject on which the AudioEvent is to be played. + /// The AudioSource component to use as the primary source for the event. + /// The AudioSource component to use as the secondary source for the event. + /// The Message to Send to the GameObject when the sound has finished playing. + private void PlayEvent(AudioEvent audioEvent, + GameObject emitter, + AudioSource primarySource, + AudioSource secondarySource, + string messageOnAudioEnd = null) + { + ActiveEvent tempEvent = new ActiveEvent(audioEvent, emitter, primarySource, secondarySource, messageOnAudioEnd); + + // The base class owns this event once we pass it to PlayContainer, and may dispose it if it cannot be played. + PlayContainer(tempEvent); + } + + /// + /// Stop event by gameObject. + /// + /// + /// + /// + public void StopEventsOnGameObject(string eventName, GameObject gameObjectToStop, float fadeOutTime = 0f) + { + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + ActiveEvent activeEvent = activeEvents[i]; + + if (activeEvent.AudioEmitter == gameObjectToStop) + { + StopEvent(activeEvent.audioEvent.name, gameObjectToStop, fadeOutTime); + } + } + } + + + /// + /// Stops all events by name. + /// + /// The name associated with the AudioEvent. + /// The amount of time in seconds to completely fade out the sound. + public void StopAllEvents(string eventName, GameObject emitter = null, float fadeOutTime = 0f) + { + + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + ActiveEvent activeEvent = activeEvents[i]; + + if (activeEvent.audioEvent.name == eventName) + { + if (fadeOutTime > 0) + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, fadeOutTime)); + } + else + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, activeEvent.audioEvent.fadeOutTime)); + } + } + } + } + + /// + /// Stops all. + /// + /// The amount of time in seconds to completely fade out the sound. + public void StopAll(GameObject emitter = null, float fadeOutTime = 0f) + { + foreach (ActiveEvent activeEvent in activeEvents) + { + if (fadeOutTime > 0) + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, fadeOutTime)); + } + else + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, activeEvent.audioEvent.fadeOutTime)); + } + } + } + + + + /// + /// Stops an AudioEvent. + /// + /// The name associated with the AudioEvent. + /// The GameObject on which the AudioEvent will stopped. + /// The amount of time in seconds to completely fade out the sound. + public void StopEvent(string eventName, GameObject emitter = null, float fadeOutTime = 0f) + { + emitter = ApplyAudioEmitterTransform(emitter); + if (emitter == null) + { + //if emitter is null, use the uaudiomanager gameobject(2dsound) + emitter = gameObject; + } + + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + ActiveEvent activeEvent = activeEvents[i]; + + if (activeEvent.audioEvent.name == eventName && activeEvent.AudioEmitter == emitter) + { + //if there's no fade specified, use the fade stored in the event + if (fadeOutTime > 0f) + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, fadeOutTime)); + } + else + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvent, activeEvents[i].audioEvent.fadeOutTime)); + + } + } + } + } + + /// + /// Sets the pitch value on active AudioEvents. + /// + /// The name associated with the AudioEvents. + /// The value to set the pitch, between 0 (exclusive) and 3 (inclusive). + public void SetPitch(string eventName, float newPitch) + { + if (newPitch <= 0 || newPitch > 3) + { + Debug.LogErrorFormat(this, "Invalid pitch {0} set for event \"{1}\"", newPitch, eventName); + return; + } + + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + ActiveEvent activeEvent = activeEvents[i]; + if (activeEvent.audioEvent.name == eventName) + { + activeEvent.SetPitch(newPitch); + } + } + } + + /// + /// Sets an AudioEvent's container loop frequency + /// + /// The name associated with the AudioEvent. + /// The new loop time in seconds. + public void SetLoopingContainerFrequency(string eventName, float newLoopTime) + { + AudioEvent currentEvent; + + if (!eventsDictionary.TryGetValue(eventName, out currentEvent)) + { + Debug.LogErrorFormat(this, "Could not find event \"{0}\"", eventName); + return; + } + + if (newLoopTime <= 0) + { + Debug.LogErrorFormat(this, "Invalid loop time set for event \"{0}\"", eventName); + return; + } + + currentEvent.container.loopTime = newLoopTime; + } + + /// + /// Sets the volume for active AudioEvents. + /// + /// The name associated with the AudioEvents. + /// The GameObject associated, as the audio emitter, for the AudioEvents. + /// The new volume. + public void ModulateVolume(string eventName, GameObject emitter, float volume) + { + emitter = ApplyAudioEmitterTransform(emitter); + + if (emitter == null) + { + return; + } + + for (int i = 0; i < activeEvents.Count; i++) + { + ActiveEvent activeEvent = activeEvents[i]; + + if (activeEvents[i].audioEvent.name == eventName && activeEvents[i].AudioEmitter == emitter) + { + activeEvent.volDest = volume; + activeEvent.altVolDest = volume; + activeEvent.currentFade = 0; + } + } + } + + /// + /// Get an available AudioSource. + /// + /// The audio emitter on which the AudioSource is desired. + /// The current audio event. + /// + private AudioSource GetUnusedAudioSource(GameObject emitter, ActiveEvent currentEvent = null) + { + // Get or create valid AudioSource. + AudioSourcesReference sourcesReference = emitter.GetComponent(); + if (sourcesReference != null) + { + List sources = sourcesReference.AudioSources; + for (int s = 0; s < sources.Count; s++) + { + if (!sources[s].isPlaying && !sources[s].enabled) + { + if (currentEvent == null) + { + return sources[s]; + } + else if (sources[s] != currentEvent.PrimarySource) + { + return sources[s]; + } + } + } + } + else + { + sourcesReference = emitter.AddComponent(); + } + + return sourcesReference.AddNewAudioSource(); + } + + /// + /// Checks to see if a new AudioEvent can be played. + /// + /// True if a new AudioEvent can be played, otherwise false. + /// If the global instance behavior is set to AudioEventInstanceBehavior.KillOldest, + /// the oldest event will be stopped to allow a new event to be played. + private bool CanPlayNewEvent() + { + if (globalEventInstanceLimit == 0 || activeEvents.Count < globalEventInstanceLimit) + { + return true; + } + else + { + if (globalInstanceBehavior == AudioEventInstanceBehavior.KillOldest) + { + StopEvent(activeEvents[0]); + return true; + } + else + { + return false; + } + } + } + + /// + /// Stops the first (oldest) instance of an event with the matching name + /// + /// The name associated with the AudioEvent to stop. + private void KillOldestInstance(string eventName) + { + for (int i = 0; i < activeEvents.Count; i++) + { + ActiveEvent tempEvent = activeEvents[i]; + + if (tempEvent.audioEvent.name == eventName) + { + StopEvent(tempEvent); + return; + } + } + } + + /// + /// Applies the registered transform to an audio emitter. + /// + /// + /// + /// If there is no registered transform, the GameObject specified in the + /// emitter parameter will be returned. + private GameObject ApplyAudioEmitterTransform(GameObject emitter) + { + if (AudioEmitterTransform != null) + { + emitter = AudioEmitterTransform(emitter); + } + + return emitter; + } + + /// + /// Create the Dictionary for quick lookup of AudioEvents. + /// + private void CreateEventsDictionary() + { + eventsDictionary = new Dictionary(events.Length); + + for (int i = 0; i < events.Length; i++) + { + AudioEvent tempEvent = events[i]; + eventsDictionary.Add(tempEvent.name, tempEvent); + } + } + +#if UNITY_EDITOR + [ContextMenu("Sort Events")] + private void AlphabetizeEventList() + { + Array.Sort(events); + } +#endif + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs.meta new file mode 100644 index 0000000..ee96df7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 88e5a9c38f6989249b88204932d7884f +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs new file mode 100644 index 0000000..fd2eb11 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs @@ -0,0 +1,675 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// UAudioManagerBase provides the base functionality for UAudioManager classes. + /// + /// The type of AudioEvent being managed. + /// The TEvent type specified must derive from AudioEvent. + public partial class UAudioManagerBase : MonoBehaviour where TEvent : AudioEvent, new() + { + [SerializeField] + protected TEvent[] events = null; + + protected const float InfiniteLoop = -1; + protected List activeEvents; + +#if UNITY_EDITOR + public TEvent[] EditorEvents { get { return events; } set { events = value; } } + public List ProfilerEvents { get { return activeEvents; } } +#endif + + protected void Awake() + { + activeEvents = new List(); + } + + private void Update() + { + UpdateEmitterVolumes(); + } + + protected void OnDestroy() + { + StopAllEvents(); + } + + /// + /// Stops all ActiveEvents + /// + public void StopAllEvents() + { + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + StopEvent(activeEvents[i]); + } + } + + /// + /// Fades out all of the events over fadeTime and stops once completely faded out. + /// + /// The amount of time, in seconds, to fade between current volume and 0. + public void StopAllEvents(float fadeTime) + { + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + StartCoroutine(StopEventWithFadeCoroutine(activeEvents[i], fadeTime)); + } + } + + /// + /// Stops all events on a single emitter. + /// + public void StopAllEvents(GameObject emitter) + { + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + if (activeEvents[i].AudioEmitter == emitter) + { + StopEvent(activeEvents[i]); + } + } + } + + /// + /// Stops all events on one AudioSource. + /// + public void StopAllEvents(AudioSource emitter) + { + for (int i = activeEvents.Count - 1; i >= 0; i--) + { + if (activeEvents[i].PrimarySource == emitter) + { + StopEvent(activeEvents[i]); + } + } + } + + /// + /// Linearly interpolates the volume property on all of the AudioSource components in the ActiveEvents. + /// + private void UpdateEmitterVolumes() + { + // Move through each active event and change the settings for the AudioSource components to smoothly fade volumes. + for (int i = 0; i < activeEvents.Count; i++) + { + ActiveEvent currentEvent = this.activeEvents[i]; + + // If we have a secondary source (for crossfades) adjust the volume based on the current fade time for each active event. + if (currentEvent.SecondarySource != null && currentEvent.SecondarySource.volume != currentEvent.altVolDest) + { + if (Mathf.Abs(currentEvent.altVolDest - currentEvent.SecondarySource.volume) < Time.deltaTime / currentEvent.currentFade) + { + currentEvent.SecondarySource.volume = currentEvent.altVolDest; + } + else + { + currentEvent.SecondarySource.volume += (currentEvent.altVolDest - currentEvent.SecondarySource.volume) * Time.deltaTime / currentEvent.currentFade; + } + } + + // Adjust the volume of the main source based on the current fade time for each active event. + if (currentEvent.PrimarySource != null && currentEvent.PrimarySource.volume != currentEvent.volDest) + { + if (Mathf.Abs(currentEvent.volDest - currentEvent.PrimarySource.volume) < Time.deltaTime / currentEvent.currentFade) + { + currentEvent.PrimarySource.volume = currentEvent.volDest; + } + else + { + currentEvent.PrimarySource.volume += (currentEvent.volDest - currentEvent.PrimarySource.volume) * Time.deltaTime / currentEvent.currentFade; + } + } + + // If there is no time left in the fade, make sure we are set to the destination volume. + if (currentEvent.currentFade > 0) + { + currentEvent.currentFade -= Time.deltaTime; + } + } + } + + /// + /// Determine which rules to follow for container playback, and begin the appropriate function. + /// + /// The event to play. + protected void PlayContainer(ActiveEvent activeEvent) + { + if (activeEvent.audioEvent.container.sounds.Length == 0) + { + Debug.LogErrorFormat(this, "Trying to play container \"{0}\" with no clips.", activeEvent.audioEvent.container); + + // Clean up the ActiveEvent before we discard it, so it will release its AudioSource(s). + activeEvent.Dispose(); + return; + } + + switch (activeEvent.audioEvent.container.containerType) + { + case AudioContainerType.Random: + StartOneOffEvent(activeEvent); + break; + + case AudioContainerType.Simultaneous: + StartOneOffEvent(activeEvent); + break; + + case AudioContainerType.Sequence: + StartOneOffEvent(activeEvent); + break; + + case AudioContainerType.ContinuousSequence: + PlayContinuousSequenceContainer(activeEvent.audioEvent.container, activeEvent.PrimarySource, activeEvent); + break; + + case AudioContainerType.ContinuousRandom: + PlayContinuousRandomContainer(activeEvent.audioEvent.container, activeEvent.PrimarySource, activeEvent); + break; + + default: + Debug.LogErrorFormat(this, "Trying to play container \"{0}\" with an unknown AudioContainerType \"{1}\".", activeEvent.audioEvent.container, activeEvent.audioEvent.container.containerType); + + // Clean up the ActiveEvent before we discard it, so it will release its AudioSource(s). + activeEvent.Dispose(); + break; + } + } + + /// + /// Begin playing a non-continuous container, loop if applicable. + /// + private void StartOneOffEvent(ActiveEvent activeEvent) + { + if (activeEvent.audioEvent.container.looping) + { + StartCoroutine(PlayLoopingOneOffContainerCoroutine(activeEvent)); + activeEvent.activeTime = InfiniteLoop; + } + else + { + PlayOneOffContainer(activeEvent); + } + + StartCoroutine(RecordEventInstanceCoroutine(activeEvent)); + } + + /// + /// Play a non-continuous container. + /// + private float PlayOneOffContainer(ActiveEvent activeEvent) + { + AudioContainer currentContainer = activeEvent.audioEvent.container; + + // Fading or looping overrides immediate volume settings. + if (activeEvent.audioEvent.fadeInTime == 0 && !activeEvent.audioEvent.container.looping) + { + activeEvent.volDest = activeEvent.PrimarySource.volume; + } + + // Simultaneous sounds. + float clipTime = 0; + + if (currentContainer.containerType == AudioContainerType.Simultaneous) + { + clipTime = PlaySimultaneousClips(currentContainer, activeEvent); + } + // Sequential and Random sounds. + else + { + clipTime = PlaySingleClip(currentContainer, activeEvent); + } + + activeEvent.activeTime = clipTime; + return clipTime; + } + + /// + /// Play all clips in container simultaneously + /// + private float PlaySimultaneousClips(AudioContainer currentContainer, ActiveEvent activeEvent) + { + float tempDelay = 0; + float finalActiveTime = 0f; + + if (currentContainer.looping) + { + finalActiveTime = InfiniteLoop; + } + + for (int i = 0; i < currentContainer.sounds.Length; i++) + { + tempDelay = PlayClipAndGetTime(currentContainer.sounds[i], activeEvent.PrimarySource, activeEvent); + + if (finalActiveTime != InfiniteLoop) + { + float estimatedActiveTimeNeeded = GetActiveTimeEstimate(currentContainer.sounds[i], activeEvent, tempDelay); + + if (estimatedActiveTimeNeeded == InfiniteLoop || estimatedActiveTimeNeeded > finalActiveTime) + { + finalActiveTime = estimatedActiveTimeNeeded; + } + } + } + + return finalActiveTime; + } + + /// + /// Play one sound from a container based on container behavior. + /// + /// + /// + /// The estimated ActiveTime for the clip, or InfiniteLoop if the container and/or clip are set to loop. + private float PlaySingleClip(AudioContainer currentContainer, ActiveEvent activeEvent) + { + float tempDelay = 0; + if (currentContainer.containerType == AudioContainerType.Random) + { + currentContainer.currentClip = Random.Range(0, currentContainer.sounds.Length); + } + UAudioClip currentClip = currentContainer.sounds[currentContainer.currentClip]; + + // Trigger sound and save the delay (in seconds) to add to the total amount of time the event will be considered active. + tempDelay = PlayClipAndGetTime(currentClip, activeEvent.PrimarySource, activeEvent); + + // Ready the next clip in the series if sequence container. + if (currentContainer.containerType == AudioContainerType.Sequence) + { + currentContainer.currentClip++; + if (currentContainer.currentClip >= currentContainer.sounds.Length) + { + currentContainer.currentClip = 0; + } + } + + // Return active time based on looping or clip time. + return GetActiveTimeEstimate(currentClip, activeEvent, tempDelay); + } + + /// + /// Repeatedly trigger the one-off container based on the loop time. + /// + private IEnumerator PlayLoopingOneOffContainerCoroutine(ActiveEvent activeEvent) + { + while (!activeEvent.cancelEvent) + { + float tempLoopTime = PlayOneOffContainer(activeEvent); + float eventLoopTime = activeEvent.audioEvent.container.loopTime; + + // Protect against containers looping every frame by defaulting to the length of the audio clip. + if (eventLoopTime != 0) + { + tempLoopTime = eventLoopTime; + } + + yield return new WaitForSeconds(tempLoopTime); + } + } + + /// + /// Choose a random sound from a container and play, calling the looping coroutine to constantly choose new audio clips when current clip ends. + /// + /// The audio container. + /// The emitter to use. + /// The persistent reference to the event as long as it is playing. + private void PlayContinuousRandomContainer(AudioContainer audioContainer, AudioSource emitter, ActiveEvent activeEvent) + { + audioContainer.currentClip = Random.Range(0, audioContainer.sounds.Length); + UAudioClip tempClip = audioContainer.sounds[audioContainer.currentClip]; + + activeEvent.PrimarySource.volume = 0f; + activeEvent.volDest = activeEvent.audioEvent.volumeCenter; + activeEvent.altVolDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + + float waitTime = (tempClip.sound.length / emitter.pitch) - activeEvent.audioEvent.container.crossfadeTime; + + // Ignore clip delay since container is continuous. + PlayClipAndGetTime(tempClip, emitter, activeEvent); + activeEvent.activeTime = InfiniteLoop; + StartCoroutine(RecordEventInstanceCoroutine(activeEvent)); + audioContainer.currentClip++; + if (audioContainer.currentClip >= audioContainer.sounds.Length) + { + audioContainer.currentClip = 0; + } + StartCoroutine(ContinueRandomContainerCoroutine(audioContainer, activeEvent, waitTime)); + } + + /// + /// Coroutine for "continuous" random containers that alternates between two sources to crossfade clips for continuous playlist looping. + /// + /// The audio container. + /// The persistent reference to the event as long as it is playing. + /// The time in seconds to wait before switching AudioSources for crossfading. + /// The coroutine. + private IEnumerator ContinueRandomContainerCoroutine(AudioContainer audioContainer, ActiveEvent activeEvent, float waitTime) + { + while (!activeEvent.cancelEvent) + { + yield return new WaitForSeconds(waitTime); + + audioContainer.currentClip = Random.Range(0, audioContainer.sounds.Length); + UAudioClip tempClip = audioContainer.sounds[audioContainer.currentClip]; + + // Play on primary source. + if (activeEvent.playingAlt) + { + activeEvent.PrimarySource.volume = 0f; + activeEvent.volDest = activeEvent.audioEvent.volumeCenter; + activeEvent.altVolDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + waitTime = (tempClip.sound.length / activeEvent.PrimarySource.pitch) - audioContainer.crossfadeTime; + PlayClipAndGetTime(tempClip, activeEvent.PrimarySource, activeEvent); + } + // Play on secondary source. + else + { + activeEvent.SecondarySource.volume = 0f; + activeEvent.altVolDest = activeEvent.audioEvent.volumeCenter; + activeEvent.volDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + waitTime = (tempClip.sound.length / activeEvent.SecondarySource.pitch) - audioContainer.crossfadeTime; + PlayClipAndGetTime(tempClip, activeEvent.SecondarySource, activeEvent); + } + + activeEvent.playingAlt = !activeEvent.playingAlt; + } + } + + /// + /// Play the current clip in a container, and call the coroutine to constantly choose new audio clips when the current clip ends. + /// + /// The audio container. + /// The emitter to use. + /// The persistent reference to the event as long as it is playing. + private void PlayContinuousSequenceContainer(AudioContainer audioContainer, AudioSource emitter, ActiveEvent activeEvent) + { + UAudioClip tempClip = audioContainer.sounds[audioContainer.currentClip]; + + activeEvent.PrimarySource.volume = 0f; + activeEvent.volDest = activeEvent.audioEvent.volumeCenter; + activeEvent.altVolDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + + float waitTime = (tempClip.sound.length / emitter.pitch) - activeEvent.audioEvent.container.crossfadeTime; + + // Ignore clip delay since the container is continuous. + PlayClipAndGetTime(tempClip, emitter, activeEvent); + activeEvent.activeTime = InfiniteLoop; + StartCoroutine(RecordEventInstanceCoroutine(activeEvent)); + audioContainer.currentClip++; + + if (audioContainer.currentClip >= audioContainer.sounds.Length) + { + audioContainer.currentClip = 0; + } + + StartCoroutine(ContinueSequenceContainerCoroutine(audioContainer, activeEvent, waitTime)); + } + + /// + /// Coroutine for "continuous" sequence containers that alternates between two sources to crossfade clips for continuous playlist looping. + /// + /// The audio container. + /// The persistent reference to the event as long as it is playing. + /// The time in seconds to wait before switching AudioSources to crossfading. + /// The coroutine. + private IEnumerator ContinueSequenceContainerCoroutine(AudioContainer audioContainer, ActiveEvent activeEvent, float waitTime) + { + while (!activeEvent.cancelEvent) + { + yield return new WaitForSeconds(waitTime); + UAudioClip tempClip = audioContainer.sounds[audioContainer.currentClip]; + if (tempClip.sound == null) + { + Debug.LogErrorFormat(this, "Sound clip in event \"{0}\" is null!", activeEvent.audioEvent.name); + waitTime = 0; + } + else + { + // Play on primary source. + if (activeEvent.playingAlt) + { + activeEvent.PrimarySource.volume = 0f; + activeEvent.volDest = activeEvent.audioEvent.volumeCenter; + activeEvent.altVolDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + waitTime = (tempClip.sound.length / activeEvent.PrimarySource.pitch) - audioContainer.crossfadeTime; + PlayClipAndGetTime(tempClip, activeEvent.PrimarySource, activeEvent); + } + // Play on secondary source. + else + { + activeEvent.SecondarySource.volume = 0f; + activeEvent.altVolDest = activeEvent.audioEvent.volumeCenter; + activeEvent.volDest = 0f; + activeEvent.currentFade = audioContainer.crossfadeTime; + waitTime = (tempClip.sound.length / activeEvent.SecondarySource.pitch) - audioContainer.crossfadeTime; + PlayClipAndGetTime(tempClip, activeEvent.SecondarySource, activeEvent); + } + } + + audioContainer.currentClip++; + + if (audioContainer.currentClip >= audioContainer.sounds.Length) + { + audioContainer.currentClip = 0; + } + + activeEvent.playingAlt = !activeEvent.playingAlt; + } + } + + /// + /// Play a single clip on an AudioSource; if looping forever, return InfiniteLoop for the event time. + /// + /// The audio clip to play. + /// The emitter to use. + /// The persistent reference to the event as long as it is playing. + /// The amount of delay, if any, we are waiting before playing the clip. A looping clip will always return InfiniteLoop. + private float PlayClipAndGetTime(UAudioClip audioClip, AudioSource emitter, ActiveEvent activeEvent) + { + if (audioClip.delayCenter == 0) + { + emitter.PlayClip(audioClip.sound, audioClip.looping); + + if (audioClip.looping) + { + return InfiniteLoop; + } + + return 0; + } + else + { + float rndDelay = Random.Range(audioClip.delayCenter - audioClip.delayRandomization, audioClip.delayCenter + audioClip.delayRandomization); + + StartCoroutine(PlayClipDelayedCoroutine(audioClip, emitter, rndDelay, activeEvent)); + + if (audioClip.looping) + { + return InfiniteLoop; + } + + return rndDelay; + } + } + + /// + /// Coroutine for playing a clip after a delay (in seconds). + /// + /// The clip to play. + /// The emitter to use. + /// The amount of time in seconds to wait before playing audio clip. + /// The persistent reference to the event as long as it is playing. + /// The coroutine. + private IEnumerator PlayClipDelayedCoroutine(UAudioClip audioClip, AudioSource emitter, float delay, ActiveEvent activeEvent) + { + yield return new WaitForSeconds(delay); + + if (this.activeEvents.Contains(activeEvent)) + { + emitter.PlayClip(audioClip.sound, audioClip.looping); + } + } + + /// + /// Stop audio sources in an event, and clean up instance references. + /// + /// The persistent reference to the event as long as it is playing. + protected void StopEvent(ActiveEvent activeEvent) + { + if (activeEvent.PrimarySource != null) + { + activeEvent.PrimarySource.Stop(); + } + + if (activeEvent.SecondarySource != null) + { + activeEvent.SecondarySource.Stop(); + } + + activeEvent.cancelEvent = true; + RemoveEventInstance(activeEvent); + } + + /// + /// Coroutine for fading out an AudioSource, and stopping the event once fade is complete. + /// + /// The persistent reference to the event as long as it is playing. + /// The amount of time, in seconds, to completely fade out the sound. + /// The coroutine. + protected IEnumerator StopEventWithFadeCoroutine(ActiveEvent activeEvent, float fadeTime) + { + if (activeEvent.isStoppable) + { + activeEvent.isStoppable = false; + activeEvent.volDest = 0f; + activeEvent.altVolDest = 0f; + activeEvent.currentFade = fadeTime; + + yield return new WaitForSeconds(fadeTime); + + if (activeEvent.PrimarySource != null) + { + activeEvent.PrimarySource.Stop(); + } + + if (activeEvent.SecondarySource != null) + { + activeEvent.SecondarySource.Stop(); + } + + activeEvent.cancelEvent = true; + RemoveEventInstance(activeEvent); + } + } + + /// + /// Keep an event in the "activeEvents" list for the amount of time we think it will be playing, plus the instance buffer. + /// This is mostly done for instance limiting purposes. + /// + /// The persistent reference to the event as long as it is playing. + /// The coroutine. + private IEnumerator RecordEventInstanceCoroutine(ActiveEvent activeEvent) + { + // Unity has no callback for an audioclip ending, so we have to estimate it ahead of time. + // Changing the pitch during playback will alter actual playback time. + activeEvents.Add(activeEvent); + + // Only return active time if sound is not looping/continuous. + if (activeEvent.activeTime > 0) + { + yield return new WaitForSeconds(activeEvent.activeTime); + + // Mark this event so it no longer counts against the instance limit. + activeEvent.isActiveTimeComplete = true; + + // Since the activeTime estimate may not be enough time to complete the clip (due to pitch changes during playback, or a negative instanceBuffer value, for example) + // wait here until it is finished, so that we don't cut off the end. + if (activeEvent.IsPlaying) + { + yield return null; + } + } + // Otherwise, continue at next frame. + else + { + yield return null; + } + + if (activeEvent.activeTime != InfiniteLoop) + { + RemoveEventInstance(activeEvent); + } + } + + /// + /// Remove event from the currently active events. + /// + /// The persistent reference to the event as long as it is playing. + private void RemoveEventInstance(ActiveEvent activeEvent) + { + activeEvents.Remove(activeEvent); + + // Send message notifying user that sound is complete + if (!string.IsNullOrEmpty(activeEvent.MessageOnAudioEnd)) + { + activeEvent.AudioEmitter.SendMessage(activeEvent.MessageOnAudioEnd); + } + + activeEvent.Dispose(); + } + + /// + /// Return the number of instances matching the name eventName for instance limiting check. + /// + /// The name of the event to check. + /// The number of instances of that event currently active. + protected int GetInstances(string eventName) + { + int tempInstances = 0; + + for (int i = 0; i < activeEvents.Count; i++) + { + var eventInstance = activeEvents[i]; + + if (!eventInstance.isActiveTimeComplete && eventInstance.audioEvent.name == eventName) + { + tempInstances++; + } + } + + return tempInstances; + } + + /// + /// Calculates the estimated active time for an ActiveEvent playing the given clip. + /// + /// The clip being played. + /// The event being played. + /// The delay before playing in seconds. + /// The estimated active time of the event based on looping or clip time. If looping, this will return InfiniteLoop. + private static float GetActiveTimeEstimate(UAudioClip audioClip, ActiveEvent activeEvent, float additionalDelay) + { + if (audioClip.looping || activeEvent.audioEvent.container.looping || additionalDelay == InfiniteLoop) + { + return InfiniteLoop; + } + else + { + float pitchAdjustedClipLength = activeEvent.PrimarySource.pitch != 0 ? (audioClip.sound.length / activeEvent.PrimarySource.pitch) : 0; + + // Restrict non-looping ActiveTime values to be non-negative. + return Mathf.Max(0.0f, pitchAdjustedClipLength + activeEvent.audioEvent.instanceTimeBuffer + additionalDelay); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs.meta new file mode 100644 index 0000000..757669e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioManagerBase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 28c9a4d28874d1e4ba2e1e8829d617e2 +timeCreated: 1456605238 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs new file mode 100644 index 0000000..0f20587 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// The UAudioMiniManager class organization and control of a GameObject's MiniAudioEvents. + /// + public partial class UAudioMiniManager : UAudioManagerBase + { + /// + /// Plays all of the Audio Events in the manager + /// + public void PlayAll() + { + for (int i = 0; i < events.Length; i++) + { + PlayEvent(this.events[i]); + } + } + + /// + /// Play a single MiniAudioEvent on the predetermined source(s) + /// + /// The MiniAudioEvent to play + private void PlayEvent(MiniAudioEvent audioEvent) + { + if (audioEvent.primarySource == null) + { + Debug.LogErrorFormat(this, "Emitter on object \"{0}\" is null! Cannot play sound.", audioEvent.name); + return; + } + + if (audioEvent.IsContinuous()) + { + if (audioEvent.secondarySource == null) + { + Debug.LogErrorFormat(this, "Secondary emitter on event \"{0}\" is null! Cannot play continuous sound.", audioEvent.name); + } + } + + ActiveEvent tempEvent = new ActiveEvent(audioEvent, audioEvent.primarySource.gameObject, audioEvent.primarySource, audioEvent.secondarySource); + + // Do this last. The base class owns this event once we pass it to PlayContainer, and may dispose it if it cannot be played. + PlayContainer(tempEvent); + } + + /// + /// Sets the mute flag for all AudioSource components in the event + /// + public void SetMute(bool mute) + { + for (int i = 0; i < events.Length; i++) + { + events[i].primarySource.mute = mute; + } + } + + /// + /// Sets the pitch value for all AudioSource components in the event + /// + /// The value to set the pitch, between 0 (exclusive) and 3 (inclusive). + public void SetPitch(float newPitch) + { + if (newPitch <= 0 || newPitch > 3) + { + Debug.LogErrorFormat(this, "Invalid pitch {0} set", newPitch); + return; + } + + for (int i = 0; i < this.events.Length; i++) + { + events[i].primarySource.pitch = newPitch; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs.meta new file mode 100644 index 0000000..75b6e5f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialSound/Scripts/UAudioManager/UAudioMiniManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fcdb1d067bddcae4ca1167904efdf074 +timeCreated: 1456605239 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding.meta new file mode 100644 index 0000000..7a0824f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4501c5374e4f11845bb517c3af2779c9 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials.meta new file mode 100644 index 0000000..76a4321 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a6cfe7b569c889143beffe1a1aa92b4b +folderAsset: yes +timeCreated: 1466714214 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat new file mode 100644 index 0000000..92c3b97 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SpatialMappingSurface + m_Shader: {fileID: 4800000, guid: 662ff03b4382d8b4c90794fc519a9a1f, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 2000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _WireThickness + second: 100 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _BaseColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _WireColor + second: {r: 0.7058823, g: 0.7058823, b: 0.7058823, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat.meta new file mode 100644 index 0000000..3617ab0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cec46d5b336e2a4b9b2e1d3e8e3754c +timeCreated: 1468431474 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader new file mode 100644 index 0000000..9fc5013 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader @@ -0,0 +1,119 @@ +/// +/// Basic wireframe shader that can be used for rendering spatial mapping meshes. +/// +Shader "HoloToolkit/SpatialUnderstanding/Mapping" +{ + Properties + { + _BaseColor("Base color", Color) = (0.0, 0.0, 0.0, 1.0) + _WireColor("Wire color", Color) = (1.0, 1.0, 1.0, 1.0) + _WireThickness("Wire thickness", Range(0, 800)) = 100 + } + SubShader + { + Tags { "Queue" = "Transparent" } + + Pass + { + Offset 50, 100 + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #include "UnityCG.cginc" + + float4 _BaseColor; + float4 _WireColor; + float _WireThickness; + + // Based on approach described in "Shader-Based Wireframe Drawing", http://cgg-journal.com/2008-2/06/index.html + + struct v2g + { + float4 viewPos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert(appdata_base v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2g o; + o.viewPos = mul(UNITY_MATRIX_MVP, v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + // inverseW is to counteract the effect of perspective-correct interpolation so that the lines + // look the same thickness regardless of their depth in the scene. + struct g2f + { + float4 viewPos : SV_POSITION; + float inverseW : TEXCOORD0; + float3 dist : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triStream) + { + // Calculate the vectors that define the triangle from the input points. + float2 point0 = i[0].viewPos.xy / i[0].viewPos.w; + float2 point1 = i[1].viewPos.xy / i[1].viewPos.w; + float2 point2 = i[2].viewPos.xy / i[2].viewPos.w; + + // Calculate the area of the triangle. + float2 vector0 = point2 - point1; + float2 vector1 = point2 - point0; + float2 vector2 = point1 - point0; + float area = abs(vector1.x * vector2.y - vector1.y * vector2.x); + + float3 distScale[3]; + distScale[0] = float3(area / length(vector0), 0, 0); + distScale[1] = float3(0, area / length(vector1), 0); + distScale[2] = float3(0, 0, area / length(vector2)); + + float wireScale = 800 - _WireThickness; + + // Output each original vertex with its distance to the opposing line defined + // by the other two vertices. + + g2f o; + + [unroll] + for (uint idx = 0; idx < 3; ++idx) + { + o.viewPos = i[idx].viewPos; + o.inverseW = 1.0 / o.viewPos.w; + o.dist = distScale[idx] * o.viewPos.w * wireScale; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[idx], o); + triStream.Append(o); + } + } + + float4 frag(g2f i) : COLOR + { + // Calculate minimum distance to one of the triangle lines, making sure to correct + // for perspective-correct interpolation. + float dist = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.inverseW; + + // Make the intensity of the line very bright along the triangle edges but fall-off very + // quickly. + float I = exp2(-2 * dist * dist); + + // Fade out the alpha but not the color so we don't get any weird halo effects from + // a fade to a different color. + float4 color = I * _WireColor + (1 - I) * _BaseColor; + color.a = I; + return color; + } + ENDCG + } + } + FallBack "Diffuse" +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader.meta new file mode 100644 index 0000000..d71dca5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialMappingSurface.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 662ff03b4382d8b4c90794fc519a9a1f +timeCreated: 1468431511 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat new file mode 100644 index 0000000..87a0908 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: SpatialUnderstandingSurface + m_Shader: {fileID: 4800000, guid: d33108619182be04d9d3a2c97b9c901b, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 2000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _Falloff_Dst + second: 3 + - first: + name: _Falloff_Dst_Max + second: 8 + - first: + name: _Falloff_Dst_Min + second: 2 + - first: + name: _Falloff_Scale + second: 0.4 + - first: + name: _WireThickness + second: 150 + m_Colors: + - first: + name: _BaseColor + second: {r: 0.012867644, g: 0.102941155, b: 0.050421562, a: 0} + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _WireColor + second: {r: 0.4070135, g: 0.7352941, b: 0.31898788, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat.meta new file mode 100644 index 0000000..5855acc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ddc2ff62e97ce6d41991784c3aa8e233 +timeCreated: 1466639387 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader new file mode 100644 index 0000000..538806c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader @@ -0,0 +1,123 @@ +// +// Copyright (C) Microsoft. All rights reserved. +// + +Shader "HoloToolkit/SpatialUnderstanding/Understanding" +{ + Properties + { + _BaseColor("Base color", Color) = (0.0, 0.0, 0.0, 1.0) + _WireColor("Wire color", Color) = (1.0, 1.0, 1.0, 1.0) + _Falloff_Scale("Fall off scale", Range(0, 1)) = 0.5 + _Falloff_Dst_Min("Fall off dst min", Range(0, 15)) = 2.0 + _Falloff_Dst_Max("Fall off dst max", Range(0, 15)) = 6.0 + _WireThickness("Wire thickness", Range(0, 800)) = 100 + } + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass { + Offset 50, 100 + + CGPROGRAM + + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + #include "UnityCG.cginc" + + float4 _BaseColor; + float4 _WireColor; + float _Falloff_Dst_Min; + float _Falloff_Dst_Max; + float _Falloff_Scale; + float _WireThickness; + + // Based on approach described in "Shader-Based Wireframe Drawing", http://cgg-journal.com/2008-2/06/index.html + struct v2g + { + float4 viewPos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert(appdata_base v) + { + v2g o; + UNITY_SETUP_INSTANCE_ID(v); + o.viewPos = mul(UNITY_MATRIX_MVP, v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + // inverseW is to counter-act the effect of perspective-correct interpolation so that the lines look the same thickness + // regardless of their depth in the scene. + struct g2f { + float4 viewPos : SV_POSITION; + float inverseW : TEXCOORD0; + float3 dist : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triStream) + { + // Calculate the vectors that define the triangle from the input points. + float2 point0 = i[0].viewPos.xy / i[0].viewPos.w; + float2 point1 = i[1].viewPos.xy / i[1].viewPos.w; + float2 point2 = i[2].viewPos.xy / i[2].viewPos.w; + + // Calculate the area of the triangle. + float2 vector0 = point2 - point1; + float2 vector1 = point2 - point0; + float2 vector2 = point1 - point0; + float area = abs(vector1.x * vector2.y - vector1.y * vector2.x); + + float3 distScale[3]; + distScale[0] = float3(area / length(vector0), 0, 0); + distScale[1] = float3(0, area / length(vector1), 0); + distScale[2] = float3(0, 0, area / length(vector2)); + + float wireScale = 800 - _WireThickness; + + // Output each original vertex with its distance to the opposing line defined + // by the other two vertices. + g2f o; + + [unroll] + for (uint idx = 0; idx < 3; ++idx) + { + o.viewPos = i[idx].viewPos; + o.inverseW = 1.0 / o.viewPos.w; + o.dist = distScale[idx] * o.viewPos.w * wireScale; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[idx], o); + triStream.Append(o); + } + } + + float4 frag(g2f i) : COLOR + { + // Calculate minimum distance to one of the triangle lines, making sure to correct + // for perspective-correct interpolation. + float dist = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.inverseW; + + // Make the intensity of the line very bright along the triangle edges but fall-off very + // quickly. + float I = exp2(-2 * dist * dist); + + // Calculate the color fade by distance + float fadeByDist = max(((_Falloff_Dst_Max - ((1 / i.inverseW) + _Falloff_Dst_Min)) / (_Falloff_Dst_Max - _Falloff_Dst_Min)), 0); + + // Fade out the alpha but not the color so we don't get any weird halo effects from + // a fade to a different color. + float4 color = (I * _WireColor + (1 - I) * _BaseColor) * lerp(_Falloff_Scale, 1, fadeByDist); + color.a = I; + + return color; + } + + ENDCG + } + } + FallBack "Diffuse" +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader.meta new file mode 100644 index 0000000..bebe009 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Materials/SpatialUnderstandingSurface.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d33108619182be04d9d3a2c97b9c901b +timeCreated: 1466639387 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins.meta new file mode 100644 index 0000000..9cef9d6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 424ed4f5f5e3c2f49acdb321905bdbb4 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA.meta new file mode 100644 index 0000000..dfb430f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f4b049d113a87cc49b45f80cb2f8d487 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64.meta new file mode 100644 index 0000000..572b7e4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 00eb2a0ee0d6a9f4ea1f7897e23e1589 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll new file mode 100644 index 0000000..b061541 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll.meta new file mode 100644 index 0000000..ba7fb7a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.dll.meta @@ -0,0 +1,73 @@ +fileFormatVersion: 2 +guid: d81078f911cb18b43805ec050f749447 +timeCreated: 1468965049 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Editor: + enabled: 0 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb new file mode 100644 index 0000000..62da506 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb.meta new file mode 100644 index 0000000..d2ce8fd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x64/SpatialUnderstanding.pdb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f106707aefa5e44591b0c72cab2b44a +timeCreated: 1481757313 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86.meta new file mode 100644 index 0000000..540597c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f546b7eac1a8fc14e9ac0831dd7fd45c +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll new file mode 100644 index 0000000..a5847fc Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll.meta new file mode 100644 index 0000000..e0eaee9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.dll.meta @@ -0,0 +1,73 @@ +fileFormatVersion: 2 +guid: 458fac8a303a9a64f8873829f1fe1daa +timeCreated: 1466541114 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Editor: + enabled: 0 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb new file mode 100644 index 0000000..71b952c Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb.meta new file mode 100644 index 0000000..77cea0f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/WSA/x86/SpatialUnderstanding.pdb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c54c43fae64ba1845a3579779818700a +timeCreated: 1481757313 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64.meta new file mode 100644 index 0000000..f0e78fa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bfbdaf6dd4221fc4685b736c65216b97 +folderAsset: yes +timeCreated: 1481761654 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll new file mode 100644 index 0000000..f666858 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll.meta new file mode 100644 index 0000000..5ab4b45 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.dll.meta @@ -0,0 +1,73 @@ +fileFormatVersion: 2 +guid: 6e38ae8cbe8702442a50188434a02a2f +timeCreated: 1481762238 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude Win: 1 + Exclude Win64: 0 + Exclude WindowsStoreApps: 1 + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb new file mode 100644 index 0000000..3c792c1 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb.meta new file mode 100644 index 0000000..5e1eb53 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x64/SpatialUnderstanding.pdb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 586bf14c7c7de5b418595eec11505982 +timeCreated: 1481762238 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86.meta new file mode 100644 index 0000000..ef105dc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1240e6ed74b88ff4fa549db17c4a7078 +folderAsset: yes +timeCreated: 1481761654 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll new file mode 100644 index 0000000..89702d1 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll.meta new file mode 100644 index 0000000..5a804f2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.dll.meta @@ -0,0 +1,73 @@ +fileFormatVersion: 2 +guid: 1a7918d6f0f76154c987b014399c7e1b +timeCreated: 1481762238 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb new file mode 100644 index 0000000..1ab515b Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb differ diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb.meta new file mode 100644 index 0000000..9d14a44 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Plugins/x86/SpatialUnderstanding.pdb.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7b57dac0ac191541831c7398a7226e8 +timeCreated: 1481762238 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs.meta new file mode 100644 index 0000000..cb4b1fe --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4b1f9b83c8baba6408da5fd968d97d68 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab new file mode 100644 index 0000000..884cad5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010427123524} + m_IsPrefabParent: 1 +--- !u!1 &1000010427123524 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000012071801678} + - 114: {fileID: 114000012099205058} + - 114: {fileID: 114000012152922318} + - 114: {fileID: 114000013027790266} + m_Layer: 0 + m_Name: SpatialUnderstanding + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000012071801678 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010427123524} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114000012099205058 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010427123524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d157ace7f2fbb8b4094705800cbe216c, type: 3} + m_Name: + m_EditorClassIdentifier: + AutoBeginScanning: 1 + UpdatePeriod_DuringScanning: 1 + UpdatePeriod_AfterScanning: 4 +--- !u!114 &114000012152922318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010427123524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b4776f41597d1274488d795eb0881c94, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114000013027790266 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010427123524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dfadc27178601dd4ca1793492f9e2539, type: 3} + m_Name: + m_EditorClassIdentifier: + ImportMeshPeriod: 1 + MeshMaterial: {fileID: 2100000, guid: ddc2ff62e97ce6d41991784c3aa8e233, type: 2} diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab.meta new file mode 100644 index 0000000..9569395 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Prefabs/SpatialUnderstanding.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d41fa7615c3c85b40bcc95fc4367b607 +timeCreated: 1466453028 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md new file mode 100644 index 0000000..7ba77de --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md @@ -0,0 +1,64 @@ +## [Spatial Understanding]() +Scripts, Prefabs, and Test Scenes that leverage Spatial Understanding related features. + +See the [HoloToolkit Spatial Mapping](HoloToolkit/SpatialMapping) documentation to ensure your project is set up correctly. + +**IMPORTANT**: Please make sure to add the Spatial Perception capability in your app, in Unity under +Edit -> Project Settings -> Player -> Settings for Windows Store -> Publishing Settings -> Capabilities +or in your Visual Studio Package.appxmanifest capabilities. + +### Microsoft HoloLens Documentation +- [Spatial Mapping In Unity](https://developer.microsoft.com/en-us/windows/mixed-reality/spatial_mapping_in_unity) +- [Spatial Understanding In Unity](https://developer.microsoft.com/en-us/windows/mixed-reality/spatial_mapping_in_unity#holotoolkit.spatialunderstanding) + +### Case studies +- [Expanding the spatial mapping capabilities of HoloLens](https://developer.microsoft.com/en-us/windows/mixed-reality/case_study_-_expanding_the_spatial_mapping_capabilities_of_hololens) + +### [Plugins](Plugins) +SpatialUnderstanding addon that can be used for topology, object detection, and object placement. + +### [Prefabs](Prefabs) +The following prefab makes it easy to quickly get started using the Spatial Understanding Modules. + +####SpatialUnderstanding.prefab +This prefab is used to control the state and flow of the scanning process used in the understanding module, provides the means to visualize the scanning process. + +### [Scripts](Scripts) + +#### SpatialUnderstanding.cs +The SpatialUnderstanding class controls the state and flow of the scanning process used in the understanding module. + +#### SpatialUnderstandingCustomMesh.cs +Handles the custom meshes generated by the understanding dll. The meshes are generated during the scanning phase and once more on scan finalization. The meshes can be used to visualize the scanning progress. + +#### SpatialUnderstandingDll.cs +Encapsulates the primary dll functions, including marshalling helper functions. The dll functions are organized into four parts - in this behavior, SpatialUnderstandingDllTopology, SpatialUnderstandingDllShapes, and SpatialUnderstandingDllObjectPlacement. The scan flow, raycast, and alignment functions are included in this class. + +#### SpatialUnderstandingDllObjectPlacement.cs +Encapsulates the object placement queries of the understanding dll. These queries will not be valid until after scanning is finalized. + +#### SpatialUnderstandingDllShapes.cs +Encapsulates the shape detection queries of the understanding dll. Shapes are defined by the user with AddShape and the analysis is +initiated with ActivateShapeAnalysis. These queries will not be valid until after scanning is finalized. + +Shape definitions are composed of a list of components and a list of shape constraints which defining requirements between the +components. Each component is defined by a list of its own shape component constraints. + +#### SpatialUnderstandingDllTopology.cs +Encapsulates the topology queries of the understanding dll. These queries will not be valid until after scanning is finalized. + +#### SpatialUnderstandingSourceMesh.cs +Provides the input meshes to the spatial understanding dll. The component relies on the spatial mapping module. It maintains +a mesh list in the required dll format which is updated from the spatial mapping's SurfaceObject list. + +### [Shaders](Materials) + +#### SpatialMappingSurface.shader +A basic wire frame shader that can be used for rendering Spatial Mapping meshes. + +#### SpatialUnderstandingSurface.shader +A basic wire frame shader that can be used for rendering Spatial Understanding Surfaces. + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md.meta new file mode 100644 index 0000000..ebc8c71 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6e64c91d83a1c14bbf9c73cd6c6d5b5 +timeCreated: 1485297321 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts.meta new file mode 100644 index 0000000..dbde3f7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4096e205d20cef04cbed99cee8d82ee5 +folderAsset: yes +timeCreated: 1466449928 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs new file mode 100644 index 0000000..d652fe5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs @@ -0,0 +1,262 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using HoloToolkit.Unity.SpatialMapping; + +namespace HoloToolkit.Unity +{ + /// + /// The SpatialUnderstanding class controls the state and flow of the + /// scanning process used in the understanding module. + /// + [RequireComponent(typeof(SpatialUnderstandingSourceMesh))] + [RequireComponent(typeof(SpatialUnderstandingCustomMesh))] + public class SpatialUnderstanding : Singleton + { + // Consts + public const float ScanSearchDistance = 8.0f; + + // Enums + public enum ScanStates + { + None, + ReadyToScan, + Scanning, + Finishing, + Done + } + + // Config + [Tooltip("If set to false, scanning will only begin after RequestBeginScanning is called")] + public bool AutoBeginScanning = true; + [Tooltip("Update period used during the scanning process (typically faster than after scanning is completed)")] + public float UpdatePeriod_DuringScanning = 1.0f; + [Tooltip("Update period used after the scanning process is completed")] + public float UpdatePeriod_AfterScanning = 4.0f; + + // Properties + /// + /// Switch used by the entire SpatialUnderstanding module to activate processing. + /// + public bool AllowSpatialUnderstanding + { + get + { + return true; + } + } + /// + /// Reference to the SpatialUnderstandingDLL class (wraps the understanding dll functions). + /// + public SpatialUnderstandingDll UnderstandingDLL { get; private set; } + /// + /// Reference to the SpatialUnderstandingSourceMesh behavior (input mesh data for the understanding module). + /// + public SpatialUnderstandingSourceMesh UnderstandingSourceMesh { get; private set; } + /// + /// Reference to the UnderstandingCustomMesh behavior (output mesh data from the understanding module). + /// + public SpatialUnderstandingCustomMesh UnderstandingCustomMesh { get; private set; } + /// + /// Indicates the current state of the scan process + /// + public ScanStates ScanState + { + get + { + return scanState; + } + private set + { + scanState = value; + if (ScanStateChanged != null) + { + ScanStateChanged(); + } + + // Update scan period, based on state + SpatialMappingManager.Instance.GetComponent().TimeBetweenUpdates = (scanState == ScanStates.Done) ? UpdatePeriod_AfterScanning : UpdatePeriod_DuringScanning; + } + } + /// + /// Indicates the the scanning statistics are still being processed. + /// Request finish should not be called when this is true. + /// + public bool ScanStatsReportStillWorking + { + get + { + if (AllowSpatialUnderstanding) + { + SpatialUnderstandingDll.Imports.PlayspaceStats stats = UnderstandingDLL.GetStaticPlayspaceStats(); + return (stats.IsWorkingOnStats != 0); + } + return false; + } + } + + // Events + /// + /// Event indicating that the scan state has changed + /// + public event Action ScanStateChanged; + + // Privates + private ScanStates scanState; + + private float timeSinceLastUpdate = 0.0f; + + // Functions + protected override void Awake() + { + base.Awake(); + + // Cache references to required component + UnderstandingDLL = new SpatialUnderstandingDll(); + UnderstandingSourceMesh = GetComponent(); + UnderstandingCustomMesh = GetComponent(); + } + + private void Start() + { + // Initialize the DLL + if (AllowSpatialUnderstanding) + { + SpatialUnderstandingDll.Imports.SpatialUnderstanding_Init(); + } + } + + private void Update() + { + if (!AllowSpatialUnderstanding) + { + return; + } + + // Only update every few frames, and only if we aren't pulling in a mesh + // already. + timeSinceLastUpdate += Time.deltaTime; + if ((!UnderstandingCustomMesh.IsImportActive) && + (Time.frameCount % 3 == 0)) + { + // Real-Time scan + Update_Scan(timeSinceLastUpdate); + timeSinceLastUpdate = 0; + } + } + + protected override void OnDestroy() + { + // Term the DLL + if (AllowSpatialUnderstanding) + { + SpatialUnderstandingDll.Imports.SpatialUnderstanding_Term(); + } + + base.OnDestroy(); + } + + /// + /// Call to request that scanning should begin. If AutoBeginScanning + /// is false, this function should be used to initiate the scanning process. + /// + public void RequestBeginScanning() + { + if (ScanState == ScanStates.None) + { + ScanState = ScanStates.ReadyToScan; + } + } + + /// + /// Call to request that the scanning progress be finishing. The application must do + /// this to finalize the playspace. The scan state will not progress pass + /// Scanning until this is called. The spatial understanding queries will not function + /// until the playspace is finalized. + /// + public void RequestFinishScan() + { + if (AllowSpatialUnderstanding) + { + SpatialUnderstandingDll.Imports.GeneratePlayspace_RequestFinish(); + ScanState = ScanStates.Finishing; + } + } + + /// + /// Update the scan progress. This function will initialize the scan, update it, + /// and issue a final mesh import, when the scan is complete. + /// + /// The amount of time that has passed since the last update (typically Time.deltaTime) + private void Update_Scan(float deltaTime) + { + // If we auto-start scanning, do it now + if (AutoBeginScanning && + (ScanState == ScanStates.None)) + { + RequestBeginScanning(); + } + + // Update the scan + bool scanDone = false; + if (((ScanState == ScanStates.ReadyToScan) || + (ScanState == ScanStates.Scanning) || + (ScanState == ScanStates.Finishing)) && + (AllowSpatialUnderstanding)) + { + // Camera + Vector3 camPos = Camera.main.transform.position; + Vector3 camFwd = Camera.main.transform.forward; + Vector3 camUp = Camera.main.transform.up; + + // If not yet initialized, do that now + if (ScanState == ScanStates.ReadyToScan) + { + SpatialUnderstandingDll.Imports.GeneratePlayspace_InitScan( + camPos.x, camPos.y, camPos.z, + camFwd.x, camFwd.y, camFwd.z, + camUp.x, camUp.y, camUp.z, + ScanSearchDistance, ScanSearchDistance); + ScanState = ScanStates.Scanning; + } + + // Update + int meshCount; + IntPtr meshList; + if (UnderstandingSourceMesh.GetInputMeshList(out meshCount, out meshList)) + { + var stopWatch = System.Diagnostics.Stopwatch.StartNew(); + + scanDone = SpatialUnderstandingDll.Imports.GeneratePlayspace_UpdateScan( + meshCount, meshList, + camPos.x, camPos.y, camPos.z, + camFwd.x, camFwd.y, camFwd.z, + camUp.x, camUp.y, camUp.z, + deltaTime) == 1; + + stopWatch.Stop(); + + if (stopWatch.Elapsed.TotalMilliseconds > (1000.0 / 30.0)) + { + Debug.LogWarningFormat("SpatialUnderstandingDll.Imports.GeneratePlayspace_UpdateScan took {0,9:N2} ms", stopWatch.Elapsed.TotalMilliseconds); + } + } + } + + // If it's done, finish up + if ((ScanState == ScanStates.Finishing) && + (scanDone) && + (!UnderstandingCustomMesh.IsImportActive) && + (UnderstandingCustomMesh != null)) + { + // Final mesh import + StartCoroutine(UnderstandingCustomMesh.Import_UnderstandingMesh()); + + // Mark it + ScanState = ScanStates.Done; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs.meta new file mode 100644 index 0000000..92a24bb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstanding.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d157ace7f2fbb8b4094705800cbe216c +timeCreated: 1466452909 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs new file mode 100644 index 0000000..499333b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs @@ -0,0 +1,414 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.VR.WSA; +using HoloToolkit.Unity.SpatialMapping; + +namespace HoloToolkit.Unity +{ + /// + /// Handles the custom meshes generated by the understanding dll. The meshes + /// are generated during the scanning phase and once more on scan finalization. + /// The meshes can be used to visualize the scanning progress. + /// + public class SpatialUnderstandingCustomMesh : SpatialMappingSource + { + // Config + [Tooltip("Indicate the time in seconds between mesh imports, during the scanning phase. A value of zero will disable pulling meshes from the dll")] + public float ImportMeshPeriod = 1.0f; + [Tooltip("Material used to render the custom mesh generated by the dll")] + public Material MeshMaterial; + + /// + /// Used to keep our processing from exceeding our frame budget. + /// + [Tooltip("Max time per frame in milliseconds to spend processing the mesh")] + public float MaxFrameTime = 5.0f; + private float MaxFrameTimeInSeconds + { + get { return (MaxFrameTime / 1000); } + } + + /// + /// Whether to create mesh colliders. If unchecked, mesh colliders will be empty and disabled. + /// + public bool CreateMeshColliders = true; + + private bool drawProcessedMesh = true; + // Properties + /// + /// Controls rendering of the mesh. This can be set by the user to hide or show the mesh. + /// + public bool DrawProcessedMesh + { + get + { + return drawProcessedMesh; + } + set + { + drawProcessedMesh = value; + for (int i = 0; i < SurfaceObjects.Count; ++i) + { + SurfaceObjects[i].Renderer.enabled = drawProcessedMesh; + } + } + } + + /// + /// Indicates if the previous import is still being processed. + /// + public bool IsImportActive { get; private set; } + + /// + /// The material to use if rendering. + /// + protected override Material RenderMaterial { get { return MeshMaterial; } } + + /// + /// To prevent us from importing too often, we keep track of the last import. + /// + private float timeLastImportedMesh = 0; + + /// + /// For a cached SpatialUnderstanding.Instance. + /// + private SpatialUnderstanding spatialUnderstanding; + + /// + /// The spatial understanding mesh will be split into pieces so that we don't have to + /// render the whole mesh, rather just the parts that are visible to the user. + /// + private Dictionary meshSectors = new Dictionary(); + + /// + /// A data structure to manage collecting triangles as we + /// subdivide the spatial understanding mesh into smaller sub meshes. + /// + private class MeshData + { + /// + /// Lists of verts/triangles that describe the mesh geometry. + /// + private readonly List verts = new List(); + private readonly List tris = new List(); + + /// + /// The mesh object based on the triangles passed in. + /// + public readonly Mesh MeshObject = new Mesh(); + + /// + /// The MeshCollider with which this mesh is associated. Must be set even if + /// no collision mesh will be created. + /// + public MeshCollider SpatialCollider = null; + + /// + /// Whether to create collision mesh. If false, the MeshCollider attached to this + /// object will also be disabled when Commit() is called. + /// + public bool CreateMeshCollider = false; + + /// + /// Clears the geometry, but does not clear the mesh. + /// + public void Reset() + { + verts.Clear(); + tris.Clear(); + } + + /// + /// Commits the new geometry to the mesh. + /// + public void Commit() + { + MeshObject.Clear(); + if (verts.Count > 2) + { + MeshObject.SetVertices(verts); + MeshObject.SetTriangles(tris, 0); + MeshObject.RecalculateNormals(); + MeshObject.RecalculateBounds(); + // The null assignment is required by Unity in order to pick up the new mesh + SpatialCollider.sharedMesh = null; + if (CreateMeshCollider) + { + SpatialCollider.sharedMesh = MeshObject; + SpatialCollider.enabled = true; + } + else + { + SpatialCollider.enabled = false; + } + } + } + + /// + /// Adds a triangle composed of the specified three points to our mesh. + /// + /// First point on the triangle. + /// Second point on the triangle. + /// Third point on the triangle. + public void AddTriangle(Vector3 point1, Vector3 point2, Vector3 point3) + { + // Currently spatial understanding in the native layer voxellizes the space + // into ~2000 voxels per cubic meter. Even in a degerate case we + // will use far fewer than 65000 vertices, this check should not fail + // unless the spatial understanding native layer is updated to have more + // voxels per cubic meter. + if (verts.Count < 65000) + { + tris.Add(verts.Count); + verts.Add(point1); + + tris.Add(verts.Count); + verts.Add(point2); + + tris.Add(verts.Count); + verts.Add(point3); + } + else + { + Debug.LogError("Mesh would have more vertices than Unity supports"); + } + } + } + + private void Start() + { + spatialUnderstanding = SpatialUnderstanding.Instance; + if (gameObject.GetComponent() == null) + { + gameObject.AddComponent(); + } + } + + private void Update() + { + Update_MeshImport(); + } + + /// + /// Adds a triangle with the specified points to the specified sector. + /// + /// The sector to add the triangle to. + /// First point of the triangle. + /// Second point of the triangle. + /// Third point of the triangle. + private void AddTriangleToSector(Vector3 sector, Vector3 point1, Vector3 point2, Vector3 point3) + { + // Grab the mesh container we are using for this sector. + MeshData nextSectorData; + if (!meshSectors.TryGetValue(sector, out nextSectorData)) + { + nextSectorData = new MeshData(); + nextSectorData.CreateMeshCollider = CreateMeshColliders; + + int surfaceObjectIndex = SurfaceObjects.Count; + + SurfaceObject surfaceObject = CreateSurfaceObject( + mesh: nextSectorData.MeshObject, + objectName: string.Format("SurfaceUnderstanding Mesh-{0}", surfaceObjectIndex), + parentObject: transform, + meshID: surfaceObjectIndex, + drawVisualMeshesOverride: DrawProcessedMesh); + + nextSectorData.SpatialCollider = surfaceObject.Collider; + + AddSurfaceObject(surfaceObject); + + // Or make it if this is a new sector. + meshSectors.Add(sector, nextSectorData); + } + + // Add the vertices to the sector's mesh container. + nextSectorData.AddTriangle(point1, point2, point3); + } + + /// + /// Imports the custom mesh from the dll. This a a coroutine which will take multiple frames to complete. + /// + /// + public IEnumerator Import_UnderstandingMesh() + { + var stopwatch = System.Diagnostics.Stopwatch.StartNew(); + int startFrameCount = Time.frameCount; + + if (!spatialUnderstanding.AllowSpatialUnderstanding || IsImportActive) + { + yield break; + } + + IsImportActive = true; + + SpatialUnderstandingDll dll = spatialUnderstanding.UnderstandingDLL; + + Vector3[] meshVertices = null; + Vector3[] meshNormals = null; + Int32[] meshIndices = null; + + // Pull the mesh - first get the size, then allocate and pull the data + int vertCount; + int idxCount; + + if ((SpatialUnderstandingDll.Imports.GeneratePlayspace_ExtractMesh_Setup(out vertCount, out idxCount) > 0) && + (vertCount > 0) && + (idxCount > 0)) + { + meshVertices = new Vector3[vertCount]; + IntPtr vertPos = dll.PinObject(meshVertices); + meshNormals = new Vector3[vertCount]; + IntPtr vertNorm = dll.PinObject(meshNormals); + meshIndices = new Int32[idxCount]; + IntPtr indices = dll.PinObject(meshIndices); + + SpatialUnderstandingDll.Imports.GeneratePlayspace_ExtractMesh_Extract(vertCount, vertPos, vertNorm, idxCount, indices); + } + + // Wait a frame + stopwatch.Stop(); + yield return null; + stopwatch.Start(); + + // Create output meshes + if ((meshVertices != null) && + (meshVertices.Length > 0) && + (meshIndices != null) && + (meshIndices.Length > 0)) + { + // first get all our mesh data containers ready for meshes. + foreach (MeshData meshdata in meshSectors.Values) + { + meshdata.Reset(); + } + + float startTime = Time.realtimeSinceStartup; + // first we need to split the playspace up into segments so we don't always + // draw everything. We can break things up in to cubic meters. + for (int index = 0; index < meshIndices.Length; index += 3) + { + Vector3 firstVertex = meshVertices[meshIndices[index]]; + Vector3 secondVertex = meshVertices[meshIndices[index + 1]]; + Vector3 thirdVertex = meshVertices[meshIndices[index + 2]]; + + // The triangle may belong to multiple sectors. We will copy the whole triangle + // to all of the sectors it belongs to. This will fill in seams on sector edges + // although it could cause some amount of visible z-fighting if rendering a wireframe. + Vector3 firstSector = VectorToSector(firstVertex); + + AddTriangleToSector(firstSector, firstVertex, secondVertex, thirdVertex); + + // If the second sector doesn't match the first, copy the triangle to the second sector. + Vector3 secondSector = VectorToSector(secondVertex); + if (secondSector != firstSector) + { + AddTriangleToSector(secondSector, firstVertex, secondVertex, thirdVertex); + } + + // If the third sector matches neither the first nor second sector, copy the triangle to the + // third sector. + Vector3 thirdSector = VectorToSector(thirdVertex); + if (thirdSector != firstSector && thirdSector != secondSector) + { + AddTriangleToSector(thirdSector, firstVertex, secondVertex, thirdVertex); + } + + // Limit our run time so that we don't cause too many frame drops. + // Only checking every few iterations or so to prevent losing too much time to checking the clock. + if ((index % 30 == 0) && ((Time.realtimeSinceStartup - startTime) > MaxFrameTimeInSeconds)) + { + // Debug.LogFormat("{0} of {1} processed", index, meshIndices.Length); + stopwatch.Stop(); + yield return null; + stopwatch.Start(); + startTime = Time.realtimeSinceStartup; + } + } + + startTime = Time.realtimeSinceStartup; + + // Now we have all of our triangles assigned to the correct mesh, we can make all of the meshes. + // Each sector will have its own mesh. + foreach (MeshData meshData in meshSectors.Values) + { + // Construct the mesh. + meshData.Commit(); + + // Make sure we don't build too many meshes in a single frame. + if ((Time.realtimeSinceStartup - startTime) > MaxFrameTimeInSeconds) + { + stopwatch.Stop(); + yield return null; + stopwatch.Start(); + startTime = Time.realtimeSinceStartup; + } + } + } + + // Wait a frame + stopwatch.Stop(); + yield return null; + stopwatch.Start(); + + // All done - can free up marshal pinned memory + dll.UnpinAllObjects(); + + // Done + IsImportActive = false; + + // Mark the timestamp + timeLastImportedMesh = Time.time; + + stopwatch.Stop(); + int deltaFrameCount = (Time.frameCount - startFrameCount + 1); + + if (stopwatch.Elapsed.TotalSeconds > 0.75) + { + Debug.LogWarningFormat("Import_UnderstandingMesh took {0:N0} frames ({1:N3} ms)", + deltaFrameCount, + stopwatch.Elapsed.TotalMilliseconds + ); + } + } + + /// + /// Basically floors the Vector so we can use it to subdivide our spatial understanding mesh into parts based + /// on their position in the world. + /// + /// The vector to floor. + /// A floored vector + private Vector3 VectorToSector(Vector3 vector) + { + return new Vector3(Mathf.FloorToInt(vector.x), Mathf.FloorToInt(vector.y), Mathf.FloorToInt(vector.z)); + } + + /// + /// Updates the mesh import process. This function will kick off the import + /// coroutine at the requested internal. + /// + private void Update_MeshImport() + { + // Only update every so often + if (IsImportActive || (ImportMeshPeriod <= 0.0f) || + ((Time.time - timeLastImportedMesh) < ImportMeshPeriod) || + (spatialUnderstanding.ScanState != SpatialUnderstanding.ScanStates.Scanning)) + { + return; + } + + StartCoroutine(Import_UnderstandingMesh()); + } + + private void OnDestroy() + { + Cleanup(); + } + } + +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs.meta new file mode 100644 index 0000000..3b772bf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingCustomMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dfadc27178601dd4ca1793492f9e2539 +timeCreated: 1468598068 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs new file mode 100644 index 0000000..85f45c1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs @@ -0,0 +1,495 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System.Collections; +using System.Runtime.InteropServices; +using System; +using System.Collections.Generic; + +namespace HoloToolkit.Unity +{ + /// + /// Encapsulates the primary dll functions, including marshalling helper functions. + /// The dll functions are organized into four parts - in this behavior, + /// SpatialUnderstandingDllTopology, SpatialUnderstandingDllShapes, and + /// SpatialUnderstandingDllObjectPlacement. The scan flow, raycast, and alignment + /// functions are included in this class. + /// + public class SpatialUnderstandingDll + { + /// + /// Representation of the mesh data to be passed to the understanding dll. + /// Used by SpatialUnderstandingSourceMesh to store local copies of the mesh data. + /// + public struct MeshData + { + public int MeshID; + public int LastUpdateID; + public Matrix4x4 Transform; + public Vector3[] Verts; + public Vector3[] Normals; + public Int32[] Indices; + + public MeshData(MeshFilter meshFilter) + { + MeshID = 0; + LastUpdateID = 0; + + Transform = meshFilter.transform.localToWorldMatrix; + Verts = meshFilter.sharedMesh.vertices; + Normals = meshFilter.sharedMesh.normals; + Indices = meshFilter.sharedMesh.triangles; + } + public void CopyFrom(MeshFilter meshFilter, int meshID = 0, int lastUpdateID = 0) + { + MeshID = meshID; + LastUpdateID = lastUpdateID; + + if (meshFilter != null) + { + Transform = meshFilter.transform.localToWorldMatrix; + + // Note that we are assuming that Unity's getters for vertices/normals/triangles make + // copies of the array. As of unity 5.4 this assumption is correct. + Verts = meshFilter.sharedMesh.vertices; + Normals = meshFilter.sharedMesh.normals; + Indices = meshFilter.sharedMesh.triangles; + } + } + } + + // Privates + private Imports.MeshData[] reusedMeshesForMarshalling = null; + private List reusedPinnedMemoryHandles = new List(); + + private Imports.RaycastResult reusedRaycastResult = new Imports.RaycastResult(); + private IntPtr reusedRaycastResultPtr; + + private Imports.PlayspaceStats reusedPlayspaceStats = new Imports.PlayspaceStats(); + private IntPtr reusedPlayspaceStatsPtr; + + private Imports.PlayspaceAlignment reusedPlayspaceAlignment = new Imports.PlayspaceAlignment(); + private IntPtr reusedPlayspaceAlignmentPtr; + + private SpatialUnderstandingDllObjectPlacement.ObjectPlacementResult reusedObjectPlacementResult = new SpatialUnderstandingDllObjectPlacement.ObjectPlacementResult(); + private IntPtr reusedObjectPlacementResultPtr; + + /// + /// Pins the specified object so that the backing memory can not be relocated, adds the pinned + /// memory handle to the tracking list, and then returns that address of the pinned memory so + /// that it can be passed into the DLL to be access directly from native code. + /// + public IntPtr PinObject(System.Object obj) + { + GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned); + reusedPinnedMemoryHandles.Add(h); + return h.AddrOfPinnedObject(); + } + + /// + /// Pins the string, converting to the format expected by the dll. See PinObject for + /// additional details. + /// + public IntPtr PinString(string str) + { + byte[] obj = System.Text.Encoding.ASCII.GetBytes(str); + GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned); + reusedPinnedMemoryHandles.Add(h); + return h.AddrOfPinnedObject(); + } + + /// + /// Unpins all of the memory previously pinned by calls to PinObject(). + /// + public void UnpinAllObjects() + { + for (int i = 0; i < reusedPinnedMemoryHandles.Count; ++i) + { + reusedPinnedMemoryHandles[i].Free(); + } + reusedPinnedMemoryHandles.Clear(); + } + + /// + /// Copies the supplied mesh data into the reusedMeshesForMarhsalling array. All managed arrays + /// are pinned so that the marshalling only needs to pass a pointer and the native code can + /// reference the memory in place without needing the marshaller to create a complete copy of + /// the data. + /// + public IntPtr PinMeshDataForMarshalling(List meshes) + { + // if we have a big enough array reuse it, otherwise create new + if (reusedMeshesForMarshalling == null || reusedMeshesForMarshalling.Length < meshes.Count) + { + reusedMeshesForMarshalling = new Imports.MeshData[meshes.Count]; + } + + for (int i = 0; i < meshes.Count; ++i) + { + IntPtr pinnedVerts = (meshes[i].Verts != null) && (meshes[i].Verts.Length > 0) ? PinObject(meshes[i].Verts) : IntPtr.Zero; + IntPtr pinnedNormals = (meshes[i].Verts != null) && (meshes[i].Verts.Length > 0) ? PinObject(meshes[i].Normals) : IntPtr.Zero; + IntPtr pinnedIndices = (meshes[i].Indices != null) && (meshes[i].Indices.Length > 0) ? PinObject(meshes[i].Indices) : IntPtr.Zero; + reusedMeshesForMarshalling[i] = new Imports.MeshData() + { + meshID = meshes[i].MeshID, + lastUpdateID = meshes[i].LastUpdateID, + transform = meshes[i].Transform, + vertCount = (meshes[i].Verts != null) ? meshes[i].Verts.Length : 0, + indexCount = (meshes[i].Indices != null) ? meshes[i].Indices.Length : 0, + verts = pinnedVerts, + normals = pinnedNormals, + indices = pinnedIndices, + }; + } + + return PinObject(reusedMeshesForMarshalling); + } + + /// + /// Reusable raycast result object pointer. Can be used for inline raycast calls. + /// + /// Raycast result pointer + public IntPtr GetStaticRaycastResultPtr() + { + if (reusedRaycastResultPtr == IntPtr.Zero) + { + GCHandle h = GCHandle.Alloc(reusedRaycastResult, GCHandleType.Pinned); + reusedRaycastResultPtr = h.AddrOfPinnedObject(); + } + return reusedRaycastResultPtr; + } + /// + /// Resuable raycast result object. Can be used for inline raycast calls. + /// + /// Raycast result structure + public Imports.RaycastResult GetStaticRaycastResult() + { + return reusedRaycastResult; + } + + /// + /// Resuable playspace statistics pointer. Can be used for inline playspace statistics calls. + /// + /// playspace statistics pointer + public IntPtr GetStaticPlayspaceStatsPtr() + { + if (reusedPlayspaceStatsPtr == IntPtr.Zero) + { + GCHandle h = GCHandle.Alloc(reusedPlayspaceStats, GCHandleType.Pinned); + reusedPlayspaceStatsPtr = h.AddrOfPinnedObject(); + } + return reusedPlayspaceStatsPtr; + } + /// + /// Resuable playspace statistics. Can be used for inline playspace statistics calls. + /// + /// playspace statistics structure + public Imports.PlayspaceStats GetStaticPlayspaceStats() + { + return reusedPlayspaceStats; + } + + /// + /// Resuable playspace alignment pointer. Can be used for inline playspace alignment query calls. + /// + /// playspace alignment pointer + public IntPtr GetStaticPlayspaceAlignmentPtr() + { + if (reusedPlayspaceAlignmentPtr == IntPtr.Zero) + { + GCHandle h = GCHandle.Alloc(reusedPlayspaceAlignment, GCHandleType.Pinned); + reusedPlayspaceAlignmentPtr = h.AddrOfPinnedObject(); + } + return reusedPlayspaceAlignmentPtr; + } + /// + /// Resuable playspace alignment. Can be used for inline playspace alignment query calls. + /// + /// playspace alignment structure + public Imports.PlayspaceAlignment GetStaticPlayspaceAlignment() + { + return reusedPlayspaceAlignment; + } + + /// + /// Resuable object placement results pointer. Can be used for inline object placement queries. + /// + /// Object placement result pointer + public IntPtr GetStaticObjectPlacementResultPtr() + { + if (reusedObjectPlacementResultPtr == IntPtr.Zero) + { + GCHandle h = GCHandle.Alloc(reusedObjectPlacementResult, GCHandleType.Pinned); + reusedObjectPlacementResultPtr = h.AddrOfPinnedObject(); + } + return reusedObjectPlacementResultPtr; + } + /// + /// Resuable object placement results. Can be used for inline object placement queries. + /// + /// Object placement result structure + public SpatialUnderstandingDllObjectPlacement.ObjectPlacementResult GetStaticObjectPlacementResult() + { + return reusedObjectPlacementResult; + } + + /// + /// Marshals BoundedPlane data returned from a DLL API call into a managed BoundedPlane array + /// and then frees the memory that was allocated within the DLL. + /// + public T[] MarshalArrayFromIntPtr(IntPtr outArray, int count) + { + T[] resultArray = new T[count]; + + int structSize = +#if UNITY_EDITOR || !UNITY_WSA + Marshal.SizeOf(typeof(T)); +#else + Marshal.SizeOf(); +#endif + + IntPtr current = outArray; + + try + { + for (int i = 0; i < count; i++) + { + resultArray[i] = +#if UNITY_EDITOR || !UNITY_WSA + (T)Marshal.PtrToStructure(current, typeof(T)); +#else + Marshal.PtrToStructure(current); +#endif + + current = (IntPtr)((long)current + structSize); + } + } + finally + { + Marshal.FreeCoTaskMem(outArray); + } + + return resultArray; + } + + public class Imports + { + /// + /// Mesh input data passed to the dll + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct MeshData + { + public int meshID; + public int lastUpdateID; + public Matrix4x4 transform; + public Int32 vertCount; + public Int32 indexCount; + public IntPtr verts; + public IntPtr normals; + public IntPtr indices; + }; + /// + /// Playspace statistics for querying scanning progress + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public class PlayspaceStats + { + public int IsWorkingOnStats; // 0 if still working on creating the stats + + public float HorizSurfaceArea; // In m2 : All horizontal faces UP between Ground – 0.15 and Ground + 1.f (include Ground and convenient horiz surface) + public float TotalSurfaceArea; // In m2 : All ! + public float UpSurfaceArea; // In m2 : All horizontal faces UP (no constraint => including ground) + public float DownSurfaceArea; // In m2 : All horizontal faces DOWN (no constraint => including ceiling) + public float WallSurfaceArea; // In m2 : All Vertical faces (not only walls) + public float VirtualCeilingSurfaceArea; // In m2 : estimation of surface of virtual Ceiling. + public float VirtualWallSurfaceArea; // In m2 : estimation of surface of virtual Walls. + + public int NumFloor; // List of Area of each Floor surface (contains count) + public int NumCeiling; // List of Area of each Ceiling surface (contains count) + public int NumWall_XNeg; // List of Area of each Wall XNeg surface (contains count) + public int NumWall_XPos; // List of Area of each Wall XPos surface (contains count) + public int NumWall_ZNeg; // List of Area of each Wall ZNeg surface (contains count) + public int NumWall_ZPos; // List of Area of each Wall ZPos surface (contains count) + public int NumPlatform; // List of Area of each Horizontal not Floor surface (contains count) + + public int CellCount_IsPaintMode; // Number paint cells (could deduce surface of painted area) => 8cm x 8cm cell + public int CellCount_IsSeenQualtiy_None; // Number of not seen cells => 8cm x 8cm cell + public int CellCount_IsSeenQualtiy_Seen; // Number of seen cells => 8cm x 8cm cell + public int CellCount_IsSeenQualtiy_Good; // Number of seen cells good quality => 8cm x 8cm cell + }; + /// + /// Playspace alignment results. Reports internal alignment of room in Unity space and basic alignment of the room. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public class PlayspaceAlignment + { + public Vector3 Center; + public Vector3 HalfDims; + public Vector3 BasisX; + public Vector3 BasisY; + public Vector3 BasisZ; + public float FloorYValue; + public float CeilingYValue; + }; + /// + /// Result structure returns from a raycast call. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public class RaycastResult + { + public enum SurfaceTypes + { + Invalid, // If no intersection + Other, + Floor, + FloorLike, // Not part of the floor topology, but close to the floor and looks like the floor + Platform, // Horizontal platform between the ground and the ceiling + Ceiling, + WallExternal, + WallLike, // Not part of the external wall surface + }; + public SurfaceTypes SurfaceType; + float SurfaceArea; // Zero if unknown (not part of the topology analysis) + public Vector3 IntersectPoint; + public Vector3 IntersectNormal; + }; + + // Functions + /// + /// Initialize the spatial understanding dll. Function must be called + /// before any other dll function. + /// + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int SpatialUnderstanding_Init(); + /// + /// Terminate the spatial understanding dll. + /// + [DllImport("SpatialUnderstanding")] + public static extern void SpatialUnderstanding_Term(); + + /// + /// Initialize the scanning process. + /// + /// The user's camera/view position, x value + /// The user's camera/view position, y value + /// The user's camera/view position, z value + /// The user's camera/view unit forward vector, x value + /// The user's camera/view unit forward vector, y value + /// The user's camera/view unit forward vector, z value + /// The user's camera/view unit up vector, x value + /// The user's camera/view unit up vector, y value + /// The user's camera/view unit up vector, z value + /// Suggested search distance for playspace center + /// Optimal room size. Used to determind the playspace size + [DllImport("SpatialUnderstanding")] + public static extern void GeneratePlayspace_InitScan( + [In] float camPos_X, [In] float camPos_Y, [In] float camPos_Z, + [In] float camFwd_X, [In] float camFwd_Y, [In] float camFwd_Z, + [In] float camUp_X, [In] float camUp_Y, [In] float camUp_Z, + [In] float searchDst, [In] float optimalSize); + + /// + /// Update the playspace scanning. Should be called once per frame during scanning. + /// + /// Number of meshes passed in the meshes parameter + /// Array of meshes + /// The user's camera/view position, x value + /// The user's camera/view position, y value + /// The user's camera/view position, z value + /// The user's camera/view unit forward vector, x value + /// The user's camera/view unit forward vector, y value + /// The user's camera/view unit forward vector, z value + /// The user's camera/view unit up vector, x value + /// The user's camera/view unit up vector, y value + /// The user's camera/view unit up vector, z value + /// Time since last update + /// One if scanning has been finalized, zero if more updates are required. + [DllImport("SpatialUnderstanding")] + public static extern int GeneratePlayspace_UpdateScan( + [In] int meshCount, [In] IntPtr meshes, + [In] float camPos_X, [In] float camPos_Y, [In] float camPos_Z, + [In] float camFwd_X, [In] float camFwd_Y, [In] float camFwd_Z, + [In] float camUp_X, [In] float camUp_Y, [In] float camUp_Z, + [In] float deltaTime); + + /// + /// Request scanning that the scanning phase be ended and the playspace + /// finalized. This should be called once the user is happy with the currently + /// scanned in playspace. + /// + [DllImport("SpatialUnderstanding")] + public static extern void GeneratePlayspace_RequestFinish(); + + /// + /// Extracting the mesh is a two step process, the first generates the mesh for extraction & saves it off. + /// The caller is able to see vertex counts, etc. so they can allocate the proper amount of memory. + /// The second call, the caller provides buffers of the appropriate size (or larger), passing in the + /// buffer sizes for validation. + /// + /// Filled in with the number of vertices to be returned in the subsequent extract call + /// Filled in with the number of indices to be returned in the subsequent extract call + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int GeneratePlayspace_ExtractMesh_Setup( + [Out] out int vertexCount, + [Out] out int indexCount); + + /// + /// Call to receive the dll's custom generated mesh data. Use GeneratePlayspace_ExtractMesh_Setup to + /// query the minimum size of the vertex positions, normals, and indices. + /// + /// Size of vericesPos & verticesNormal, in number Vector3 elements in each array + /// Array to receive the vertex positions + /// Array to receive vertex normals + /// Size of indices, in number of elements + /// Array to receive the mesh indices + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int GeneratePlayspace_ExtractMesh_Extract( + [In] int bufferVertexCount, + [In] IntPtr verticesPos, // (vertexCount) DirectX::XMFLOAT3* + [In] IntPtr verticesNormal, // (vertexCount) DirectX::XMFLOAT3* + [In] int bufferIndexCount, + [In] IntPtr indices); // (indexCount) INT32* + + /// + /// Query the playspace scan statistics. + /// + /// playspace stats structure to receive the statistics data + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int QueryPlayspaceStats( + [In] IntPtr playspaceStats); // PlayspaceStats + + /// + /// Query the playspace alignment data. This will not be valid until after scanning is finalized. + /// + /// playspace alignment structure to receive the alignment data + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int QueryPlayspaceAlignment( + [In] IntPtr playspaceAlignment); // PlayspaceAlignment + + /// + /// Perform a raycast against the internal world representation of the understanding dll. + /// This will not be valid until after scanning is finalized. + /// + /// Ray origin, x component + /// Ray origin, y component + /// Ray origin, z component + /// Ray direction vector, x component. Length of ray indicates the length of the ray cast query. + /// Ray direction vector, y component. Length of ray indicates the length of the ray cast query. + /// Ray direction vector, z component. Length of ray indicates the length of the ray cast query. + /// Structure to receive the results of the raycast + /// Zero if fails or no intersection, one if an intersection is detected + [DllImport("SpatialUnderstanding")] + public static extern int PlayspaceRaycast( + [In] float rayPos_X, [In] float rayPos_Y, [In] float rayPos_Z, + [In] float rayVec_X, [In] float rayVec_Y, [In] float rayVec_Z, + [In] IntPtr result); // RaycastResult + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs.meta new file mode 100644 index 0000000..9d739d0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDll.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f48c1bc329c4af04fb454d6a8dab37a2 +timeCreated: 1467222179 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs new file mode 100644 index 0000000..5ba7e15 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs @@ -0,0 +1,504 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System.Collections; +using System.Runtime.InteropServices; +using System; +using System.Collections.Generic; + +namespace HoloToolkit.Unity +{ + /// + /// Encapsulates the object placement queries of the understanding dll. + /// These queries will not be valid until after scanning is finalized. + /// + public static class SpatialUnderstandingDllObjectPlacement + { + /// + /// Defines an object placement query. A query consists of + /// a type a name, type, set of rules, and set of constraints. + /// + /// Rules may not be violated by the returned query. Possible + /// locations that satisfy the type and rules are selected + /// by optimizing within the constraint list. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ObjectPlacementDefinition + { + /// + /// Type of object placement. Each type has a custom set + /// of parameter. + /// + public enum PlacementType + { + Place_OnFloor, + Place_OnWall, + Place_OnCeiling, + Place_OnShape, + Place_OnEdge, + Place_OnFloorAndCeiling, + Place_RandomInAir, + Place_InMidAir, + Place_UnderPlatformEdge, + }; + + /// + /// Type of wall. + /// External walls bound the playspace. Virtual walls are created + /// at the edge of the playspace when an external wall does not + /// exist. + /// + [FlagsAttribute] + public enum WallTypeFlags + { + None = 0, + Normal = (1 << 0), + External = (1 << 1), + Virtual = (1 << 2), + ExternalVirtual = (1 << 3), + }; + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed on the floor. + /// + /// Required half size of the requested bounding volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnFloor(Vector3 halfDims) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnFloor; + placement.HalfDims = halfDims; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed on a wall. + /// + /// Required half size of the requested bounding volume + /// Minimum height of the requested volume above the floor + /// Maximum height of the requested volume above the floor + /// Bit mask of possible walls to consider, defined by WallTypeFlags + /// Required empty wall space to the left of the volume, as defined by facing the wall + /// Required empty wall space to the right of the volume, as defined by facing the wall + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnWall( + Vector3 halfDims, + float heightMin, + float heightMax, + WallTypeFlags wallTypes = WallTypeFlags.External | WallTypeFlags.Normal, + float marginLeft = 0.0f, + float marginRight = 0.0f) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnWall; + placement.HalfDims = halfDims; + placement.PlacementParam_Float_0 = heightMin; + placement.PlacementParam_Float_1 = heightMax; + placement.PlacementParam_Float_2 = marginLeft; + placement.PlacementParam_Float_3 = marginRight; + placement.WallFlags = (int)wallTypes; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be place on the ceiling. + /// + /// Required half size of the requested bounding volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnCeiling(Vector3 halfDims) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnCeiling; + placement.HalfDims = halfDims; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed on top of another object placed object. + /// + /// Required half size of the requested bounding volume + /// Name of the placed object + /// Index of the component within shapeName + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnShape(Vector3 halfDims, string shapeName, int componentIndex) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnShape; + placement.HalfDims = halfDims; + placement.PlacementParam_Str_0 = SpatialUnderstanding.Instance.UnderstandingDLL.PinString(shapeName); + placement.PlacementParam_Int_0 = componentIndex; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed on the edge of a platform. + /// + /// Required half size of the requested bounding volume + /// Half size of the bottom part of the placement volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnEdge(Vector3 halfDims, Vector3 halfDimsBottom) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnEdge; + placement.HalfDims = halfDims; + placement.PlacementParam_Float_0 = halfDimsBottom.x; + placement.PlacementParam_Float_1 = halfDimsBottom.y; + placement.PlacementParam_Float_2 = halfDimsBottom.z; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be have space on the floor and ceiling within the same vertical space. + /// + /// Required half size of the requested bounding volume + /// Half size of the bottom part of the placement volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_OnFloorAndCeiling(Vector3 halfDims, Vector3 halfDimsBottom) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_OnFloorAndCeiling; + placement.HalfDims = halfDims; + placement.PlacementParam_Float_0 = halfDimsBottom.x; + placement.PlacementParam_Float_1 = halfDimsBottom.y; + placement.PlacementParam_Float_2 = halfDimsBottom.z; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed floating in space, within the playspace. Spaces visible from the + /// center of the playspace are favored. + /// + /// Required half size of the requested bounding volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_RandomInAir(Vector3 halfDims) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_RandomInAir; + placement.HalfDims = halfDims; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be placed floating in space, within the playspace. This query requires that + /// other objects do not collide with the placement volume. + /// + /// Required half size of the requested bounding volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_InMidAir(Vector3 halfDims) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_InMidAir; + placement.HalfDims = halfDims; + return placement; + } + + /// + /// Constructs an object placement query definition requiring the object to + /// be place under a platform edge. + /// + /// Required half size of the requested bounding volume + /// Constructed object placement definition + public static ObjectPlacementDefinition Create_UnderPlatformEdge(Vector3 halfDims) + { + ObjectPlacementDefinition placement = new ObjectPlacementDefinition(); + placement.Type = PlacementType.Place_UnderPlatformEdge; + placement.HalfDims = halfDims; + return placement; + } + + public PlacementType Type; + public int PlacementParam_Int_0; + public float PlacementParam_Float_0; + public float PlacementParam_Float_1; + public float PlacementParam_Float_2; + public float PlacementParam_Float_3; + public IntPtr PlacementParam_Str_0; + public int WallFlags; + public Vector3 HalfDims; + }; + + /// + /// Defines an object placement rule. Rules are one part of an object + /// placement definition. Rules may not be violated by the returned query. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ObjectPlacementRule + { + /// + /// Type of object placement rule. Each rule is defined by its + /// type and a set of per-type parameters. The supplied static + /// construction functions may be used to create rules. + /// + public enum ObjectPlacementRuleType + { + Rule_AwayFromPosition, + Rule_AwayFromWalls, + Rule_AwayFromOtherObjects, + }; + + /// + /// Constructs an object placement rule requiring the placement volume to + /// be placed a minimum distance away from the specified position. + /// + /// Defines the center position for the center of the invalid placement space. + /// Defines the radius of the invalid placement space. + /// Constructed object placement rule + public static ObjectPlacementRule Create_AwayFromPosition(Vector3 position, float minDistance) + { + ObjectPlacementRule rule = new ObjectPlacementRule(); + rule.Type = ObjectPlacementRuleType.Rule_AwayFromPosition; + rule.RuleParam_Vec3_0 = position; + rule.RuleParam_Float_0 = minDistance; + return rule; + } + + /// + /// Constructs an object placement rule requiring the placement volume to + /// be placed a minimum distance away from any wall + /// + /// Minimum distance from a wall + /// Minimum height of a wall to be considered by this rule + /// Constructed object placement rule + public static ObjectPlacementRule Create_AwayFromWalls(float minDistance, float minWallHeight = 0.0f) + { + ObjectPlacementRule rule = new ObjectPlacementRule(); + rule.Type = ObjectPlacementRuleType.Rule_AwayFromWalls; + rule.RuleParam_Float_0 = minDistance; + rule.RuleParam_Float_1 = minWallHeight; + return rule; + } + + /// + /// Constructs an object placement rule requiring the placement volume to + /// be placed a minimum distance away from other placed objects + /// + /// Minimum distance from other placed objects + /// Constructed object placement rule + public static ObjectPlacementRule Create_AwayFromOtherObjects(float minDistance) + { + ObjectPlacementRule rule = new ObjectPlacementRule(); + rule.Type = ObjectPlacementRuleType.Rule_AwayFromOtherObjects; + rule.RuleParam_Float_0 = minDistance; + return rule; + } + + public ObjectPlacementRuleType Type; + public int RuleParam_Int_0; + public float RuleParam_Float_0; + public float RuleParam_Float_1; + public Vector3 RuleParam_Vec3_0; + }; + + /// + /// Defines an object placement constraint. Constraints are one part of an object + /// placement definition. Possible object placement locations are picked by the + /// location that minimally violates the set of constraints. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ObjectPlacementConstraint + { + /// + /// Types of object placement constraints + /// + public enum ObjectPlacementConstraintType + { + Constraint_NearPoint, + Constraint_NearWall, + Constraint_AwayFromWalls, + Constraint_NearCenter, + Constraint_AwayFromOtherObjects, + Constraint_AwayFromPoint + }; + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed no closer than minDistance and no further than maxDistance from + /// the specified position. + /// + /// The center point from switch minDistance and maxDistance define their volumes + /// The minimum distance from position to place the object + /// The maximum distance from position to place the object + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_NearPoint(Vector3 position, float minDistance = 0.0f, float maxDistance = 0.0f) + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_NearPoint; + constraint.RuleParam_Vec3_0 = position; + constraint.RuleParam_Float_0 = minDistance; + constraint.RuleParam_Float_1 = maxDistance; + return constraint; + } + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed no closer than minDistance and no further than maxDistance from + /// a wall. + /// + /// The minimum distance from position to place the object + /// The maximum distance from position to place the object + /// Minimum height of a wall to be considered by this rule + /// Indicates virtual walls should be considered in this query + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_NearWall(float minDistance = 0.0f, float maxDistance = 0.0f, float minWallHeight = 0.0f, bool includeVirtualWalls = false) + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_NearWall; + constraint.RuleParam_Float_0 = minDistance; + constraint.RuleParam_Float_1 = maxDistance; + constraint.RuleParam_Float_2 = minWallHeight; + constraint.RuleParam_Int_0 = includeVirtualWalls ? 1 : 0; + return constraint; + } + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed away from all walls. + /// + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_AwayFromWalls() + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_AwayFromWalls; + return constraint; + } + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed near the center of the playspace. + /// + /// The minimum distance from the center to place the object + /// The maximum distance from the center to place the object + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_NearCenter(float minDistance = 0.0f, float maxDistance = 0.0f) + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_NearCenter; + constraint.RuleParam_Float_0 = minDistance; + constraint.RuleParam_Float_1 = maxDistance; + return constraint; + } + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed away from other place objects. + /// + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_AwayFromOtherObjects() + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_AwayFromOtherObjects; + return constraint; + } + + /// + /// Constructs an object placement constraint requesting that the placement volume + /// be placed away from the specified position. + /// + /// The center point from switch minDistance and maxDistance define their volumes + /// Constructed object placement constraint + public static ObjectPlacementConstraint Create_AwayFromPoint(Vector3 position) + { + ObjectPlacementConstraint constraint = new ObjectPlacementConstraint(); + constraint.Type = ObjectPlacementConstraintType.Constraint_AwayFromPoint; + constraint.RuleParam_Vec3_0 = position; + return constraint; + } + + public ObjectPlacementConstraintType Type; + public int RuleParam_Int_0; + public float RuleParam_Float_0; + public float RuleParam_Float_1; + public float RuleParam_Float_2; + public Vector3 RuleParam_Vec3_0; + }; + + /// + /// Object placement result. Defines an oriented bounding box result for the + /// object placement query. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public class ObjectPlacementResult : ICloneable + { + public object Clone() + { + return this.MemberwiseClone(); + } + + public Vector3 Position; + public Vector3 HalfDims; + public Vector3 Forward; + public Vector3 Right; + public Vector3 Up; + }; + + // Functions + /// + /// Initialized the object placement solver. This should be called after the + /// scanning phase has finish and the playspace has been finalized. + /// + /// + [DllImport("SpatialUnderstanding")] + public static extern int Solver_Init(); + + /// + /// Executes an object placement query. + /// + /// A query consists of a type a name, type, set of rules, + /// and set of constraints. + /// + /// Rules may not be violated by the returned query. Possible + /// locations that satisfy the type and rules are selected + /// by optimizing within the constraint list. + /// + /// Objects placed with with Solver_PlaceObject persist until removed + /// and are considered in subsequent queries by some rules and constraints. + /// + /// Name of the object placement query + /// The placement defintion, of type ObjectPlacementDefinition + /// Length of the provided placementRules array + /// Array of ObjectPlacementRule structures, defining the rules + /// Length of the provided placementConstraints array + /// Array of ObjectPlacementConstraint structures, defining the constraints + /// Pointer to an ObjectPlacementResult structure to receive the result of the query + /// Zero on failure, one on success + [DllImport("SpatialUnderstanding")] + public static extern int Solver_PlaceObject( + [In, MarshalAs(UnmanagedType.LPStr)] string objectName, + [In] IntPtr placementDefinition,// ObjectPlacementDefinition + [In] int placementRuleCount, + [In] IntPtr placementRules, // ObjectPlacementRule + [In] int constraintCount, + [In] IntPtr placementConstraints,// ObjectPlacementConstraint + [Out] IntPtr placementResult); // ObjectPlacementResult + + /// + /// Removed a solved object. + /// + /// Objects placed with with Solver_PlaceObject persist until removed + /// and are considered in subsequent queries by some rules and constraints. + /// + /// + /// + [DllImport("SpatialUnderstanding")] + public static extern int Solver_RemoveObject( + [In, MarshalAs(UnmanagedType.LPStr)] string objectName); + + /// + /// Removed all solved object placements. + /// + /// Objects placed with with Solver_PlaceObject persist until removed + /// and are considered in subsequent queries by some rules and constraints. + /// + [DllImport("SpatialUnderstanding")] + public static extern void Solver_RemoveAllObjects(); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs.meta new file mode 100644 index 0000000..7e444bd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllObjectPlacement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 780725e0c45da944182ca918718651fa +timeCreated: 1469482048 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs new file mode 100644 index 0000000..41d56a4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs @@ -0,0 +1,894 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System.Collections; +using System.Runtime.InteropServices; +using System; +using System.Collections.Generic; + +namespace HoloToolkit.Unity +{ + /// + /// Encapsulates the shape detection queries of the understanding dll. + /// Shapes are defined by the user with AddShape and the analysis is + /// initiated with ActivateShapeAnalysis. These queries will not be + /// valid until after scanning is finalized. + /// + /// Shape definitions are composed of a list of components and a list + /// of shape constraints which defining requirements between the + /// components. Each component is defined by a list of its own shape + /// component constraints. + /// + public static class SpatialUnderstandingDllShapes + { + /// + /// Result structure returned by shape queries + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ShapeResult + { + public Vector3 position; + public Vector3 halfDims; + }; + + /// + /// Types of shape component constraints + /// + public enum ShapeComponentConstraintType + { + SurfaceNotPartOfShape, + + SurfaceHeight_Min, + SurfaceHeight_Max, + SurfaceHeight_Between, + SurfaceHeight_Is, + + SurfaceCount_Min, + SurfaceCount_Max, + SurfaceCount_Between, + SurfaceCount_Is, + + SurfaceArea_Min, + SurfaceArea_Max, + SurfaceArea_Between, + SurfaceArea_Is, + + IsRectangle, + RectangleSize_Min, + RectangleSize_Max, + RectangleSize_Between, + RectangleSize_Is, + + RectangleLength_Min, + RectangleLength_Max, + RectangleLength_Between, + RectangleLength_Is, + + RectangleWidth_Min, + RectangleWidth_Max, + RectangleWidth_Between, + RectangleWidth_Is, + + IsSquare, + SquareSize_Min, + SquareSize_Max, + SquareSize_Between, + SquareSize_Is, + + IsCircle, + CircleRadius_Min, + CircleRadius_Max, + CircleRadius_Between, + CircleRadius_Is, + }; + + /// + /// A shape component constraint. This includes its type enum and + /// its type specific parameters. + /// + /// Static construction functions contained in this class can be used + /// to construct a list of component constraints. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ShapeComponentConstraint + { + /// + /// Constructs a constraint requiring the component to not be a part of a specified shape + /// + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceNotPartOfShape(string shapeName) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceNotPartOfShape; + constraint.Param_Str_0 = SpatialUnderstanding.Instance.UnderstandingDLL.PinString(shapeName); + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a minimum height above the floor + /// + /// Minimum height above the floor + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceHeight_Min(float minHeight) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceHeight_Min; + constraint.Param_Float_0 = minHeight; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a maximum height above the floor + /// + /// Maximum height above the floor + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceHeight_Max(float maxHeight) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceHeight_Max; + constraint.Param_Float_0 = maxHeight; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be within a height range above the floor + /// + /// Minimum height above the floor + /// Maximum height above the floor + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceHeight_Between(float minHeight, float maxHeight) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceHeight_Between; + constraint.Param_Float_0 = minHeight; + constraint.Param_Float_1 = maxHeight; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a specific height above the floor + /// + /// Required height above the floor + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceHeight_Is(float height) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceHeight_Is; + constraint.Param_Float_0 = height; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a minimum number of discrete flat surfaces + /// + /// Minimum number of discrete surfaces + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceCount_Min(int minCount) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceCount_Min; + constraint.Param_Int_0 = minCount; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a maximum number of discrete flat surfaces + /// + /// Maximum number of discrete surfaces + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceCount_Max(int maxCount) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceCount_Max; + constraint.Param_Int_0 = maxCount; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a composed of a number of + /// discrete flat surfaces between a specified range + /// + /// Minimum number of discrete surfaces + /// Maximum number of discrete surfaces + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceCount_Between(int minCount, int maxCount) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceCount_Between; + constraint.Param_Int_0 = minCount; + constraint.Param_Int_1 = maxCount; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be a composed of a number of + /// discrete flat surfaces of the count specified + /// + /// Number of discrete surfaces + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceCount_Is(int count) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceCount_Is; + constraint.Param_Int_0 = count; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to contain a minimum surface area + /// + /// Minimum surface area + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceArea_Min(float minArea) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceArea_Min; + constraint.Param_Float_0 = minArea; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to contain a maximum surface area + /// + /// Maximum surface area + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceArea_Max(float maxArea) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceArea_Max; + constraint.Param_Float_0 = maxArea; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to contain a surface area + /// between the range specified + /// + /// Minimum surface area + /// Maximum surface area + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceArea_Between(float minArea, float maxArea) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceArea_Between; + constraint.Param_Float_0 = minArea; + constraint.Param_Float_1 = maxArea; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to contain a specific surface area + /// + /// Required surface area + /// Constructed component constraint + public static ShapeComponentConstraint Create_SurfaceArea_Is(float area) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SurfaceArea_Is; + constraint.Param_Float_0 = area; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to shaped like a rectangle. + /// + /// The rectangles similarity is the percent of the surface that matches the + /// containing rectangular component shape. + /// + /// Minimum similarity to a rectangle + /// Constructed component constraint + public static ShapeComponentConstraint Create_IsRectangle(float similarityMin = 0.5f) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.IsRectangle; + constraint.Param_Float_0 = similarityMin; + return constraint; + } + + /// + /// Constructs a constraint requiring a minimum length and width of the surface rectangle. + /// Length is the longer of the two bounding edges and width the shorter edge. + /// + /// Minimum length + /// Minimum width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleSize_Min(float minLength, float minWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleSize_Min; + constraint.Param_Float_0 = minLength; + constraint.Param_Float_1 = minWidth; + return constraint; + } + + /// + /// Constructs a constraint requiring a maximum length and width of the surface rectangle. + /// Length is the longer of the two bounding edges and width the shorter edge. + /// + /// Maximum length + /// Maximum width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleSize_Max(float maxLength, float maxWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleSize_Max; + constraint.Param_Float_0 = maxLength; + constraint.Param_Float_1 = maxWidth; + return constraint; + } + + /// + /// Constructs a constraint requiring a the length and width of the surface rectangle + /// to be within a specified range. Length is the longer of the two bounding edges and + /// width the shorter edge. + /// + /// Minimum length + /// Minimum width + /// Maximum length + /// Maximum width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleSize_Between(float minLength, float minWidth, float maxLength, float maxWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleSize_Between; + constraint.Param_Float_0 = minLength; + constraint.Param_Float_1 = minWidth; + constraint.Param_Float_2 = maxLength; + constraint.Param_Float_3 = maxWidth; + return constraint; + } + + /// + /// Constructs a constraint requiring a specified length and width. + /// Length is the longer of the two bounding edges and width the shorter edge. + /// + /// Required surface length + /// Required surface width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleSize_Is(float length, float width) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleSize_Is; + constraint.Param_Float_0 = length; + constraint.Param_Float_1 = width; + return constraint; + } + + /// + /// Constructs a constraint requiring a minimum length. + /// Length is the longer of the two bounding edges. + /// + /// Minimum surface length + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleLength_Min(float minLength) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleLength_Min; + constraint.Param_Float_0 = minLength; + return constraint; + } + + /// + /// Constructs a constraint requiring a maximum length. + /// Length is the longer of the two bounding edges. + /// + /// Maximum surface length + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleLength_Max(float maxLength) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleLength_Max; + constraint.Param_Float_0 = maxLength; + return constraint; + } + + /// + /// Constructs a constraint requiring the surface length to be between the given range. + /// Length is the longer of the two bounding edges. + /// + /// Minimum surface length + /// Maximum surface length + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleLength_Between(float minLength, float maxLength) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleLength_Between; + constraint.Param_Float_0 = minLength; + constraint.Param_Float_1 = maxLength; + return constraint; + } + + /// + /// Constructs a constraint requiring a specific surface length. + /// Length is the longer of the two bounding edges. + /// + /// Required surface length + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleLength_Is(float length) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleLength_Is; + constraint.Param_Float_0 = length; + return constraint; + } + + /// + /// Constructs a constraint requiring a minimum width. + /// Width is the shorter of the two bounding edges. + /// + /// Minimum surface width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleWidth_Min(float minWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleWidth_Min; + constraint.Param_Float_0 = minWidth; + return constraint; + } + + /// + /// Constructs a constraint requiring a maximum width. + /// Width is the shorter of the two bounding edges. + /// + /// Maximum surface width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleWidth_Max(float maxWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleWidth_Max; + constraint.Param_Float_0 = maxWidth; + return constraint; + } + /// + /// Constructs a constraint requiring the surface width to be between the given range. + /// Width is the shorter of the two bounding edges. + /// + /// Minimum surface width + /// Maximum surface width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleWidth_Between(float minWidth, float maxWidth) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleWidth_Between; + constraint.Param_Float_0 = minWidth; + constraint.Param_Float_1 = maxWidth; + return constraint; + } + + /// + /// Constructs a constraint requiring a specific surface width. + /// Width is the shorter of the two bounding edges. + /// + /// Required surface width + /// Constructed component constraint + public static ShapeComponentConstraint Create_RectangleWidth_Is(float width) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.RectangleWidth_Is; + constraint.Param_Float_0 = width; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be shaped like a square + /// + /// The squares similarity is the percent of the surface that matches the + /// containing square component shape. + /// + /// Minimum similarity to a square + /// Constructed component constraint + public static ShapeComponentConstraint Create_IsSquare(float similarityMin = 0.5f) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.IsSquare; + constraint.Param_Float_0 = similarityMin; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to have a minimum area + /// + /// Minimum size in meters squared + /// Constructed component constraint + public static ShapeComponentConstraint Create_SquareSize_Min(float minSize) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SquareSize_Min; + constraint.Param_Float_0 = minSize; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to have a maximum area + /// + /// Maximum size in meters squared + /// Constructed component constraint + public static ShapeComponentConstraint Create_SquareSize_Max(float maxSize) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SquareSize_Max; + constraint.Param_Float_0 = maxSize; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to have a surface area + /// between the given range + /// + /// Minimum size in meters squared + /// Maximum size in meters squared + /// Constructed component constraint + public static ShapeComponentConstraint Create_SquareSize_Between(float minSize, float maxSize) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SquareSize_Between; + constraint.Param_Float_0 = minSize; + constraint.Param_Float_1 = maxSize; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to have a specific surface area + /// + /// Required size in meters squared + /// Constructed component constraint + public static ShapeComponentConstraint Create_SquareSize_Is(float size) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.SquareSize_Is; + constraint.Param_Float_0 = size; + return constraint; + } + + /// + /// Constructs a constraint requiring the component to be shaped like a circle + /// + /// The squares similarity is the percent of the surface that matches the + /// containing circular component shape + /// + /// Minimum similarity to a circle + /// Constructed component constraint + public static ShapeComponentConstraint Create_IsCircle(float similarityMin = 0.5f) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.IsCircle; + constraint.Param_Float_0 = similarityMin; + return constraint; + } + + /// + /// Constructs a constraint requiring the circle shaped component to have + /// a minimum radius + /// + /// Minimum radius in meters + /// Constructed component constraint + public static ShapeComponentConstraint Create_CircleRadius_Min(float minRadius) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.CircleRadius_Min; + constraint.Param_Float_0 = minRadius; + return constraint; + } + + /// + /// Constructs a constraint requiring the circle shaped component to have + /// a maximum radius + /// + /// Maximum radius in meters + /// Constructed component constraint + public static ShapeComponentConstraint Create_CircleRadius_Max(float maxRadius) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.CircleRadius_Max; + constraint.Param_Float_0 = maxRadius; + return constraint; + } + + /// + /// Constructs a constraint requiring the circle shaped component to have + /// a radius between the given range + /// + /// Minimum radius in meters + /// Maximum radius in meters + /// Constructed component constraint + public static ShapeComponentConstraint Create_CircleRadius_Between(float minRadius, float maxRadius) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.CircleRadius_Between; + constraint.Param_Float_0 = minRadius; + constraint.Param_Float_1 = maxRadius; + return constraint; + } + + /// + /// Constructs a constraint requiring the circle shaped component to have + /// a specific radius + /// + /// Required radius in meters + /// Constructed component constraint + public static ShapeComponentConstraint Create_CircleRadius_Is(float radius) + { + ShapeComponentConstraint constraint = new ShapeComponentConstraint(); + constraint.Type = ShapeComponentConstraintType.CircleRadius_Is; + constraint.Param_Float_0 = radius; + return constraint; + } + + public ShapeComponentConstraintType Type; + public float Param_Float_0; + public float Param_Float_1; + public float Param_Float_2; + public float Param_Float_3; + public int Param_Int_0; + public int Param_Int_1; + public IntPtr Param_Str_0; + }; + + /// + /// A shape component definition. Contains a list of component constraints. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ShapeComponent + { + public ShapeComponent(List componentConstraints) + { + ConstraintCount = componentConstraints.Count; + Constraints = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(componentConstraints.ToArray()); + } + + public int ConstraintCount; + public IntPtr Constraints; // ShapeComponentConstraint + }; + + /// + /// Lists the types of shape constraints. Each defines a requirement + /// between shape components. + /// + public enum ShapeConstraintType + { + NoOtherSurface, + AwayFromWalls, + + RectanglesParallel, + RectanglesPerpendicular, + RectanglesAligned, + RectanglesSameLength, + + AtFrontOf, + AtBackOf, + AtLeftOf, + AtRightOf, + }; + + /// + /// A shape constraint definition. Composed of a type and + /// type specific parameters + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ShapeConstraint + { + /// + /// Constructs a constraint required no other surfaces be included in this shape + /// + /// Constructed shape constraint + public static ShapeConstraint Create_NoOtherSurface() + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.NoOtherSurface; + return constraint; + } + + /// + /// Constructs a constraint requiring the shape to be away from all walls + /// + /// Constructed shape constraint + public static ShapeConstraint Create_AwayFromWalls() + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.AwayFromWalls; + return constraint; + } + + /// + /// Constructs a constraint requiring the components shapes longer edges + /// to have parallel alignment. + /// + /// Zero based index of the first component constraint + /// Zero based index of the second component constraint + /// Constructed shape constraint + public static ShapeConstraint Create_RectanglesParallel(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.RectanglesParallel; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + /// + /// Constructs a constraint requiring the components shapes longer edges + /// to have perpendicular alignment. + /// + /// Zero based index of the first component constraint + /// Zero based index of the second component constraint + /// Constructed shape constraint + public static ShapeConstraint Create_RectanglesPerpendicular(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.RectanglesPerpendicular; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + /// + /// Constructs a constraint requiring the components shapes to be either aligned + /// with parallel or parallel alignment. The difference is the defined as the cosine of the angle + /// between the best aligned axis (i.e. the dot product) + /// + /// Zero based index of the first component constraint + /// Zero based index of the second component constraint + /// Maximum difference + /// Constructed shape constraint + public static ShapeConstraint Create_RectanglesAligned(int componentIndexA, int componentIndexB, float maxDifference = 0.1f) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.RectanglesAligned; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + constraint.Param_Float_0 = maxDifference; + return constraint; + } + + /// + /// Constructs a constraint requiring the components shapes longest edges to + /// have the same length, within the difference difference parameter. + /// + /// The difference is defined as the ratio of the longest edges of the two components. + /// + /// Zero based index of the first component constraint + /// Zero based index of the second component constraint + /// Maximum similarity + /// Constructed shape constraint + public static ShapeConstraint Create_RectanglesSameLength(int componentIndexA, int componentIndexB, float similarityMin = 0.8f) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.RectanglesSameLength; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + constraint.Param_Float_0 = similarityMin; + return constraint; + } + + /// + /// Constructs a constraint requiring component B to be immediately in front of component A. + /// + /// + /// + /// Constructed shape constraint + public static ShapeConstraint Create_AtFrontOf(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.AtFrontOf; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + /// + /// Constructs a constraint requiring component B to be immediately in back of component A. + /// + /// + /// + /// Constructed shape constraint + public static ShapeConstraint Create_AtBackOf(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.AtBackOf; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + /// + /// Constructs a constraint requiring component B to be immediately to the left of component A. + /// + /// + /// + /// Constructed shape constraint + public static ShapeConstraint Create_AtLeftOf(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.AtLeftOf; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + /// + /// Constructs a constraint requiring component B to be immediately to the right of component A. + /// + /// + /// + /// Constructed shape constraint + public static ShapeConstraint Create_AtRightOf(int componentIndexA, int componentIndexB) + { + ShapeConstraint constraint = new ShapeConstraint(); + constraint.Type = ShapeConstraintType.AtRightOf; + constraint.Param_Int_0 = componentIndexA; + constraint.Param_Int_1 = componentIndexB; + return constraint; + } + + public ShapeConstraintType Type; + public float Param_Float_0; + public int Param_Int_0; + public int Param_Int_1; + }; + + // Functions + /// + /// Finds the set of available positions on the set of found shapes + /// of the type specified by shapeName. + /// + /// Name of the shape + /// Defines the minimum space requirement for a returned position + /// Length of the array passed in shapeData, the return value will never exceed this value + /// An array of ShapeResult structures to receive the results of the query + /// Number of positions found. This number will never exceed shapeCount (the space provided for the results in shapeData). + // Queries (shapes) + [DllImport("SpatialUnderstanding")] + public static extern int QueryShape_FindPositionsOnShape( + [In, MarshalAs(UnmanagedType.LPStr)] string shapeName, // char* + [In] float minRadius, + [In] int shapeCount, // Pass in the space allocated in shapeData + [In, Out] IntPtr shapeData); // ShapeResult + + /// + /// Finds the set of found shapes of the type specified by shapeName. + /// Returns the bounding rectangle's half dimensions. + /// + /// Name of the shape + /// Length of the array passed in shapeData, the return value will never exceed this value + /// An array of ShapeResult structures to receive the results of the query + /// Number of shapes found. This number will never exceed shapeCount (the space provided for the results in shapeData). + [DllImport("SpatialUnderstanding")] + public static extern int QueryShape_FindShapeHalfDims( + [In, MarshalAs(UnmanagedType.LPStr)] string shapeName, // char* + [In] int shapeCount, // Pass in the space allocated in shapeData + [In, Out] IntPtr shapeData); // ShapeResult + + /// + /// Add a shape definition. A shape is defined by a list of components and a + /// set of component constraints. Each component is of type ShapeComponent and + /// is defined by a set of component constraint. + /// + /// Name of the shaped + /// Length of the component array pass in the components parameter + /// Array of ShapeComponent structures + /// Length of the shape constraint array passed in the constraints parameter + /// Array of ShapeConstraint structures + /// + [DllImport("SpatialUnderstanding")] + public static extern int AddShape( + [In, MarshalAs(UnmanagedType.LPStr)] string shapeName, + [In] int componentCount, + [In] IntPtr components, // ShapeComponent + [In] int shapeConstraints, + [In] IntPtr constraints); // ShapeConstraint + + /// + /// Runs the shape analysis. This should be called after scanning has been + /// finalized and shapes have been defined with AddShape. + /// + [DllImport("SpatialUnderstanding")] + public static extern void ActivateShapeAnalysis(); + + /// + /// Removes all shapes defined by AddShape. + /// + [DllImport("SpatialUnderstanding")] + public static extern void RemoveAllShapes(); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs.meta new file mode 100644 index 0000000..c01290b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllShapes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2a13e2bc9949e6a468ae6b0a20d8bb42 +timeCreated: 1469482018 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs new file mode 100644 index 0000000..124952c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using System.Collections; +using System.Runtime.InteropServices; +using System; +using System.Collections.Generic; + +namespace HoloToolkit.Unity +{ + /// + /// Encapsulates the topology queries of the understanding dll. + /// These queries will not be valid until after scanning is finalized. + /// + public static class SpatialUnderstandingDllTopology + { + /// + /// Result of a topology query. Typically results return an array + /// of these structures. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct TopologyResult + { + public Vector3 position; + public Vector3 normal; + public float width; + public float length; + }; + + // Functions + /// + /// Finds spaces on walls meeting the criteria specified by the parameters. + /// + /// Minimum height of space to be found by the query + /// Minimum width of space to be found by the query + /// Minimum distance above the floor for the bottom edge of the space + /// Minimum amount of space in front of the space + /// Number of location results supplied by the user in locationData + /// Location result array of TopologyResult to be filled with the spaces found by the query + /// Number of spaces found by the query. This value is limited by the number of results supplied by the caller (locationCount) + // Queries (topology) + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindPositionsOnWalls( + [In] float minHeightOfWallSpace, + [In] float minWidthOfWallSpace, + [In] float minHeightAboveFloor, + [In] float minFacingClearance, + [In] int locationCount, // Pass in the space allocated in locationData + [In, Out] IntPtr locationData); // TopologyResult + + /// + /// Finds only large spaces on walls meeting the criteria specified by the parameters. + /// + /// Minimum height of space to be found by the query + /// Minimum width of space to be found by the query + /// Minimum distance above the floor for the bottom edge of the space + /// Minimum amount of space in front of the space + /// Number of location results supplied by the user in locationData + /// Location result array of TopologyResult to be filled with the spaces found by the query + /// Number of spaces found by the query. This value is limited by the number of results supplied by the caller (locationCount) + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindLargePositionsOnWalls( + [In] float minHeightOfWallSpace, + [In] float minWidthOfWallSpace, + [In] float minHeightAboveFloor, + [In] float minFacingClearance, + [In] int locationCount, // Pass in the space allocated in locationData + [In, Out] IntPtr locationData); // TopologyResult + + /// + /// Finds the largest wall + /// + /// Pointer to a TopologyResult structure, to be filled with the found wall + /// Zero if fails, one if success + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindLargestWall( + [In, Out] IntPtr wall); // TopologyResult + + /// + /// Finds spaces on the floor meeting the criteria specified by the parameters. + /// + /// Minimum length of space to be found by the query + /// Minimum width of space to be found by the query + /// Number of location results supplied by the user in locationData + /// Location result array of TopologyResult to be filled with the spaces found by the query + /// Number of spaces found by the query. This value is limited by the number of results supplied by the caller (locationCount) + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindPositionsOnFloor( + [In] float minLengthOfFloorSpace, + [In] float minWidthOfFloorSpace, + [In] int locationCount, // Pass in the space allocated in locationData + [In, Out] IntPtr locationData); // TopologyResult + + /// + /// Finds the largest spaces on the floor + /// + /// Number of location results supplied by the user in locationData + /// Location result array of TopologyResult to be filled with the spaces found by the query + /// Number of spaces found by the query. This value is limited by the number of results supplied by the caller (locationCount) + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindLargestPositionsOnFloor( + [In] int locationCount, // Pass in the space allocated in locationData + [In, Out] IntPtr locationData); // TopologyResult + + /// + /// Finds good spaces for sitting or placing objects on surfaces. + /// + /// Minimum height above the floor for a space + /// Maximum height above the floor for a space + /// Minimum clearance for the space above the placement surface (minimum space height) + /// Number of location results supplied by the user in locationData + /// Location result array of TopologyResult to be filled with the spaces found by the query + /// Number of spaces found by the query. This value is limited by the number of results supplied by the caller (locationCount) + [DllImport("SpatialUnderstanding")] + public static extern int QueryTopology_FindPositionsSittable( + [In] float minHeight, + [In] float maxHeight, + [In] float minFacingClearance, + [In] int locationCount, // Pass in the space allocated in locationData + [In, Out] IntPtr locationData); // TopologyResult + } + +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs.meta new file mode 100644 index 0000000..21b2fef --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingDllTopology.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ee400289cdcb94240b2db829b6624781 +timeCreated: 1469481997 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs new file mode 100644 index 0000000..7fe0ecb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using HoloToolkit.Unity.SpatialMapping; + +namespace HoloToolkit.Unity +{ + /// + /// Provides the input meshes to the spatial understanding dll. + /// The component relies on the spatial mapping module. It maintains + /// a mesh list in the required dll format which is updated from + /// the spatial mapping's SurfaceObject list. + /// + public class SpatialUnderstandingSourceMesh : MonoBehaviour + { + // Privates + /// + /// Internal list of meshes that is passed to the dll. This is + /// kept up to date with spatial mapping's SurfaceObject list. + /// + private readonly List inputMeshList = new List(); + + // Functions + private void Start() + { + TryAttach(SpatialMappingManager.Instance.Source); + SpatialMappingManager.Instance.SourceChanged += HandleSpatialMappingSourceChanged; + } + + private void HandleSpatialMappingSourceChanged(object sender, PropertyChangedEventArgsEx e) + { + Debug.Assert(object.ReferenceEquals(sender, SpatialMappingManager.Instance)); + + TryDetach(e.OldValue); + TryAttach(e.NewValue); + } + + private void TryDetach(SpatialMappingSource spatialMappingSource) + { + if (spatialMappingSource != null) + { + spatialMappingSource.SurfaceAdded -= HandleSurfaceAdded; + spatialMappingSource.SurfaceUpdated -= HandleSurfaceUpdated; + spatialMappingSource.SurfaceRemoved -= HandleSurfaceRemoved; + spatialMappingSource.RemovingAllSurfaces -= HandleRemovingAllSurfaces; + } + + inputMeshList.Clear(); + } + + private void TryAttach(SpatialMappingSource spatialMappingSource) + { + if (spatialMappingSource != null) + { + spatialMappingSource.SurfaceAdded += HandleSurfaceAdded; + spatialMappingSource.SurfaceUpdated += HandleSurfaceUpdated; + spatialMappingSource.SurfaceRemoved += HandleSurfaceRemoved; + spatialMappingSource.RemovingAllSurfaces += HandleRemovingAllSurfaces; + + Debug.Assert(inputMeshList.Count == 0); + + foreach (var surface in spatialMappingSource.SurfaceObjects) + { + inputMeshList.Add(CreateMeshData(surface, meshUpdateID: 0)); + } + } + } + + private void HandleSurfaceAdded(object sender, DataEventArgs e) + { + Debug.Assert(object.ReferenceEquals(sender, SpatialMappingManager.Instance.Source)); + Debug.Assert(FindMeshIndexInInputMeshList(e.Data.ID) < 0); + + inputMeshList.Add(CreateMeshData(e.Data, meshUpdateID: 0)); + } + + private void HandleSurfaceUpdated(object sender, DataEventArgs e) + { + Debug.Assert(object.ReferenceEquals(sender, SpatialMappingManager.Instance.Source)); + Debug.Assert(e.Data.Old.ID == e.Data.New.ID); + + int iMesh = FindMeshIndexInInputMeshList(e.Data.New.ID); + Debug.Assert(iMesh >= 0); + + inputMeshList[iMesh] = CreateMeshData(e.Data.New, (inputMeshList[iMesh].LastUpdateID + 1)); + } + + private void HandleSurfaceRemoved(object sender, DataEventArgs e) + { + Debug.Assert(object.ReferenceEquals(sender, SpatialMappingManager.Instance.Source)); + + var iMesh = FindMeshIndexInInputMeshList(e.Data.ID); + Debug.Assert(iMesh >= 0); + + inputMeshList.RemoveAt(iMesh); + } + + private void HandleRemovingAllSurfaces(object sender, EventArgs e) + { + Debug.Assert(object.ReferenceEquals(sender, SpatialMappingManager.Instance.Source)); + + inputMeshList.Clear(); + } + + private int FindMeshIndexInInputMeshList(int meshID) + { + for (int i = 0; i < inputMeshList.Count; ++i) + { + if (inputMeshList[i].MeshID == meshID) + { + return i; + } + } + return -1; + } + + private static SpatialUnderstandingDll.MeshData CreateMeshData(SpatialMappingSource.SurfaceObject surface, int meshUpdateID) + { + MeshFilter meshFilter = surface.Filter; + SpatialUnderstandingDll.MeshData meshData = new SpatialUnderstandingDll.MeshData(); + + if ((meshFilter != null) && + (meshFilter.mesh != null) && + (meshFilter.mesh.triangles.Length > 0)) + { + // Fix surface mesh normals so we can get correct plane orientation. + meshFilter.mesh.RecalculateNormals(); + + // Convert + meshData.CopyFrom(meshFilter, surface.ID, meshUpdateID); + } + else + { + // No filter yet, add as an empty mesh (will be updated later in the update loop) + meshData.CopyFrom(null, surface.ID, meshUpdateID); + } + + return meshData; + } + + /// + /// Update the internal mesh list and provides an array pointer in + /// the form the dll will accept. + /// + /// Number of meshes contains in the return mesh list + /// Marshalled mesh list pointer. Valid only with the caller's function context + /// + public bool GetInputMeshList(out int meshCount, out IntPtr meshList) + { + if (inputMeshList.Count == 0) + { + meshCount = 0; + meshList = IntPtr.Zero; + return false; + } + + // Convert to IntPtr + SpatialUnderstandingDll dll = SpatialUnderstanding.Instance.UnderstandingDLL; + meshCount = inputMeshList.Count; + meshList = dll.PinMeshDataForMarshalling(inputMeshList); + + return true; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs.meta b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs.meta new file mode 100644 index 0000000..6bbe913 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/SpatialUnderstanding/Scripts/SpatialUnderstandingSourceMesh.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b4776f41597d1274488d795eb0881c94 +timeCreated: 1466713964 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI.meta b/HoloBot/Assets/HoloToolkit/UI.meta new file mode 100644 index 0000000..ce8fe4f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ed8def72dfb85348967b383883eab72 +folderAsset: yes +timeCreated: 1480375776 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts.meta new file mode 100644 index 0000000..7639c9f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: efac01a000b1e1e4ebb1d664bb73bab1 +folderAsset: yes +timeCreated: 1485994212 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt b/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt new file mode 100644 index 0000000..ac8fdb9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt @@ -0,0 +1,91 @@ +Copyright 2015, Microsoft Corporation (www.microsoft.com), with Reserved Font Name Selawik. All Rights Reserved. Selawik is a trademark of Microsoft Corporation in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt.meta new file mode 100644 index 0000000..1169c92 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/LICENSE.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 262cbdd7913bbc84fb307a7e7d990464 +timeCreated: 1485994273 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md b/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md new file mode 100644 index 0000000..be0dfe2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md @@ -0,0 +1,8 @@ +# Microsoft Selawik +Selawik is an open source replacement for Segoe UI. + +# Known open issues: +* Selawik is missing kerning to match Segoe UI. +* Selawik needs improved hinting. + +[Microsoft's Open Source Fonts](https://github.com/Microsoft/fonts) diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md.meta new file mode 100644 index 0000000..0be27c3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41253f298e1435a4d800b5e5b349fcd2 +timeCreated: 1485994213 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf new file mode 100644 index 0000000..736bac3 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf differ diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf.meta new file mode 100644 index 0000000..bc1d4f8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawk.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 86574c70442309b45be5a1c37a37a40b +timeCreated: 1485994274 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: 2a056e2bb89e0134daaf49e5f183e5dc, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf new file mode 100644 index 0000000..2134a76 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf differ diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf.meta new file mode 100644 index 0000000..ef87991 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkb.ttf.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 2a056e2bb89e0134daaf49e5f183e5dc +timeCreated: 1485994274 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf new file mode 100644 index 0000000..cbfaaf9 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf differ diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf.meta new file mode 100644 index 0000000..647024e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawkl.ttf.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: b8a8324793a77d14fad6ef1dc06c55ed +timeCreated: 1485994274 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + - {fileID: 12800000, guid: 98d9db324dda3a44e93fbf3b7ce9eca9, type: 3} + - {fileID: 12800000, guid: 2a056e2bb89e0134daaf49e5f183e5dc, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf new file mode 100644 index 0000000..5ec501d Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf differ diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf.meta new file mode 100644 index 0000000..3395487 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksb.ttf.meta @@ -0,0 +1,25 @@ +fileFormatVersion: 2 +guid: e3d8348b7d66bae4aa4b1f3ada3ef5fd +timeCreated: 1485994274 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + - {fileID: 12800000, guid: 98d9db324dda3a44e93fbf3b7ce9eca9, type: 3} + - {fileID: 12800000, guid: b8a8324793a77d14fad6ef1dc06c55ed, type: 3} + - {fileID: 12800000, guid: 2a056e2bb89e0134daaf49e5f183e5dc, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf new file mode 100644 index 0000000..bc3fa08 Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf differ diff --git a/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf.meta b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf.meta new file mode 100644 index 0000000..1a498c9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Fonts/selawksl.ttf.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 98d9db324dda3a44e93fbf3b7ce9eca9 +timeCreated: 1485994274 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + - {fileID: 12800000, guid: 2a056e2bb89e0134daaf49e5f183e5dc, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Materials.meta b/HoloBot/Assets/HoloToolkit/UI/Materials.meta new file mode 100644 index 0000000..bdb76a1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a6c8ebce1b5778243a2cf54e0783964f +folderAsset: yes +timeCreated: 1480372955 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat b/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat new file mode 100644 index 0000000..4c272ce --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: 3DTextSelawik + m_Shader: {fileID: 4800000, guid: cfe12bbf45a06fb4b8fce6adb726485f, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _ColorMask + second: 15 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SrcBlend + second: 1 + - first: + name: _Stencil + second: 0 + - first: + name: _StencilComp + second: 8 + - first: + name: _StencilOp + second: 0 + - first: + name: _StencilReadMask + second: 255 + - first: + name: _StencilWriteMask + second: 255 + - first: + name: _UVSec + second: 0 + - first: + name: _UseUIAlphaClip + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat.meta b/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat.meta new file mode 100644 index 0000000..f7455d1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Materials/3DTextSelawik.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1017ef825d041c749bab30bf03aca0d3 +timeCreated: 1485994269 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Prefabs.meta b/HoloBot/Assets/HoloToolkit/UI/Prefabs.meta new file mode 100644 index 0000000..9cd28b3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3a8c0e8906321224aa2f41c82ecab9ac +folderAsset: yes +timeCreated: 1480372953 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab b/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab new file mode 100644 index 0000000..0a49820 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab @@ -0,0 +1,95 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000013198843976} + m_IsPrefabParent: 1 +--- !u!1 &1000013198843976 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010330146594} + - component: {fileID: 23000013318538408} + - component: {fileID: 102000010767390410} + m_Layer: 0 + m_Name: 3DTextPrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010330146594 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013198843976} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000013318538408 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013198843976} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: 1017ef825d041c749bab30bf03aca0d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!102 &102000010767390410 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013198843976} + m_Text: 3D Text Prefab + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 48 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 diff --git a/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab.meta b/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab.meta new file mode 100644 index 0000000..ec7c496 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Prefabs/3DTextPrefab.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfdc7f60d7205c84f82a4806a5352d60 +timeCreated: 1480372998 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab b/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab new file mode 100644 index 0000000..a43ecfd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab @@ -0,0 +1,180 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011327985922} + m_IsPrefabParent: 1 +--- !u!1 &1000011327985922 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011042862180} + - component: {fileID: 223000013180475572} + - component: {fileID: 114000011891169664} + - component: {fileID: 114000011733207730} + m_Layer: 5 + m_Name: UITextPrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014098139846 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014204859762} + - component: {fileID: 222000010219370930} + - component: {fileID: 114000010164638790} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000010164638790 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014098139846} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: 1017ef825d041c749bab30bf03aca0d3, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 86574c70442309b45be5a1c37a37a40b, type: 3} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 150 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: UI Text Prefab +--- !u!114 &114000011733207730 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011327985922} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114000011891169664 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011327985922} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!222 &222000010219370930 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014098139846} +--- !u!223 &223000013180475572 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011327985922} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224000011042862180 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011327985922} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.0005, y: 0.0005, z: 0.0005} + m_Children: + - {fileID: 224000014204859762} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000014204859762 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014098139846} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000011042862180} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 500, y: 200} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab.meta b/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab.meta new file mode 100644 index 0000000..0918957 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Prefabs/UITextPrefab.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 022450106439a8946ae18a9e20cc92d8 +timeCreated: 1480372996 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/README.md b/HoloBot/Assets/HoloToolkit/UI/README.md new file mode 100644 index 0000000..163658d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/README.md @@ -0,0 +1,79 @@ +## [UI]() + +Useful common UI controls that you can leverage in your application. + + + +### [Materials](Materials) + +Materials used in prefabs + +#### 3DTextSegoeUI.mat + +Material for 3DTextPrefab with occlusion support. Requires 3DTextShader.shader + +![Default Font material vs 3DTextSegoeUI material](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions06.png) + +### [Prefabs](Prefabs) + +Common useful UI prefabs + +#### 3DTextPrefab.prefab + +3D Text Mesh prefab with optimized scaling factor at 2-meter distance. (Please read the instructions below) + +#### UITextPrefab.prefab + +UI Text Mesh prefab with optimized scaling factor at 2-meter distance. (Please read the instructions below) + +**IMPORTANT: Text Prefab uses open source font 'Selawik'. To use Text Prefab with different font, please import font file and follow the instruction below. Below example shows how to use 'Segoe UI' font with Text Prefab.** + +![Importing Segoe UI font file](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions01.png) + +1. Assign font texture to 3DTextSegoeUI.mat material. +![Assigning font texture](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions02.png) + +2. On 3DTextSegoeUI.mat material, select the shader Custom/3DTextShader.shader. +![Assigning shader](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions03.png) + +3. Assign Segoe UI font and 3DTextSegoeUI material to the text components in the prefabs. +![Assigning font file and material](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions04.png) + +4. Follow the same steps for the sample text layout prefabs in [HoloToolkit-Examples\Text](../..//HoloToolkit-Examples/Text) +![Sample layout prefabs](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions05.png) + +**Working with Fonts in Unity** + +When adding a new 3D TextMesh to a scene in Unity there are two issues that are visually apparent. One, the font appears very large and two, the font appears very blurry. It is also interesting to notice that the default Font Size value is set to zero in the Inspector. Replacing this zero value with 13 will show no difference in size, because 13 is actually the default value. + +Unity assumes all new elements added to a scene is 1 Unity Unit in size, or 100% Transform scale, which translates to about 1 meter on the HoloLens. In the case of fonts, the bounding box for a 3D TextMesh comes in, by default at about 1 meter in height. + +**Font Scale and Font Sizes** + +Most visual designers use Points to define font sizes in the real world, as well as their design programs. There are about 2835 (2,834.645666399962) points in 1 meter. Based on the point system conversion to 1 meter and Unity's default TextMesh Font Size of 13, the simple math of 13 divided by 2835 equals 0.0046 (0.004586111116 to be exact) provides a good standard scale to start with, though some may wish to round to 0.005. + +Either way, scaling the Text object or container to these values will not only allow for the 1:1 conversion of font sizes from a design program, but also provides a standard to maintain consistency throughout the application or game. + +**UI Text** + +When adding a UI or canvas based Text element to a scene, the size disparity is greater still. The differences in the two sizes is about 1000%, which would bring the scale factor for UI based Text components to 0.00046 (0.0004586111116 to be exact) or 0.0005 for the rounded value. + +**Disclaimer**: The default value of any font may be effected by the texture size of that font or how the font was imported into Unity. These tests were performed based on the default Arial font in Unity, as well as one other imported font. + +![Font size with scaling factors](https://github.com/cre8ivepark/HoloToolkit-Unity/blob/master/External/ReadMeImages/TextPrefabInstructions07.png) + +### [Scripts](Scripts) + + + +### [Shaders](Shaders) + +Materials used in prefabs + +#### 3DTextShader.shader + +Shader for 3DTextPrefab with occlusion support. + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/UI/README.md.meta b/HoloBot/Assets/HoloToolkit/UI/README.md.meta new file mode 100644 index 0000000..0061a36 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98f68f59a0a9b4a4a999e3cb0f9214ee +timeCreated: 1480372955 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Shaders.meta b/HoloBot/Assets/HoloToolkit/UI/Shaders.meta new file mode 100644 index 0000000..aadb4d8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d836831ae3fcf3a4ea272a0458a5ccb6 +folderAsset: yes +timeCreated: 1480372956 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader b/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader new file mode 100644 index 0000000..ea534dd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader @@ -0,0 +1,94 @@ +Shader "HoloToolkit/3DTextShader" +{ + Properties + { + _MainTex ("Alpha (A)", 2D) = "white" {} + + [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1) + [HideInInspector] _StencilComp ("Stencil Comparison", Float) = 8 + [HideInInspector] _Stencil ("Stencil ID", Float) = 0 + [HideInInspector] _StencilOp ("Stencil Operation", Float) = 0 + [HideInInspector] _StencilWriteMask ("Stencil Write Mask", Float) = 255 + [HideInInspector] _StencilReadMask ("Stencil Read Mask", Float) = 255 + [HideInInspector] _ColorMask ("Color Mask", Float) = 15 + } + + SubShader + { + LOD 200 + + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + "PreviewType"="Plane" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Offset -1, -1 + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + half4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : POSITION; + half4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + fixed4 _Color; + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); + o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + o.color = v.color; + #ifdef UNITY_HALF_TEXEL_OFFSET + o.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); + #endif + return o; + } + + half4 frag (v2f i) : COLOR + { + half4 col = i.color; + col.a *= tex2D(_MainTex, i.texcoord).a; + col = col * _Color; + clip (col.a - 0.01); + return col; + } + ENDCG + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader.meta b/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader.meta new file mode 100644 index 0000000..f97828c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/UI/Shaders/3DTextShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cfe12bbf45a06fb4b8fce6adb726485f +timeCreated: 1480372996 +licenseType: Free +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities.meta b/HoloBot/Assets/HoloToolkit/Utilities.meta new file mode 100644 index 0000000..60ad3ea --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4cab0e6832c2fbd4eb7947505ccaa3e8 +folderAsset: yes +timeCreated: 1494566565 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Materials.meta b/HoloBot/Assets/HoloToolkit/Utilities/Materials.meta new file mode 100644 index 0000000..bcd5d27 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9180a2fc480b69b4887ffef09fae1c05 +folderAsset: yes +timeCreated: 1477084880 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat b/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat new file mode 100644 index 0000000..20dcb3a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ArrowOnTop + m_Shader: {fileID: 4800000, guid: e1fd48673918ae242b03ad1ae08a38bd, type: 3} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: b7e7ac1cdf109fd4a921ab2ba712a48b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _ColorMask + second: 15 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _Stencil + second: 0 + - first: + name: _StencilComp + second: 8 + - first: + name: _StencilOp + second: 0 + - first: + name: _StencilReadMask + second: 255 + - first: + name: _StencilWriteMask + second: 255 + - first: + name: _Strength + second: 0.2 + - first: + name: _UVSec + second: 0 + - first: + name: _UseUIAlphaClip + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat.meta b/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat.meta new file mode 100644 index 0000000..913e71b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Materials/ArrowOnTop.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5238ed24c9726a1459b60cb16df01a9d +timeCreated: 1477950490 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat b/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat new file mode 100644 index 0000000..45b1df0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat @@ -0,0 +1,163 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: HoloToolkit_Default + m_Shader: {fileID: 4800000, guid: 0118fa4f1c88b4640b193eca2c181644, type: 3} + m_ShaderKeywords: _EMISSION _USECOLOR_ON + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _ColorWriteMask + second: 15 + - first: + name: _Cull + second: 2 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _Gloss + second: 0.68 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _Specular + second: 0.128 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _UseBumpMap + second: 0 + - first: + name: _UseColor + second: 1 + - first: + name: _UseEmissionTex + second: 0 + - first: + name: _UseMainTex + second: 0 + - first: + name: _ZTest + second: 4 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 0.8897059, g: 0.8897059, b: 0.8897059, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _SpecColor + second: {r: 0.5, g: 0.5, b: 0.5, a: 1} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat.meta b/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat.meta new file mode 100644 index 0000000..9b286e7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Materials/HoloToolkit_Default.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 474f0e0481d4aa14e92a5ada98042f3a +timeCreated: 1476739237 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs.meta new file mode 100644 index 0000000..6a8469a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b3b5e22dabcc1014aa626c08ed6573b2 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab new file mode 100644 index 0000000..b9fc717 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab @@ -0,0 +1,232 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011443254168} + m_IsPrefabParent: 1 +--- !u!1 &1000010077501532 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012084356042} + - component: {fileID: 23000012140561766} + - component: {fileID: 102000012390400920} + - component: {fileID: 114000014126132184} + m_Layer: 0 + m_Name: FPSText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011443254168 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012520274942} + - component: {fileID: 23000011797597042} + - component: {fileID: 65000012561365858} + - component: {fileID: 114000013985069792} + - component: {fileID: 114814769360254126} + - component: {fileID: 114000014245746336} + m_Layer: 0 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000012084356042 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010077501532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 4000012520274942} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012520274942 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012084356042} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23000011797597042 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!23 &23000012140561766 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010077501532} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!65 &65000012561365858 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.05, y: 0.03, z: 0.03} + m_Center: {x: 0, y: 0, z: 0} +--- !u!102 &102000012390400920 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010077501532} + m_Text: FPS + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 48 + m_FontStyle: 1 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!114 &114000013985069792 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb69de839bd015f4099b5bd2c45e53e5, type: 3} + m_Name: + m_EditorClassIdentifier: + PositionPerSecond: 30 + RotationDegreesPerSecond: 720 + RotationSpeedScaler: 0 + ScalePerSecond: 5 + SmoothLerpToTarget: 0 + SmoothPositionLerpRatio: 0.5 + SmoothRotationLerpRatio: 0.5 + SmoothScaleLerpRatio: 0.5 +--- !u!114 &114000014126132184 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010077501532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 782849a517cd6b445bf06b38c442ccf3, type: 3} + m_Name: + m_EditorClassIdentifier: + textMesh: {fileID: 102000012390400920} + frameRange: 60 +--- !u!114 &114000014245746336 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac8d5b128a1d8204fb76c86f47b75912, type: 3} + m_Name: + m_EditorClassIdentifier: + PivotAxis: 1 +--- !u!114 &114814769360254126 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011443254168} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 456eda422e1dc4c4cb4fd6c25cbc2fbd, type: 3} + m_Name: + m_EditorClassIdentifier: + SphereRadius: 0.05 + MoveSpeed: 10 + DebugDisplaySphere: 1 + DebugDisplayTargetPosition: 1 diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab.meta b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab.meta new file mode 100644 index 0000000..928b537 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/FPSDisplay.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c828c5b9571ec9c4bb75aef2ba6bc8c5 +timeCreated: 1463578226 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab new file mode 100644 index 0000000..9197f54 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012707223274} + m_IsPrefabParent: 1 +--- !u!1 &1000012707223274 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000013931524940} + - 114: {fileID: 114000010146961468} + m_Layer: 0 + m_Name: HeadsUpDirectionIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000013931524940 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012707223274} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!114 &114000010146961468 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012707223274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aaf540edf943b014c9b1cb13622dd844, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetObject: {fileID: 0} + Depth: 15 + Pivot: {x: 0, y: 0.5, z: 0} + PointerPrefab: {fileID: 1000013959014570, guid: 6145c0073e089ec44ade2d6ee028ae9b, + type: 2} + IndicatorMarginPercent: 0.1 + DebugDrawPointerOrientationPlanes: 0 diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab.meta b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab.meta new file mode 100644 index 0000000..7c8d22b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicator.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6afb51c1fb1eca4c803312a06ae36b7 +timeCreated: 1477328620 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab new file mode 100644 index 0000000..feaec12 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000013959014570} + m_IsPrefabParent: 1 +--- !u!1 &1000013959014570 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 4000014200002438} + - 33: {fileID: 33000013990238068} + - 64: {fileID: 64000012096101712} + - 23: {fileID: 23000012460074050} + m_Layer: 0 + m_Name: HeadsUpDirectionIndicatorPointer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000014200002438 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013959014570} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &23000012460074050 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013959014570} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 5238ed24c9726a1459b60cb16df01a9d, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_SelectedWireframeHidden: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &33000013990238068 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013959014570} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!64 &64000012096101712 +MeshCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013959014570} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab.meta b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab.meta new file mode 100644 index 0000000..62fbbd9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Prefabs/HeadsUpDirectionIndicatorPointer.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6145c0073e089ec44ade2d6ee028ae9b +timeCreated: 1477328503 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/README.md b/HoloBot/Assets/HoloToolkit/Utilities/README.md new file mode 100644 index 0000000..a87a028 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/README.md @@ -0,0 +1,265 @@ +## [Utilities]() +Useful common concepts that you can leverage in your application. + +### [Prefabs](Prefabs) +--- +Common useful prefabs not particularly related to a particular HoloLens feature. + +#### FPSDisplay.prefab +Simple Tagalong billboard displaying application's frames per second. + +#### HeadsUpDirectionIndicator.prefab +A drop in direction indicator that stays in the users view at all times. + +#### HeadsUpDirectionIndicatorPointer.prefab +A quad based pointer to be used with the HeadsUpDirectionIndicator prefab to create an out of box direction indicator. + +### [Scripts](Scripts) +--- +Utilitiy Scripts. + +#### [Editor](Scripts/Editor) +--- +Editor Specific Scripts. + +##### AutoConfigureMenu.cs +Configuration options derived from Microsoft Documentation [Configuring a Unity Project for HoloLens](https://developer.microsoft.com/en-us/windows/mixed-reality/unity_development_overview#Configuring_a_Unity_project_for_HoloLens). + +##### AutoConfigureWindow.cs +Base class for auto configuration build windows. + +##### CapabilitySettingsWindow.cs +Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Capability Settings. + +##### EditorGUIExtensions.cs +Extensions for the UnityEnditor.EditorGUI class. + +##### EditorGUILayoutExtensions.cs +Extensions for the UnityEditor.EditorGUILayout class. + +##### EnforceEditorSettings.cs +Sets Force Text Serialization and visible meta files in all projects that use the HoloToolkit. + +##### ExternalProcess.cs +Helper class for launching external processes inside of the unity editor. + +##### LayerMaskExtensions.cs +Extensions for the UnityEngine.LayerMask class. + +##### ProjectSettingsWindow.cs +Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Project Settings. + +##### SceneSettingsWindow.cs +Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Scene Settings. + +#### [Extensions](Scripts/Extensions) + +##### ActionExtensions.cs +Extensions for the action class. These methods encapsulate the null check before raising an event for an Action. + +##### ComponentExtensions.cs +Extensions methods for the Unity Component class. This also includes some component-related extensions for the GameObjet class. + +##### Extensions.cs +A class with general purpose extensions methods. + +##### TransformExtensions.cs +An extension method that will get you the full path to an object. + +##### VectorExtensions.cs +A collection of useful extension methods for Unity's Vector structs. + +#### [InterpolatedValues](Scripts/InterpolatedValues) +--- +Interpolated Value Scripts. + +##### InterpolatedColor.cs +Provides interpolation over Color. + +##### InterpolatedFloat.cs +Provides interpolation over float. + +##### InterpolatedQuaternion.cs +Provides interpolation over Quaternion. + +##### InterpolatedValue.cs +Base class that provides the common logic for interpolating between values. This class does not inherit from MonoBehaviour in order to enable various scenarios under which it used. To perform the interpolation step, call FrameUpdate. + +##### InterpolatedVector2.cs +Provides interpolation over Vector2. + +##### InterpolatedVector3.cs +Provides interpolation over Vector3. + +##### QuaternionInterpolated.cs +Class to encapsulate an interpolating Quaternion property. +TODO: Remove if redundant to InterpolatedQuaternion.cs + +##### Vector3Interpolated.cs +Class to encapsulate an interpolating Vector3 property. +TODO: Remove if reduncatnt to InterpolatedVector3.cs + +--- + +#### Billboard.cs +Rotates a hologram so it is always facing towards the camera. + +#### BitManipulator.cs +Helper class for bit manipulation. + +#### CircularBuffer.cs +Helper class for transmitting data over network. + +#### DirectionIndicator.cs +Show a GameObject around the cursor that points in the direction of the GameObject which this script is attached to. + +You must provide GameObjects for the **_Cursor_** and **_DirectionIndicatorObject_** public fields. + +**_Cursor_** The object in your scene that is being used as the cursor. The direction indicator will be rendered around this cursor. + +**_DirectionIndicatorObject_** The object that will point in the direction toward the object which this script is attached to. This object can be a 2D or 3D object. + +**DirectionIndicatorColor** The color you want the DirectionIndicatorObject to be. The material on the DirectionIndicatorObject will need to support the color or TintColor property for this field to work. Otherwise the DirectionIndicatorObject will continue to render as its exported color. + +**TitleSafeFactor** The percentage the GameObject can be within the view frustum for the DirectionIndicatorObject to start appearing. A value of 0 will display the DirectionIndicatorObject when the GameObject leaves the view. 0.1 will display when the GameObject is 10% away from the edge of the view. -0.1 will display when the GameObject is 10% out of view. + +#### FixedAngularSize.cs +Causes a hologram to maintain a fixed angular size, which is to say it occupies the same pixels in the view regardless of its distance from the camera. + +#### FpsDisplay.cs +Simple Behaviour which calculates the average frames per second over a number of frames and shows the FPS in a referenced Text control. + +#### HeadsUpDirectionIndicator.cs +Spawns a user specified "pointer" object and startup and alligns it to aim at a target object which keeping the pointer in view at all times. + +#### InterpolationUtilities.cs +Static class containing interpolation-related utility functions. + +#### Interpolator.cs +A MonoBehaviour that interpolates a transform's position, rotation or scale. + +#### MathUtils.cs +Math Utilities class. + +#### NearPlaneFade.cs +Updates the shader parameters for use in near plade fading. + +#### PriorityQueue.cs +Min-heap priority queue. In other words, lower priorities will be removed from the queue first. +See [Binary Heap](http://en.wikipedia.org/wiki/Binary_heap) for more info. + +#### SessionExtensions.cs +Extensions methods for the Session class. + +#### SimpleTagalong.cs +A Tagalong that stays at a fixed distance from the camera and always seeks to have a part of itself in the view frustum of the camera. + +#### Singleton.cs +A base class to make a MonoBehaviour follow the singleton design pattern. + +#### SphereBasedTagalong.cs +A simple Tagalong that stays inside a sphere at a fixed distance from the camera. Very cheap implementation with smoothing capability. + +#### StabilizationPlaneModifier.cs +StabilizationPlaneModifier handles the setting of the stabilization plane in several ways. + +#### Tagalong.cs +A Tagalong that extends SimpleTagalong that allows for specifying the minimum and target percentage of the object to keep in the view frustum of the camera and that keeps the Tagalong object in front of other holograms including the Spatial Mapping Mesh. + +#### TextToSpeechManager.cs +Provides dynamic Text to Speech. Speech is generated using the UWP SpeechSynthesizer and then played through a Unity AudioSource. Both plain text and SSML are supported. + +#### Timer.cs +Structure that defines a timer. A timer can be scheduled through the TimerScheduler. + +#### TimerScheduler.cs +A scheduler that manages various timers. + +#### Utils.cs +Miscellaneous utility methods. + +#### VectorRollingStatistics.cs +Vector Statistics used in gaze stabilization. + +#### WorldAnchorManager.cs +Wrapper around world anchor store to streamline some of the persistence api busy work. + +### [Shaders](Shaders) +--- + +#### FastConfigurable.shader +Very fast shader that uses the Unity light system. Compiles down to only performing the operations you're actually using. Uses material property drawers rather than a custom editor for ease of maintenance. + +#### HoloToolkitCommon.cginc +Common shader functionality + +#### LambertianConfigurable.cginc +Code shared between LambertianConfigurable.shader and LambertianConfigurableTransparent.shader. + +#### LambertianConfigurable.shader +Feature configurable per-pixel lambertian shader. Use when higher quality lighting is desired, but specular highlights are not needed. + +#### LambertianConfigurableTransparent.shader +Feature configurable per-pixel lambertian transparent shader. Use when higher quality lighting and transparency are desired, but specular highlights are not needed. + +#### macro.cginc +Preprocessor macros to support shaders + +#### StandardFast.shader +Higher performance drop-in replacement for the Unity Standard Shader. Use when very high quality lighting (including reflections) is needed. + +#### UnlitConfigurable.cginc +Code shared between UnlitConfigurable.shader and UnlitConfigurableTransparent.shader. + +#### UnlitConfigurable.shader +Feature configurable unlit shader. Use when no lighting is desired. + +#### UnlitConfigurableTransparent.shader +Feature configurable unlit transparent shader. Use when transparency and no lighting are desired. + +#### UnlitNoDepthTest.shader +Render with a single texture but ignore depth test resuls so object always appears on top. + +#### VertexLitConfigurable.cginc +Code shared between VertexLitConfigurable.shader and VertexLitConfigurableTransparent.shader. + +#### VertexLitConfigurable.shader +Feature configurable vertex lit shader. Use when a higher performance but lower precision lighting trade-off is acceptable. + +#### VertexLitConfigurableTransparent.shader +Feature configurable vertex lit transparent shader. Use when a higher performance but lower precision lighting trade-off is acceptable, and transparency is needed. + +#### WindowOcclusion.shader +A simple occlusion shader that can be used to hide other objects. This prevents other objects from being rendered by drawing invisible 'opaque' pixels to the depth buffer. This shader differs from Occlusion.shader in that it doesn't have any depth offset, so it should sort as expected with other objects adjacent to the window. + +### [Tests](Tests) +--- +Tests related to the utilities features. To use the scene: + +1. Navigate to the Tests folder. +2. Double click on the test scene you wish to explore. +3. Either click "Play" in the unity editor or File -> Build Settings. +4. Add Open Scenes, Platform -> Windows Store, SDK -> Universal 10, Build Type -> D3D, Check 'Unity C# Projects'. +5. Click 'Build' and create an App folder. When compile is done, open the solution and deploy to device. + +#### HeadsUpDirectionIndicator.unity +This scene shows 7 marker objects with 7 HeadsUpDirectionIndicators pointing to each. Each indicator has a label that matches its corresponding marker. 6 of the marker/indicator pairs are used to test the edge cases of axis aligned markers. The 7th is an arbitrary point off of the cartesean axes. From the starting position, the user should be able to follow the direction of each indicator and arrive at the marker with the corresponding axis label. At the start, the labels should be in the following screen locations. + +- \-X at the left +- +X at the right +- \-Y at the bottom +- +Y at the top +- \-Z also at the bottom +- +Z in front + +#### TextToSpeechManager.unity + +This scene demonstrates how to use TextToSpeechManager.cs. The script is placed on 3 cubes in the scene. Whenever a cube is activated with an air tap, a text to speech voice will emanate from the cube. The user can also ask "What time is it?" to hear the current time from a voice that stays with the user as they move. + +#### WindowOcclusion.unity + +This scene demonstrates how to use WindowOcclusion.shader. It positions a virtual 'window' directly in front of you when the scene starts. A cube in the back is only visible when viewed through the window because quads around the window use the WindowOcclusion shader. + +--- +##### [Go back up to the table of contents.](../../../README.md) +--- diff --git a/HoloBot/Assets/HoloToolkit/Utilities/README.md.meta b/HoloBot/Assets/HoloToolkit/Utilities/README.md.meta new file mode 100644 index 0000000..6ae3d93 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b6081f8a035176418480ef90a267699 +timeCreated: 1470705588 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts.meta new file mode 100644 index 0000000..c89e6ad --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2ee40a8c19496a74d900d015f16f4d8c +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs new file mode 100644 index 0000000..1e05b06 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + public enum PivotAxis + { + // Rotate about all axes. + Free, + // Rotate about an individual axis. + Y + } + + /// + /// The Billboard class implements the behaviors needed to keep a GameObject oriented towards the user. + /// + public class Billboard : MonoBehaviour + { + /// + /// The axis about which the object will rotate. + /// + [Tooltip("Specifies the axis about which the object will rotate.")] + public PivotAxis PivotAxis = PivotAxis.Free; + + private void OnEnable() + { + Update(); + } + + /// + /// Keeps the object facing the camera. + /// + private void Update() + { + if (!Camera.main) + { + return; + } + + // Get a Vector that points from the target to the main camera. + Vector3 directionToTarget = Camera.main.transform.position - transform.position; + + // Adjust for the pivot axis. + switch (PivotAxis) + { + case PivotAxis.Y: + directionToTarget.y = 0.0f; + break; + + case PivotAxis.Free: + default: + // No changes needed. + break; + } + + // If we are right next to the camera the rotation is undefined. + if (directionToTarget.sqrMagnitude < 0.001f) + { + return; + } + + // Calculate and apply the rotation required to reorient the object + transform.rotation = Quaternion.LookRotation(-directionToTarget); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs.meta new file mode 100644 index 0000000..56acb2c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Billboard.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ac8d5b128a1d8204fb76c86f47b75912 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs new file mode 100644 index 0000000..d2e81ce --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Unity +{ + /// + /// Helper class for bit manipulation. + /// + public class BitManipulator + { + Int32 mask; + Int32 shift; + + public BitManipulator(Int32 mask, Int32 shift) + { + this.mask = mask; + this.shift = shift; + } + + public Int32 GetBitsValue(Int32 input) + { + return (input & mask) >> shift; + } + + public void SetBits(ref Int32 value, Int32 bitsValue) + { + Int32 iT = bitsValue << shift; + iT = iT & mask; + value = value | iT; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs.meta new file mode 100644 index 0000000..1f188bb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/BitManipulator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7e192d56407205d448ea0611d3d9868e +timeCreated: 1468273645 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs new file mode 100644 index 0000000..74b52dc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs @@ -0,0 +1,125 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Unity +{ + /// + /// Helper class for transmitting data over network. + /// + public class CircularBuffer + { + public CircularBuffer(int size, bool allowOverwrite = false, int padding = 4) + { + data = new byte[size]; + readWritePadding = padding; + this.allowOverwrite = allowOverwrite; + } + + public int TotalCapacity + { + get + { + return data.Length - readWritePadding; + } + } + + public int UsedCapacity + { + get + { + if (writeOffset >= readOffset) + { + return writeOffset - readOffset; + } + int firstChunk = data.Length - readOffset; + int secondChunk = writeOffset; + return firstChunk + secondChunk; + } + } + + public void Reset() + { + readOffset = 0; + writeOffset = 0; + } + + public int Write(Array src, int srcReadPosBytes, int byteCount) + { + int maxWritePos; + bool wrappedAround = writeOffset < readOffset; + if (!wrappedAround) + { + maxWritePos = (readOffset != 0 || allowOverwrite) ? data.Length : data.Length - readWritePadding; + } + else + { + maxWritePos = allowOverwrite ? data.Length : readOffset - readWritePadding; + } + + int chunkSize = Math.Min(byteCount, maxWritePos - writeOffset); + int writeEnd = writeOffset + chunkSize; + bool needToMoveReadOffset = wrappedAround ? writeEnd >= readOffset : (writeEnd == data.Length && readOffset == 0); + if (needToMoveReadOffset) + { + if (!allowOverwrite) + { + throw new Exception("Circular buffer logic error. Overwriting data."); + } + readOffset = (writeEnd + readWritePadding) % data.Length; + } + + Buffer.BlockCopy(src, srcReadPosBytes, data, writeOffset, chunkSize); + writeOffset = (writeOffset + chunkSize) % data.Length; + + int bytesWritten = chunkSize; + int remaining = byteCount - bytesWritten; + if (bytesWritten > 0 && remaining > 0) + { + bytesWritten += Write(src, srcReadPosBytes + chunkSize, remaining); + } + + return bytesWritten; + } + + public int Read(Array dst, int dstWritePosBytes, int byteCount) + { + if (readOffset == writeOffset) + { + return 0; + } + + int maxReadPos; + if (readOffset > writeOffset) + { + maxReadPos = data.Length; + } + else + { + maxReadPos = writeOffset; + } + + int chunkSize = Math.Min(byteCount, maxReadPos - readOffset); + + Buffer.BlockCopy(data, readOffset, dst, dstWritePosBytes, chunkSize); + readOffset = (readOffset + chunkSize) % data.Length; + + int bytesRead = chunkSize; + int remaining = byteCount - bytesRead; + if (bytesRead > 0 && remaining > 0) + { + bytesRead += Read(dst, dstWritePosBytes + bytesRead, remaining); + } + + return bytesRead; + } + + private byte[] data; + private int writeOffset; + private int readOffset; + + private readonly int readWritePadding; + private readonly bool allowOverwrite; + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs.meta new file mode 100644 index 0000000..95847ac --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/CircularBuffer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f18ec9e5e41f1df44b967884f76e1b14 +timeCreated: 1468273665 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs new file mode 100644 index 0000000..2a80f75 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Unity +{ + public static class DataEventArgs + { + public static DataEventArgs Create(TData data) + { + return new DataEventArgs(data); + } + } + + [Serializable] + public class DataEventArgs : EventArgs + { + public TData Data { get; private set; } + + public DataEventArgs(TData data) + { + Data = data; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs.meta new file mode 100644 index 0000000..7a62c47 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DataEventArgs.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 76a3b743227627e448c61652f54a44a7 +timeCreated: 1481931015 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs new file mode 100644 index 0000000..77cd83f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs @@ -0,0 +1,166 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// DirectionIndicator creates an indicator around the cursor showing + /// what direction to turn to find this GameObject. + /// + public class DirectionIndicator : MonoBehaviour + { + [Tooltip("The Cursor object the direction indicator will be positioned around.")] + public GameObject Cursor; + + [Tooltip("Model to display the direction to the object this script is attached to.")] + public GameObject DirectionIndicatorObject; + + [Tooltip("Color to shade the direction indicator.")] + public Color DirectionIndicatorColor = Color.blue; + + [Tooltip("Allowable percentage inside the holographic frame to continue to show a directional indicator.")] + [Range(-0.3f, 0.3f)] + public float VisibilitySafeFactor = 0.1f; + + [Tooltip("Multiplier to decrease the distance from the cursor center an object is rendered to keep it in view.")] + [Range(0.1f, 1.0f)] + public float MetersFromCursor = 0.3f; + + // The default rotation of the cursor direction indicator. + private Quaternion directionIndicatorDefaultRotation = Quaternion.identity; + + // Cache the MeshRenderer for the on-cursor indicator since it will be enabled and disabled frequently. + private Renderer directionIndicatorRenderer; + + // Cache the Material to prevent material leak. + private Material indicatorMaterial; + + // Check if the cursor direction indicator is visible. + private bool isDirectionIndicatorVisible; + + public void Awake() + { + if (Cursor == null) + { + Debug.LogError("Please include a GameObject for the cursor."); + } + + if (DirectionIndicatorObject == null) + { + Debug.LogError("Please include a GameObject for the Direction Indicator."); + } + + // Instantiate the direction indicator. + DirectionIndicatorObject = InstantiateDirectionIndicator(DirectionIndicatorObject); + + if (DirectionIndicatorObject == null) + { + Debug.LogError("Direction Indicator failed to instantiate."); + } + } + + public void OnDestroy() + { + DestroyImmediate(indicatorMaterial); + Destroy(DirectionIndicatorObject); + } + + private GameObject InstantiateDirectionIndicator(GameObject directionIndicator) + { + if (directionIndicator == null) + { + return null; + } + + GameObject indicator = Instantiate(directionIndicator); + + // Set local variables for the indicator. + directionIndicatorDefaultRotation = indicator.transform.rotation; + directionIndicatorRenderer = indicator.GetComponent(); + + // Start with the indicator disabled. + directionIndicatorRenderer.enabled = false; + + // Remove any colliders and rigidbodies so the indicators do not interfere with Unity's physics system. + foreach (Collider indicatorCollider in indicator.GetComponents()) + { + Destroy(indicatorCollider); + } + + foreach (Rigidbody rigidBody in indicator.GetComponents()) + { + Destroy(rigidBody); + } + + indicatorMaterial = directionIndicatorRenderer.material; + indicatorMaterial.color = DirectionIndicatorColor; + indicatorMaterial.SetColor("_TintColor", DirectionIndicatorColor); + + return indicator; + } + + public void Update() + { + if (DirectionIndicatorObject == null) + { + return; + } + + // Direction from the Main Camera to this script's parent gameObject. + Vector3 camToObjectDirection = gameObject.transform.position - Camera.main.transform.position; + camToObjectDirection.Normalize(); + + // The cursor indicator should only be visible if the target is not visible. + isDirectionIndicatorVisible = !IsTargetVisible(); + directionIndicatorRenderer.enabled = isDirectionIndicatorVisible; + + if (isDirectionIndicatorVisible) + { + Vector3 position; + Quaternion rotation; + GetDirectionIndicatorPositionAndRotation( + camToObjectDirection, + out position, + out rotation); + + DirectionIndicatorObject.transform.position = position; + DirectionIndicatorObject.transform.rotation = rotation; + } + } + + private bool IsTargetVisible() + { + // This will return true if the target's mesh is within the Main Camera's view frustums. + Vector3 targetViewportPosition = Camera.main.WorldToViewportPoint(gameObject.transform.position); + return (targetViewportPosition.x > VisibilitySafeFactor && targetViewportPosition.x < 1 - VisibilitySafeFactor && + targetViewportPosition.y > VisibilitySafeFactor && targetViewportPosition.y < 1 - VisibilitySafeFactor && + targetViewportPosition.z > 0); + } + + private void GetDirectionIndicatorPositionAndRotation(Vector3 camToObjectDirection, out Vector3 position, out Quaternion rotation) + { + // Find position: + // Save the cursor transform position in a variable. + Vector3 origin = Cursor.transform.position; + + // Project the camera to target direction onto the screen plane. + Vector3 cursorIndicatorDirection = Vector3.ProjectOnPlane(camToObjectDirection, -1 * Camera.main.transform.forward); + cursorIndicatorDirection.Normalize(); + + // If the direction is 0, set the direction to the right. + // This will only happen if the camera is facing directly away from the target. + if (cursorIndicatorDirection == Vector3.zero) + { + cursorIndicatorDirection = Camera.main.transform.right; + } + + // The final position is translated from the center of the screen along this direction vector. + position = origin + cursorIndicatorDirection * MetersFromCursor; + + // Find the rotation from the facing direction to the target object. + rotation = Quaternion.LookRotation(Camera.main.transform.forward, cursorIndicatorDirection) * directionIndicatorDefaultRotation; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs.meta new file mode 100644 index 0000000..c69c1e1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/DirectionIndicator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 52a72bdb251e5ce488e5c51f0a9c657b +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor.meta new file mode 100644 index 0000000..9df9e8e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 12c91ca558f50a14aac6b7157c71d2f4 +folderAsset: yes +timeCreated: 1460418045 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs new file mode 100644 index 0000000..a0517c2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Configuration options derived from here: + /// https://developer.microsoft.com/en-us/windows/holographic/unity_development_overview#Configuring_a_Unity_project_for_HoloLens + /// + public class AutoConfigureMenu : MonoBehaviour + { + /// + /// Displays a help page for the HoloToolkit. + /// + [MenuItem("HoloToolkit/Configure/Show Help", false, 3)] + public static void ShowHelp() + { + Application.OpenURL("https://github.com/Microsoft/HoloToolkit-Unity/wiki"); + } + + /// + /// Applies recommended scene settings to the current scenes + /// + [MenuItem("HoloToolkit/Configure/Apply HoloLens Scene Settings", false, 1)] + public static void ApplySceneSettings() + { + SceneSettingsWindow window = (SceneSettingsWindow)EditorWindow.GetWindow(typeof(SceneSettingsWindow), true, "Apply HoloLens Scene Settings"); + window.Show(); + } + + /// + /// Applies recommended project settings to the current project + /// + [MenuItem("HoloToolkit/Configure/Apply HoloLens Project Settings", false, 1)] + public static void ApplyProjectSettings() + { + ProjectSettingsWindow window = (ProjectSettingsWindow)EditorWindow.GetWindow(typeof(ProjectSettingsWindow), true, "Apply HoloLens Project Settings"); + window.Show(); + } + + /// + /// Applies recommended capability settings to the current project + /// + [MenuItem("HoloToolkit/Configure/Apply HoloLens Capability Settings", false, 2)] + static void ApplyHoloLensCapabilitySettings() + { + CapabilitySettingsWindow window = (CapabilitySettingsWindow)EditorWindow.GetWindow(typeof(CapabilitySettingsWindow), true, "Apply HoloLens Capability Settings"); + window.Show(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs.meta new file mode 100644 index 0000000..40f279e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 840d6133aa65d5b42b49811b95190968 +timeCreated: 1464211890 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs new file mode 100644 index 0000000..138858a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs @@ -0,0 +1,166 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Base class for auto configuration build windows. + /// + public abstract class AutoConfigureWindow : EditorWindow + { + #region Member Variables + private Dictionary values = new Dictionary(); + private Dictionary names = new Dictionary(); + private Dictionary descriptions = new Dictionary(); + + private string statusMessage = string.Empty; + private Vector2 scrollPosition = Vector2.zero; + private GUIStyle wrapStyle; + #endregion // Member Variables + + #region Internal Methods + private void SettingToggle(TSetting setting) + { + // Draw and update setting flag + values[setting] = GUILayout.Toggle(values[setting], new GUIContent(names[setting])); + + // If this control is the one under the mouse, update the status message + if ((Event.current.type == EventType.Repaint) && (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition))) + { + StatusMessage = descriptions[setting]; + Repaint(); + } + } + #endregion // Internal Methods + + #region Overridables / Event Triggers + /// + /// Called when settings should be applied. + /// + protected abstract void ApplySettings(); + + /// + /// Called when settings should be loaded. + /// + protected abstract void LoadSettings(); + + /// + /// Called when string names and descriptions should be loaded. + /// + protected abstract void LoadStrings(); + #endregion // Overridables / Event Triggers + + #region Overrides / Event Handlers + /// + /// Called when the window is created. + /// + protected virtual void Awake() + { + wrapStyle = new GUIStyle() { wordWrap = true }; + } + protected virtual void OnEnable() + { + LoadStrings(); + LoadSettings(); + } + + /// + /// Renders the GUI + /// + protected virtual void OnGUI() + { + // Begin Settings Section + GUILayout.BeginVertical(EditorStyles.helpBox); + + // Individual Settings + var keys = values.Keys.ToArray(); + for (int iKey = 0; iKey < keys.Length; iKey++) + { + SettingToggle(keys[iKey]); + } + + // End Settings Section + GUILayout.EndVertical(); + + // Status box area + GUILayout.BeginVertical(EditorStyles.helpBox); + scrollPosition = GUILayout.BeginScrollView(scrollPosition); + GUILayout.Label(statusMessage, wrapStyle); + GUILayout.EndScrollView(); + GUILayout.EndVertical(); + + // Apply button + GUILayout.BeginVertical(EditorStyles.miniButtonRight); + bool applyClicked = GUILayout.Button("Apply"); + GUILayout.EndVertical(); + + // Clicked? + if (applyClicked) + { + ApplySettings(); + Close(); + } + } + #endregion // Overrides / Event Handlers + + #region Public Properties + /// + /// Gets the descriptions of the settings. + /// + public Dictionary Descriptions + { + get + { + return descriptions; + } + + set + { + descriptions = value; + } + } + + /// + /// Gets the names of the settings. + /// + public Dictionary Names + { + get + { + return names; + } + + set + { + names = value; + } + } + + /// + /// Gets the values of the settings. + /// + public Dictionary Values + { + get + { + return values; + } + + set + { + values = value; + } + } + + /// + /// Gets or sets the status message displayed at the bottom of the window. + /// + public string StatusMessage { get { return statusMessage; } set { statusMessage = value; } } + #endregion // Public Properties + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs.meta new file mode 100644 index 0000000..d2d3ae4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/AutoConfigureWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 057493d169444074387c9a5ca1c99e92 +timeCreated: 1481588858 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs new file mode 100644 index 0000000..fe91288 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs @@ -0,0 +1,69 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Capability Settings. + /// + public class CapabilitySettingsWindow : AutoConfigureWindow + { + #region Internal Methods + private void ApplySetting(PlayerSettings.WSACapability setting) + { + PlayerSettings.WSA.SetCapability(setting, Values[setting]); + } + + private void LoadSetting(PlayerSettings.WSACapability setting) + { + Values[setting] = PlayerSettings.WSA.GetCapability(setting); + } + #endregion // Internal Methods + + #region Overrides / Event Handlers + protected override void ApplySettings() + { + ApplySetting(PlayerSettings.WSACapability.Microphone); + ApplySetting(PlayerSettings.WSACapability.SpatialPerception); + ApplySetting(PlayerSettings.WSACapability.WebCam); + ApplySetting(PlayerSettings.WSACapability.InternetClient); + } + + protected override void LoadSettings() + { + LoadSetting(PlayerSettings.WSACapability.Microphone); + LoadSetting(PlayerSettings.WSACapability.SpatialPerception); + LoadSetting(PlayerSettings.WSACapability.WebCam); + LoadSetting(PlayerSettings.WSACapability.InternetClient); + } + + protected override void LoadStrings() + { + Names[PlayerSettings.WSACapability.Microphone] = "Microphone"; + Descriptions[PlayerSettings.WSACapability.Microphone] = "Required for access to the HoloLens microphone. This includes behaviors like DictationRecognizer, GrammarRecognizer, and KeywordRecognizer. This capability is NOT required for the 'Select' keyword.\n\nRecommendation: Only enable if your application needs access to the microphone beyond the 'Select' keyword.The microphone is considered a privacy sensitive resource."; + + Names[PlayerSettings.WSACapability.SpatialPerception] = "Spatial Perception"; + Descriptions[PlayerSettings.WSACapability.SpatialPerception] = "Required for access to the HoloLens world mapping capabilities.These include behaviors like SurfaceObserver, SpatialMappingManager and SpatialAnchor.\n\nRecommendation: Enabled, unless your application doesn't use spatial mapping or spatial collisions in any way."; + + Names[PlayerSettings.WSACapability.WebCam] = "Webcam"; + Descriptions[PlayerSettings.WSACapability.WebCam] = "Required for access to the HoloLens RGB camera (also known as the locatable camera). This includes APIs like PhotoCapture and VideoCapture. This capability is NOT required for mixed reality streaming or for capturing photos or videos using the start menu.\n\nRecommendation: Only enable if your application needs to programmatically capture photos or videos from the RGB camera.The RGB camera is considered a privacy sensitive resource."; + + Names[PlayerSettings.WSACapability.InternetClient] = "Internet Client"; + Descriptions[PlayerSettings.WSACapability.InternetClient] = "Required if your application needs to access the Internet.\n\nRecommendation: Leave unchecked unless your application uses online services."; + } + + protected override void OnEnable() + { + // Pass to base first + base.OnEnable(); + + // Set size + minSize = new Vector2(350, 255); + maxSize = minSize; + } + #endregion // Overrides / Event Handlers + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs.meta new file mode 100644 index 0000000..6e45100 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/CapabilitySettingsWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8d989070713c80b47a4b77c5a59cf7df +timeCreated: 1481588890 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs new file mode 100644 index 0000000..4a152b2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs @@ -0,0 +1,177 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Globalization; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Extensions for the UnityEnditor.EditorGUI class. + /// + public class EditorGUIExtensions : MonoBehaviour + { + public static float Indent + { + get + { + return EditorGUI.IndentedRect(new Rect()).x; + } + } + + /// + /// Space to place between adjacent horizontal elements. + /// Matches value used in Unity source for EditorGUILayout.Space(). + /// + public const float HorizontalSpacing = 6.0f; + + public static bool Button(Rect position, string text) + { + return Button(position, new GUIContent(text)); + } + + public static bool Button(Rect position, GUIContent content) + { + float indent = Indent; + position.x += indent; + position.width -= indent; + return GUI.Button(position, content); + } + + public static void Label(Rect position, string text) + { + float indent = Indent; + position.x += indent; + position.width -= indent; + GUI.Label(position, text); + } + + // Based on logic in Unity source function EditorGUI.GetSinglePropertyHeight(). + // Doesn't handle serialized types with nested serialized children. + public static float GetTypeHeight(bool hasLabel, Type valueType) + { + if (valueType == typeof(Vector3) || valueType == typeof(Vector2)) + { + return (!hasLabel || EditorGUIUtility.wideMode ? 0f : EditorGUIUtility.singleLineHeight) + EditorGUIUtility.singleLineHeight; + } + + if (valueType == typeof(Rect)) + { + return (!hasLabel || EditorGUIUtility.wideMode ? 0f : EditorGUIUtility.singleLineHeight) + EditorGUIUtility.singleLineHeight * 2; + } + + if (valueType == typeof(Bounds)) + { + return (!hasLabel ? 0f : EditorGUIUtility.singleLineHeight) + EditorGUIUtility.singleLineHeight * 2; + } + + return EditorGUIUtility.singleLineHeight; + } + + /// + /// Shows an object field editor for object types that do no derive from UnityEngine.Object. + /// + /// Type of the object to modify. + /// The region to show the UI. + /// Label to show. + /// Current value to show. + /// Whether scene objects should be allowed in the set of field choices. + /// The new value. + public static T ObjectField(Rect position, GUIContent label, T value, bool allowSceneObjects) + { + object objValue = value; + + Type valueType = objValue.GetType(); + if (valueType == typeof(Bounds)) + { + objValue = EditorGUI.BoundsField(position, label, (Bounds)objValue); + } + else if (valueType == typeof(Color)) + { + objValue = EditorGUI.ColorField(position, label, (Color)objValue); + } + else if (valueType == typeof(Material)) + { + objValue = EditorGUI.ObjectField(position, (Material)objValue, typeof(Material), allowSceneObjects); + } + else if (valueType == typeof(AnimationCurve)) + { + objValue = EditorGUI.CurveField(position, label, (AnimationCurve)objValue); + } + else if (valueType == typeof(float)) + { + objValue = EditorGUI.FloatField(position, label, (float)objValue); + } + else if (valueType == typeof(int)) + { + objValue = EditorGUI.IntField(position, label, (int)objValue); + } + else if (valueType == typeof(LayerMask)) + { + objValue = EditorGUI.MaskField(position, label, (LayerMask)objValue, LayerMaskExtensions.LayerMaskNames); + } + else if (valueType.IsEnum) + { + if (valueType.GetCustomAttributes(typeof(FlagsAttribute), true).Length > 0) + { + objValue = EditorGUI.EnumMaskField(position, label, (Enum)objValue); + } + else + { + objValue = EditorGUI.EnumPopup(position, label, (Enum)objValue); + } + } + else if (valueType == typeof(Rect)) + { + objValue = EditorGUI.RectField(position, label, (Rect)objValue); + } + else if (valueType == typeof(string)) + { + objValue = EditorGUI.TextField(position, label, (string)objValue); + } + else if (valueType == typeof(Vector2)) + { + objValue = EditorGUI.Vector2Field(position, new GUIContent(), (Vector2)objValue); + } + else if (valueType == typeof(Vector3)) + { + objValue = EditorGUI.Vector3Field(position, new GUIContent(), (Vector3)objValue); + } + else if (valueType == typeof(Vector4)) + { + if (label.image != null) + { + throw new ArgumentException("Images not supported for labels of Vector4 fields.", "label"); + } + + if (!string.IsNullOrEmpty(label.tooltip)) + { + throw new ArgumentException("Tool-tips not supported for labels of Vector4 fields.", "label"); + } + + objValue = EditorGUI.Vector4Field(position, label.text, (Vector4)objValue); + } + else if (Equals(objValue, typeof(SceneAsset))) + { + objValue = EditorGUI.ObjectField(position, (SceneAsset)objValue, typeof(SceneAsset), allowSceneObjects); + } + else if (objValue is UnityEngine.Object) + { + objValue = EditorGUI.ObjectField(position, label, (UnityEngine.Object)objValue, valueType, allowSceneObjects); + } + else + { + throw new ArgumentException( + string.Format( + CultureInfo.InvariantCulture, + "Unimplemented value type: {0}.", + valueType), + "value"); + } + + return (T)objValue; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs.meta new file mode 100644 index 0000000..ebe3cfd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUIExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe13866e1b5b27045b8b21fef6a31a4e +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs new file mode 100644 index 0000000..33dafd5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Globalization; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Extensions for the UnityEditor.EditorGUILayout class. + /// + public static class EditorGUILayoutExtensions + { + public static bool Button(string text, params GUILayoutOption[] options) + { + return Button(text, GUI.skin.button, options); + } + + public static bool Button(string text, GUIStyle style, params GUILayoutOption[] options) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIExtensions.Indent); + bool pressed = GUILayout.Button(text, style, options); + EditorGUILayout.EndHorizontal(); + return pressed; + } + + public static void Label(string text, params GUILayoutOption[] options) + { + Label(text, EditorStyles.label, options); + } + + public static void Label(string text, GUIStyle style, params GUILayoutOption[] options) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIExtensions.Indent); + GUILayout.Label(text, style, options); + EditorGUILayout.EndHorizontal(); + } + + public static T ObjectField(GUIContent guiContent, T value, bool allowSceneObjects = false, GUILayoutOption[] guiLayoutOptions = null) + { + object objValue = value; + + if (objValue == null) + { + // We want to return null so we can display our blank field. + return (T)objValue; + } + + Type valueType = objValue.GetType(); + if (valueType == typeof(Material)) + { + objValue = EditorGUILayout.ObjectField(guiContent, (Material)objValue, typeof(Material), allowSceneObjects, guiLayoutOptions); + } + else if (valueType == typeof(SceneAsset)) + { + objValue = EditorGUILayout.ObjectField(guiContent, (SceneAsset)objValue, typeof(SceneAsset), allowSceneObjects, guiLayoutOptions); + } + else if (objValue is UnityEngine.Object) + { + objValue = EditorGUILayout.ObjectField(guiContent, (UnityEngine.Object)objValue, valueType, allowSceneObjects, guiLayoutOptions); + } + else + { + throw new ArgumentException( + string.Format( + CultureInfo.InvariantCulture, + "Unimplemented value type: {0}.", + valueType), + "value"); + } + + return (T)objValue; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs.meta new file mode 100644 index 0000000..e191c9a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EditorGUILayoutExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe4ff7495408b6c4388e16a9e176303d +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs new file mode 100644 index 0000000..a86cbf3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; + +namespace HoloToolKit.Unity +{ + /// + /// Sets Force Text Serialization and visible meta files in all projects that use the HoloToolkit. + /// + [InitializeOnLoad] + public class EnforceEditorSettings + { + static EnforceEditorSettings() + { + #region Editor Settings + + if (EditorSettings.serializationMode != SerializationMode.ForceText) + { + EditorSettings.serializationMode = SerializationMode.ForceText; + UnityEngine.Debug.Log("Setting Force Text Serialization"); + } + + if (!EditorSettings.externalVersionControl.Equals("Visible Meta Files")) + { + EditorSettings.externalVersionControl = "Visible Meta Files"; + UnityEngine.Debug.Log("Updated external version control mode: " + EditorSettings.externalVersionControl); + } + + #endregion + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs.meta new file mode 100644 index 0000000..d755261 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/EnforceEditorSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3d5c88d150a2b95459b4ac57c7e33d00 +timeCreated: 1480429807 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs new file mode 100644 index 0000000..9764509 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs @@ -0,0 +1,294 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_EDITOR +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Helper class for launching external processes inside of the unity editor. + /// + public class ExternalProcess : IDisposable + { + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr ExternalProcessAPI_CreateProcess([MarshalAs(UnmanagedType.LPStr)] string cmdline); + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + private static extern bool ExternalProcessAPI_IsRunning(IntPtr handle); + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + private static extern void ExternalProcessAPI_SendLine(IntPtr handle, [MarshalAs(UnmanagedType.LPStr)] string line); + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr ExternalProcessAPI_GetLine(IntPtr handle); + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + private static extern void ExternalProcessAPI_DestroyProcess(IntPtr handle); + [DllImport("ExternalProcessAPI", CallingConvention = CallingConvention.Cdecl)] + public static extern void ExternalProcessAPI_ConfirmOrBeginProcess([MarshalAs(UnmanagedType.LPStr)] string processName); + + private IntPtr mHandle; + + /* + * First some static utility functions, used by some other code as well. + * They are related to "external processes" so they appear here. + */ + private static string sAppDataPath; + + public static void Launch(string appName) + { + // Full or relative paths only. Currently unused. + + if (!appName.StartsWith(@"\")) + { + appName += @"\"; + } + + string appPath = AppDataPath + appName; + string appDir = Path.GetDirectoryName(appPath); + + Process pr = new Process(); + pr.StartInfo.FileName = appPath; + pr.StartInfo.WorkingDirectory = appDir; + pr.Start(); + } + + private static string AppDataPath + { + get + { + if (string.IsNullOrEmpty(sAppDataPath)) + { + sAppDataPath = Application.dataPath.Replace("/", @"\"); + } + + return sAppDataPath; + } + } + + public static bool FindAndLaunch(string appName) + { + return FindAndLaunch(appName, null); + } + + public static bool FindAndLaunch(string appName, string args) + { + // Start at working directory, append appName (should read "appRelativePath"), see if it exists. + // If not go up to parent and try again till drive level reached. + + string appPath = FindPathToExecutable(appName); + if (appPath == null) + { + return false; + } + + string appDir = Path.GetDirectoryName(appPath); + + Process pr = new Process(); + pr.StartInfo.FileName = appPath; + pr.StartInfo.WorkingDirectory = appDir; + pr.StartInfo.Arguments = args; + + return pr.Start(); + } + + public static string FindPathToExecutable(string appName) + { + // Start at working directory, append appName (should read "appRelativePath"), see if it exists. + // If not go up to parent and try again till drive level reached. + + if (!appName.StartsWith(@"\")) + { + appName = @"\" + appName; + } + + string searchDir = AppDataPath; + + while (searchDir.Length > 3) + { + string appPath = searchDir + appName; + + if (File.Exists(appPath)) + { + return appPath; + } + + searchDir = Path.GetDirectoryName(searchDir); + } + + return null; + } + + public static string MakeRelativePath(string path1, string path2) + { + // TBD- doesn't really belong in ExternalProcess. + + path1 = path1.Replace('\\', '/'); + path2 = path2.Replace('\\', '/'); + path1 = path1.Replace("\"", ""); + path2 = path2.Replace("\"", ""); + + Uri uri1 = new Uri(path1); + Uri uri2 = new Uri(path2); + Uri relativePath = uri1.MakeRelativeUri(uri2); + return relativePath.OriginalString; + } + + /* + * The actual ExternalProcess class. + */ + public static ExternalProcess CreateExternalProcess(string appName) + { + return CreateExternalProcess(appName, null); + } + + public static ExternalProcess CreateExternalProcess(string appName, string args) + { + // Seems like it would be safer and more informative to call this static method and test for null after. + try + { + return new ExternalProcess(appName, args); + } + catch (Exception ex) + { + UnityEngine.Debug.LogError("Unable to start process " + appName + ", " + ex.Message + "."); + } + return null; + } + + private ExternalProcess(string appName, string args) + { + appName = appName.Replace("/", @"\"); + string appPath = appName; + if (!File.Exists(appPath)) + { + appPath = FindPathToExecutable(appName); + } + + if (appPath == null) + { + throw new ArgumentException("Unable to find app " + appPath); + } + + // This may throw, calling code should catch the exception. + string launchString = args == null ? appPath : appPath + " " + args; + mHandle = ExternalProcessAPI_CreateProcess(launchString); + } + + ~ExternalProcess() + { + Dispose(false); + } + + public bool IsRunning() + { + try + { + if (mHandle != IntPtr.Zero) + { + return ExternalProcessAPI_IsRunning(mHandle); + } + } + catch + { + Terminate(); + } + + return false; + } + + public bool WaitForStart(float seconds) + { + return WaitFor(seconds, () => { return ExternalProcessAPI_IsRunning(mHandle); }); + } + + public bool WaitForShutdown(float seconds) + { + return WaitFor(seconds, () => { return !ExternalProcessAPI_IsRunning(mHandle); }); + } + + public bool WaitFor(float seconds, Func func) + { + if (seconds <= 0.0f) + seconds = 5.0f; + float end = Time.realtimeSinceStartup + seconds; + + bool hasHappened = false; + while (Time.realtimeSinceStartup < end) + { + hasHappened = func(); + if (hasHappened) + { + break; + } + Thread.Sleep(Math.Min(500, (int)(seconds * 1000))); + } + return hasHappened; + } + + public void SendLine(string line) + { + try + { + if (mHandle != IntPtr.Zero) + { + ExternalProcessAPI_SendLine(mHandle, line); + } + } + catch + { + Terminate(); + } + } + + public string GetLine() + { + try + { + if (mHandle != IntPtr.Zero) + { + return Marshal.PtrToStringAnsi(ExternalProcessAPI_GetLine(mHandle)); + } + } + catch + { + Terminate(); + } + + return null; + } + + public void Terminate() + { + try + { + if (mHandle != IntPtr.Zero) + { + ExternalProcessAPI_DestroyProcess(mHandle); + } + } + catch + { + // TODO: Should we be catching something here? + } + + mHandle = IntPtr.Zero; + } + + // IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + Terminate(); + } + } +} +#endif \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs.meta new file mode 100644 index 0000000..2926871 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ExternalProcess.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 59152950bc6d9574d9bc9bdc407f76f4 +timeCreated: 1456611863 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs new file mode 100644 index 0000000..365c962 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Text; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Extensions for the UnityEngine.LayerMask class. + /// + public static class LayerMaskExtensions + { + public const int LayerCount = 32; + + private static string[] layerMaskNames = null; + public static string[] LayerMaskNames + { + get + { + if (layerMaskNames == null) + { + LayerMaskExtensions.layerMaskNames = new string[LayerCount]; + for (int layer = 0; layer < LayerCount; ++layer) + { + LayerMaskExtensions.layerMaskNames[layer] = LayerMask.LayerToName(layer); + } + } + + return LayerMaskExtensions.layerMaskNames; + } + } + + public static string GetDisplayString(this LayerMask layerMask) + { + StringBuilder stringBuilder = null; + for (int layer = 0; layer < LayerMaskExtensions.LayerCount; ++layer) + { + if ((layerMask & (1 << layer)) != 0) + { + if (stringBuilder == null) + { + stringBuilder = new StringBuilder(); + } + else + { + stringBuilder.Append(" | "); + } + + stringBuilder.Append(LayerMaskExtensions.LayerMaskNames[layer]); + } + } + + return stringBuilder == null ? "None" : stringBuilder.ToString(); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs.meta new file mode 100644 index 0000000..1307f3b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/LayerMaskExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fd5488ec8e9e41e468ef69d31dcb1c8a +timeCreated: 1458941823 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs new file mode 100644 index 0000000..52d7968 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs @@ -0,0 +1,272 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using UnityEditor; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Project Settings. + /// + public class ProjectSettingsWindow : AutoConfigureWindow + { + + #region Nested Types + public enum ProjectSetting + { + BuildWsaUwp, + WsaUwpBuildToD3D, + WsaFastestQuality, + WsaEnableVR + } + #endregion // Nested Types + + #region Internal Methods + /// + /// Enables virtual reality for WSA and ensures HoloLens is in the supported SDKs. + /// + private void EnableVirtualReality() + { + try + { + // Grab the text from the project settings asset file + string settingsPath = "ProjectSettings/ProjectSettings.asset"; + string settings = File.ReadAllText(settingsPath); + + // We're looking for the list of VR devices for the current build target, then + // ensuring that the HoloLens is in that list + bool foundBuildTargetVRSettings = false; + bool foundBuildTargetMetro = false; + bool foundBuildTargetEnabled = false; + bool foundDevices = false; + bool foundHoloLens = false; + + StringBuilder builder = new StringBuilder(); // Used to build the final output + string[] lines = settings.Split(new char[] { '\n' }); + for (int i = 0; i < lines.Length; ++i) + { + string line = lines[i]; + + // Look for the build target VR settings + if (!foundBuildTargetVRSettings) + { + if (line.Contains("m_BuildTargetVRSettings:")) + { + // If no targets are enabled at all, just create the known entries and skip the rest of the tests + if (line.Contains("[]")) + { + // Remove the empty array symbols + line = line.Replace(" []", "\n"); + + // Generate the new lines + line += " - m_BuildTarget: Metro\n"; + line += " m_Enabled: 1\n"; + line += " m_Devices:\n"; + line += " - HoloLens"; + + // Mark all fields as found so we don't search anymore + foundBuildTargetVRSettings = true; + foundBuildTargetMetro = true; + foundBuildTargetEnabled = true; + foundDevices = true; + foundHoloLens = true; + } + else + { + // The target VR settngs were found but the others + // still need to be searched for. + foundBuildTargetVRSettings = true; + } + } + } + + // Look for the build target for Metro + else if (!foundBuildTargetMetro) + { + if (line.Contains("m_BuildTarget: Metro")) + { + foundBuildTargetMetro = true; + } + } + + else if (!foundBuildTargetEnabled) + { + if (line.Contains("m_Enabled")) + { + line = " m_Enabled: 1"; + foundBuildTargetEnabled = true; + } + } + + // Look for the enabled Devices list + else if (!foundDevices) + { + if (line.Contains("m_Devices:")) + { + // Clear the empty array symbols if any + line = line.Replace(" []", ""); + foundDevices = true; + } + } + + // Once we've found the list look for HoloLens or the next non element + else if (!foundHoloLens) + { + // If this isn't an element in the device list + if (!line.Contains("-")) + { + // add the hololens element, and mark it found + builder.Append(" - HoloLens\n"); + foundHoloLens = true; + } + + // Otherwise test if this is the hololens device + else if (line.Contains("HoloLens")) + { + foundHoloLens = true; + } + } + + builder.Append(line); + + // Write out a \n for all but the last line + // NOTE: Specifically preserving unix line endings by avoiding StringBuilder.AppendLine + if (i != lines.Length - 1) + { + builder.Append('\n'); + } + } + + // Capture the final string + settings = builder.ToString(); + + File.WriteAllText(settingsPath, settings); + } + catch (Exception e) + { + Debug.LogException(e); + } + } + + /// + /// Modifies the WSA default quality setting to the fastest + /// + private void SetFastestDefaultQuality() + { + try + { + // Find the WSA element under the platform quality list and replace it's value with 0 + string settingsPath = "ProjectSettings/QualitySettings.asset"; + string matchPattern = @"(m_PerPlatformDefaultQuality.*Windows Store Apps:) (\d+)"; + string replacePattern = @"$1 0"; + + string settings = File.ReadAllText(settingsPath); + settings = Regex.Replace(settings, matchPattern, replacePattern, RegexOptions.Singleline); + + File.WriteAllText(settingsPath, settings); + } + catch (Exception e) + { + Debug.LogException(e); + } + } + #endregion // Internal Methods + + #region Overrides / Event Handlers + protected override void ApplySettings() + { + // See the blow notes for why text asset serialization is required + if (EditorSettings.serializationMode != SerializationMode.ForceText) + { + // NOTE: PlayerSettings.virtualRealitySupported would be ideal, except that it only reports/affects whatever platform tab + // is currently selected in the Player settings window. As we don't have code control over what view is selected there + // this property is fairly useless from script. + + // NOTE: There is no current way to change the default quality setting from script + + string dialogTitle = "Updates require text serialization of assets"; + string message = "Unity doesn't provide apis for updating the default quality or enabling VR support.\n\n" + + "Is it ok if we force text serialization of assets so that we can modify the properties directly?"; + + bool forceText = EditorUtility.DisplayDialog(dialogTitle, message, "Yes", "No"); + if (!forceText) + { + return; + } + + EditorSettings.serializationMode = SerializationMode.ForceText; + } + + // Apply individual settings + if (Values[ProjectSetting.BuildWsaUwp]) + { + EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.WSAPlayer); + EditorUserBuildSettings.wsaSDK = WSASDK.UWP; + } + if (Values[ProjectSetting.WsaUwpBuildToD3D]) + { + EditorUserBuildSettings.wsaUWPBuildType = WSAUWPBuildType.D3D; + } + if (Values[ProjectSetting.WsaFastestQuality]) + { + SetFastestDefaultQuality(); + } + if (Values[ProjectSetting.WsaEnableVR]) + { + EnableVirtualReality(); + } + + // Since we went behind Unity's back to tweak some settings we + // need to reload the project to have them take effect + bool canReload = EditorUtility.DisplayDialog( + "Project reload required!", + "Some changes require a project reload to take effect.\n\nReload now?", + "Yes", "No"); + + if (canReload) + { + string projectPath = Path.GetFullPath(Path.Combine(Application.dataPath, "..")); + EditorApplication.OpenProject(projectPath); + } + } + + protected override void LoadSettings() + { + for (int i = (int)ProjectSetting.BuildWsaUwp; i <= (int)ProjectSetting.WsaEnableVR; i++) + { + Values[(ProjectSetting)i] = true; + } + } + + protected override void LoadStrings() + { + Names[ProjectSetting.BuildWsaUwp] = "Target Windows Store and UWP"; + Descriptions[ProjectSetting.BuildWsaUwp] = "Required\n\nSwitches the currently active target to produce a Store app targeting the Universal Windows Platform.\n\nSince HoloLens only supports Windows Store apps, this option should remain checked unless you plan to manually switch the target later before you build."; + + Names[ProjectSetting.WsaUwpBuildToD3D] = "Build for Direct3D"; + Descriptions[ProjectSetting.WsaUwpBuildToD3D] = "Recommended\n\nProduces an app that targets Direct3D instead of Xaml.\n\nPure Direct3D apps run faster than applications that include Xaml. This option should remain checked unless you plan to overlay Unity content with Xaml content or you plan to switch between Unity views and Xaml views at runtime."; + + Names[ProjectSetting.WsaFastestQuality] = "Set Quality to Fastest"; + Descriptions[ProjectSetting.WsaFastestQuality] = "Recommended\n\nChanges the quality settings for Windows Store apps to the 'Fastest' setting.\n\n'Fastest' is the recommended quality setting for HoloLens apps, but this option can be unchecked if you have already optimized your project for the HoloLens."; + + Names[ProjectSetting.WsaEnableVR] = "Enable VR"; + Descriptions[ProjectSetting.WsaEnableVR] = "Required\n\nEnables VR for Windows Store apps and adds the HoloLens as a target VR device.\n\nThe application will not compile for HoloLens and tools like Holographic Remoting will not function without this enabled. Therefore this option should remain checked unless you plan to manually perform these steps later."; + } + + protected override void OnEnable() + { + // Pass to base first + base.OnEnable(); + + // Set size + minSize = new Vector2(350, 260); + maxSize = minSize; + } + #endregion // Overrides / Event Handlers + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs.meta new file mode 100644 index 0000000..3f7934d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/ProjectSettingsWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 736f119c38b2776458906b63cb4de7c8 +timeCreated: 1481595542 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs new file mode 100644 index 0000000..2658256 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Renders the UI and handles update logic for HoloToolkit/Configure/Apply HoloLens Scene Settings. + /// + public class SceneSettingsWindow : AutoConfigureWindow + { + #region Nested Types + public enum SceneSetting + { + CameraToOrigin, + CameraClearBlack, + NearClipPlane, + FieldOfView, + } + #endregion // Nested Types + + #region Overrides / Event Handlers + protected override void ApplySettings() + { + // Ensure we have a camera + if (Camera.main == null) + { + Debug.LogWarning(@"Could not apply settings - no camera tagged with ""MainCamera"""); + return; + } + + // Apply individual settings + if (Values[SceneSetting.CameraToOrigin]) + { + Camera.main.transform.position = Vector3.zero; + } + if (Values[SceneSetting.CameraClearBlack]) + { + Camera.main.clearFlags = CameraClearFlags.SolidColor; + Camera.main.backgroundColor = Color.clear; + } + if (Values[SceneSetting.NearClipPlane]) + { + Camera.main.nearClipPlane = 0.85f; + } + if (Values[SceneSetting.FieldOfView]) + { + Camera.main.fieldOfView = 16.0f; + } + } + + protected override void LoadSettings() + { + for (int i = (int)SceneSetting.CameraToOrigin; i <= (int)SceneSetting.FieldOfView; i++) + { + Values[(SceneSetting)i] = true; + } + } + + protected override void LoadStrings() + { + Names[SceneSetting.CameraToOrigin] = "Move Camera to Origin"; + Descriptions[SceneSetting.CameraToOrigin] = "Moves the main camera to the origin of the scene (0,0,0).\n\nWhen a HoloLens application starts, the users head is the center of the world. Not having the main camera at 0,0,0 will result in holograms not appearing where they are expeted. This option should remain checked unless you have code that explicitly deals with any offset."; + + Names[SceneSetting.CameraClearBlack] = "Camera Clears to Black"; + Descriptions[SceneSetting.CameraClearBlack] = "Causes the camera to render to a black background instead of the default skybox.\n\nIn HoloLens the color black is transparent. Rendering to a black background allows the user to see the real world wherever there are no holograms. This option should remain checked unless you are building a VR-like experience or are implementing advanced rendering techniques."; + + Names[SceneSetting.NearClipPlane] = "Update Near Clipping Plane"; + Descriptions[SceneSetting.NearClipPlane] = "Updates the near clipping plane of the main camera to the recommended setting.\n\nThe recommended near clipping plane is designed to reduce eye fatigue. This option should remain checked unless you have a specific need to allow closer inspection of holograms and understand the impact of closely focused objects. (e.g. vergence accommodation conflict)"; + + Names[SceneSetting.FieldOfView] = "Update Field of View"; + Descriptions[SceneSetting.FieldOfView] = "Updates the main camera Field of View.\n\nAllows the Unity Editor to more closely reflect what will be seen on the device at runtime. This option should remain checked unless you design-time requirements for a specific FOV."; + } + + protected override void OnEnable() + { + // Pass to base first + base.OnEnable(); + + // Set size + minSize = new Vector2(350, 240); + maxSize = minSize; + } + #endregion // Overrides / Event Handlers + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs.meta new file mode 100644 index 0000000..ab0c649 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Editor/SceneSettingsWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 78277dad4965488439115fd540c7178d +timeCreated: 1481605993 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions.meta new file mode 100644 index 0000000..f927fec --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2025d691196b79c439c9dc12d7544d6a +folderAsset: yes +timeCreated: 1462814919 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs new file mode 100644 index 0000000..7d4dd8d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace HoloToolkit.Unity +{ + /// + /// Extensions for the action class. + /// These methods encapsulate the null check before raising an event for an Action. + /// + public static class ActionExtensions + { + public static void RaiseEvent(this Action action) + { + if (action != null) + { + action(); + } + } + + public static void RaiseEvent(this Action action, T arg) + { + if (action != null) + { + action(arg); + } + } + + public static void RaiseEvent(this Action action, T1 arg1, T2 arg2) + { + if (action != null) + { + action(arg1, arg2); + } + } + + public static void RaiseEvent(this Action action, T1 arg1, T2 arg2, T3 arg3) + { + if (action != null) + { + action(arg1, arg2, arg3); + } + } + + public static void RaiseEvent(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4) + { + if (action != null) + { + action(arg1, arg2, arg3, arg4); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs.meta new file mode 100644 index 0000000..87c8a57 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ActionExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8867d1f86747b5d42a16e6d01bcd94fd +timeCreated: 1443557284 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs new file mode 100644 index 0000000..e37d4c5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs @@ -0,0 +1,138 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Extensions methods for the Unity Component class. + /// This also includes some component-related extensions for the GameObjet class. + /// + public static class ComponentExtensions + { + /// + /// Ensure that a component of type exists on the game object. + /// If it doesn't exist, creates it. + /// + /// Type of the component. + /// Game object on which component should be. + /// The component that was retrieved or created. + public static T EnsureComponent(this GameObject gameObject) where T : Component + { + T foundComponent = gameObject.GetComponent(); + if (foundComponent == null) + { + return gameObject.AddComponent(); + } + + return foundComponent; + } + + /// + /// Ensure that a component of type exists on the game object. + /// If it doesn't exist, creates it. + /// + /// Type of the component. + /// A component on the game object for which a component of type should exist. + /// The component that was retrieved or created. + public static T EnsureComponent(this Component component) where T : Component + { + return EnsureComponent(component.gameObject); + } + + /// + /// Apply the specified delegate to all objects in the hierarchy under a specified game object. + /// + /// Root game object of the hierarchy. + /// Delegate to apply. + public static void ApplyToHierarchy(this GameObject root, Action action) + { + action(root); + foreach (var item in root.GetComponentsInChildren()) + { + action(item.gameObject); + } + } + + /// + /// Find the first component of type in the ancestors of the specified game object. + /// + /// Type of component to find. + /// Game object for which ancestors must be considered. + /// Indicates whether the specified game object should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this GameObject gameObject, bool includeSelf = true) where T : Component + { + return gameObject.transform.FindAncestorComponent(includeSelf); + } + + /// + /// Find the first component of type in the ancestors of the game object of the specified component. + /// + /// Type of component to find. + /// Component for which its game object's ancestors must be considered. + /// Indicates whether the specified game object should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this Component component, bool includeSelf = true) where T : Component + { + return component.transform.FindAncestorComponent(includeSelf); + } + + /// + /// Find the first component of type in the ancestors of the specified transform. + /// + /// Type of component to find. + /// Transform for which ancestors must be considered. + /// Indicates whether the specified transform should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this Transform startTransform, bool includeSelf = true) where T : Component + { + foreach (Transform transform in startTransform.EnumerateAncestors(includeSelf)) + { + T component = transform.GetComponent(); + if (component != null) + { + return component; + } + } + + return null; + } + + /// + /// Enumerates the ancestors of the specified transform. + /// + /// Transform for which ancestors must be returned. + /// Indicates whether the specified transform should be included. + /// An enumeration of all ancestor transforms of the specified start transform. + public static IEnumerable EnumerateAncestors(this Transform startTransform, bool includeSelf) + { + if (!includeSelf) + { + startTransform = startTransform.parent; + } + + for (Transform transform = startTransform; transform != null; transform = transform.parent) + { + yield return transform; + } + } + + /// + /// Perform an action on every component of type T that is on this GameObject + /// + /// Component Type + /// this gameObject + /// Action to perform. + public static void ForEachComponent(this GameObject g, Action action) + { + foreach (T i in g.GetComponents()) + { + action(i); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs.meta new file mode 100644 index 0000000..46c496b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/ComponentExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 26bc989fcb4ecec448e14a7e563ef243 +timeCreated: 1463157258 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs new file mode 100644 index 0000000..5f38844 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A class with general purpose extensions methods. + /// + public static class Extensions + { + /// + /// Returns the absolute duration of the curve from first to last key frame + /// + /// The animation curve to check duration of. + /// Returns 0 if the curve is null or has less than 1 frame, otherwise returns time difference between first and last frame. + public static float Duration(this AnimationCurve curve) + { + if (curve == null || curve.length <= 1) + { + return 0.0f; + } + + return Mathf.Abs(curve[curve.length - 1].time - curve[0].time); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs.meta new file mode 100644 index 0000000..c3587e3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/Extensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 907120ad70f1b9e468d249db24f0b1e5 +timeCreated: 1473730751 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs new file mode 100644 index 0000000..b800294 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Text; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + public static class TransformExtensions + { + /// + /// An extension method that will get you the full path to an object. + /// + /// The transform you wish a full path to. + /// The delimiter with which each object is delimited in the string. + /// Prefix with which the full path to the object should start. + /// A delimited string that is the full path to the game object in the hierarchy. + public static string GetFullPath(this Transform transform, string delimiter = ".", string prefix = "/") + { + StringBuilder stringBuilder = new StringBuilder(); + GetFullPath(stringBuilder, transform, delimiter, prefix); + return stringBuilder.ToString(); + } + + private static void GetFullPath(StringBuilder stringBuilder, Transform transform, string delimiter, string prefix) + { + if (transform.parent == null) + { + stringBuilder.Append(prefix); + } + else + { + GetFullPath(stringBuilder, transform.parent, delimiter, prefix); + stringBuilder.Append(delimiter); + } + stringBuilder.Append(transform.name); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs.meta new file mode 100644 index 0000000..8b79ea6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/TransformExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0e8512d51bf9aa144a036c6305dd66c0 +timeCreated: 1462830962 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs new file mode 100644 index 0000000..9c05429 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A collection of useful extension methods for Unity's Vector structs. + /// + public static class VectorExtensions + { + public static Vector2 Mul(this Vector2 value, Vector2 scale) + { + return new Vector2(value.x * scale.x, value.y * scale.y); + } + + public static Vector2 Div(this Vector2 value, Vector2 scale) + { + return new Vector2(value.x / scale.x, value.y / scale.y); + } + + public static Vector3 Mul(this Vector3 value, Vector3 scale) + { + return new Vector3(value.x * scale.x, value.y * scale.y, value.z * scale.z); + } + + public static Vector3 Div(this Vector3 value, Vector3 scale) + { + return new Vector3(value.x / scale.x, value.y / scale.y, value.z / scale.z); + } + + public static Vector3 RotateAround(this Vector3 point, Vector3 pivot, Quaternion rotation) + { + return rotation * (point - pivot) + pivot; + } + + public static Vector3 RotateAround(this Vector3 point, Vector3 pivot, Vector3 eulerAngles) + { + return RotateAround(point, pivot, Quaternion.Euler(eulerAngles)); + } + + public static Vector3 TransformPoint(this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale) + { + return rotation * Vector3.Scale(lossyScale, point) + translation; + } + + public static Vector3 InverseTransformPoint(this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale) + { + var scaleInv = new Vector3(1 / lossyScale.x, 1 / lossyScale.y, 1 / lossyScale.z); + return Vector3.Scale(scaleInv, (Quaternion.Inverse(rotation) * (point - translation))); + } + + public static Vector2 Average(this IEnumerable vectors) + { + float x = 0f; + float y = 0f; + int count = 0; + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + count++; + } + return new Vector2(x / count, y / count); + } + + public static Vector3 Average(this IEnumerable vectors) + { + float x = 0f; + float y = 0f; + float z = 0f; + int count = 0; + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + z += pos.z; + count++; + } + return new Vector3(x / count, y / count, z / count); + } + + public static Vector2 Average(this ICollection vectors) + { + int count = vectors.Count; + if (count == 0) + { + return Vector2.zero; + } + + float x = 0f; + float y = 0f; + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + } + return new Vector2(x / count, y / count); + } + + public static Vector3 Average(this ICollection vectors) + { + int count = vectors.Count; + if (count == 0) + { + return Vector3.zero; + } + + float x = 0f; + float y = 0f; + float z = 0f; + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + z += pos.z; + } + return new Vector3(x / count, y / count, z / count); + } + + public static Vector2 Median(this IEnumerable vectors) + { + int count = vectors.Count(); + if (count == 0) + { + return Vector2.zero; + } + + return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector3 Median(this IEnumerable vectors) + { + int count = vectors.Count(); + if (count == 0) + { + return Vector3.zero; + } + + return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector2 Median(this ICollection vectors) + { + int count = vectors.Count; + if (count == 0) + { + return Vector2.zero; + } + + return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector3 Median(this ICollection vectors) + { + int count = vectors.Count; + if (count == 0) + { + return Vector3.zero; + } + + return vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs.meta new file mode 100644 index 0000000..737b175 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Extensions/VectorExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 622d808cccb7d1e4caa5a0e3437c77b2 +timeCreated: 1458058156 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs new file mode 100644 index 0000000..f33a112 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Causes a Hologram to maintain a fixed angular size, which is to say it + /// occupies the same pixels in the view regardless of its distance from + /// the camera. + /// + public class FixedAngularSize : MonoBehaviour + { + [Tooltip("Off sets the scale ratio so that text does not scale down too much. (Set to zero for linear scaling)")] + public float SizeRatio = 0; + + // The ratio between the transform's local scale and its starting + // distance from the camera. + private float startingDistance; + private Vector3 startingScale; + + private void Start() + { + // Calculate the XYZ ratios for the transform's localScale over its + // initial distance from the camera. + startingDistance = Vector3.Distance(Camera.main.transform.position, transform.position); + startingScale = transform.localScale; + + SetSizeRatio(SizeRatio); + } + + /// + /// Manually update the OverrideSizeRatio during runtime or through UnityEvents in the editor + /// + /// 0 - 1 : Use 0 for linear scaling + public void SetSizeRatio(float ratio) + { + if (ratio == 0) + { + if (startingDistance > 0.0f) + { + // set to a linear scale ratio + SizeRatio = 1 / startingDistance; + } + else + { + // If the transform and the camera are both in the same + // position (that is, the distance between them is zero), + // disable this Behaviour so we don't get a DivideByZero + // error later on. + enabled = false; +#if UNITY_EDITOR + Debug.LogWarning("The object and the camera are in the same position at Start(). The attached FixedAngularSize Behaviour is now disabled."); +#endif // UNITY_EDITOR + } + } + else + { + SizeRatio = ratio; + } + } + + private void Update() + { + float distanceToHologram = Vector3.Distance(Camera.main.transform.position, transform.position); + // create an offset ratio based on the starting position. This value creates a new angle that pivots + // on the starting position that is more or less drastic than the normal scale ratio. + float curvedRatio = 1 - startingDistance * SizeRatio; + transform.localScale = startingScale * (distanceToHologram * SizeRatio + curvedRatio); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs.meta new file mode 100644 index 0000000..5d63462 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FixedAngularSize.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8238048e62b3fb047bc5dd12384f280a +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs new file mode 100644 index 0000000..8ea0800 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs @@ -0,0 +1,118 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.UI; + +namespace HoloToolkit.Unity +{ + /// + /// Simple Behaviour which calculates the average frames per second over a number of frames and shows the FPS in a referenced Text control. + /// + [RequireComponent(typeof(TextMesh))] + public class FpsDisplay : MonoBehaviour + { + [Tooltip("Reference to TextMesh component where the FPS should be displayed.")] + [SerializeField] + private TextMesh textMesh; + + [Tooltip("Reference to uGUI text component where the FPS should be displayed.")] + [SerializeField] + private Text uGUIText; + + [Tooltip("How many frames should we consider into our average calculation?")] + [SerializeField] + private int frameRange = 60; + + private int averageFps; + + private int[] fpsBuffer; + private int fpsBufferIndex; + + private static readonly string[] StringsFrom00To99 = + { + "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", + "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", + "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", + "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", + "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", + "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", + "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", + "90", "91", "92", "93", "94", "95", "96", "97", "98", "99" + }; + + private void Update() + { + if (fpsBuffer == null || fpsBuffer.Length != frameRange || textMesh == null) + { + InitBuffer(); + } + + UpdateFrameBuffer(); + CalculateFps(); + + UpdateTextDisplay(averageFps); + } + + private void InitBuffer() + { + if (textMesh == null) + { + textMesh = GetComponent(); + } + + if (uGUIText == null) + { + uGUIText = GetComponent(); + } + + if (frameRange <= 0) + { + frameRange = 1; + } + + fpsBuffer = new int[frameRange]; + fpsBufferIndex = 0; + } + + private void UpdateTextDisplay(int fps) + { + string displayString = StringsFrom00To99[Mathf.Clamp(fps, 0, 99)]; + + if (textMesh != null) + { + textMesh.text = displayString; + } + + if (uGUIText != null) + { + uGUIText.text = displayString; + } + } + + private void UpdateFrameBuffer() + { + fpsBuffer[fpsBufferIndex++] = (int)(1f / Time.unscaledDeltaTime); + + if (fpsBufferIndex >= frameRange) + { + fpsBufferIndex = 0; + } + } + + private void CalculateFps() + { + int sum = 0; + + for (int i = 0; i < frameRange; i++) + { + int fps = fpsBuffer[i]; + sum += fps; + } + + averageFps = sum / frameRange; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs.meta new file mode 100644 index 0000000..25dc5e2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/FpsDisplay.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 782849a517cd6b445bf06b38c442ccf3 +timeCreated: 1458058156 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs new file mode 100644 index 0000000..9b423b8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs @@ -0,0 +1,369 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using UnityEngine; + +namespace HoloToolkit.Unity +{ + // The easiest way to use this script is to drop in the HeadsUpDirectionIndicator prefab + // from the HoloToolKit. If you're having issues with the prefab or can't find it, + // you can simply create an empty GameObject and attach this script. You'll need to + // create your own pointer object which can by any 3D game object. You'll need to adjust + // the depth, margin and pivot variables to affect the right appearance. After that you + // simply need to specify the "targetObject" and then you should be set. + // + // This script assumes your point object "aims" along its local up axis and orients the + // object according to that assumption. + public class HeadsUpDirectionIndicator : MonoBehaviour + { + // Use as a named indexer for Unity's frustum planes. The order follows that layed + // out in the API documentation. DO NOT CHANGE ORDER unless a corresponding change + // has been made in the Unity API. + private enum FrustumPlanes + { + Left = 0, + Right, + Bottom, + Top, + Near, + Far + } + + [Tooltip("The object the direction indicator will point to.")] + public GameObject TargetObject; + + [Tooltip("The camera depth at which the indicator rests.")] + public float Depth; + + [Tooltip("The point around which the indicator pivots. Should be placed at the model's 'tip'.")] + public Vector3 Pivot; + + [Tooltip("The object used to 'point' at the target.")] + public GameObject PointerPrefab; + + [Tooltip("Determines what percentage of the visible field should be margin.")] + [Range(0.0f, 1.0f)] + public float IndicatorMarginPercent; + + [Tooltip("Debug draw the planes used to calculate the pointer lock location.")] + public bool DebugDrawPointerOrientationPlanes; + + private GameObject pointer; + + private static int frustumLastUpdated = -1; + + private static Plane[] frustumPlanes; + private static Vector3 cameraForward; + private static Vector3 cameraPosition; + private static Vector3 cameraRight; + private static Vector3 cameraUp; + + private Plane[] indicatorVolume; + + private void Start() + { + Depth = Mathf.Clamp(Depth, Camera.main.nearClipPlane, Camera.main.farClipPlane); + + if (PointerPrefab == null) + { + this.gameObject.SetActive(false); + return; + } + + pointer = GameObject.Instantiate(PointerPrefab); + + // We create the effect of pivoting rotations by parenting the pointer and + // offsetting its position. + pointer.transform.parent = transform; + pointer.transform.position = -Pivot; + + // Allocate the space to hold the indicator volume planes. Later portions of the algorithm take for + // granted that these objects have been initialized. + indicatorVolume = new Plane[] + { + new Plane(), + new Plane(), + new Plane(), + new Plane(), + new Plane(), + new Plane() + }; + } + + // Update the direction indicator's position and orientation every frame. + private void Update() + { + // No object to track? + if (TargetObject == null || pointer == null) + { + // bail out early. + return; + } + else + { + int currentFrameCount = UnityEngine.Time.frameCount; + if (currentFrameCount != frustumLastUpdated) + { + // Collect the updated camera information for the current frame + CacheCameraTransform(Camera.main); + + frustumLastUpdated = currentFrameCount; + } + + UpdatePointerTransform(Camera.main, indicatorVolume, TargetObject.transform.position); + } + } + + // Cache data from the camera state that are costly to retrieve. + private void CacheCameraTransform(Camera camera) + { + cameraForward = camera.transform.forward; + cameraPosition = camera.transform.position; + cameraRight = camera.transform.right; + cameraUp = camera.transform.up; + frustumPlanes = GeometryUtility.CalculateFrustumPlanes(camera); + } + + // Assuming the target object is outside the view which of the four "wall" planes should + // the pointer snap to. + private FrustumPlanes GetExitPlane(Vector3 targetPosition, Camera camera) + { + // To do this we first create two planes that diagonally bisect the frustum + // These panes create four quadrants. We then infer the exit plane based on + // which quadrant the target position is in. + + // Calculate a set of vectors that can be used to build the frustum corners in world + // space. + float aspect = camera.aspect; + float fovy = 0.5f * camera.fieldOfView; + float near = camera.nearClipPlane; + float far = camera.farClipPlane; + + float tanFovy = Mathf.Tan(Mathf.Deg2Rad * fovy); + float tanFovx = aspect * tanFovy; + + // Calculate the edges of the frustum as world space offsets from the middle of the + // frustum in world space. + Vector3 nearTop = near * tanFovy * cameraUp; + Vector3 nearRight = near * tanFovx * cameraRight; + Vector3 nearBottom = -nearTop; + Vector3 nearLeft = -nearRight; + Vector3 farTop = far * tanFovy * cameraUp; + Vector3 farRight = far * tanFovx * cameraRight; + Vector3 farLeft = -farRight; + + // Caclulate the center point of the near plane and the far plane as offsets from the + // camera in world space. + Vector3 nearBase = near * cameraForward; + Vector3 farBase = far * cameraForward; + + // Calculate the frustum corners needed to create 'd' + Vector3 nearUpperLeft = nearBase + nearTop + nearLeft; + Vector3 nearLowerRight = nearBase + nearBottom + nearRight; + Vector3 farUpperLeft = farBase + farTop + farLeft; + + Plane d = new Plane(nearUpperLeft, nearLowerRight, farUpperLeft); + + // Calculate the frustum corners needed to create 'e' + Vector3 nearUpperRight = nearBase + nearTop + nearRight; + Vector3 nearLowerLeft = nearBase + nearBottom + nearLeft; + Vector3 farUpperRight = farBase + farTop + farRight; + + Plane e = new Plane(nearUpperRight, nearLowerLeft, farUpperRight); + +#if UNITY_EDITOR + if (DebugDrawPointerOrientationPlanes) + { + // Debug draw a tringale coplanar with 'd' + Debug.DrawLine(nearUpperLeft, nearLowerRight); + Debug.DrawLine(nearLowerRight, farUpperLeft); + Debug.DrawLine(farUpperLeft, nearUpperLeft); + + // Debug draw a triangle coplanar with 'e' + Debug.DrawLine(nearUpperRight, nearLowerLeft); + Debug.DrawLine(nearLowerLeft, farUpperRight); + Debug.DrawLine(farUpperRight, nearUpperRight); + } +#endif + + // We're not actually interested in the "distance" to the planes. But the sign + // of the distance tells us which quadrant the target position is in. + float dDistance = d.GetDistanceToPoint(targetPosition); + float eDistance = e.GetDistanceToPoint(targetPosition); + + // d e + // +\- +/- + // \ -d +e / + // \ / + // \ / + // \ / + // \ / + // +d +e \/ + // /\ -d -e + // / \ + // / \ + // / \ + // / \ + // / +d -e \ + // +/- +\- + + if (dDistance > 0.0f) + { + if (eDistance > 0.0f) + { + return FrustumPlanes.Left; + } + else + { + return FrustumPlanes.Bottom; + } + } + else + { + if (eDistance > 0.0f) + { + return FrustumPlanes.Top; + } + else + { + return FrustumPlanes.Right; + } + } + } + + // given a frustum wall we wish to snap the pointer to, this function returns a ray + // along which the pointer should be placed to appear at the appropiate point along + // the edge of the indicator field. + private bool TryGetIndicatorPosition(Vector3 targetPosition, Plane frustumWall, out Ray r) + { + // Think of the pointer as pointing the shortest rotation a user must make to see a + // target. The shortest rotation can be obtained by finding the great circle defined + // be the target, the camera position and the center position of the view. The tangent + // vector of the great circle points the direction of the shortest rotation. This + // great circle and thus any of it's tangent vectors are coplanar with the plane + // defined by these same three points. + Vector3 cameraToTarget = targetPosition - cameraPosition; + Vector3 normal = Vector3.Cross(cameraToTarget.normalized, cameraForward); + + // In the case that the three points are colinear we cannot form a plane but we'll + // assume the target is directly behind us and we'll use a prechosen plane. + if (normal == Vector3.zero) + { + normal = -Vector3.right; + } + + Plane q = new Plane(normal, targetPosition); + return TryIntersectPlanes(frustumWall, q, out r); + } + + // Obtain the line of intersection of two planes. This is based on a method + // described in the GPU Gems series. + private bool TryIntersectPlanes(Plane p, Plane q, out Ray intersection) + { + Vector3 rNormal = Vector3.Cross(p.normal, q.normal); + float det = rNormal.sqrMagnitude; + + if (det != 0.0f) + { + Vector3 rPoint = ((Vector3.Cross(rNormal, q.normal) * p.distance) + + (Vector3.Cross(p.normal, rNormal) * q.distance)) / det; + intersection = new Ray(rPoint, rNormal); + return true; + } + else + { + intersection = new Ray(); + return false; + } + } + + // Modify the pointer location and orientation to point along the shortest rotation, + // toward tergetPosition, keeping the pointer confined inside the frustum defined by + // planes. + private void UpdatePointerTransform(Camera camera, Plane[] planes, Vector3 targetPosition) + { + // Use the camera information to create the new bounding volume + UpdateIndicatorVolume(camera); + + // Start by assuming the pointer should be placed at the target position. + Vector3 indicatorPosition = cameraPosition + Depth * (targetPosition - cameraPosition).normalized; + + // Test the target position with the frustum planes except the "far" plane since + // far away objects should be considered in view. + bool pointNotInsideIndicatorField = false; + for (int i = 0; i < 5; ++i) + { + float dot = Vector3.Dot(planes[i].normal, (targetPosition - cameraPosition).normalized); + if (dot <= 0.0f) + { + pointNotInsideIndicatorField = true; + break; + } + } + + // if the target object appears outside the indicator area... + if (pointNotInsideIndicatorField) + { + // ...then we need to do some geometry calculations to lock it to the edge. + + // used to determine which edge of the screen the indicator vector + // would exit through. + FrustumPlanes exitPlane = GetExitPlane(targetPosition, camera); + + Ray r; + if (TryGetIndicatorPosition(targetPosition, planes[(int)exitPlane], out r)) + { + indicatorPosition = cameraPosition + Depth * r.direction.normalized; + } + } + + this.transform.position = indicatorPosition; + + // The pointer's direction should always appear pointing away from the user's center + // of view. Thus we find the center point of the user's view in world space. + + // But the pointer should also appear perpendicular to the viewer so we find the + // center position of the view that is on the same plane as the pointer position. + // We do this by projecting the vector from the pointer to the camera onto the + // the camera's forward vector. + Vector3 indicatorFieldOffset = indicatorPosition - cameraPosition; + indicatorFieldOffset = Vector3.Dot(indicatorFieldOffset, cameraForward) * cameraForward; + + Vector3 indicatorFieldCenter = cameraPosition + indicatorFieldOffset; + Vector3 pointerDirection = (indicatorPosition - indicatorFieldCenter).normalized; + + // allign this object's up vector with the pointerDirection + this.transform.rotation = Quaternion.LookRotation(cameraForward, pointerDirection); + } + + // Here we adjust the Camera's frustum planes to place the cursor in a smaller + // volume, thus creating the effect of a "margin" + private void UpdateIndicatorVolume(Camera camera) + { + // The top, bottom and side frustum planes are used to restrict the movement + // of the pointer. These reside at indices 0-3; + for (int i = 0; i < 4; ++i) + { + // We can make the frustum smaller by rotating the walls "in" toward the + // camera's forward vector. + + // First find the angle between the Camera's forward and the plane's normal + float angle = Mathf.Acos(Vector3.Dot(frustumPlanes[i].normal.normalized, cameraForward)); + + // Then we calculate how much we should rotate the plane in based on the + // user's setting. 90 degrees is our maximum as at that point we no longer + // have a valid frustum. + float angleStep = IndicatorMarginPercent * (0.5f * Mathf.PI - angle); + + // Because the frustum plane normals face in we must actually rotate away from the forward vector + // to narrow the frustum. + Vector3 normal = Vector3.RotateTowards(frustumPlanes[i].normal, cameraForward, -angleStep, 0.0f); + + indicatorVolume[i].normal = normal.normalized; + indicatorVolume[i].distance = frustumPlanes[i].distance; + } + + indicatorVolume[4] = frustumPlanes[4]; + indicatorVolume[5] = frustumPlanes[5]; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs.meta new file mode 100644 index 0000000..a1670ab --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/HeadsUpDirectionIndicator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aaf540edf943b014c9b1cb13622dd844 +timeCreated: 1477084096 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues.meta new file mode 100644 index 0000000..fa47855 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 17173c08a15a85a4ca42fe8d17e9c94f +folderAsset: yes +timeCreated: 1469134163 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs new file mode 100644 index 0000000..a43d52e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Provides interpolation over Color. + /// + [Serializable] + public class InterpolatedColor : InterpolatedValue + { + /// + /// Instantiates the InterpolatedColor with default of Color as initial value and skipping the first update frame. + /// + public InterpolatedColor() : this(default(Color)) { } + + /// + /// Instantiates the InterpolatedColor with a given Color value as initial value and defaulted to skipping the first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedColor(Color initialValue, bool skipFirstUpdateFrame = false) + : base(initialValue, skipFirstUpdateFrame) + { } + + /// + /// Overrides the method to calculate the current Color interpolation value by using a Color.Lerp function. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The Color value that the interpolation started at. + /// The target Color value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated Color interpolation value. + public override Color ApplyCurveValue(Color startValue, Color targetValue, float curveValue) + { + return Color.Lerp(startValue, targetValue, curveValue); + } + + /// + /// Overrides the method to check if two Colors are equal. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First Color value. + /// Second Color value. + /// True if the Colors are equal. + public override bool DoValuesEqual(Color one, Color other) + { + return one == other; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs.meta new file mode 100644 index 0000000..6128867 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedColor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d073679f573cbb148a8bb835d748bc2a +timeCreated: 1449787902 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs new file mode 100644 index 0000000..ae539c2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Provides interpolation over float. + /// + [Serializable] + public class InterpolatedFloat : InterpolatedValue + { + /// + /// Instantiates the InterpolatedFloat with default of float as initial value and skipping the first update frame. + /// + public InterpolatedFloat() : this(0.0f) { } + + /// + /// Instantiates the InterpolatedFloat with a given float value as initial value and defaulted to skipping the first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedFloat(float initialValue, bool skipFirstUpdateFrame = false) + : base(initialValue, skipFirstUpdateFrame) + { } + + /// + /// Overrides the method to check if two floats are equal. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First float value. + /// Second float value. + /// True if the floats are equal. + public override bool DoValuesEqual(float one, float other) + { + return Mathf.Abs(one - other) < SmallNumber; + } + + /// + /// Overrides the method to calculate the current float interpolation value by using a Mathf.Lerp function. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The float value that the interpolation started at. + /// The target float value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated float interpolation value. + public override float ApplyCurveValue(float startValue, float targetValue, float curveValue) + { + return Mathf.Lerp(startValue, targetValue, curveValue); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs.meta new file mode 100644 index 0000000..ec49da1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedFloat.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c21482d129e10ca4c9c1be9399f3a88c +timeCreated: 1438289365 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs new file mode 100644 index 0000000..24113c3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Provides interpolation over Quaternion. + /// + [Serializable] + public class InterpolatedQuaternion : InterpolatedValue + { + /// + /// Instantiates the InterpolatedQuaternion with default of Quaternion as initial value and skipping the first update frame. + /// + public InterpolatedQuaternion() : this(default(Quaternion)) { } + + /// + /// Instantiates the InterpolatedQuaternion with a given Quaternion value as initial value and defaulted to skipping the first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedQuaternion(Quaternion initialValue, bool skipFirstUpdateFrame = false) : base(initialValue, skipFirstUpdateFrame) { } + + /// + /// Overrides the method to calculate the current Quaternion interpolation value by using a Quaternion.Lerp function. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The Quaternion value that the interpolation started at. + /// The target Quaternion value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated Quaternion interpolation value. + public override Quaternion ApplyCurveValue(Quaternion startValue, Quaternion targetValue, float curveValue) + { + return Quaternion.Slerp(startValue, targetValue, curveValue); + } + + /// + /// Overrides the method to check if two Quaternions are "close enough". + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First Quaternion value. + /// Second Quaternion value. + /// True if the Quaternions are "close enough". + public override bool DoValuesEqual(Quaternion one, Quaternion other) + { + return Quaternion.Angle(one, other) < SmallNumber; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs.meta new file mode 100644 index 0000000..5610151 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedQuaternion.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cb51cb1c2ab889b4da51ba32d95b4d3a +timeCreated: 1438290644 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs new file mode 100644 index 0000000..ea27881 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs @@ -0,0 +1,305 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Base class that provides the common logic for interpolating between values. This class does not + /// inherit from MonoBehaviour in order to enable various scenarios under which it used. To perform the + /// interpolation step, call FrameUpdate. + /// + /// Type of value used for interpolation. + [Serializable] + public abstract class InterpolatedValue + { + public const float SmallNumber = 0.0000001f; + public const float SmallNumberSquared = SmallNumber * SmallNumber; + + /// + /// Implict cast operator that returns the current value of the Interpolator. + /// + /// The interpolator casting from. + public static implicit operator T(InterpolatedValue interpolatedValue) + { + return interpolatedValue.Value; + } + + /// + /// Event that is triggered when interpolation starts. + /// + public event Action> Started; + + /// + /// Event that is triggered when interpolation completes. + /// + public event Action> Completed; + + /// + /// Event that is triggered when the current interpolated value is changed. + /// + public event Action> ValueChanged; + + private T targetValue; + private T startValue; + private float timeInterpolationStartedAt; + private bool firstUpdateFrameSkipped; + private bool skipFirstUpdateFrame; + private bool performingInterpolativeSnap; + + [SerializeField] + [Tooltip("Time the interpolator takes to get from current value to the target value")] + private float duration = 1.0f; + + /// + /// Time the interpolator takes to get from current value to the target value. + /// + public float Duration + { + get { return duration; } + set { duration = value; } + } + + [SerializeField] + [Tooltip("Time the interpolator takes to get from current value to the target value")] + private AnimationCurve curve = null; + + /// + /// The AnimationCurve used for evaluatng the interpolation value. + /// + public AnimationCurve Curve + { + get { return curve; } + set { curve = value; } + } + + /// + /// Checks if the interpolator can be used by ensuring an AnimatorCurve has been set. + /// + public bool IsValid { get { return Curve != null; } } + + /// + /// Checks whether the interpolator is currently interpolating. + /// + public bool IsRunning { get; private set; } + + private T value; + + /// + /// Retruns the current interpolated value. + /// + public T Value + { + get { return value; } + private set + { + if (!DoValuesEqual(this.value, value)) + { + this.value = value; + ValueChanged.RaiseEvent(this); + } + } + } + + /// + /// Retruns the current interpolation target value. + /// + public T Target + { + get { return targetValue; } + } + + /// + /// Wrapper for getting time that supports EditTime updates. + /// + protected float CurrentTime + { + get + { +#if UNITY_EDITOR + return !Application.isPlaying ? (float)UnityEditor.EditorApplication.timeSinceStartup : Time.time; +#else + return Time.time; +#endif + } + } + + /// + /// Instantiates a new InterpolatedValue with an initial value and a setting of whether to skip first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedValue(T initialValue, bool skipFirstUpdateFrame) + { + IsRunning = false; + Value = targetValue = initialValue; + Duration = 1.0f; + firstUpdateFrameSkipped = false; + this.skipFirstUpdateFrame = skipFirstUpdateFrame; + performingInterpolativeSnap = false; + } + + /// + /// Updates the target value and starts the interpolator if it is not running already. + /// + /// The new target value. + public void UpdateTarget(T updateTargetValue) + { + UpdateTarget(updateTargetValue, false); + } + + /// + /// Updates the target value and starts the interpolator if it is not running already. + /// + /// The new target value. + /// A flag for forcing an update propagation. + public void UpdateTarget(T updateTargetValue, bool forceUpdate) + { + performingInterpolativeSnap = false; + + targetValue = updateTargetValue; + + startValue = Value; + timeInterpolationStartedAt = CurrentTime; + + if (!DoValuesEqual(updateTargetValue, Value)) + { + EnsureEnabled(); + } + else if (forceUpdate && !IsRunning) + { + ValueChanged.RaiseEvent(this); + } + } + + /// + /// Snap (set) the interpolated value to the current target value. + /// + public void SnapToTarget() + { + SnapToTarget(targetValue); + } + + /// + /// Update the target to a new value and snap (set) the interpolated value to it. + /// + /// The new target value. + public void SnapToTarget(T snapTargetValue) + { + performingInterpolativeSnap = false; + Value = startValue = snapTargetValue; + EnsureDisabled(); + } + + /// + /// Interpolative snap to target will interpolate until it reaches the given target value, after which subsequent calls to this method it will snap to the target value given. + /// + /// SnapToTarget and UpdateTarget resets this. + /// The target value to set and interpolatively snap to. + public void InterpolateThenSnapToTarget(T snapTargetValue) + { + if (performingInterpolativeSnap) + { + // If we are running, just update the target, otherwise just snap to target + if (IsRunning) + { + targetValue = snapTargetValue; + } + else + { + Value = startValue = snapTargetValue; + } + } + else + { + UpdateTarget(snapTargetValue); + performingInterpolativeSnap = true; + } + } + + /// + /// Starts interpolation if it is not currently running. + /// + /// This forces a start if not currently running and does not check if the interpolated value is at the target value. + public void EnsureEnabled() + { + if (!IsRunning) + { + if (skipFirstUpdateFrame) + { + firstUpdateFrameSkipped = false; + } + + IsRunning = true; + + Started.RaiseEvent(this); + } + } + + /// + /// Stops the interpolation if it is currently running. + /// + /// This forces a stop if currently running and does not check if the interpolated value has not reached the target value. + public void EnsureDisabled() + { + if (IsRunning) + { + IsRunning = false; + + Completed.RaiseEvent(this); + } + } + + /// + /// Increments the interpolation step. This function should be called each frame. + /// + /// To enable multiple scenarios for using the InterpolatedValues, the class does not inherit from MonoBehaviour. + /// The new interpolated value after performing the interpolation step. + public T FrameUpdate() + { + if (IsRunning) + { + if (skipFirstUpdateFrame && !firstUpdateFrameSkipped) + { + firstUpdateFrameSkipped = true; + timeInterpolationStartedAt = CurrentTime; + return Value; + } + + float timeDelta = CurrentTime - timeInterpolationStartedAt; + + // Normalize the delta to curve duration + timeDelta *= Curve.Duration() / Duration; + + Value = ApplyCurveValue(startValue, targetValue, Curve.Evaluate(timeDelta)); + if (timeDelta >= Curve.Duration()) + { + EnsureDisabled(); + } + } + + return Value; + } + + /// + /// A method to check whether two values are equal. This should be overriden by inheriting classes. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First value. + /// Second value. + /// True if values are equal or are "close enough". + public abstract bool DoValuesEqual(T one, T other); + + /// + /// A method to calculate the current interpolated value based on the start value, a target value and the curve evaluated interpolation position value. This should be overriden by inheriting classes. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The value that the interpolation started at. + /// The target value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated interpolation value. + public abstract T ApplyCurveValue(T startValue, T targetValue, float curveValue); + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs.meta new file mode 100644 index 0000000..10018b8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedValue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cb36c8f8cbd0fa449bbf6edb780e8a87 +timeCreated: 1437691561 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs new file mode 100644 index 0000000..951e17e --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Provides interpolation over Vector2. + /// + [Serializable] + public class InterpolatedVector2 : InterpolatedValue + { + /// + /// Instantiates the InterpolatedVector2 with default of Vector2 as initial value and skipping the first update frame. + /// + public InterpolatedVector2() : this(default(Vector2)) { } + + /// + /// Instantiates the InterpolatedVector2 with a given Vector2 value as initial value and defaulted to skipping the first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedVector2(Vector2 initialValue, bool skipFirstUpdateFrame = false) + : base(initialValue, skipFirstUpdateFrame) + { + } + + /// + /// Overrides the method to check if two Vector2 are "close enough". + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First Vector2 value. + /// Second Vector2 value. + /// True if the Vector2s are close enough. + public override bool DoValuesEqual(Vector2 one, Vector2 other) + { + return (one - other).sqrMagnitude <= SmallNumberSquared; + } + + /// + /// Overrides the method to calculate the current Vector2 interpolation value by using a Vector2.Lerp function. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The Vector2 value that the interpolation started at. + /// The target Vector2 value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated Vector2 interpolation value. + public override Vector2 ApplyCurveValue(Vector2 startValue, Vector2 targetValue, float curveValue) + { + return Vector2.Lerp(startValue, targetValue, curveValue); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs.meta new file mode 100644 index 0000000..0bf6812 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector2.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9b993d330a4b0d14f92ac8d1b5cfa26f +timeCreated: 1453837480 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs new file mode 100644 index 0000000..d00dff9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Provides interpolation over Vector3. + /// + [Serializable] + public class InterpolatedVector3 : InterpolatedValue + { + /// + /// Instantiates the InterpolatedVector3 with default of Vector3 as initial value and skipping the first update frame. + /// + public InterpolatedVector3() : this(default(Vector3)) { } + + /// + /// Instantiates the InterpolatedVector3 with a given Vector3 value as initial value and defaulted to skipping the first update frame. + /// + /// Initial current value to use. + /// A flag to skip first update frame after the interpolation target has been set. + public InterpolatedVector3(Vector3 initialValue, bool skipFirstUpdateFrame = false) : base(initialValue, skipFirstUpdateFrame) { } + + /// + /// Overrides the method to check if two Vector3s are close enough. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// First Vector3 value. + /// Second Vector3 value. + /// True if the Vector3 are close enough. + public override bool DoValuesEqual(Vector3 one, Vector3 other) + { + return (one - other).sqrMagnitude <= SmallNumberSquared; + } + + /// + /// Overrides the method to calculate the current Vector3 interpolation value by using a Vector3.Lerp function. + /// + /// This method is public because of a Unity compilation bug when dealing with abstract methods on generics. + /// The Vector3 value that the interpolation started at. + /// The target Vector3 value that the interpolation is moving to. + /// A curve evaluated interpolation position value. This will be in range of [0, 1] + /// The new calculated Vector3 interpolation value. + public override Vector3 ApplyCurveValue(Vector3 startValue, Vector3 targetValue, float curveValue) + { + return Vector3.Lerp(startValue, targetValue, curveValue); + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs.meta new file mode 100644 index 0000000..2b456eb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/InterpolatedVector3.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7f3ef4ebb9c743b41af1acd5cc47188d +timeCreated: 1437691553 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs new file mode 100644 index 0000000..7610014 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs @@ -0,0 +1,92 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Class to encapsulate an interpolating Quaternion property. + /// TODO: Remove if redundant to InterpolatedQuaternion.cs + /// + [Serializable] + public class QuaternionInterpolated + { + /// + /// Speed of change in magnitude. + /// + public float DeltaSpeed = 360f; + + /// + /// Current value of the property. + /// + public Quaternion Value { get; private set; } + /// + /// Target value of the property. + /// + public Quaternion TargetValue { get; private set; } + public Quaternion StartValue { get; private set; } + public float Duration { get; private set; } + public float Counter { get; private set; } + + public QuaternionInterpolated() + { + Reset(Quaternion.identity); + } + + public QuaternionInterpolated(Quaternion initialValue) + { + Reset(initialValue); + } + + /// + /// Resets property to zero interpolation and set value. + /// + /// Desired value to reset + public void Reset(Quaternion value) + { + Value = value; + TargetValue = value; + StartValue = value; + Duration = 0f; + Counter = 0f; + } + + /// + /// Set a target for property to interpolate to. + /// + /// Targeted value. + public void SetTarget(Quaternion targetValue) + { + TargetValue = targetValue; + StartValue = Value; + Duration = Quaternion.Angle(StartValue, TargetValue) / DeltaSpeed; + Counter = 0f; + } + + /// + /// Returns whether there are further updates required to get the target value. + /// + /// True if updates are required. False otherwise. + public bool HasUpdate() + { + return Quaternion.Angle(TargetValue, Value) > 0.05f; + } + + /// + /// Performs and fets the updated value. + /// + /// Tick delta. + /// Updated value. + public Quaternion GetUpdate(float deltaTime) + { + Counter += deltaTime; + Value = Quaternion.Slerp(StartValue, TargetValue, Counter / Duration); + + return Value; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs.meta new file mode 100644 index 0000000..676a0a4 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/QuaternionInterpolated.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0df4832d89bd70c48b288941e8182067 +timeCreated: 1449624316 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs new file mode 100644 index 0000000..c1bc1b1 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs @@ -0,0 +1,91 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Class to encapsulate an interpolating Vector3 property. + /// TODO: Remove if reduncatnt to InterpolatedVector3.cs + /// + public class Vector3Interpolated + { + /// + /// Half-life used to control how fast values are interpolated. + /// + public float HalfLife = 0.08f; + + /// + /// Current value of the property. + /// + public Vector3 Value { get; private set; } + /// + /// Target value of the property. + /// + public Vector3 TargetValue { get; private set; } + + public Vector3Interpolated() + { + Reset(Vector3.zero); + } + + public Vector3Interpolated(Vector3 initialValue) + { + Reset(initialValue); + } + + /// + /// Resets property to zero interpolation and set value. + /// + /// Desired value to reset + public void Reset(Vector3 value) + { + Value = value; + TargetValue = value; + } + + /// + /// Set a target for property to interpolate to. + /// + /// Targeted value. + public void SetTarget(Vector3 targetValue) + { + TargetValue = targetValue; + } + + /// + /// Returns whether there are further updates required to get the target value. + /// + /// True if updates are required. False otherwise. + public bool HasUpdate() + { + return TargetValue != Value; + } + + /// + /// Performs and gets the updated value. + /// + /// Tick delta. + /// Updated value. + public Vector3 GetUpdate(float deltaTime) + { + Vector3 distance = (TargetValue - Value); + + if (distance.sqrMagnitude <= Mathf.Epsilon) + { + // When close enough, jump to the target + Value = TargetValue; + } + else + { + Value = InterpolationUtilities.ExpDecay(Value, TargetValue, HalfLife, deltaTime); + } + + + return Value; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs.meta new file mode 100644 index 0000000..aad49a2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolatedValues/Vector3Interpolated.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f9dc08bcc8a9add4296e995db50f7603 +timeCreated: 1462560651 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs new file mode 100644 index 0000000..893e709 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Static class containing interpolation-related utility functions. + /// + public static class InterpolationUtilities + { + #region Exponential Decay + + public static float ExpDecay(float from, float to, float hLife, float dTime) + { + return Mathf.Lerp(from, to, ExpCoefficient(hLife, dTime)); + } + + public static Vector2 ExpDecay(Vector2 from, Vector2 to, float hLife, float dTime) + { + return Vector2.Lerp(from, to, ExpCoefficient(hLife, dTime)); + } + + public static Vector3 ExpDecay(Vector3 from, Vector3 to, float hLife, float dTime) + { + return Vector3.Lerp(from, to, ExpCoefficient(hLife, dTime)); + } + + public static Quaternion ExpDecay(Quaternion from, Quaternion to, float hLife, float dTime) + { + return Quaternion.Slerp(from, to, ExpCoefficient(hLife, dTime)); + } + + public static Color ExpDecay(Color from, Color to, float hLife, float dTime) + { + return Color.Lerp(from, to, ExpCoefficient(hLife, dTime)); + } + + + public static float ExpCoefficient(float hLife, float dTime) + { + if (hLife == 0) + return 1; + + return 1.0f - Mathf.Pow(0.5f, dTime / hLife); + } + + #endregion + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs.meta new file mode 100644 index 0000000..03d6734 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/InterpolationUtilities.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2023971f1b5b1804487cddbd72a9fd8c +timeCreated: 1463076609 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs new file mode 100644 index 0000000..2f90512 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs @@ -0,0 +1,510 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A MonoBehaviour that interpolates a transform's position, rotation or scale. + /// + public class Interpolator : MonoBehaviour + { + [Tooltip("When interpolating, use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + // A very small number that is used in determining if the Interpolator + // needs to run at all. + private const float smallNumber = 0.0000001f; + + // The movement speed in meters per second + public float PositionPerSecond = 30.0f; + + // The rotation speed, in degrees per second + public float RotationDegreesPerSecond = 720.0f; + + // Adjusts rotation speed based on angular distance + public float RotationSpeedScaler = 0.0f; + + // The amount to scale per second + public float ScalePerSecond = 5.0f; + + // Lerp the estimated targets towards the object each update, + // slowing and smoothing movement. + [HideInInspector] + public bool SmoothLerpToTarget = false; + [HideInInspector] + public float SmoothPositionLerpRatio = 0.5f; + [HideInInspector] + public float SmoothRotationLerpRatio = 0.5f; + [HideInInspector] + public float SmoothScaleLerpRatio = 0.5f; + + // Position data + private Vector3 targetPosition; + + /// + /// True if the transform's position is animating; false otherwise. + /// + public bool AnimatingPosition { get; private set; } + + // Rotation data + private Quaternion targetRotation; + + /// + /// True if the transform's rotation is animating; false otherwise. + /// + public bool AnimatingRotation { get; private set; } + + // Local Rotation data + private Quaternion targetLocalRotation; + + /// + /// True if the transform's local rotation is animating; false otherwise. + /// + public bool AnimatingLocalRotation { get; private set; } + + // Scale data + private Vector3 targetLocalScale; + + /// + /// True if the transform's scale is animating; false otherwise. + /// + public bool AnimatingLocalScale { get; private set; } + + /// + /// The event fired when an Interpolation is started. + /// + public event System.Action InterpolationStarted; + + /// + /// The event fired when an Interpolation is completed. + /// + public event System.Action InterpolationDone; + + /// + /// The velocity of a transform whose position is being interpolated. + /// + public Vector3 PositionVelocity { get; private set; } + + private Vector3 oldPosition = Vector3.zero; + + /// + /// True if position, rotation or scale are animating; false otherwise. + /// + public bool Running + { + get + { + return (AnimatingPosition || AnimatingRotation || AnimatingLocalRotation || AnimatingLocalScale); + } + } + + public void Awake() + { + targetPosition = transform.position; + targetRotation = transform.rotation; + targetLocalRotation = transform.localRotation; + targetLocalScale = transform.localScale; + + enabled = false; + } + + /// + /// Sets the target position for the transform and if position wasn't + /// already animating, fires the InterpolationStarted event. + /// + /// The new target position to for the transform. + public void SetTargetPosition(Vector3 target) + { + bool wasRunning = Running; + + targetPosition = target; + + float magsq = (targetPosition - transform.position).sqrMagnitude; + if (magsq > smallNumber) + { + AnimatingPosition = true; + enabled = true; + + if (InterpolationStarted != null && !wasRunning) + { + InterpolationStarted(); + } + } + else + { + // Set immediately to prevent accumulation of error. + transform.position = target; + AnimatingPosition = false; + } + } + + /// + /// Sets the target rotation for the transform and if rotation wasn't + /// already animating, fires the InterpolationStarted event. + /// + /// The new target rotation for the transform. + public void SetTargetRotation(Quaternion target) + { + bool wasRunning = Running; + + targetRotation = target; + + if (Quaternion.Dot(transform.rotation, target) < 1.0f) + { + AnimatingRotation = true; + enabled = true; + + if (InterpolationStarted != null && !wasRunning) + { + InterpolationStarted(); + } + } + else + { + // Set immediately to prevent accumulation of error. + transform.rotation = target; + AnimatingRotation = false; + } + } + + /// + /// Sets the target local rotation for the transform and if rotation + /// wasn't already animating, fires the InterpolationStarted event. + /// + /// The new target local rotation for the transform. + public void SetTargetLocalRotation(Quaternion target) + { + bool wasRunning = Running; + + targetLocalRotation = target; + + if (Quaternion.Dot(transform.localRotation, target) < 1.0f) + { + AnimatingLocalRotation = true; + enabled = true; + + if (InterpolationStarted != null && !wasRunning) + { + InterpolationStarted(); + } + } + else + { + // Set immediately to prevent accumulation of error. + transform.localRotation = target; + AnimatingLocalRotation = false; + } + } + + /// + /// Sets the target local scale for the transform and if scale + /// wasn't already animating, fires the InterpolationStarted event. + /// + /// The new target local rotation for the transform. + public void SetTargetLocalScale(Vector3 target) + { + bool wasRunning = Running; + + targetLocalScale = target; + + float magsq = (targetLocalScale - transform.localScale).sqrMagnitude; + if (magsq > Mathf.Epsilon) + { + AnimatingLocalScale = true; + enabled = true; + + if (InterpolationStarted != null && !wasRunning) + { + InterpolationStarted(); + } + } + else + { + // set immediately to prevent accumulation of error + transform.localScale = target; + AnimatingLocalScale = false; + } + } + + /// + /// Interpolates smoothly to a target position. + /// + /// The starting position. + /// The destination position. + /// Caller-provided Time.deltaTime. + /// The speed to apply to the interpolation. + /// New interpolated position closer to target + public static Vector3 NonLinearInterpolateTo(Vector3 start, Vector3 target, float deltaTime, float speed) + { + // If no interpolation speed, jump to target value. + if (speed <= 0.0f) + { + return target; + } + + Vector3 distance = (target - start); + + // When close enough, jump to the target + if (distance.sqrMagnitude <= Mathf.Epsilon) + { + return target; + } + + // Apply the delta, then clamp so we don't overshoot the target + Vector3 deltaMove = distance * Mathf.Clamp(deltaTime * speed, 0.0f, 1.0f); + + return start + deltaMove; + } + + public void Update() + { + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + bool interpOccuredThisFrame = false; + + if (AnimatingPosition) + { + Vector3 lerpTargetPosition = targetPosition; + if (SmoothLerpToTarget) + { + lerpTargetPosition = Vector3.Lerp(transform.position, lerpTargetPosition, SmoothPositionLerpRatio); + } + + Vector3 newPosition = NonLinearInterpolateTo(transform.position, lerpTargetPosition, deltaTime, PositionPerSecond); + if ((targetPosition - newPosition).sqrMagnitude <= smallNumber) + { + // Snap to final position + newPosition = targetPosition; + AnimatingPosition = false; + } + else + { + interpOccuredThisFrame = true; + } + + transform.position = newPosition; + + //calculate interpolatedVelocity and store position for next frame + PositionVelocity = oldPosition - newPosition; + oldPosition = newPosition; + } + + // Determine how far we need to rotate + if (AnimatingRotation) + { + Quaternion lerpTargetRotation = targetRotation; + if (SmoothLerpToTarget) + { + lerpTargetRotation = Quaternion.Lerp(transform.rotation, lerpTargetRotation, SmoothRotationLerpRatio); + } + + float angleDiff = Quaternion.Angle(transform.rotation, lerpTargetRotation); + float speedScale = 1.0f + (Mathf.Pow(angleDiff, RotationSpeedScaler) / 180.0f); + float ratio = Mathf.Clamp01((speedScale * RotationDegreesPerSecond * deltaTime) / angleDiff); + + if (angleDiff < Mathf.Epsilon) + { + AnimatingRotation = false; + transform.rotation = targetRotation; + } + else + { + // Only lerp rotation here, as ratio is NaN if angleDiff is 0.0f + transform.rotation = Quaternion.Slerp(transform.rotation, lerpTargetRotation, ratio); + interpOccuredThisFrame = true; + } + } + + // Determine how far we need to rotate + if (AnimatingLocalRotation) + { + Quaternion lerpTargetLocalRotation = targetLocalRotation; + if (SmoothLerpToTarget) + { + lerpTargetLocalRotation = Quaternion.Lerp(transform.localRotation, lerpTargetLocalRotation, SmoothRotationLerpRatio); + } + + float angleDiff = Quaternion.Angle(transform.localRotation, lerpTargetLocalRotation); + float speedScale = 1.0f + (Mathf.Pow(angleDiff, RotationSpeedScaler) / 180.0f); + float ratio = Mathf.Clamp01((speedScale * RotationDegreesPerSecond * deltaTime) / angleDiff); + + if (angleDiff < Mathf.Epsilon) + { + AnimatingLocalRotation = false; + transform.localRotation = targetLocalRotation; + } + else + { + // Only lerp rotation here, as ratio is NaN if angleDiff is 0.0f + transform.localRotation = Quaternion.Slerp(transform.localRotation, lerpTargetLocalRotation, ratio); + interpOccuredThisFrame = true; + } + } + + if (AnimatingLocalScale) + { + Vector3 lerpTargetLocalScale = targetLocalScale; + if (SmoothLerpToTarget) + { + lerpTargetLocalScale = Vector3.Lerp(transform.localScale, lerpTargetLocalScale, SmoothScaleLerpRatio); + } + + Vector3 newScale = NonLinearInterpolateTo(transform.localScale, lerpTargetLocalScale, deltaTime, ScalePerSecond); + if ((targetLocalScale - newScale).sqrMagnitude <= smallNumber) + { + // Snap to final scale + newScale = targetLocalScale; + AnimatingLocalScale = false; + } + else + { + interpOccuredThisFrame = true; + } + + transform.localScale = newScale; + } + + // If all interpolations have completed, stop updating + if (!interpOccuredThisFrame) + { + if (InterpolationDone != null) + { + InterpolationDone(); + } + enabled = false; + } + } + + /// + /// Snaps to the final target and stops interpolating + /// + public void SnapToTarget() + { + if (enabled) + { + transform.position = TargetPosition; + transform.rotation = TargetRotation; + transform.localRotation = TargetLocalRotation; + transform.localScale = TargetLocalScale; + + AnimatingPosition = false; + AnimatingLocalScale = false; + AnimatingRotation = false; + AnimatingLocalRotation = false; + + enabled = false; + + if (InterpolationDone != null) + { + InterpolationDone(); + } + } + } + + /// + /// Stops the interpolation regardless if it has reached the target + /// + public void StopInterpolating() + { + if (enabled) + { + Reset(); + + if (InterpolationDone != null) + { + InterpolationDone(); + } + } + } + + /// + /// Stops the transform in place and terminates any animations. + /// + public void Reset() + { + targetPosition = transform.position; + targetRotation = transform.rotation; + targetLocalRotation = transform.localRotation; + targetLocalScale = transform.localScale; + + AnimatingPosition = false; + AnimatingRotation = false; + AnimatingLocalRotation = false; + AnimatingLocalScale = false; + + enabled = false; + } + + /// + /// If animating position, specifies the target position as specified + /// by SetTargetPosition. Otherwise returns the current position of + /// the transform. + /// + public Vector3 TargetPosition + { + get + { + if (AnimatingPosition) + { + return targetPosition; + } + return transform.position; + } + } + + /// + /// If animating rotation, specifies the target rotation as specified + /// by SetTargetRotation. Otherwise returns the current rotation of + /// the transform. + /// + public Quaternion TargetRotation + { + get + { + if (AnimatingRotation) + { + return targetRotation; + } + return transform.rotation; + } + } + + /// + /// If animating local rotation, specifies the target local rotation as + /// specified by SetTargetLocalRotation. Otherwise returns the current + /// local rotation of the transform. + /// + public Quaternion TargetLocalRotation + { + get + { + if (AnimatingLocalRotation) + { + return targetLocalRotation; + } + return transform.localRotation; + } + } + + /// + /// If animating local scale, specifies the target local scale as + /// specified by SetTargetLocalScale. Otherwise returns the current + /// local scale of the transform. + /// + public Vector3 TargetLocalScale + { + get + { + if (AnimatingLocalScale) + { + return targetLocalScale; + } + return transform.localScale; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs.meta new file mode 100644 index 0000000..cabe777 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Interpolator.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fb69de839bd015f4099b5bd2c45e53e5 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs new file mode 100644 index 0000000..dba798d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs @@ -0,0 +1,452 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Math Utilities class. + /// + public static class MathUtils + { + /// + /// Get the horizontal FOV from the stereo camera + /// + /// + public static float GetHorizontalFieldOfViewRadians() + { + float horizontalFovRadians = 2 * Mathf.Atan(Mathf.Tan((Camera.main.fieldOfView * Mathf.Deg2Rad) / 2) * Camera.main.aspect); + return horizontalFovRadians; + } + + /// + /// Returns if a point will be rendered on the screen in either eye + /// + /// + /// + public static bool IsInFOV(Vector3 position) + { + float verticalFovHalf = Camera.main.fieldOfView / 2; + float horizontalFovHalf = GetHorizontalFieldOfViewRadians() * Mathf.Rad2Deg / 2; + + Vector3 deltaPos = position - Camera.main.transform.position; + Vector3 headDeltaPos = TransformDirectionFromTo(null, Camera.main.transform, deltaPos).normalized; + + float yaw = Mathf.Asin(headDeltaPos.x) * Mathf.Rad2Deg; + float pitch = Mathf.Asin(headDeltaPos.y) * Mathf.Rad2Deg; + + return (Mathf.Abs(yaw) < horizontalFovHalf && Mathf.Abs(pitch) < verticalFovHalf); + } + + /// + /// Takes a point in the coordinate space specified by the "from" transform and transforms it to be the correct point in the coordinate space specified by the "to" transform + /// applies rotation, scale and translation + /// + /// + /// + /// + /// + public static Vector3 TransformPointFromTo(Transform from, Transform to, Vector3 ptInFrom) + { + Vector3 ptInWorld = (from == null) ? ptInFrom : from.TransformPoint(ptInFrom); + Vector3 ptInTo = (to == null) ? ptInWorld : to.InverseTransformPoint(ptInWorld); + return ptInTo; + } + + /// + /// Takes a direction in the coordinate space specified by the "from" transform and transforms it to be the correct direction in the coordinate space specified by the "to" transform + /// applies rotation only, no translation or scale + /// + /// + /// + /// + /// + public static Vector3 TransformDirectionFromTo(Transform from, Transform to, Vector3 dirInFrom) + { + Vector3 dirInWorld = (from == null) ? dirInFrom : from.TransformDirection(dirInFrom); + Vector3 dirInTo = (to == null) ? dirInWorld : to.InverseTransformDirection(dirInWorld); + return dirInTo; + } + + /// + /// Takes a vectpr in the coordinate space specified by the "from" transform and transforms it to be the correct direction in the coordinate space specified by the "to" transform + /// applies rotation and scale, no translation + /// + /// + /// + /// + /// + public static Vector3 TransformVectorFromTo(Transform from, Transform to, Vector3 vecInFrom) + { + Vector3 vecInWorld = (from == null) ? vecInFrom : from.TransformVector(vecInFrom); + Vector3 vecInTo = (to == null) ? vecInWorld : to.InverseTransformVector(vecInWorld); + return vecInTo; + } + + /// + /// Takes a ray in the coordinate space specified by the "from" transform and transforms it to be the correct ray in the coordinate space specified by the "to" transform + /// + public static Ray TransformRayFromTo(Transform from, Transform to, Ray rayToConvert) + { + Ray outputRay = new Ray + { + origin = TransformPointFromTo(from, to, rayToConvert.origin), + direction = TransformDirectionFromTo(from, to, rayToConvert.direction) + }; + + return outputRay; + } + + /// + /// Creates a quaternion containing the rotation from the input matrix. + /// + /// Input matrix to convert to quaternion + /// + public static Quaternion QuaternionFromMatrix(Matrix4x4 m) + { + // TODO: test and replace with this simpler, more unity-friendly code + // Quaternion q = Quaternion.LookRotation(m.GetColumn(2),m.GetColumn(1)); + + Quaternion q = new Quaternion(); + q.w = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] + m[1, 1] + m[2, 2])) / 2; + q.x = Mathf.Sqrt(Mathf.Max(0, 1 + m[0, 0] - m[1, 1] - m[2, 2])) / 2; + q.y = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] + m[1, 1] - m[2, 2])) / 2; + q.z = Mathf.Sqrt(Mathf.Max(0, 1 - m[0, 0] - m[1, 1] + m[2, 2])) / 2; + q.x *= Mathf.Sign(q.x * (m[2, 1] - m[1, 2])); + q.y *= Mathf.Sign(q.y * (m[0, 2] - m[2, 0])); + q.z *= Mathf.Sign(q.z * (m[1, 0] - m[0, 1])); + return q; + } + + /// + /// Extract the translation and rotation components of a Unity matrix + /// + public static void ToTranslationRotation(Matrix4x4 unityMtx, out Vector3 translation, out Quaternion rotation) + { + Vector3 upwards = new Vector3(unityMtx.m01, unityMtx.m11, unityMtx.m21); + Vector3 forward = new Vector3(unityMtx.m02, unityMtx.m12, unityMtx.m22); + translation = new Vector3(unityMtx.m03, unityMtx.m13, unityMtx.m23); + rotation = Quaternion.LookRotation(forward, upwards); + } + + /// + /// Project vector onto XZ plane + /// + /// + /// result of projecting v onto XZ plane + public static Vector3 XZProject(Vector3 v) + { + return new Vector3(v.x, 0.0f, v.z); + } + + /// + /// Project vector onto YZ plane + /// + /// + /// result of projecting v onto YZ plane + public static Vector3 YZProject(Vector3 v) + { + return new Vector3(0.0f, v.y, v.z); + } + + /// + /// Project vector onto XY plane + /// + /// + /// result of projecting v onto XY plane + public static Vector3 XYProject(Vector3 v) + { + return new Vector3(v.x, v.y, 0.0f); + } + + /// + /// Returns the distance between a point and an infinite line defined by two points; linePointA and linePointB + /// + /// + /// + /// + /// + public static float DistanceOfPointToLine(Vector3 point, Vector3 linePointA, Vector3 linePointB) + { + Vector3 closestPoint = ClosestPointOnLineToPoint(point, linePointA, linePointB); + return (point - closestPoint).magnitude; + } + + public static Vector3 ClosestPointOnLineToPoint(Vector3 point, Vector3 linePointA, Vector3 linePointB) + { + Vector3 v = linePointB - linePointA; + Vector3 w = point - linePointA; + + float c1 = Vector3.Dot(w, v); + float c2 = Vector3.Dot(v, v); + float b = c1 / c2; + + Vector3 pointB = linePointA + (v * b); + + return pointB; + } + + public static float DistanceOfPointToLineSegment(Vector3 point, Vector3 lineStart, Vector3 lineEnd) + { + Vector3 closestPoint = ClosestPointOnLineSegmentToPoint(point, lineStart, lineEnd); + return (point - closestPoint).magnitude; + } + + public static Vector3 ClosestPointOnLineSegmentToPoint(Vector3 point, Vector3 lineStart, Vector3 lineEnd) + { + Vector3 v = lineEnd - lineStart; + Vector3 w = point - lineStart; + + float c1 = Vector3.Dot(w, v); + if (c1 <= 0) + { + return lineStart; + } + + float c2 = Vector3.Dot(v, v); + if (c2 <= c1) + { + return lineEnd; + } + + float b = c1 / c2; + + Vector3 pointB = lineStart + (v * b); + + return pointB; + } + + public static bool TestPlanesAABB(Plane[] planes, int planeMask, Bounds bounds, out bool entirelyInside) + { + int planeIndex = 0; + int entirelyInsideCount = 0; + Vector3 boundsCenter = bounds.center; // center of bounds + Vector3 boundsExtent = bounds.extents; // half diagonal + // do intersection test for each active frame + int mask = 1; + + // while active frames + while (mask <= planeMask) + { + // if active + if ((uint)(planeMask & mask) != 0) + { + Plane p = planes[planeIndex]; + Vector3 n = p.normal; + n.x = Mathf.Abs(n.x); + n.y = Mathf.Abs(n.y); + n.z = Mathf.Abs(n.z); + + float distance = p.GetDistanceToPoint(boundsCenter); + float radius = Vector3.Dot(boundsExtent, n); + + if (distance + radius < 0) + { + // behind clip plane + entirelyInside = false; + return false; + } + + if (distance > radius) + { + entirelyInsideCount++; + } + } + + mask += mask; + planeIndex++; + } + + entirelyInside = entirelyInsideCount == planes.Length; + return true; + } + + /// + /// Tests component-wise if a Vector2 is in a given range + /// + /// The vector to test + /// The lower bounds + /// The upper bounds + /// true if in range, otherwise false + public static bool InRange(Vector2 vec, Vector2 lower, Vector2 upper) + { + return vec.x >= lower.x && vec.x <= upper.x && vec.y >= lower.y && vec.y <= upper.y; + } + + /// + /// Tests component-wise if a Vector3 is in a given range + /// + /// The vector to test + /// The lower bounds + /// The upper bounds + /// true if in range, otherwise false + public static bool InRange(Vector3 vec, Vector3 lower, Vector3 upper) + { + return vec.x >= lower.x && vec.x <= upper.x && vec.y >= lower.y && vec.y <= upper.y && vec.z >= lower.z && vec.z <= upper.z; + } + + /// + /// Element-wise addition of two Matrix4x4s - extension method + /// + /// matrix + /// matrix + /// element-wise (a+b) + public static Matrix4x4 Add(Matrix4x4 a, Matrix4x4 b) + { + Matrix4x4 result = new Matrix4x4(); + result.SetColumn(0, a.GetColumn(0) + b.GetColumn(0)); + result.SetColumn(1, a.GetColumn(1) + b.GetColumn(1)); + result.SetColumn(2, a.GetColumn(2) + b.GetColumn(2)); + result.SetColumn(3, a.GetColumn(3) + b.GetColumn(3)); + return result; + } + + /// + /// Element-wise subtraction of two Matrix4x4s - extension method + /// + /// matrix + /// matrix + /// element-wise (a-b) + public static Matrix4x4 Subtract(Matrix4x4 a, Matrix4x4 b) + { + Matrix4x4 result = new Matrix4x4(); + result.SetColumn(0, a.GetColumn(0) - b.GetColumn(0)); + result.SetColumn(1, a.GetColumn(1) - b.GetColumn(1)); + result.SetColumn(2, a.GetColumn(2) - b.GetColumn(2)); + result.SetColumn(3, a.GetColumn(3) - b.GetColumn(3)); + return result; + } + + /// + /// find unsigned distance of 3D point to an infinite line + /// + /// ray that specifies an infinite line + /// 3D point + /// unsigned perpendicular distance from point to line + public static float DistanceOfPointToLine(Ray ray, Vector3 point) + { + return Vector3.Cross(ray.direction, point - ray.origin).magnitude; + } + + /// + /// Find 3D point that minimizes distance to 2 lines, midpoint of the shortest perpendicular line segment between them + /// + /// ray that specifies a line + /// ray that specifies a line + /// point nearest to the lines + public static Vector3 NearestPointToLines(Ray p, Ray q) + { + float a = Vector3.Dot(p.direction, p.direction); + float b = Vector3.Dot(p.direction, q.direction); + float c = Vector3.Dot(q.direction, q.direction); + Vector3 w0 = p.origin - q.origin; + float den = a * c - b * b; + float epsilon = 0.00001f; + if (den < epsilon) + { + // parallel, so just average origins + return 0.5f * (p.origin + q.origin); + } + float d = Vector3.Dot(p.direction, w0); + float e = Vector3.Dot(q.direction, w0); + float sc = (b * e - c * d) / den; + float tc = (a * e - b * d) / den; + Vector3 point = 0.5f * (p.origin + sc * p.direction + q.origin + tc * q.direction); + return point; + } + + /// + /// Find 3D point that minimizes distance to a set of 2 or more lines, ignoring outliers + /// + /// list of rays, each specifying a line, must have at least 1 + /// number of iterations: log(1-p)/log(1-(1-E)^s) + /// where p is probability of at least one sample containing s points is all inliers + /// E is proportion of outliers (1-ransac_ratio) + /// e.g. p=0.999, ransac_ratio=0.54, s=2 ==> log(0.001)/(log(1-0.54^2) = 20 + /// + /// minimum distance from point to line for a line to be considered an inlier + /// return number of inliers: lines that are within ransac_threshold of nearest point + /// point nearest to the set of lines, ignoring outliers + public static Vector3 NearestPointToLinesRANSAC(List rays, int ransac_iterations, float ransac_threshold, out int numActualInliers) + { + // start with something, just in case no inliers - this works for case of 1 or 2 rays + Vector3 nearestPoint = NearestPointToLines(rays[0], rays[rays.Count - 1]); + numActualInliers = 0; + if (rays.Count > 2) + { + for (int it = 0; it < ransac_iterations; it++) + { + Vector3 testPoint = NearestPointToLines(rays[Random.Range(0, rays.Count)], rays[Random.Range(0, rays.Count)]); + + // count inliers + int numInliersForIteration = 0; + for (int ind = 0; ind < rays.Count; ++ind) + { + if (DistanceOfPointToLine(rays[ind], testPoint) < ransac_threshold) + ++numInliersForIteration; + } + + // remember best + if (numInliersForIteration > numActualInliers) + { + numActualInliers = numInliersForIteration; + nearestPoint = testPoint; + } + } + } + + // now find and count actual inliers and do least-squares to find best fit + var inlierList = rays.Where(r => DistanceOfPointToLine(r, nearestPoint) < ransac_threshold); + numActualInliers = inlierList.Count(); + if (numActualInliers >= 2) + { + nearestPoint = NearestPointToLinesLeastSquares(inlierList); + } + return nearestPoint; + } + + /// + /// Find 3D point that minimizes distance to a set of 2 or more lines + /// + /// each ray specifies an infinite line + /// point nearest to the set of lines + public static Vector3 NearestPointToLinesLeastSquares(IEnumerable rays) + { + // finding the point nearest to the set of lines specified by rays + // Use the following formula, where u_i are normalized direction + // vectors along each ray and p_i is a point along each ray. + + // -1 + // / ===== \ ===== + // | \ / T\ | \ / T\ + // | > |I - u u | | > |I - u u | p + // | / \ i i/ | / \ i i/ i + // | ===== | ===== + // \ i / i + + Matrix4x4 sumOfProduct = Matrix4x4.zero; + Vector4 sumOfProductTimesDirection = Vector4.zero; + + foreach (Ray r in rays) + { + Vector4 point = r.origin; + Matrix4x4 directionColumnMatrix = new Matrix4x4(); + Vector3 rNormal = r.direction.normalized; + directionColumnMatrix.SetColumn(0, rNormal); + Matrix4x4 directionRowMatrix = directionColumnMatrix.transpose; + Matrix4x4 product = directionColumnMatrix * directionRowMatrix; + Matrix4x4 identityMinusDirectionProduct = Subtract(Matrix4x4.identity, product); + sumOfProduct = Add(sumOfProduct, identityMinusDirectionProduct); + Vector4 vectorProduct = identityMinusDirectionProduct * point; + sumOfProductTimesDirection += vectorProduct; + } + + Matrix4x4 sumOfProductInverse = sumOfProduct.inverse; + Vector3 nearestPoint = sumOfProductInverse * sumOfProductTimesDirection; + return nearestPoint; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs.meta new file mode 100644 index 0000000..fe04fbf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/MathUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d05ac202eaea30445bb88dd80829e91d +timeCreated: 1459051593 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs new file mode 100644 index 0000000..a23e719 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Updates the shader parameters for use in near plade fading. + /// + [ExecuteInEditMode] + public class NearPlaneFade : MonoBehaviour + { + public float FadeDistanceStart = 0.85f; + public float FadeDistanceEnd = 0.5f; + + public bool NearPlaneFadeOn = true; + + private const string FadeKeywordOn = "_NEAR_PLANE_FADE_ON"; + + private int fadeDistancePropertyID; + + private void Start() + { + fadeDistancePropertyID = Shader.PropertyToID("_NearPlaneFadeDistance"); + UpdateShaderParams(); + } + + private void OnValidate() + { + FadeDistanceStart = Mathf.Max(FadeDistanceStart, 0); + FadeDistanceEnd = Mathf.Max(FadeDistanceEnd, 0); + FadeDistanceStart = Mathf.Max(FadeDistanceStart, FadeDistanceEnd); + + UpdateShaderParams(); + } + + private void UpdateShaderParams() + { + float rangeInverse = 1.0f / (FadeDistanceStart - FadeDistanceEnd); + var fadeDist = new Vector4(-FadeDistanceEnd * rangeInverse, rangeInverse, 0, 0); + + Shader.SetGlobalVector(fadeDistancePropertyID, fadeDist); + + if (NearPlaneFadeOn) + { + Shader.EnableKeyword(FadeKeywordOn); + } + else + { + Shader.DisableKeyword(FadeKeywordOn); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs.meta new file mode 100644 index 0000000..24e1725 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/NearPlaneFade.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 722717aa092cb4a4cb8cde6fb8168f23 +timeCreated: 1457988164 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs new file mode 100644 index 0000000..2b63d54 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs @@ -0,0 +1,255 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace HoloToolkit.Unity +{ + /// + /// Min-heap priority queue. In other words, lower priorities will be removed from the queue first. + /// See http://en.wikipedia.org/wiki/Binary_heap for more info. + /// + /// Type for the priority used for ordering. + /// Type of values in the queue. + class PriorityQueue : IEnumerable> + { + public class ValueCollection : IEnumerable + { + private readonly PriorityQueue parentCollection; + + public ValueCollection(PriorityQueue parentCollection) + { + this.parentCollection = parentCollection; + } + + #region IEnumerable + + public IEnumerator GetEnumerator() + { + foreach (KeyValuePair pair in parentCollection) + { + yield return pair.Value; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + } + + private readonly IComparer priorityComparer; + + public PriorityQueue() : this(Comparer.Default) { } + + public PriorityQueue(IComparer comparer) + { + if (comparer == null) + { + throw new ArgumentNullException(); + } + + priorityComparer = comparer; + } + + private readonly List> queue = new List>(); + private ValueCollection valueCollection; + + public ValueCollection Values + { + get + { + if (valueCollection == null) + { + valueCollection = new ValueCollection(this); + } + + return valueCollection; + } + } + + #region IEnumerable + + public IEnumerator> GetEnumerator() + { + return queue.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + + /// + /// Clears the priority queue + /// + public void Clear() + { + queue.Clear(); + } + + /// + /// Add an element to the priority queue. + /// + /// Priority of the element + /// + public void Push(TPriority priority, TValue value) + { + queue.Add(new KeyValuePair(priority, value)); + BubbleUp(); + } + + /// + /// Number of elements in priority queue + /// + public int Count + { + get + { + return queue.Count; + } + } + + /// + /// Get the element with the minimum priority in the queue. The Key in the return value is the priority. + /// + public KeyValuePair Top + { + get + { + return queue[0]; + } + } + + /// + /// Pop the minimal element of the queue. Will fail at runtime if queue is empty. + /// + /// The minmal element + public KeyValuePair Pop() + { + KeyValuePair ret = queue[0]; + queue[0] = queue[queue.Count - 1]; + queue.RemoveAt(queue.Count - 1); + BubbleDown(); + return ret; + } + + /// + /// Returns whether or not the value is contained in the queue + /// + public bool Contains(TValue value) + { + return queue.Any(itm => EqualityComparer.Default.Equals(itm.Value, value)); + } + + /// + /// Removes the first element that equals the value from the queue + /// + public bool Remove(TValue value) + { + int idx = queue.FindIndex(itm => EqualityComparer.Default.Equals(itm.Value, value)); + if (idx == -1) + { + return false; + } + + queue[idx] = queue[queue.Count - 1]; + queue.RemoveAt(queue.Count - 1); + BubbleDown(); + + return true; + } + + /// + /// Removes all elements with this priority from the queue. + /// + /// True if elements were removed + public bool RemoveAtPriority(TPriority priority, Predicate shouldRemove) + { + bool removed = false; + + for (int i = queue.Count - 1; i >= 0; --i) + { + // TODO: early out if key < priority + if (queue[i].Key.Equals(priority) && (shouldRemove == null || shouldRemove(queue[i].Value))) + { + queue[i] = queue[queue.Count - 1]; + queue.RemoveAt(queue.Count - 1); + BubbleDown(); + + removed = true; + } + } + + return removed; + } + + /// + /// Bubble up the last element in the queue until it's in the correct spot. + /// + private void BubbleUp() + { + int node = queue.Count - 1; + while (node > 0) + { + int parent = (node - 1) >> 1; + if (priorityComparer.Compare(queue[parent].Key, queue[node].Key) < 0) + { + break; // we're in the right order, so we're done + } + KeyValuePair tmp = queue[parent]; + queue[parent] = queue[node]; + queue[node] = tmp; + node = parent; + } + } + + /// + /// Bubble down the first element until it's in the correct spot. + /// + private void BubbleDown() + { + int node = 0; + while (true) + { + // Find smallest child + int child0 = (node << 1) + 1; + int child1 = (node << 1) + 2; + int smallest; + if (child0 < queue.Count && child1 < queue.Count) + { + smallest = priorityComparer.Compare(queue[child0].Key, queue[child1].Key) < 0 ? child0 : child1; + } + else if (child0 < queue.Count) + { + smallest = child0; + } + else if (child1 < queue.Count) + { + smallest = child1; + } + else + { + break; // 'node' is a leaf, since both children are outside the array + } + + if (priorityComparer.Compare(queue[node].Key, queue[smallest].Key) < 0) + { + break; // we're in the right order, so we're done. + } + + KeyValuePair tmp = queue[node]; + queue[node] = queue[smallest]; + queue[smallest] = tmp; + node = smallest; + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs.meta new file mode 100644 index 0000000..c707ca0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PriorityQueue.cs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8de00229316af434a98b5a44fad42b71 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs new file mode 100644 index 0000000..0866b11 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.ComponentModel; +using System.Linq.Expressions; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + public static class PropertyChangedEventArgsEx + { + public static PropertyChangedEventArgsEx Create(string propertyName, TProperty oldValue, TProperty newValue) + { + return new PropertyChangedEventArgsEx(propertyName, oldValue, newValue); + } + + public static PropertyChangedEventArgsEx Create(Expression> memberGetter, TProperty oldValue, TProperty newValue) + { + return new PropertyChangedEventArgsEx(memberGetter, oldValue, newValue); + } + } + + [Serializable] + public class PropertyChangedEventArgsEx : PropertyChangedEventArgs + { + public TProperty OldValue { get; private set; } + public TProperty NewValue { get; private set; } + + public PropertyChangedEventArgsEx(string inPropertyName, TProperty inOldValue, TProperty inNewValue) : + base(inPropertyName) + { + OldValue = inOldValue; + NewValue = inNewValue; + } + + public PropertyChangedEventArgsEx(Expression> memberGetter, TProperty inOldValue, TProperty inNewValue) : + this(GetMemberName(memberGetter), inOldValue, inNewValue) + { + // Nothing. + } + + private static string GetMemberName(Expression> memberGetter) + { + Debug.Assert(memberGetter.Body is MemberExpression); + + string memberName = ((MemberExpression)memberGetter.Body).Member.Name; + return memberName; + } + + public override string ToString() + { + return string.Format("{0}: {1} -> {2}", + PropertyName, + OldValue, + NewValue + ); + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs.meta new file mode 100644 index 0000000..27e34a8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/PropertyChangedEventArgsEx.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7a2a3976109bde044bee1ea917f9e8b7 +timeCreated: 1481827150 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs new file mode 100644 index 0000000..db757b2 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs @@ -0,0 +1,74 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +// + +using System.Collections.Generic; + +namespace HoloToolkit.Sharing +{ + /// + /// Extensions methods for the Session class. + /// + public static class SessionExtensions + { + /// + /// Returns an unused username that can be used for this session. + /// + /// Session object for which this is being called. + /// Base name to use for the username. + /// + /// User ID whose username excluded from the unique name check. + /// If not specified, all users in the session will be taken into account to find + /// a unique name. + /// + /// + public static string GetUnusedName(this Session session, string baseName, int excludedUserId = int.MaxValue) + { + List nameList = new List(); + return GetUnusedName(session, baseName, excludedUserId, nameList); + } + + /// + /// Returns an unused username that can be used for this session. + /// + /// Session object for which this is being called. + /// Base name to use for the username. + /// + /// User ID whose username excluded from the unique name check. + /// If not specified, all users in the session will be taken into account to find + /// a unique name. + /// + /// Cached list that can be provided to avoid extra memory allocations. + /// + /// + public static string GetUnusedName(this Session session, string baseName, int excludedUserId, List cachedList) + { + cachedList.Clear(); + + for (int i = 0; i < session.GetUserCount(); i++) + { + using (var user = session.GetUser(i)) + using (var userName = user.GetName()) + { + string userNameString = userName.GetString(); + if (user.GetID() != excludedUserId && userNameString.StartsWith(baseName)) + { + cachedList.Add(userNameString); + } + } + } + + cachedList.Sort(); + + int counter = 0; + string currentName = baseName; + while (cachedList.Contains(currentName)) + { + currentName = baseName + (++counter); + } + + return currentName; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs.meta new file mode 100644 index 0000000..bc9055c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SessionExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 854bfe8b80975784a8f2e564f5fde33c +timeCreated: 1462994153 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs new file mode 100644 index 0000000..8546ffc --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs @@ -0,0 +1,180 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A Tagalong that stays at a fixed distance from the camera and always + /// seeks to have a part of itself in the view frustum of the camera. + /// + [RequireComponent(typeof(BoxCollider), typeof(Interpolator))] + public class SimpleTagalong : MonoBehaviour + { + // Simple Tagalongs seek to stay at a fixed distance from the Camera. + [Tooltip("The distance in meters from the camera for the Tagalong to seek when updating its position.")] + public float TagalongDistance = 2.0f; + [Tooltip("If true, forces the Tagalong to be TagalongDistance from the camera, even if it didn't need to move otherwise.")] + public bool EnforceDistance = true; + + [Tooltip("The speed at which to move the Tagalong when updating its position (meters/second).")] + public float PositionUpdateSpeed = 9.8f; + [Tooltip("When true, the Tagalong's motion is smoothed.")] + public bool SmoothMotion = true; + [Range(0.0f, 1.0f), Tooltip("The factor applied to the smoothing algorithm. 1.0f is super smooth. But slows things down a lot.")] + public float SmoothingFactor = 0.75f; + + // The BoxCollider represents the volume of the object that is tagging + // along. It is a required component. + protected BoxCollider tagalongCollider; + + // The Interpolator is a helper class that handles various changes to an + // object's transform. It is used by Tagalong to adjust the object's + // transform.position. + protected Interpolator interpolator; + + // This is an array of planes that define the camera's view frustum along + // with some helpful indices into the array. The array is updated each + // time through FixedUpdate(). + protected Plane[] frustumPlanes; + protected const int frustumLeft = 0; + protected const int frustumRight = 1; + protected const int frustumBottom = 2; + protected const int frustumTop = 3; + + protected virtual void Start() + { + // Make sure the Tagalong object has a BoxCollider. + tagalongCollider = GetComponent(); + + // Get the Interpolator component and set some default parameters for + // it. These parameters can be adjusted in Unity's Inspector as well. + interpolator = gameObject.GetComponent(); + interpolator.SmoothLerpToTarget = SmoothMotion; + interpolator.SmoothPositionLerpRatio = SmoothingFactor; + } + + protected virtual void Update() + { + // Retrieve the frustum planes from the camera. + frustumPlanes = GeometryUtility.CalculateFrustumPlanes(Camera.main); + + // Determine if the Tagalong needs to move based on whether its + // BoxCollider is in or out of the camera's view frustum. + Vector3 tagalongTargetPosition; + if (CalculateTagalongTargetPosition(transform.position, out tagalongTargetPosition)) + { + // Derived classes will use the same Interpolator and may have + // adjusted its PositionUpdateSpeed for some other purpose. + // Restore the value we care about and tell the Interpolator + // to move the Tagalong to its new target position. + interpolator.PositionPerSecond = PositionUpdateSpeed; + interpolator.SetTargetPosition(tagalongTargetPosition); + } + else if (!interpolator.Running && EnforceDistance) + { + // If the Tagalong is inside the camera's view frustum, and it is + // supposed to stay a fixed distance from the camera, force the + // tagalong to that location (without using the Interpolator). + Ray ray = new Ray(Camera.main.transform.position, transform.position - Camera.main.transform.position); + transform.position = ray.GetPoint(TagalongDistance); + } + } + + /// + /// Determines if the Tagalong needs to move based on the provided + /// position. + /// + /// Where the Tagalong is. + /// Where the Tagalong needs to go. + /// True if the Tagalong needs to move to satisfy requirements; false otherwise. + protected virtual bool CalculateTagalongTargetPosition(Vector3 fromPosition, out Vector3 toPosition) + { + // Check to see if any part of the Tagalong's BoxCollider's bounds is + // inside the camera's view frustum. Note, the bounds used are an Axis + // Aligned Bounding Box (AABB). + bool needsToMove = !GeometryUtility.TestPlanesAABB(frustumPlanes, tagalongCollider.bounds); + + // If we already know we don't need to move, bail out early. + if (!needsToMove) + { + toPosition = fromPosition; + return false; + } + + // Calculate a default position where the Tagalong should go. In this + // case TagalongDistance from the camera along the gaze vector. + toPosition = Camera.main.transform.position + Camera.main.transform.forward * TagalongDistance; + + // Create a Ray and set it's origin to be the default toPosition that + // was calculated above. + Ray ray = new Ray(toPosition, Vector3.zero); + Plane plane = new Plane(); + float distanceOffset = 0f; + + // Determine if the Tagalong needs to move to the right or the left + // to get back inside the camera's view frustum. The normals of the + // planes that make up the camera's view frustum point inward. + bool moveRight = frustumPlanes[frustumLeft].GetDistanceToPoint(fromPosition) < 0; + bool moveLeft = frustumPlanes[frustumRight].GetDistanceToPoint(fromPosition) < 0; + if (moveRight) + { + // If the Tagalong needs to move to the right, that means it is to + // the left of the left frustum plane. Remember that plane and set + // our Ray's direction to point towards that plane (remember the + // Ray's origin is already inside the view frustum. + plane = frustumPlanes[frustumLeft]; + ray.direction = -Camera.main.transform.right; + } + else if (moveLeft) + { + // Apply similar logic to above for the case where the Tagalong + // needs to move to the left. + plane = frustumPlanes[frustumRight]; + ray.direction = Camera.main.transform.right; + } + if (moveRight || moveLeft) + { + // If the Tagalong needed to move in the X direction, cast a Ray + // from the default position to the plane we are working with. + plane.Raycast(ray, out distanceOffset); + + // Get the point along that ray that is on the plane and update + // the x component of the Tagalong's desired position. + toPosition.x = ray.GetPoint(distanceOffset).x; + } + + // Similar logic follows below for determining if and how the + // Tagalong would need to move up or down. + bool moveDown = frustumPlanes[frustumTop].GetDistanceToPoint(fromPosition) < 0; + bool moveUp = frustumPlanes[frustumBottom].GetDistanceToPoint(fromPosition) < 0; + if (moveDown) + { + plane = frustumPlanes[frustumTop]; + ray.direction = Camera.main.transform.up; + } + else if (moveUp) + { + plane = frustumPlanes[frustumBottom]; + ray.direction = -Camera.main.transform.up; + } + if (moveUp || moveDown) + { + plane.Raycast(ray, out distanceOffset); + toPosition.y = ray.GetPoint(distanceOffset).y; + } + + // Create a ray that starts at the camera and points in the direction + // of the calculated toPosition. + ray = new Ray(Camera.main.transform.position, toPosition - Camera.main.transform.position); + + // Find the point along that ray that is the right distance away and + // update the calculated toPosition to be that point. + toPosition = ray.GetPoint(TagalongDistance); + + // If we got here, needsToMove will be true. + return needsToMove; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs.meta new file mode 100644 index 0000000..001d084 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SimpleTagalong.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2be8bd2ebd8277c448d6d81c75517fee +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs new file mode 100644 index 0000000..fb176a3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Singleton behaviour class, used for components that should only have one instance + /// + /// + public class Singleton : MonoBehaviour where T : Singleton + { + private static T instance; + public static T Instance + { + get + { + return instance; + } + } + + /// + /// Returns whether the instance has been initialized or not. + /// + public static bool IsInitialized + { + get + { + return instance != null; + } + } + + /// + /// Base awake method that sets the singleton's unique instance. + /// + protected virtual void Awake() + { + if (instance != null) + { + Debug.LogErrorFormat("Trying to instantiate a second instance of singleton class {0}", GetType().Name); + } + else + { + instance = (T) this; + } + } + + protected virtual void OnDestroy() + { + if (instance == this) + { + instance = null; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs.meta new file mode 100644 index 0000000..0138650 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Singleton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b0ed29a95096a25448535f8df9cf0423 +timeCreated: 1455735878 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs new file mode 100644 index 0000000..5cd6c2c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A Tagalong that stays at a fixed distance from the camera and always + /// seeks to stay on the edge or inside a sphere that is straight in front of the camera. + /// + public class SphereBasedTagalong : MonoBehaviour + { + [Tooltip("Sphere radius.")] + public float SphereRadius = 1.0f; + + [Tooltip("How fast the object will move to the target position.")] + public float MoveSpeed = 2.0f; + + [Tooltip("When moving, use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + [Tooltip("Display the sphere in red wireframe for debugging purposes.")] + public bool DebugDisplaySphere = false; + + [Tooltip("Display a small green cube where the target position is.")] + public bool DebugDisplayTargetPosition = false; + + private Vector3 targetPosition; + private Vector3 optimalPosition; + private float initialDistanceToCamera; + + void Start() + { + initialDistanceToCamera = Vector3.Distance(this.transform.position, Camera.main.transform.position); + } + + void Update() + { + optimalPosition = Camera.main.transform.position + Camera.main.transform.forward * initialDistanceToCamera; + + Vector3 offsetDir = this.transform.position - optimalPosition; + if (offsetDir.magnitude > SphereRadius) + { + targetPosition = optimalPosition + offsetDir.normalized * SphereRadius; + + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + this.transform.position = Vector3.Lerp(this.transform.position, targetPosition, MoveSpeed * deltaTime); + } + } + + public void OnDrawGizmos() + { + if (Application.isPlaying == false) return; + + Color oldColor = Gizmos.color; + + if (DebugDisplaySphere) + { + Gizmos.color = Color.red; + Gizmos.DrawWireSphere(optimalPosition, SphereRadius); + } + + if (DebugDisplayTargetPosition) + { + Gizmos.color = Color.green; + Gizmos.DrawCube(targetPosition, new Vector3(0.1f, 0.1f, 0.1f)); + } + + Gizmos.color = oldColor; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs.meta new file mode 100644 index 0000000..ce966e8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/SphereBasedTagalong.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 456eda422e1dc4c4cb4fd6c25cbc2fbd +timeCreated: 1471277822 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs new file mode 100644 index 0000000..ca5cdc5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs @@ -0,0 +1,270 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using HoloToolkit.Unity.InputModule; +using UnityEngine; +using UnityEngine.VR.WSA; + +namespace HoloToolkit.Unity +{ + /// + /// StabilizationPlaneModifier handles the setting of the stabilization plane in several ways. + /// + public class StabilizationPlaneModifier : Singleton + { + [Tooltip("Checking enables SetFocusPointForFrame to set the stabilization plane.")] + public bool SetStabilizationPlane = true; + + [Tooltip("When lerping, use unscaled time. This is useful for games that have a pause mechanism or otherwise adjust the game timescale.")] + public bool UseUnscaledTime = true; + + [Tooltip("Lerp speed when moving focus point closer.")] + public float LerpStabilizationPlanePowerCloser = 4.0f; + + [Tooltip("Lerp speed when moving focus point farther away.")] + public float LerpStabilizationPlanePowerFarther = 7.0f; + + [SerializeField, Tooltip("Used to temporarily override the location of the stabilization plane.")] + private Transform targetOverride; + public Transform TargetOverride + { + get + { + return targetOverride; + } + set + { + if (targetOverride != value) + { + targetOverride = value; + if (targetOverride) + { + targetOverridePreviousPosition = targetOverride.position; + } + } + } + } + + [SerializeField, Tooltip("Keeps track of position-based velocity for the target object.")] + private bool trackVelocity; + public bool TrackVelocity + { + get + { + return trackVelocity; + } + set + { + trackVelocity = value; + if (TargetOverride) + { + targetOverridePreviousPosition = TargetOverride.position; + } + } + } + + [Tooltip("Use the GazeManager class to set the plane to the gazed upon hologram. If disabled, the plane will always be at a constant distance.")] + public bool UseGazeManager = true; + + [Tooltip("Default distance to set plane if plane is gaze-locked or if no object is hit.")] + public float DefaultPlaneDistance = 2.0f; + + [Tooltip("Visualize the plane at runtime.")] + public bool DrawGizmos; + + /// + /// Position of the plane in world space. + /// + private Vector3 planePosition; + + /// + /// Current distance of the plane from the user's head. Only used when not using the target override + /// or the GazeManager to set the plane's position. + /// + private float currentPlaneDistance = 4.0f; + + /// + /// Tracks the previous position of the target override object. Used if velocity is being tracked. + /// + private Vector3 targetOverridePreviousPosition; + + /// + /// Updates the focus point for every frame after all objects have finished moving. + /// + private void LateUpdate() + { + if (SetStabilizationPlane) + { + float deltaTime = UseUnscaledTime + ? Time.unscaledDeltaTime + : Time.deltaTime; + + if (TargetOverride != null) + { + ConfigureTransformOverridePlane(deltaTime); + } + else if (UseGazeManager) + { + ConfigureGazeManagerPlane(deltaTime); + } + else + { + ConfigureFixedDistancePlane(deltaTime); + } + } + } + + /// + /// Called by Unity when this script is loaded or a value is changed in the inspector. + /// Only called in editor, ensures that the property values always match the corresponding member variables. + /// + private void OnValidate() + { + TrackVelocity = trackVelocity; + TargetOverride = targetOverride; + } + + /// + /// Gets the origin of the gaze for purposes of placing the stabilization plane + /// + private Vector3 GazeOrigin + { + get + { + if (GazeManager.Instance != null) + { + return GazeManager.Instance.GazeOrigin; + } + return Camera.main.transform.position; + } + } + + /// + /// Gets the direction of the gaze for purposes of placing the stabilization plane + /// + private Vector3 GazeNormal + { + get + { + if (GazeManager.Instance != null) + { + return GazeManager.Instance.GazeNormal; + } + return Camera.main.transform.forward; + } + } + + /// + /// Gets the position hit on the object the user is gazing at, if gaze tracking is supported. + /// + /// The position at which gaze ray intersects with an object. + /// True if gaze is supported and an object was hit by gaze, otherwise false. + private bool TryGetGazeHitPosition(out Vector3 hitPosition) + { + if (GazeManager.Instance != null) + { + hitPosition = GazeManager.Instance.HitPosition; + return true; + } + hitPosition = Vector3.zero; + return false; + } + + /// + /// Configures the stabilization plane to update its position based on an object in the scene. + /// + private void ConfigureTransformOverridePlane(float deltaTime) + { + planePosition = TargetOverride.position; + + Vector3 velocity = Vector3.zero; + if (TrackVelocity) + { + velocity = UpdateVelocity(deltaTime); + } + + // Place the plane at the desired depth in front of the user and billboard it to the gaze origin. + HolographicSettings.SetFocusPointForFrame(planePosition, -GazeNormal, velocity); + } + + /// + /// Configures the stabilization plane to update its position based on what your gaze intersects in the scene. + /// + private void ConfigureGazeManagerPlane(float deltaTime) + { + Vector3 gazeOrigin = GazeOrigin; + Vector3 gazeDirection = GazeNormal; + + // Calculate the delta between gaze origin's position and current hit position. If no object is hit, use default distance. + float focusPointDistance; + Vector3 gazeHitPosition; + if (TryGetGazeHitPosition(out gazeHitPosition)) + { + focusPointDistance = (gazeOrigin - gazeHitPosition).magnitude; + } + else + { + focusPointDistance = DefaultPlaneDistance; + } + + float lerpPower = focusPointDistance > currentPlaneDistance ? LerpStabilizationPlanePowerFarther + : LerpStabilizationPlanePowerCloser; + + // Smoothly move the focus point from previous hit position to new position. + currentPlaneDistance = Mathf.Lerp(currentPlaneDistance, focusPointDistance, lerpPower * deltaTime); + + planePosition = gazeOrigin + (gazeDirection * currentPlaneDistance); + + HolographicSettings.SetFocusPointForFrame(planePosition, -gazeDirection, Vector3.zero); + } + + /// + /// Configures the stabilization plane to update based on a fixed distance away from you. + /// + private void ConfigureFixedDistancePlane(float deltaTime) + { + Vector3 gazeOrigin = GazeOrigin; + Vector3 gazeNormal = GazeNormal; + + float lerpPower = DefaultPlaneDistance > currentPlaneDistance ? LerpStabilizationPlanePowerFarther + : LerpStabilizationPlanePowerCloser; + + // Smoothly move the focus point from previous hit position to new position. + currentPlaneDistance = Mathf.Lerp(currentPlaneDistance, DefaultPlaneDistance, lerpPower * deltaTime); + + planePosition = gazeOrigin + (gazeNormal * currentPlaneDistance); + HolographicSettings.SetFocusPointForFrame(planePosition, -gazeNormal, Vector3.zero); + } + + /// + /// Tracks the velocity of the target object to be used as a hint for the plane stabilization. + /// + private Vector3 UpdateVelocity(float deltaTime) + { + // Roughly calculate the velocity based on previous position, current position, and frame time. + Vector3 velocity = (TargetOverride.position - targetOverridePreviousPosition) / deltaTime; + targetOverridePreviousPosition = TargetOverride.position; + return velocity; + } + + /// + /// When in editor, draws a magenta quad that visually represents the stabilization plane. + /// + private void OnDrawGizmos() + { + if (Application.isPlaying && DrawGizmos) + { + Vector3 focalPlaneNormal = -GazeNormal; + Vector3 planeUp = Vector3.Cross(Vector3.Cross(focalPlaneNormal, Vector3.up), focalPlaneNormal); + Gizmos.matrix = Matrix4x4.TRS(planePosition, Quaternion.LookRotation(focalPlaneNormal, planeUp), new Vector3(4.0f, 3.0f, 0.01f)); + + Color gizmoColor = Color.magenta; + gizmoColor.a = 0.5f; + Gizmos.color = gizmoColor; + + Gizmos.DrawWireCube(Vector3.zero, Vector3.one); + Gizmos.DrawCube(Vector3.zero, Vector3.one); + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs.meta new file mode 100644 index 0000000..a19f72c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/StabilizationPlaneModifier.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 37870ab7a81bfb74b9fa277cf45b06d2 +timeCreated: 1465862848 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs new file mode 100644 index 0000000..cc8e467 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs @@ -0,0 +1,401 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A Tagalong that extends SimpleTagalong that allows for specifying the + /// minimum and target percentage of the object to keep in the view frustum + /// of the camera and that keeps the Tagalong object in front of other + /// holograms including the Spatial Mapping Mesh. + /// + public class Tagalong : SimpleTagalong + { + // These members allow for specifying target and minimum percentage in + // the FOV. + [Range(0.0f, 1.0f), Tooltip("The minimum horizontal percentage visible before the object starts tagging along.")] + public float MinimumHorizontalOverlap = 0.1f; + [Range(0.0f, 1.0f), Tooltip("The target horizontal percentage the Tagalong attempts to achieve.")] + public float TargetHorizontalOverlap = 1.0f; + [Range(0.0f, 1.0f), Tooltip("The minimum vertical percentage visible before the object starts tagging along.")] + public float MinimumVerticalOverlap = 0.1f; + [Range(0.0f, 1.0f), Tooltip("The target vertical percentage the Tagalong attempts to achieve.")] + public float TargetVerticalOverlap = 1.0f; + + // These members control how many rays to cast when looking for + // collisions with other holograms. + [Range(3, 11), Tooltip("The number of rays to cast horizontally across the Tagalong.")] + public int HorizontalRayCount = 3; + [Range(3, 11), Tooltip("The number of rays to cast vertically across the Tagalong.")] + public int VerticalRayCount = 3; + + [Tooltip("Don't allow the Tagalong to come closer than this distance.")] + public float MinimumTagalongDistance = 1.0f; + [Tooltip("When true, the Tagalong object maintains a fixed angular size.")] + public bool MaintainFixedSize = true; + + [Tooltip("The speed to update the Tagalong's distance when compensating for depth (meters/second).")] + public float DepthUpdateSpeed = 4.0f; + + private float defaultTagalongDistance; + + // These members are useful for debugging the Tagalong in Unity's + // editor or the HoloLens. + [Tooltip("Set to true to draw lines of interest in Unity's scene view during play-mode.")] + public bool DebugDrawLines = false; + [Tooltip("Useful for visualizing the Raycasts used for determining the depth to place the Tagalong. Set to 'None' to disable.")] + public Light DebugPointLight; + + protected override void Start() + { + base.Start(); + + // Remember the default for distance. + defaultTagalongDistance = TagalongDistance; + + // If the specified minimum distance for the tagalong would be within the + // camera's near clipping plane, adjust it to be 10% beyond the near + // clipping plane. + if (Camera.main.nearClipPlane > MinimumTagalongDistance) + { + MinimumTagalongDistance = Camera.main.nearClipPlane * 1.1f; + } + + // The EnforceDistance functionality of the SimmpleTagalong has a + // detrimental effect on this Tagalong's desired behavior. + // Disable that behavior here. + EnforceDistance = false; + + // Add the FixedAngularSize script if MaintainFixedSize is true. + if (MaintainFixedSize) + { + gameObject.AddComponent(); + } + } + + protected override void Update() + { + base.Update(); + + if (!interpolator.AnimatingPosition) + { + // If we aren't animating towards a new position, check to see if + // we need to update the Tagalong's position because it is behind + // some other hologram or the Spatial Mapping mesh. + Vector3 newPosition; + if (AdjustTagalongDistance(out newPosition)) + { + interpolator.PositionPerSecond = DepthUpdateSpeed; + interpolator.SetTargetPosition(newPosition); + TagalongDistance = Mathf.Min(defaultTagalongDistance, Vector3.Distance(Camera.main.transform.position, newPosition)); + } + } + } + + protected override bool CalculateTagalongTargetPosition(Vector3 fromPosition, out Vector3 toPosition) + { + bool needsToMoveX = false; + bool needsToMoveY = false; + toPosition = fromPosition; + + // Cache some things that we will need later. + Transform cameraTransform = Camera.main.transform; + Vector3 cameraPosition = cameraTransform.position; + + // Get the bounds of the Tagalong's collider. + Bounds colliderBounds = tagalongCollider.bounds; + + // Default the new position to be the current position. + Vector3 newToPosition = tagalongCollider.bounds.center; + + // Adjust the center of the bounds to be TagalongDistance away from + // the camera. We will use this point instead of tranform.position for + // the rest of our calculations. + Ray rayTemp = new Ray(cameraPosition, colliderBounds.center - cameraPosition); + colliderBounds.center = rayTemp.GetPoint(TagalongDistance); + +#if UNITY_EDITOR + DebugDrawColliderBox(DebugDrawLines, colliderBounds); +#endif // UNITY_EDITOR + + // Get the actual width and height of the Tagalong's BoxCollider. + float width = tagalongCollider.size.x * transform.lossyScale.x; + float height = tagalongCollider.size.y * transform.lossyScale.y; + + // Determine if the Tagalong is to the left or right of the Camera's + // forward vector. + Plane verticalCenterPlane = new Plane(cameraTransform.right, cameraPosition + cameraTransform.forward); + bool tagalongIsRightOfCenter = verticalCenterPlane.GetDistanceToPoint(colliderBounds.center) > 0; + + // Based on left/right of center choose the appropriate directional + // vector and frustum plane for the rest of our horizontal calculations. + Vector3 horizontalTowardCenter = tagalongIsRightOfCenter ? -transform.right : transform.right; + Plane verticalFrustumPlane = tagalongIsRightOfCenter ? frustumPlanes[frustumRight] : frustumPlanes[frustumLeft]; + + // Find the edge of the collider that is closest to the center plane. + Vector3 centermostHorizontalEdge = colliderBounds.center + (horizontalTowardCenter * (width / 2f)); + + // Find the point on the collider that is the MinimumHorizontalOverlap + // as percentage away from the centermostHorizontalEdge. + Vector3 targetPoint = centermostHorizontalEdge + (-horizontalTowardCenter * (width * MinimumHorizontalOverlap)); + + // If the calculated targetPoint is outside the verticalFrustumPlane + // of interest, we need to move the tagalong so it is at least + // TargetHorizontalOverlap inside the view frustum. + needsToMoveX = verticalFrustumPlane.GetDistanceToPoint(targetPoint) < 0; + if (needsToMoveX || DebugDrawLines) + { + // Calculate the new target position, ignoring the vertical. + Vector3 newCalculatedTargetPosition = + CalculateTargetPosition(true, centermostHorizontalEdge, horizontalTowardCenter, width, + colliderBounds.center, verticalFrustumPlane, tagalongIsRightOfCenter); + + if (needsToMoveX) + { + newToPosition.x = newCalculatedTargetPosition.x; + newToPosition.z = newCalculatedTargetPosition.z; + } + } + + // Repeat everything we did above, but for the vertical dimension. + // Comments will be abbreviated. + + colliderBounds = tagalongCollider.bounds; + rayTemp = new Ray(cameraPosition, colliderBounds.center - cameraPosition); + colliderBounds.center = rayTemp.GetPoint(TagalongDistance); + Plane horizontalCenterPlane = new Plane(cameraTransform.up, cameraPosition + cameraTransform.forward); + bool tagalongIsAboveCenter = horizontalCenterPlane.GetDistanceToPoint(colliderBounds.center) > 0; + Vector3 verticalTowardCenter = tagalongIsAboveCenter ? -transform.up : transform.up; + Plane horizontalFrustumPlane = tagalongIsAboveCenter ? frustumPlanes[frustumTop] : frustumPlanes[frustumBottom]; + Vector3 centermostVerticalEdge = colliderBounds.center + (verticalTowardCenter * (height / 2f)); + targetPoint = centermostVerticalEdge + (-verticalTowardCenter * (height * MinimumVerticalOverlap)); + // We've determined the Tagalong needs to move in the YZ plane. + needsToMoveY = horizontalFrustumPlane.GetDistanceToPoint(targetPoint) < 0; + if (needsToMoveY || DebugDrawLines) + { + // Calculate the new target position, ignoring the vertical. + Vector3 newCalculatedTargetPosition = + CalculateTargetPosition(false, centermostVerticalEdge, verticalTowardCenter, height, + colliderBounds.center, horizontalFrustumPlane, !tagalongIsAboveCenter); + if (needsToMoveY) + { + newToPosition.y = newCalculatedTargetPosition.y; + newToPosition.z = newCalculatedTargetPosition.z; + } + } + + if (needsToMoveX || needsToMoveY) + { + Ray ray = new Ray(cameraPosition, newToPosition - cameraPosition); + toPosition = ray.GetPoint(TagalongDistance); + } + + return needsToMoveX || needsToMoveY; + } + + /// + /// Calculates a target position for the Tagalong in either the horizontal or vertical direction. + /// + /// If true, the calculate horizontally; vertically otherwise. + /// A point along the collider that is the closest to the center of the FOV. + /// A vector that points from the Tagalong toward the center of the FOV. + /// The actual width of the object's collider. + /// The center of the bounding box that surrounds the collider. + /// The edge of the frustum we are tagging along towards. + /// True if the tagalong is to the right of or below the center of the FOV; false otherwise. + /// The new target position for the Tagalong. + private Vector3 CalculateTargetPosition(bool isHorizontal, Vector3 centermostEdge, Vector3 vectorTowardCenter, float width, + Vector3 center, Plane frustumPlane, bool invertAngle) + { + Transform cameraTransform = Camera.main.transform; + Vector3 cameraPosition = cameraTransform.position; + + // The target overlap can't be less than the minimum overlap. Pick + // the bigger of the two. + float desiredOverlap = isHorizontal + ? Mathf.Max(MinimumHorizontalOverlap, TargetHorizontalOverlap) + : Mathf.Max(MinimumVerticalOverlap, TargetVerticalOverlap); + + // Recalculate the targetPoint so it has the desired overlap. + Vector3 targetPoint = centermostEdge + (-vectorTowardCenter * (width * desiredOverlap)); + + // Find a point on the frustum we care about. Start with a point + // in front of the camera and cast a ray from there to the frustum. + Vector3 centeredPoint = cameraPosition + cameraTransform.forward * TagalongDistance; + Ray rayTemp = new Ray(centeredPoint, (invertAngle ? 1 : -1) * (isHorizontal ? cameraTransform.right : cameraTransform.up)); + float distToFrustum = 0.0f; + frustumPlane.Raycast(rayTemp, out distToFrustum); + Vector3 pointOnFrustum = rayTemp.GetPoint(distToFrustum); + + // Adjust the point found on the frustum plane to be the same + // distance from the camera as targetPoint is, but still on the + // frustum plane. + rayTemp = new Ray(cameraPosition, pointOnFrustum - cameraPosition); + float distanceToTarget = Vector3.Distance(cameraPosition, targetPoint); + Vector3 recalculatedPointOnFrustum = rayTemp.GetPoint(distanceToTarget); + + // Find the new calculated target position. First get the rotation + // between the target and center of the collider. + Quaternion rotQuat = Quaternion.FromToRotation(targetPoint - cameraPosition, center - cameraPosition); + // Create the vector we want to rotate. + Vector3 vectorToRotate = recalculatedPointOnFrustum - cameraPosition; + // Create the new target position. + Vector3 newCalculatedTargetPosition = cameraPosition + rotQuat * vectorToRotate; + +#if UNITY_EDITOR + DebugDrawDebuggingLines(DebugDrawLines, center, cameraPosition, + cameraPosition + (targetPoint - cameraPosition), + centeredPoint, pointOnFrustum, recalculatedPointOnFrustum, + newCalculatedTargetPosition); +#endif // UNITY_EDITOR + + return newCalculatedTargetPosition; + } + + private bool AdjustTagalongDistance(out Vector3 newPosition) + { + bool needsUpdating = false; + + // Get the actual width and height of the Tagalong's BoxCollider. + float width = tagalongCollider.size.x * transform.lossyScale.x; + float height = tagalongCollider.size.y * transform.lossyScale.y; + + Vector3 cameraPosition = Camera.main.transform.position; + + // Find the lower-left corner of the Tagalong's BoxCollider. + Vector3 lowerLeftCorner = transform.position - (transform.right * (width / 2)) - (transform.up * (height / 2)); + + // Cast a grid of rays across the Tagalong's collider. Keep track of + // of the closest hit, ignoring collisions with ourselves and those + // that are closer than MinimumColliderDistance. + RaycastHit closestHit = new RaycastHit(); + float closestHitDistance = float.PositiveInfinity; + RaycastHit[] allHits; + for (int x = 0; x < HorizontalRayCount; x++) + { + Vector3 xCoord = lowerLeftCorner + transform.right * (x * width / (HorizontalRayCount - 1)); + for (int y = 0; y < VerticalRayCount; y++) + { + Vector3 targetCoord = xCoord + transform.up * (y * height / (VerticalRayCount - 1)); + + allHits = Physics.RaycastAll(cameraPosition, targetCoord - cameraPosition, defaultTagalongDistance * 1.5f); + for (int h = 0; h < allHits.Length; h++) + { + if (allHits[h].distance >= MinimumTagalongDistance && + allHits[h].distance < closestHitDistance && + !allHits[h].transform.IsChildOf(transform)) + { + closestHit = allHits[h]; + closestHitDistance = closestHit.distance; + if (DebugPointLight != null) + { + Light clonedLight = Instantiate(DebugPointLight, closestHit.point, Quaternion.identity) as Light; + clonedLight.color = Color.red; + DestroyObject(clonedLight, 1.0f); + } +#if UNITY_EDITOR + DebugDrawLine(DebugDrawLines, cameraPosition, targetCoord, Color.red); +#endif // UNITY_EDITOR + } + } + } + } + + // If we hit something, the closestHitDistance will be < infinity. + needsUpdating = closestHitDistance < float.PositiveInfinity; + if (needsUpdating) + { + // The closestHitDistance is a straight-line from the camera to the + // point on the collider that was hit. Unless the closest hit was + // encountered on the center Raycast, using the distance found will + // actually push the tagalong too far away, and part of the object + // that was hit will show through the Tagalong. We can fix that + // with a little thing we like to call Trigonometry. + Vector3 cameraToTransformPosition = transform.position - cameraPosition; + Vector3 cameraToClosestHitPoint = closestHit.point - cameraPosition; + float angleBetween = Vector3.Angle(cameraToTransformPosition, cameraToClosestHitPoint); + closestHitDistance = closestHitDistance * Mathf.Cos(angleBetween * Mathf.Deg2Rad); + + // Make sure we aren't trying to move too close. + closestHitDistance = Mathf.Max(closestHitDistance, MinimumTagalongDistance); + } + else if (TagalongDistance != defaultTagalongDistance) + { + // If we didn't hit anything but the TagalongDistance is different + // from the defaultTagalongDistance, we still need to update. + needsUpdating = true; + closestHitDistance = defaultTagalongDistance; + } + + newPosition = cameraPosition + (transform.position - cameraPosition).normalized * closestHitDistance; + return needsUpdating; + } + +#if UNITY_EDITOR + protected void DebugDrawLine(bool draw, Vector3 start, Vector3 end) + { + DebugDrawLine(draw, start, end, Color.white); + } + + protected void DebugDrawLine(bool draw, Vector3 start, Vector3 end, Color color) + { + if (draw) + { + Debug.DrawLine(start, end, color); + } + } + + /// + /// This function draws a box at the bounds provided. + /// + /// If true, drawing happens. + /// The bounds to draw the box. + void DebugDrawColliderBox(bool draw, Bounds colliderBounds) + { + Vector3 extents = colliderBounds.extents; + + Vector3 frontUpperLeft, backUpperLeft, backUpperRight, frontUpperRight; + frontUpperLeft = colliderBounds.center + new Vector3(-extents.x, extents.y, -extents.z); + backUpperLeft = colliderBounds.center + new Vector3(-extents.x, extents.y, extents.z); + backUpperRight = colliderBounds.center + new Vector3(extents.x, extents.y, extents.z); + frontUpperRight = colliderBounds.center + new Vector3(extents.x, extents.y, -extents.z); + + DebugDrawLine(draw, frontUpperLeft, backUpperLeft, Color.blue); + DebugDrawLine(draw, backUpperLeft, backUpperRight, Color.red); + DebugDrawLine(draw, backUpperRight, frontUpperRight, Color.blue); + DebugDrawLine(draw, frontUpperRight, frontUpperLeft, Color.red); + + Vector3 frontLowerLeft, backLowerLeft, backLowerRight, frontLowerRight; + frontLowerLeft = colliderBounds.center + new Vector3(-extents.x, -extents.y, -extents.z); + backLowerLeft = colliderBounds.center + new Vector3(-extents.x, -extents.y, extents.z); + backLowerRight = colliderBounds.center + new Vector3(extents.x, -extents.y, extents.z); + frontLowerRight = colliderBounds.center + new Vector3(extents.x, -extents.y, -extents.z); + + DebugDrawLine(draw, frontLowerLeft, backLowerLeft, Color.blue); + DebugDrawLine(draw, backLowerLeft, backLowerRight, Color.red); + DebugDrawLine(draw, backLowerRight, frontLowerRight, Color.blue); + DebugDrawLine(draw, frontLowerRight, frontLowerLeft, Color.red); + + DebugDrawLine(draw, frontUpperLeft, frontLowerLeft, Color.green); + DebugDrawLine(draw, backUpperLeft, backLowerLeft, Color.green); + DebugDrawLine(draw, backUpperRight, backLowerRight, Color.green); + DebugDrawLine(draw, frontUpperRight, frontLowerRight, Color.green); + } + + void DebugDrawDebuggingLines(bool draw, Vector3 center, Vector3 cameraPosition, + Vector3 cameraToTarget, + Vector3 centeredPoint, Vector3 pointOnFrustum, Vector3 recalculatedPointOnFrustum, + Vector3 calculatedPosition) + { + DebugDrawLine(draw, cameraPosition, center, Color.blue); + DebugDrawLine(draw, cameraPosition, cameraToTarget, Color.yellow); + DebugDrawLine(draw, cameraPosition, centeredPoint, Color.red); + DebugDrawLine(draw, centeredPoint, pointOnFrustum, Color.red); + DebugDrawLine(draw, cameraPosition, recalculatedPointOnFrustum, Color.red); + DebugDrawLine(draw, cameraPosition, calculatedPosition, Color.cyan); + } +#endif // UNITY_EDITOR + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs.meta new file mode 100644 index 0000000..fa3a0ab --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Tagalong.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1c655338633f4544180b3d90a593ac17 +timeCreated: 1455735877 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs new file mode 100644 index 0000000..2dab634 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs @@ -0,0 +1,422 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using System; +using UnityEngine; + +#if !UNITY_EDITOR && UNITY_METRO +using Windows.Foundation; +using Windows.Media.SpeechSynthesis; +using Windows.Storage.Streams; +using System.Linq; +using System.Threading.Tasks; +#endif + +namespace HoloToolkit.Unity +{ + /// + /// The well-know voices that can be used by . + /// + public enum TextToSpeechVoice + { + /// + /// The default system voice. + /// + Default, + + /// + /// Microsoft David Mobile + /// + David, + + /// + /// Microsoft Mark Mobile + /// + Mark, + + /// + /// Microsoft Zira Mobile + /// + Zira, + } + + /// + /// Enables text to speech using the Windows 10 class. + /// + /// + /// generates speech as a . + /// This class converts that stream into a Unity and plays the clip using + /// the you supply in the inspector. This allows you to position the voice + /// as desired in 3D space. One recommended approach is to place the AudioSource on an empty + /// GameObject that is a child of Main Camera and position it approximately 0.6 units above the + /// camera. This orientation will sound similar to Cortana's speech in the OS. + /// + public class TextToSpeechManager : MonoBehaviour + { + // Inspector Variables + [Tooltip("The audio source where speech will be played.")] + [SerializeField] + private AudioSource audioSource; + + [Tooltip("The voice that will be used to generate speech.")] + [SerializeField] + private TextToSpeechVoice voice; + + // Member Variables +#if !UNITY_EDITOR && UNITY_METRO + private SpeechSynthesizer synthesizer; + private VoiceInformation voiceInfo; +#endif + + // Static Helper Methods + + /// + /// Converts two bytes to one float in the range -1 to 1 + /// + /// + /// The first byte. + /// + /// + /// The second byte. + /// + /// + /// The converted float. + /// + static private float BytesToFloat(byte firstByte, byte secondByte) + { + // Convert two bytes to one short (little endian) + short s = (short)((secondByte << 8) | firstByte); + + // Convert to range from -1 to (just below) 1 + return s / 32768.0F; + } + + /// + /// Converts an array of bytes to an integer. + /// + /// + /// The byte array. + /// + /// + /// An offset to read from. + /// + /// + /// The converted int. + /// + static private int BytesToInt(byte[] bytes, int offset = 0) + { + int value = 0; + for (int i = 0; i < 4; i++) + { + value |= ((int)bytes[offset + i]) << (i * 8); + } + return value; + } + + /// + /// Dynamically creates an that represents raw Unity audio data. + /// + /// + /// The name of the dynamically generated clip. + /// + /// + /// Raw Unity audio data. + /// + /// + /// The number of samples in the audio data. + /// + /// + /// The frequency of the audio data. + /// + /// + /// The . + /// + static private AudioClip ToClip(string name, float[] audioData, int sampleCount, int frequency) + { + // Create the audio clip + var clip = AudioClip.Create(name, sampleCount, 1, frequency, false); + + // Set the data + clip.SetData(audioData, 0); + + // Done + return clip; + } + + /// + /// Converts raw WAV data into Unity formatted audio data. + /// + /// + /// The raw WAV data. + /// + /// + /// The number of samples in the audio data. + /// + /// + /// The frequency of the audio data. + /// + /// + /// The Unity formatted audio data. + /// + static private float[] ToUnityAudio(byte[] wavAudio, out int sampleCount, out int frequency) + { + // Determine if mono or stereo + int channelCount = wavAudio[22]; // Speech audio data is always mono but read actual header value for processing + + // Get the frequency + frequency = BytesToInt(wavAudio, 24); + + // Get past all the other sub chunks to get to the data subchunk: + int pos = 12; // First subchunk ID from 12 to 16 + + // Keep iterating until we find the data chunk (i.e. 64 61 74 61 ...... (i.e. 100 97 116 97 in decimal)) + while (!(wavAudio[pos] == 100 && wavAudio[pos + 1] == 97 && wavAudio[pos + 2] == 116 && wavAudio[pos + 3] == 97)) + { + pos += 4; + int chunkSize = wavAudio[pos] + wavAudio[pos + 1] * 256 + wavAudio[pos + 2] * 65536 + wavAudio[pos + 3] * 16777216; + pos += 4 + chunkSize; + } + pos += 8; + + // Pos is now positioned to start of actual sound data. + sampleCount = (wavAudio.Length - pos) / 2; // 2 bytes per sample (16 bit sound mono) + if (channelCount == 2) sampleCount /= 2; // 4 bytes per sample (16 bit stereo) + + // Allocate memory (supporting left channel only) + float[] unityData = new float[sampleCount]; + + // Write to double array/s: + int i = 0; + while (pos < wavAudio.Length) + { + unityData[i] = BytesToFloat(wavAudio[pos], wavAudio[pos + 1]); + pos += 2; + if (channelCount == 2) + { + pos += 2; + } + i++; + } + + // Done + return unityData; + } + + + // Internal Methods + + /// + /// Logs speech text that normally would have been played. + /// + /// + /// The speech text. + /// + private void LogSpeech(string text) + { + Debug.LogFormat("Speech not supported in editor. \"{0}\"", text); + } + +#if !UNITY_EDITOR && UNITY_METRO + /// + /// Executes a function that generates a speech stream and then converts and plays it in Unity. + /// + /// + /// A raw text version of what's being spoken for use in debug messages when speech isn't supported. + /// + /// + /// The actual function that will be executed to generate speech. + /// + private void PlaySpeech(string text, Func> speakFunc) + { + // Make sure there's something to speak + if (speakFunc == null) throw new ArgumentNullException(nameof(speakFunc)); + + if (synthesizer != null) + { + try + { + // Need await, so most of this will be run as a new Task in its own thread. + // This is good since it frees up Unity to keep running anyway. + Task.Run(async () => + { + // Change voice? + if (voice != TextToSpeechVoice.Default) + { + // Get name + var voiceName = Enum.GetName(typeof(TextToSpeechVoice), voice); + + // See if it's never been found or is changing + if ((voiceInfo == null) || (!voiceInfo.DisplayName.Contains(voiceName))) + { + // Search for voice info + voiceInfo = SpeechSynthesizer.AllVoices.Where(v => v.DisplayName.Contains(voiceName)).FirstOrDefault(); + + // If found, select + if (voiceInfo != null) + { + synthesizer.Voice = voiceInfo; + } + else + { + Debug.LogErrorFormat("TTS voice {0} could not be found.", voiceName); + } + } + } + + // Speak and get stream + var speechStream = await speakFunc(); + + // Get the size of the original stream + var size = speechStream.Size; + + // Create buffer + byte[] buffer = new byte[(int)size]; + + // Get input stream and the size of the original stream + using (var inputStream = speechStream.GetInputStreamAt(0)) + { + // Close the original speech stream to free up memory + speechStream.Dispose(); + + // Create a new data reader off the input stream + using (var dataReader = new DataReader(inputStream)) + { + // Load all bytes into the reader + await dataReader.LoadAsync((uint)size); + + // Copy from reader into buffer + dataReader.ReadBytes(buffer); + } + } + + // Convert raw WAV data into Unity audio data + int sampleCount = 0; + int frequency = 0; + var unityData = ToUnityAudio(buffer, out sampleCount, out frequency); + + // The remainder must be done back on Unity's main thread + UnityEngine.WSA.Application.InvokeOnAppThread(() => + { + // Convert to an audio clip + var clip = ToClip("Speech", unityData, sampleCount, frequency); + + // Set the source on the audio clip + audioSource.clip = clip; + + // Play audio + audioSource.Play(); + }, false); + }); + } + catch (Exception ex) + { + Debug.LogErrorFormat("Speech generation problem: \"{0}\"", ex.Message); + } + } + else + { + Debug.LogErrorFormat("Speech not initialized. \"{0}\"", text); + } + } +#endif + + // MonoBehaviour Methods + void Start() + { + try + { + if (audioSource == null) + { + Debug.LogError("An AudioSource is required and should be assigned to 'Audio Source' in the inspector."); + } + else + { +#if !UNITY_EDITOR && UNITY_METRO + synthesizer = new SpeechSynthesizer(); +#endif + } + } + catch (Exception ex) + { + Debug.LogError("Could not start Speech Synthesis"); + Debug.LogException(ex); + } + } + + // Public Methods + + /// + /// Speaks the specified SSML markup using text-to-speech. + /// + /// + /// The SSML markup to speak. + /// + public void SpeakSsml(string ssml) + { + // Make sure there's something to speak + if (string.IsNullOrEmpty(ssml)) { return; } + + // Pass to helper method +#if !UNITY_EDITOR && UNITY_METRO + PlaySpeech(ssml, () => synthesizer.SynthesizeSsmlToStreamAsync(ssml)); +#else + LogSpeech(ssml); +#endif + } + + /// + /// Speaks the specified text using text-to-speech. + /// + /// + /// The text to speak. + /// + public void SpeakText(string text) + { + // Make sure there's something to speak + if (string.IsNullOrEmpty(text)) { return; } + + // Pass to helper method +#if !UNITY_EDITOR && UNITY_METRO + PlaySpeech(text, ()=> synthesizer.SynthesizeTextToStreamAsync(text)); +#else + LogSpeech(text); +#endif + } + + /// + /// Returns whether or not the AudioSource is actively playing. + /// + /// + /// True, if the AudioSource is playing. False, if the AudioSource is not playing or is null. + /// + public bool IsSpeaking() + { + if (audioSource != null) + { + return audioSource.isPlaying; + } + + return false; + } + + /// + /// Stops text-to-speech playback. + /// + public void StopSpeaking() + { + if (IsSpeaking()) + { + audioSource.Stop(); + } + } + + /// + /// Gets or sets the audio source where speech will be played. + /// + public AudioSource AudioSource { get { return audioSource; } set { audioSource = value; } } + + /// + /// Gets or sets the voice that will be used to generate speech. + /// + public TextToSpeechVoice Voice { get { return voice; } set { voice = value; } } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs.meta new file mode 100644 index 0000000..f9ff84c --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TextToSpeechManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ca6f3b91ea1f9634db308846d1cdfb7e +timeCreated: 1465412027 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs new file mode 100644 index 0000000..141718f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace HoloToolkit.Unity +{ + /// + /// Structure that defines a timer. A timer can be scheduled through the TimerScheduler. + /// + public struct Timer + { + public int Id; + + public static Timer Invalid = new Timer(0); + + public Timer(int id) + { + Id = id; + } + + public bool IsActive + { + get + { + return (Id != Invalid.Id) && TimerScheduler.Instance.IsTimerActive(this); + } + } + + public static Timer Start(float timeSeconds, TimerScheduler.Callback callback, bool loop = false) + { + if (TimerScheduler.IsInitialized) + { + return TimerScheduler.Instance.StartTimer(timeSeconds, callback, loop); + } + + return Invalid; + } + + public static Timer StartNextFrame(TimerScheduler.Callback callback) + { + if (TimerScheduler.IsInitialized) + { + return TimerScheduler.Instance.StartTimer(0.0f, callback, false, true); + } + + return Invalid; + } + + public void Stop() + { + if (TimerScheduler.IsInitialized) + { + TimerScheduler.Instance.StopTimer(this); + Id = Invalid.Id; + } + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs.meta new file mode 100644 index 0000000..2769392 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Timer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2e96a9402590e304b8655c7ad7962113 +timeCreated: 1460501328 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs new file mode 100644 index 0000000..fc0680b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// A scheduler that manages various timers. + /// + /// + /// + /// private int myTimer = 0; + /// + /// private void MyTimerCallback() + /// { + /// // Do stuff + /// } + /// + /// private void StartMyTimer() + /// { + /// float durationInSec = 0.5f; + /// myTimer = TimerId.Start(durationInSec, MyTimerCallback); + /// } + /// + /// private void StopMyTimer() + /// { + /// myTimer.Stop(); + /// } + /// + /// + public sealed class TimerScheduler : Singleton + { + private struct TimerData + { + public Callback Callback; + public float Duration; + public bool Loop; + public int Id; + + public TimerData(float time, Callback callback, bool loop, int id) + { + Callback = callback; + Loop = loop; + Duration = time; + Id = id; + } + } + + private struct TimerIdPair + { + public int Id; + public int KeyTime; + } + + public delegate void Callback(); + + private PriorityQueue timers; + private List deferredTimers; + private List activeTimers; + private int nextTimerId; + + protected override void Awake() + { + base.Awake(); + + timers = new PriorityQueue(); + deferredTimers = new List(10); + activeTimers = new List(20); + + nextTimerId = 1; // 0 is reserved + } + + private int GetKeyTime(float time) + { + // key time is nearest millisecond + return (int)(time * 1000); + } + + private bool HasKeyTimePassed(int key) + { + return key <= GetKeyTime(Time.time); + } + + private int AddTimer(TimerData timer, bool deferred = false) + { + if (deferred) + { + deferredTimers.Add(timer); + } + else + { + // calculate the key time for the evaluation point. Multiple timers can have this value. + int keyTime = GetKeyTime(Time.time + timer.Duration); + + // re-add timer to queue + timers.Push(keyTime, timer); + + // add to list of active timers + activeTimers.Add(new TimerIdPair { Id = timer.Id, KeyTime = keyTime }); + } + + // make sure the scheduler is enabled now that we have a new timer. + enabled = true; + + return timer.Id; + } + + private int GetActiveTimerIndex(int timerId) + { + for (int i = 0; i < activeTimers.Count; ++i) + { + if (activeTimers[i].Id == timerId) + { + return i; + } + } + + return -1; + } + + private bool RemoveActiveTimer(int timerId) + { + int index = GetActiveTimerIndex(timerId); + if (index > -1) + { + activeTimers.RemoveAt(index); + return true; + } + + return false; + } + + private int GetTimerDeferredIndex(int timerId) + { + for (int i = 0; i < deferredTimers.Count; ++i) + { + if (deferredTimers[i].Id == timerId) + { + return i; + } + } + + return -1; + } + + private void AddDeferredTimers() + { + for (int i = 0; i < deferredTimers.Count; i++) + { + AddTimer(deferredTimers[i]); + } + + deferredTimers.Clear(); + } + + private void Update() + { + // while waiting for an event to happen, we'll just early out + while (timers.Count > 0 && HasKeyTimePassed(timers.Top.Key)) + { + TimerData timer = timers.Top.Value; + + // remove from active timers + RemoveActiveTimer(timer.Id); + + // remove from queue + timers.Pop(); + + // loop events by just reinserting them + if (timer.Loop) + { + // re-add timer + AddTimer(timer); + } + + // activate the callback. call this after loop reinsertion, because + // the callback could call StopTimer. + timer.Callback(); + } + + AddDeferredTimers(); + + // if there are no active timers there is no need to update every frame. + if (timers.Count == 0) + { + enabled = false; + } + } + + /// + /// Creates a new timer event which will be added next frame. + /// + /// + /// + /// + /// Deferred timers will be pushed to the priority queue during next update + public Timer StartTimer(float timeSeconds, Callback callback, bool loop = false, bool deferred = false) + { + int id = AddTimer(new TimerData(timeSeconds, callback, loop, nextTimerId++), deferred); + + // create a new id, and make a new timer with it + return new Timer(id); + } + + /// + /// Disable an active timer. + /// + /// + /// + public void StopTimer(Timer timerId) + { + if (timerId.Id != Timer.Invalid.Id) + { + int index = GetActiveTimerIndex(timerId.Id); + if (index > -1) + { + int priority = activeTimers[index].KeyTime; + activeTimers.RemoveAt(index); + + // TODO: remove specific value + // allocation here is fine, since it's a temporary, and will get cleaned in gen 0 GC + int id = timerId.Id; + timers.RemoveAtPriority(priority, t => t.Id == id); + } + else + { + int deferredIndex = GetTimerDeferredIndex(timerId.Id); + if (deferredIndex > -1) + { + deferredTimers.RemoveAt(deferredIndex); + } + } + } + } + + public bool IsTimerActive(Timer timerId) + { + return GetActiveTimerIndex(timerId.Id) > -1 || GetTimerDeferredIndex(timerId.Id) > -1; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs.meta new file mode 100644 index 0000000..53fee65 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/TimerScheduler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 88677946afc0e6943891549b177f0108 +timeCreated: 1460501328 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs new file mode 100644 index 0000000..5d9b364 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs @@ -0,0 +1,180 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Miscellaneous utility methods. + /// + public static class Utils + { + public static void SetLayerRecursively(GameObject gameObject, int layer) + { + gameObject.layer = layer; + + for (int i = 0; i < gameObject.transform.childCount; ++i) + { + SetLayerRecursively(gameObject.transform.GetChild(i).gameObject, layer); + } + } + + /// + /// This takes a value, whose proportions are defined by minA and maxA, + /// and scales it to a space defined by minB and maxB. For example, 5 in + /// the space of 0 to 10 will map to 50 in the space of 0 to 100. + /// + /// lower bound for the original scale + /// upper bound for the original scale + /// lower bound for new scale + /// upper bound for new scale + /// the original scale value to convert to the new + /// scale. + /// "value" mapped to the space defined by minB and maxB. + public static float Map(float minA, float maxA, float minB, float maxB, float value) + { + return (value - minA) * (maxB / maxA) + minB; + } + + /// + /// This wrapper performs a map, but sets the results upper and lower limit + /// based on the upper and lower bounds of the new scale. + /// + /// lower bound for the original scale + /// upper bound for the original scale + /// lower bound for new scale + /// upper bound for new scale + /// the original scale value to convert to the new + /// scale. + /// "value" mapped to the space defined by minB and maxB, + /// constrained by minB and maxB. + public static float MapAndClamp(float minA, float maxA, float minB, float maxB, float value) + { + return Mathf.Clamp(Map(minA, maxA, minB, maxB, value), minB, maxB); + } + + /// + /// Position transform along the gaze direction and orient yaw to match, with the specified offset + /// + /// transform of higher-level space where 0,1,0 is up + /// transform to be repositioned + /// translation offset, Z is forward + /// yaw offset + public static void MoveObjectInFrontOfUser(Transform stageTransform, Transform tran, Vector3 offset, float yawOffset) + { + // have obj track head position with translation offset + Vector3 stageHeadPos = MathUtils.TransformPointFromTo(null, stageTransform, Camera.main.transform.transform.position); + Vector3 stageHeadDir = MathUtils.TransformDirectionFromTo(null, stageTransform, Camera.main.transform.transform.forward); + stageHeadDir.y = 0.0f; // ignore head pitch - use head position to set height + stageHeadDir.Normalize(); + Vector3 sideDir = Vector3.Cross(stageHeadDir, Vector3.up).normalized; + Vector3 stageNewPos = stageHeadPos + stageHeadDir * offset.z + Vector3.up * offset.y + sideDir * offset.x; + tran.localPosition = MathUtils.TransformPointFromTo(stageTransform, tran.parent, stageNewPos); + + // also track head yaw + Vector3 toDir = MathUtils.TransformDirectionFromTo(stageTransform, tran.parent, stageHeadDir); + Quaternion rot = Quaternion.FromToRotation(Vector3.forward, toDir.normalized) * Quaternion.Euler(0.0f, yawOffset, 0.0f); + tran.localRotation = rot; + } + + /// + /// Given two points and the transform that they are in, set position, rotation, and scale of a cylinder transform to connect it between the two points + /// + /// + /// One end point in the space of endPointSpace + /// Other end point in the space of endPointSpace + /// transform for the cylinder primitive to connect + public static void ConnectCylinderBetweenPoints(Transform endPointSpace, Vector3 a, Vector3 b, Transform cylTransform) + { + cylTransform.localPosition = MathUtils.TransformPointFromTo(endPointSpace, cylTransform.parent, 0.5f * (a + b)); + Vector3 dir = MathUtils.TransformDirectionFromTo(endPointSpace, cylTransform.parent, (b - a).normalized); + cylTransform.localRotation = Quaternion.LookRotation(dir) * Quaternion.FromToRotation(Vector3.up, Vector3.forward); + Vector3 scale = cylTransform.localScale; + scale.y = (a - b).magnitude * 0.5f; + cylTransform.localScale = scale; + } + + /// + /// Change material for every object in hierarchy + /// + /// root transform to start looking for renderers + /// material to set everything to + public static void SetMaterialRecursive(Transform t, Material mat) + { + if (t.gameObject && t.gameObject.GetComponent()) + { + t.gameObject.GetComponent().material = mat; + } + + for (int ii = 0; ii < t.childCount; ++ii) + { + SetMaterialRecursive(t.GetChild(ii), mat); + } + } + + /// + /// Change material for every object in hierarchy which has a name equal to nameToTest. WARNING! + /// See Community Answer + /// This function automatically instantiates the materials and makes them unique to this renderer. + /// It is your responsibility to destroy the materials when the game object is being destroyed. + /// Resources.UnloadUnusedAssets also destroys the materials but it is usually only called when loading a new level. + /// See Unity Documentation + /// + /// root transform to start looking for renderers + /// material to set everything to + /// ignore GameObjects with this name + public static void SetMaterialRecursiveForName(Transform t, Material mat, string nameToTest) + { + if (t.gameObject && t.gameObject.GetComponent() && t.gameObject.name == nameToTest) + { + t.gameObject.GetComponent().material = mat; + } + + for (int ii = 0; ii < t.childCount; ++ii) + { + SetMaterialRecursiveForName(t.GetChild(ii), mat, nameToTest); + } + + Resources.UnloadUnusedAssets(); + } + + /// + /// helper for detecting if running in editor + /// + /// true if running in editor, false if windows store app + public static bool IsInEditor() + { +#if UNITY_METRO && !UNITY_EDITOR + return false; +#else + return true; +#endif + } + + /// + /// walk hierarchy looking for named transform + /// + /// root transform to start searching from + /// name to look for + /// returns found transform or null if none found + public static Transform GetChildRecursive(Transform t, string name) + { + int numChildren = t.childCount; + for (int ii = 0; ii < numChildren; ++ii) + { + Transform child = t.GetChild(ii); + if (child.name == name) + { + return child; + } + Transform foundIt = GetChildRecursive(child, name); + if (foundIt != null) + { + return foundIt; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs.meta new file mode 100644 index 0000000..0178ccf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/Utils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: be171acc78cadf34f92c4e83e4b02399 +timeCreated: 1459051593 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs new file mode 100644 index 0000000..bdbd708 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using UnityEngine; + +namespace HoloToolkit.Unity +{ + /// + /// Vector Statistics used in gaze stabilization. + /// + public class VectorRollingStatistics + { + /// + /// Current standard deviation of the positions of the vectors + /// + public float CurrentStandardDeviation; + + /// + /// Difference to standardDeviation when the latest sample was added. + /// + public float StandardDeviationDeltaAfterLatestSample; + + /// + /// How many standard deviations the latest sample was away. + /// + public float StandardDeviationsAwayOfLatestSample; + + /// + /// The average position. + /// + public Vector3 Average; + + /// + /// The number of samples in the current set (may be 0 - maxSamples) + /// + public float ActualSampleCount; + + /// + /// Keeps track of the index into the sample list for the rolling average. + /// + private int currentSampleIndex; + + /// + /// An array of samples for calculating standard deviation. + /// + private Vector3[] samples; + + /// + /// The sum of all of the samples. + /// + private Vector3 cumulativeFrame; + + /// + /// The sum of all of the samples squared. + /// + private Vector3 cumulativeFrameSquared; + + /// + /// The total number of samples taken. + /// + private int cumulativeFrameSamples; + + /// + /// The maximum number of samples to include in + /// the average and standard deviation calculations. + /// + private int maxSamples; + + /// + /// Initialize the rolling stats. + /// + /// + public void Init(int sampleCount) + { + maxSamples = sampleCount; + samples = new Vector3[sampleCount]; + Reset(); + } + + /// + /// Resets the stats to zero. + /// + public void Reset() + { + currentSampleIndex = 0; + ActualSampleCount = 0; + cumulativeFrame = Vector3.zero; + cumulativeFrameSquared = Vector3.zero; + cumulativeFrameSamples = 0; + CurrentStandardDeviation = 0.0f; + StandardDeviationDeltaAfterLatestSample = 0.0f; + StandardDeviationsAwayOfLatestSample = 0.0f; + Average = Vector3.zero; + if (samples != null) + { + for (int index = 0; index < samples.Length; index++) + { + samples[index] = Vector3.zero; + } + } + } + + /// + /// Adds a new sample to the sample list and updates the stats. + /// + /// The new sample to add + public void AddSample(Vector3 value) + { + if (maxSamples == 0) + { + return; + } + + // remove the old sample from our accumulation + Vector3 oldSample = samples[currentSampleIndex]; + cumulativeFrame -= oldSample; + cumulativeFrameSquared -= (oldSample.Mul(oldSample)); + + // Add the new sample to the accumulation + samples[currentSampleIndex] = value; + cumulativeFrame += value; + cumulativeFrameSquared += value.Mul(value); + + // Keep track of how many samples we have + cumulativeFrameSamples++; + ActualSampleCount = Mathf.Min(maxSamples, cumulativeFrameSamples); + + // see how many standard deviations the current sample is from the previous average + Vector3 deltaFromAverage = (Average - value); + float oldStandardDeviation = CurrentStandardDeviation; + StandardDeviationsAwayOfLatestSample = oldStandardDeviation == 0 ? 0 : (deltaFromAverage / oldStandardDeviation).magnitude; + + // And calculate new averages and standard deviations + // (note that calculating a standard deviation of a Vector3 might not + // be done properly, but the logic is working for the gaze stabalization scenario) + Average = cumulativeFrame / ActualSampleCount; + float newStandardDev = Mathf.Sqrt((cumulativeFrameSquared / ActualSampleCount - Average.Mul(Average)).magnitude); + StandardDeviationDeltaAfterLatestSample = oldStandardDeviation - newStandardDev; + CurrentStandardDeviation = newStandardDev; + + // update the next list position + currentSampleIndex = (currentSampleIndex + 1) % maxSamples; + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs.meta new file mode 100644 index 0000000..fd08b7a --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/VectorRollingStatistics.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 72377af4415e4d44294be9a52547cb9d +timeCreated: 1476478704 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs new file mode 100644 index 0000000..8165b89 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs @@ -0,0 +1,294 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.VR.WSA.Persistence; +using UnityEngine.VR.WSA; +using HoloToolkit.Unity.SpatialMapping; + +namespace HoloToolkit.Unity +{ + /// + /// Wrapper around world anchor store to streamline some of the persistence api busy work. + /// + public class WorldAnchorManager : Singleton + { + /// + /// To prevent initializing too many anchors at once + /// and to allow for the WorldAnchorStore to load asyncronously + /// without callers handling the case where the store isn't loaded yet + /// we'll setup a queue of anchor attachment operations. + /// The AnchorAttachmentInfo struct has the data needed to do this. + /// + private struct AnchorAttachmentInfo + { + public GameObject GameObjectToAnchor { get; set; } + public string AnchorName { get; set; } + public AnchorOperation Operation { get; set; } + } + + private enum AnchorOperation + { + Create, + Delete + } + + /// + /// The queue mentioned above. + /// + private Queue anchorOperations = new Queue(); + + /// + /// The WorldAnchorStore for the current application. + /// Can be null when the application starts. + /// + public WorldAnchorStore AnchorStore { get; private set; } + + /// + /// Callback function that contains the WorldAnchorStore object. + /// + /// The WorldAnchorStore to cache. + private void AnchorStoreReady(WorldAnchorStore anchorStore) + { + AnchorStore = anchorStore; + } + + /// + /// When the app starts grab the anchor store immediately. + /// + protected override void Awake() + { + base.Awake(); + + AnchorStore = null; + WorldAnchorStore.GetAsync(AnchorStoreReady); + } + + /// + /// Each frame see if there is work to do and if we can do a unit, do it. + /// + private void Update() + { + if (AnchorStore != null && anchorOperations.Count > 0) + { + DoAnchorOperation(anchorOperations.Dequeue()); + } + } + + /// + /// Attaches an anchor to the game object. If the anchor store has + /// an anchor with the specified name it will load the acnhor, otherwise + /// a new anchor will be saved under the specified name. + /// + /// The Gameobject to attach the anchor to. + /// Name of the anchor. + public void AttachAnchor(GameObject gameObjectToAnchor, string anchorName) + { + if (gameObjectToAnchor == null) + { + Debug.LogError("Must pass in a valid gameObject"); + return; + } + + if (string.IsNullOrEmpty(anchorName)) + { + Debug.LogError("Must supply an AnchorName."); + return; + } + + anchorOperations.Enqueue( + new AnchorAttachmentInfo + { + GameObjectToAnchor = gameObjectToAnchor, + AnchorName = anchorName, + Operation = AnchorOperation.Create + } + ); + } + + /// + /// Removes the anchor from the game object and deletes the anchor + /// from the anchor store. + /// + /// gameObject to remove the anchor from. + public void RemoveAnchor(GameObject gameObjectToUnanchor) + { + if (gameObjectToUnanchor == null) + { + Debug.LogError("Invalid GameObject"); + return; + } + + // This case is unexpected, but just in case. + if (AnchorStore == null) + { + Debug.LogError("remove anchor called before anchor store is ready."); + return; + } + + anchorOperations.Enqueue( + new AnchorAttachmentInfo + { + GameObjectToAnchor = gameObjectToUnanchor, + AnchorName = string.Empty, + Operation = AnchorOperation.Delete + }); + } + + /// + /// Removes all anchors from the scene and deletes them from the anchor store. + /// + public void RemoveAllAnchors() + { + SpatialMappingManager spatialMappingManager = SpatialMappingManager.Instance; + + // This case is unexpected, but just in case. + if (AnchorStore == null) + { + Debug.LogError("remove all anchors called before anchor store is ready."); + } + + WorldAnchor[] anchors = FindObjectsOfType(); + + if (anchors != null) + { + foreach (WorldAnchor anchor in anchors) + { + // Don't remove SpatialMapping anchors if exists + if (spatialMappingManager == null || + anchor.gameObject.transform.parent.gameObject != spatialMappingManager.gameObject) + { + anchorOperations.Enqueue(new AnchorAttachmentInfo() + { + AnchorName = anchor.name, + GameObjectToAnchor = anchor.gameObject, + Operation = AnchorOperation.Delete + }); + } + } + } + } + + /// + /// Function that actually adds the anchor to the game object. + /// + /// Parameters for attaching the anchor. + private void DoAnchorOperation(AnchorAttachmentInfo anchorAttachmentInfo) + { + switch (anchorAttachmentInfo.Operation) + { + case AnchorOperation.Create: + string anchorName = anchorAttachmentInfo.AnchorName; + GameObject gameObjectToAnchor = anchorAttachmentInfo.GameObjectToAnchor; + + if (gameObjectToAnchor == null) + { + Debug.LogError("GameObject must have been destroyed before we got a chance to anchor it."); + break; + } + + // Try to load a previously saved world anchor. + WorldAnchor savedAnchor = AnchorStore.Load(anchorName, gameObjectToAnchor); + if (savedAnchor == null) + { + // Either world anchor was not saved / does not exist or has a different name. + Debug.LogWarning(gameObjectToAnchor.name + " : World anchor could not be loaded for this game object. Creating a new anchor."); + + // Create anchor since one does not exist. + CreateAnchor(gameObjectToAnchor, anchorName); + } + else + { + savedAnchor.name = anchorName; + Debug.Log(gameObjectToAnchor.name + " : World anchor loaded from anchor store and updated for this game object."); + } + + break; + case AnchorOperation.Delete: + if (AnchorStore == null) + { + Debug.LogError("Remove anchor called before anchor store is ready."); + break; + } + + GameObject gameObjectToUnanchor = anchorAttachmentInfo.GameObjectToAnchor; + var anchor = gameObjectToUnanchor.GetComponent(); + + if (anchor != null) + { + AnchorStore.Delete(anchor.name); + DestroyImmediate(anchor); + } + else + { + Debug.LogError("Cannot get anchor while deleting"); + } + + break; + } + } + + /// + /// Creates an anchor, attaches it to the gameObjectToAnchor, and saves the anchor to the anchor store. + /// + /// The GameObject to attach the anchor to. + /// The name to give to the anchor. + private void CreateAnchor(GameObject gameObjectToAnchor, string anchorName) + { + var anchor = gameObjectToAnchor.AddComponent(); + anchor.name = anchorName; + + // Sometimes the anchor is located immediately. In that case it can be saved immediately. + if (anchor.isLocated) + { + SaveAnchor(anchor); + } + else + { + // Other times we must wait for the tracking system to locate the world. + anchor.OnTrackingChanged += Anchor_OnTrackingChanged; + } + } + + /// + /// When an anchor isn't located immediately we subscribe to this event so + /// we can save the anchor when it is finally located. + /// + /// The anchor that is reporting a tracking changed event. + /// Indicates if the anchor is located or not located. + private void Anchor_OnTrackingChanged(WorldAnchor self, bool located) + { + if (located) + { + Debug.Log(gameObject.name + " : World anchor located successfully."); + + SaveAnchor(self); + + // Once the anchor is located we can unsubscribe from this event. + self.OnTrackingChanged -= Anchor_OnTrackingChanged; + } + else + { + Debug.LogError(gameObject.name + " : World anchor failed to locate."); + } + } + + /// + /// Saves the anchor to the anchor store. + /// + /// + private void SaveAnchor(WorldAnchor anchor) + { + // Save the anchor to persist holograms across sessions. + if (AnchorStore.Save(anchor.name, anchor)) + { + Debug.Log(gameObject.name + " : World anchor saved successfully."); + } + else + { + Debug.LogError(gameObject.name + " : World anchor save failed."); + } + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs.meta b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs.meta new file mode 100644 index 0000000..30fabaf --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f122ca4ae6b527e4798205becf9a0550 +timeCreated: 1474666464 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders.meta new file mode 100644 index 0000000..f3fa58d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0ec6bdfc4a3a14f43bf2f7c01a6b6b6b +folderAsset: yes +timeCreated: 1494566565 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc new file mode 100644 index 0000000..ddb8faa --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc @@ -0,0 +1,70 @@ +#if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_MainTex); +#endif + +#if _USECOLOR_ON + float4 _Color; +#endif + +#if _USEBUMPMAP_ON + UNITY_DECLARE_TEX2D(_BumpMap); +#endif + +#if _USEEMISSIONTEX_ON + UNITY_DECLARE_TEX2D(_EmissionTex); +#endif + +float _Specular; +float _Gloss; + +struct Input +{ + // Will get compiled out if not touched + float2 uv_MainTex; + + #if _NEAR_PLANE_FADE_ON + float fade; + #endif +}; + +void vert(inout appdata_full v, out Input o) +{ + UNITY_INITIALIZE_OUTPUT(Input, o); + + #if _NEAR_PLANE_FADE_ON + o.fade = ComputeNearPlaneFadeLinear(v.vertex); + #endif +} + +void surf(Input IN, inout SurfaceOutput o) +{ + float4 c; + + #if _USEMAINTEX_ON + c = UNITY_SAMPLE_TEX2D(_MainTex, IN.uv_MainTex); + #else + c = 1; + #endif + + #if _USECOLOR_ON + c *= _Color; + #endif + + o.Albedo = c.rgb; + + #if _NEAR_PLANE_FADE_ON + o.Albedo.rgb *= IN.fade; + #endif + + o.Alpha = c.a; + o.Specular = _Specular; + o.Gloss = _Gloss; + + #if _USEBUMPMAP_ON + o.Normal = UnpackNormal(UNITY_SAMPLE_TEX2D(_BumpMap, IN.uv_MainTex)); + #endif + + #if _USEEMISSIONTEX_ON + o.Emission = UNITY_SAMPLE_TEX2D(_EmissionTex, IN.uv_MainTex); + #endif +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc.meta new file mode 100644 index 0000000..d6fb949 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1609394dd4b2b524b9bc218ecb053679 +timeCreated: 1457038702 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader new file mode 100644 index 0000000..e88b0a8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader @@ -0,0 +1,78 @@ +// Very fast shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/BlinnPhong Configurable" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Normalmap)] + [Toggle] _UseBumpMap("Enabled?", Float) = 0 + [NoScaleOffset] _BumpMap("Normalmap", 2D) = "bump" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + // Specular + [Header(Specular)] + _SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1) + _Specular("Specular", Range(0.0, 1.0)) = 0.5 + _Gloss("Gloss", Range(0.0, 10.0)) = 0.5 + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + LOD 300 + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma surface surf BlinnPhong vertex:vert + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEBUMPMAP_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "BlinnPhongConfigurable.cginc" + + ENDCG + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader.meta new file mode 100644 index 0000000..2d7e2b5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurable.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0118fa4f1c88b4640b193eca2c181644 +timeCreated: 1457038704 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader new file mode 100644 index 0000000..ab4ea52 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader @@ -0,0 +1,78 @@ +// Very fast shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/BlinnPhong Configurable Transparent" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Normalmap)] + [Toggle] _UseBumpMap("Enabled?", Float) = 0 + [NoScaleOffset] _BumpMap("Normalmap", 2D) = "bump" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + // Specular + [Header(Specular)] + _SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1) + _Specular("Specular", Range(0.0, 1.0)) = 0.5 + _Gloss("Gloss", Range(0.0, 10.0)) = 0.5 + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "PerformanceChecks" = "False" } + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + LOD 300 + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma surface surf BlinnPhong vertex:vert alpha:fade + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEBUMPMAP_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "BlinnPhongConfigurable.cginc" + + ENDCG + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader.meta new file mode 100644 index 0000000..eed68b6 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/BlinnPhongConfigurableTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5eb422f8129123a4c86f3641f95b10c5 +timeCreated: 1457984802 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader new file mode 100644 index 0000000..ff38df3 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader @@ -0,0 +1,392 @@ +// Very fast shader that uses the Unity light system. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +// Textured ambient+diffuse: +// Stats for Vertex shader: +// d3d11: 24 avg math (9..44) +// Stats for Fragment shader: +// d3d11: 2 avg math (1..5), 0 avg texture (0..2) + +Shader "HoloToolkit/Fast Configurable" +{ + Properties + { + [Header(Base Texture and Color)] + [Indent] + [Toggle] _UseVertexColor("Vertex Color Enabled?", Float) = 0 + [Toggle] _UseMainColor("Main Color Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Toggle] _UseMainTex("Main Texture Enabled?", Float) = 0 + [NoScaleOffset]_MainTex("Main Texture", 2D) = "red" {} + [Toggle] _UseOcclusionMap("Occlusion/Detail Texture Enabled?", Float) = 0 + [NoScaleOffset]_OcclusionMap("Occlusion/Detail Texture", 2D) = "blue" {} + [Dedent] + + [Space(12)] + [Header(Lighting)] + [Indent] + [Toggle] _UseAmbient("Ambient Lighting Enabled?", Float) = 1 + [Toggle] _UseDiffuse("Diffuse Lighting Enabled?", Float) = 1 + [Toggle] _UseSpecular("Specular Lighting Enabled?", Float) = 0 + [Indent] + _SpecularColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1) + [PowerSlider(5.0)]_Specular("Specular (Specular Power)", Range(1.0, 100.0)) = 10.0 + _Gloss("Gloss (Specular Scale)", Range(0.1, 10.0)) = 1.0 + [Toggle] _UseGlossMap("Use Gloss Map? (per-pixel)", Float) = 0 + [NoScaleOffset]_MetallicGlossMap("Gloss Map", 2D) = "white" {} + [Dedent] + [Toggle] _Shade4("Use additional lighting data? (Expensive!)", Float) = 0 + [Toggle] _UseBumpMap("Normal Map Enabled? (per-pixel)", Float) = 0 + [NoScaleOffset][Normal] _BumpMap("Normal Map", 2D) = "bump" {} + [Dedent] + + [Space(12)] + [Header(Emission)] + [Indent] + [Toggle] _UseEmissionColor("Emission Color Enabled?", Float) = 0 + _EmissionColor("Emission Color", Color) = (1,1,1,1) + [Toggle] _UseEmissionTex("Emission Texture Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission Texture", 2D) = "blue" {} + [Dedent] + + [Space(12] + [Header(Texture Scale and Offset)] + [Indent] + [Toggle(_MainTex_SCALE_ON)] _MainTex_SCALE("Use Texture Scale? (Applies to all textures)", Float) = 0 + [Toggle(_MainTex_OFFSET_ON)] _MainTex_OFFSET("Use Texture Offset? (Applies to all textures)", Float) = 0 + _TextureScaleOffset("Texture Scale (XY) and Offset (ZW)", Vector) = (1, 1, 0, 0) + [Dedent] + + [Space(12)] + [Header(Alpha Blending)] + [Indent] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Enum(UnityEngine.Rendering.BlendOp)] _BlendOp("BlendOp", Float) = 0 //"Add" + [Dedent] + + [Space(12)] + [Header(Misc.)] + [Indent] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + BlendOp[_BlendOp] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + //compiles all variants needed by ForwardBase (forward rendering base) pass type. The variants deal with different lightmap types and main directional light having shadows on or off. + #pragma multi_compile_fwdbase + + //expands to several variants to handle different fog types + #pragma multi_compile_fog + + //We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + //shader features are only compiled if a material uses them + #pragma shader_feature _USEMAINCOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USESOCCLUSIONMAP_ON + #pragma shader_feature _USEBUMPMAP_ON + #pragma shader_feature _USEAMBIENT_ON + #pragma shader_feature _USEDIFFUSE_ON + #pragma shader_feature _USESPECULAR_ON + #pragma shader_feature _USEGLOSSMAP_ON + #pragma shader_feature _SHADE4_ON + #pragma shader_feature _USEEMISSIONCOLOR_ON + #pragma shader_feature _USEEMISSIONTEX_ON + + //scale and offset will apply to all + #pragma shader_feature _MainTex_SCALE_ON + #pragma shader_feature _MainTex_OFFSET_ON + + //may be set from script so generate both paths + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "Lighting.cginc" + #include "AutoLight.cginc" + + #include "HoloToolkitCommon.cginc" + #include "macro.cginc" + + #define USE_PER_PIXEL (_USEBUMPMAP_ON || _USEGLOSSMAP_ON) + #define PIXEL_SHADER_USES_WORLDPOS (USE_PER_PIXEL && (_USESPECULAR_ON || _SHADE4_ON)) + #define USES_TEX_XY (_USEMAINTEX_ON || _USEOCCLUSIONMAP_ON || _USEEMISSIONTEX_ON || _USEBUMPMAP_ON || _USEGLOSSMAP_ON) + + #if _USEMAINCOLOR_ON + float4 _Color; + #endif + + #if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_MainTex); + #endif + + #if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_SecondaryTex); + #endif + + #if _USEBUMPMAP_ON + UNITY_DECLARE_TEX2D(_BumpMap); + #endif + + #if _USESPECULAR_ON + float3 _SpecularColor; + float _Specular; + float _Gloss; + #endif + + #if _USEGLOSSMAP_ON + UNITY_DECLARE_TEX2D(_MetallicGlossMap); + #endif + + #if _USEEMISSIONCOLOR_ON + float4 _EmissionColor; + #endif + + #if _USEEMISSIONTEX_ON + UNITY_DECLARE_TEX2D(_EmissionTex); + #endif + + float4 _TextureScaleOffset; + + struct a2v + { + float4 vertex : POSITION; + + #if _USEBUMPMAP_ON + #else + float3 normal : NORMAL; + #endif + + #if _USEVERTEXCOLOR_ON + float4 color : COLOR; + #endif + #if USES_TEX_XY + float2 texcoord : TEXCOORD0; + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 pos : SV_POSITION; + + #if _USEVERTEXCOLOR_ON + float4 color : COLOR; + #endif + + #if _USEBUMPMAP_ON + #else + #if _USEGLOSSMAP_ON + float3 normal : NORMAL; + #endif + #endif + + #if USES_TEX_XY || _NEAR_PLANE_FADE_ON + float3 texXYFadeZ : TEXCOORD0; + #endif + + #if LIGHTMAP_ON + float2 lmap : TEXCOORD1; + #else + float3 vertexLighting : TEXCOORD1; + #endif + + #if PIXEL_SHADER_USES_WORLDPOS + float3 worldPos: TEXCOORD2; + #endif + + LIGHTING_COORDS(3, 4) + UNITY_FOG_COORDS(5) + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(a2v v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.pos = UnityObjectToClipPos(v.vertex); + + #if _USEVERTEXCOLOR_ON + #if _USEMAINCOLOR_ON + o.color = v.color * _Color; + #else + o.color = v.color; + #endif + #endif + + #if (_USESPECULAR_ON && USE_PER_PIXEL) || _SHADE4_ON + float4 worldPos = mul(unity_ObjectToWorld, v.vertex); + #endif + + #if PIXEL_SHADER_USES_WORLDPOS + o.worldPos = worldPos; + #endif + + #if USES_TEX_XY + o.texXYFadeZ.xy = TRANSFORM_TEX_MAINTEX(v.texcoord.xy, _TextureScaleOffset); + #endif + + #if LIGHTMAP_ON + o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #else + #if USE_PER_PIXEL + //no bump maps, do per-vertex lighting + #else + float3 normalWorld = UnityObjectToWorldNormal(v.normal); + #if _USEAMBIENT_ON + //grab ambient color from Unity's spherical harmonics + o.vertexLighting += ShadeSH9(float4(normalWorld, 1.0)); + #endif + #if _USEDIFFUSE_ON + o.vertexLighting += HoloTKLightingLambertian(normalWorld, _WorldSpaceLightPos0.xyz, _LightColor0.rgb); + #endif + #if _USESPECULAR_ON + o.vertexLighting += HoloTKLightingBlinnPhong(normalWorld, _WorldSpaceLightPos0.xyz, _LightColor0.rgb, UnityWorldSpaceViewDir(mul(unity_ObjectToWorld, v.vertex)), _Specular, _Gloss, _SpecularColor); + #endif + #if _SHADE4_ON + //handles point and spot lights + o.vertexLighting += Shade4PointLights(unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, + unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb, + unity_4LightAtten0, worldPos, normalWorld); + #endif + #endif + #endif + + + #if _USEBUMPMAP_ON + #else + #if _USEGLOSSMAP_ON + o.normal = v.normal; + #endif + #endif + + //fade away objects closer to the camera + #if _NEAR_PLANE_FADE_ON + o.texXYFadeZ.z = ComputeNearPlaneFadeLinear(v.vertex); + #endif + + TRANSFER_VERTEX_TO_FRAGMENT(o); + UNITY_TRANSFER_FOG(o, o.pos); + return o; + } + + float4 frag(v2f IN) : SV_Target + { + #if _USEMAINTEX_ON + float4 color = UNITY_SAMPLE_TEX2D(_MainTex, IN.texXYFadeZ.xy); + #else + float4 color = 1; + #endif + + #if _USEOCCLUSIONMAP_ON + color *= UNITY_SAMPLE_TEX2D(_OcclusionMap, IN.texXYFadeZ.xy); + #endif + + #if _USEVERTEXCOLOR_ON + color *= IN.color; + //if vertex color is on, we've already scaled it by the main color if needed in the vertex shader + #elif _USEMAINCOLOR_ON + color *= _Color; + #endif + + //light attenuation from shadows cast onto the object + float lightAttenuation = SHADOW_ATTENUATION(IN); + float3 lightColorShadowAttenuated = 0; + + #if LIGHTMAP_ON + float3 lightmapResult = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, IN.lmap.xy)); + #ifdef SHADOWS_SCREEN + lightColorShadowAttenuated = min(lightmapResult, lightAttenuation * 2); + #else + lightColorShadowAttenuated = lightmapResult; + #endif + #else //not using lightmapping + #if USE_PER_PIXEL + //if a normal map is on, it makes sense to do most calculations per-pixel + //unpack can be expensive if normal map is dxt5 + float3 normalObject; + #if (_USEBUMPMAP_ON) + normalObject = UnpackNormal(UNITY_SAMPLE_TEX2D(_BumpMap, IN.texXYFadeZ.xy)); + #else + normalObject = IN.normal; + #endif + float3 normalWorld = UnityObjectToWorldNormal(normalObject); + #if _USEAMBIENT_ON + //grab ambient color from Unity's spherical harmonics + lightColorShadowAttenuated += ShadeSH9(float4(normalWorld, 1.0)); + #endif + #if _USEDIFFUSE_ON + lightColorShadowAttenuated += HoloTKLightingLambertian(normalWorld, _WorldSpaceLightPos0.xyz, _LightColor0.rgb); + #endif + #if _USESPECULAR_ON + float gloss = _Gloss; + #if _USEGLOSSMAP_ON + gloss *= UNITY_SAMPLE_TEX2D(_MetallicGlossMap, IN.texXYFadeZ.xy).y; + #endif + lightColorShadowAttenuated += HoloTKLightingBlinnPhong(normalWorld, _WorldSpaceLightPos0.xyz, _LightColor0.rgb, UnityWorldSpaceViewDir(IN.worldPos), _Specular, gloss, _SpecularColor); + #endif + #if _SHADE4_ON + //This handles point and directional lights + lightColorShadowAttenuated += Shade4PointLights(unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, + unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb, + unity_4LightAtten0, IN.worldPos, normalWorld); + #endif + #else + //no normal map, so vertex lighting is sufficient + lightColorShadowAttenuated = IN.vertexLighting; + #endif + //could save some work here in the 0 case + lightColorShadowAttenuated *= lightAttenuation; + #endif + + color.rgb *= lightColorShadowAttenuated; + + #if _USEEMISSIONTEX_ON + color.rgb += UNITY_SAMPLE_TEX2D(_EmissionTex, IN.texXYFadeZ.xy); + #endif + + #if _USEEMISSIONCOLOR_ON + color.rgb += _EmissionColor; + #endif + + #if _NEAR_PLANE_FADE_ON + color.rgb *= IN.texXYFadeZ.z; + #endif + + UNITY_APPLY_FOG(IN.fogCoord, color); + + return color; + } + + ENDCG + } + } + Fallback "VertexLit" //for shadows +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader.meta new file mode 100644 index 0000000..e588024 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/FastConfigurable.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f1f3948b20c230044bda31b620ddd37f +timeCreated: 1480619515 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc new file mode 100644 index 0000000..35bcdbd --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc @@ -0,0 +1,30 @@ +#ifndef HOLOTOOLKIT_COMMON +#define HOLOTOOLKIT_COMMON + +float4 _NearPlaneFadeDistance; + +// Helper function for focal plane fading +// Could instead be done non-linear in projected space for speed +inline float ComputeNearPlaneFadeLinear(float4 vertex) +{ + float distToCamera = -(mul(UNITY_MATRIX_MV, vertex).z); + return saturate(mad(distToCamera, _NearPlaneFadeDistance.y, _NearPlaneFadeDistance.x)); +} + +// Diffuse lighting +inline float3 HoloTKLightingLambertian(float3 normal, float3 lightDir, float3 lightCol) +{ + return lightCol * max(0, dot(normal, lightDir)); +} + +// Specular lighting +inline float3 HoloTKLightingBlinnPhong(float3 normal, float3 lightDir, float lightCol, float3 viewDir, float specularPower, float specularScale, float3 specularColor) +{ + float3 h = normalize(lightDir + viewDir); + float nh = max(0, dot(normal, h)); + float spec = pow(nh, specularPower) * specularScale; + + return lightCol * specularColor * spec; +} + +#endif //HOLOTOOLKIT_COMMON \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc.meta new file mode 100644 index 0000000..ae29adb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/HoloToolkitCommon.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 075e3abbbf0bde044bb4bf8382bb45ac +timeCreated: 1457985441 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc new file mode 100644 index 0000000..4486ae0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc @@ -0,0 +1,65 @@ +#if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_MainTex); +#endif + +#if _USECOLOR_ON + float4 _Color; +#endif + +#if _USEBUMPMAP_ON + UNITY_DECLARE_TEX2D(_BumpMap); +#endif + +#if _USEEMISSIONTEX_ON + UNITY_DECLARE_TEX2D(_EmissionTex); +#endif + +struct Input +{ + // Will get compiled out if not touched + float2 uv_MainTex; + + #if _NEAR_PLANE_FADE_ON + float fade; + #endif +}; + +void vert(inout appdata_full v, out Input o) +{ + UNITY_INITIALIZE_OUTPUT(Input, o); + + #if _NEAR_PLANE_FADE_ON + o.fade = ComputeNearPlaneFadeLinear(v.vertex); + #endif +} + +void surf(Input IN, inout SurfaceOutput o) +{ + float4 c; + + #if _USEMAINTEX_ON + c = UNITY_SAMPLE_TEX2D(_MainTex, IN.uv_MainTex); + #else + c = 1; + #endif + + #if _USECOLOR_ON + c *= _Color; + #endif + + o.Albedo = c.rgb; + + #if _NEAR_PLANE_FADE_ON + o.Albedo.rgb *= IN.fade; + #endif + + o.Alpha = c.a; + + #if _USEBUMPMAP_ON + o.Normal = UnpackNormal(UNITY_SAMPLE_TEX2D(_BumpMap, IN.uv_MainTex)); + #endif + + #if _USEEMISSIONTEX_ON + o.Emission = UNITY_SAMPLE_TEX2D(_EmissionTex, IN.uv_MainTex); + #endif +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc.meta new file mode 100644 index 0000000..6b5b1d7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6276975893803314dbc8b33ebb9334ea +timeCreated: 1455735882 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader new file mode 100644 index 0000000..9bcbf91 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader @@ -0,0 +1,71 @@ +// Very fast shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Lambertian Configurable" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Normalmap)] + [Toggle] _UseBumpMap("Enabled?", Float) = 0 + [NoScaleOffset] _BumpMap("Normalmap", 2D) = "bump" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + LOD 300 + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma surface surf Lambert vertex:vert + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEBUMPMAP_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "LambertianConfigurable.cginc" + + ENDCG + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader.meta new file mode 100644 index 0000000..937e909 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurable.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5f798bc89d23aaa43bc6d51e147b544a +timeCreated: 1455735888 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader new file mode 100644 index 0000000..34017cb --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader @@ -0,0 +1,71 @@ +// Very fast shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Lambertian Configurable Transparent" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Normalmap)] + [Toggle] _UseBumpMap("Enabled?", Float) = 0 + [NoScaleOffset] _BumpMap("Normalmap", 2D) = "bump" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "PerformanceChecks" = "False" } + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + LOD 300 + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma surface surf Lambert vertex:vert alpha:fade + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEBUMPMAP_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "LambertianConfigurable.cginc" + + ENDCG + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader.meta new file mode 100644 index 0000000..597111d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/LambertianConfigurableTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a769fd6bfdcce194f87a5bfee2495f36 +timeCreated: 1455735892 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader new file mode 100644 index 0000000..07bad94 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader @@ -0,0 +1,355 @@ +// Faster version of the Unity Standard Shader. +// Forces compilation for shader model 5.0. +// Sets several defines to make perf/quality trade-offs that are more realistic for less beefy hardware. +// Based on the shader sources from 5.4. +// Merging should be relatively easy as none of the .cginc files need to be touched. +// Supports stereo instancing. + +Shader "HoloToolkit/StandardFast" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0 + [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0 + + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0 + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + _Parallax("Height Scale", Range(0.005, 0.08)) = 0.02 + _ParallaxMap("Height Map", 2D) = "black" {} + + _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 + _OcclusionMap("Occlusion", 2D) = "white" {} + + _EmissionColor("Color", Color) = (0,0,0) + _EmissionMap("Emission", 2D) = "white" {} + + _DetailMask("Detail Mask", 2D) = "white" {} + + _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} + _DetailNormalMapScale("Scale", Float) = 1.0 + _DetailNormalMap("Normal Map", 2D) = "bump" {} + + [Enum(UV0,0,UV1,1)] _UVSec("UV Set for secondary textures", Float) = 0 + + // Blending state + [HideInInspector] _Mode("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + } + + CGINCLUDE + // Use lower quality BDRFs (bi-directional reflectance distribution functions) + #define UNITY_BRDF_PBS BRDF3_Unity_PBS + #define UNITY_BRDF_PBS_LIGHTMAP_INDIRECT BRDF3_Unity_PBS + + // Several other optimizations + // You may wish to re-enable box projection depending on your needs + #undef UNITY_SPECCUBE_BOX_PROJECTION + #define UNITY_SPECCUBE_BOX_PROJECTION 0 + + #undef UNITY_SPECCUBE_BLENDING + #define UNITY_SPECCUBE_BLENDING 0 + + #define UNITY_TANGENT_ORTHONORMALIZE 0 + + #define UNITY_SETUP_BRDF_INPUT MetallicSetup + ENDCG + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 300 + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + #pragma vertex vertBase + #pragma fragment fragBase + #include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend[_SrcBlend] One + Fog { Color(0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + + #pragma vertex vertAdd + #pragma fragment fragAdd + #include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + // ------------------------------------- + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Deferred pass + Pass + { + Name "DEFERRED" + Tags { "LightMode" = "Deferred" } + + CGPROGRAM + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + // ------------------------------------- + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + #pragma shader_feature _PARALLAXMAP + + #pragma multi_compile ___ UNITY_HDR_ON + #pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON + #pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE + #pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON + + #pragma vertex vertDeferred + #pragma fragment fragDeferred + + #include "UnityStandardCore.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 150 + + // ------------------------------------------------------------------ + // Base forward pass (directional light, emission, lightmaps, ...) + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + Blend[_SrcBlend][_DstBlend] + ZWrite[_ZWrite] + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF + // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + + #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + #pragma vertex vertBase + #pragma fragment fragBase + #include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Additive forward pass (one light per pass) + Pass + { + Name "FORWARD_DELTA" + Tags { "LightMode" = "ForwardAdd" } + Blend[_SrcBlend] One + Fog { Color(0,0,0,0) } // in additive pass fog should be black + ZWrite Off + ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _NORMALMAP + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF + #pragma shader_feature ___ _DETAIL_MULX2 + // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP + #pragma skip_variants SHADOWS_SOFT + + #pragma multi_compile_fwdadd_fullshadows + #pragma multi_compile_fog + + #pragma vertex vertAdd + #pragma fragment fragAdd + #include "UnityStandardCoreForward.cginc" + + ENDCG + } + // ------------------------------------------------------------------ + // Shadow rendering pass + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On ZTest LEqual + + CGPROGRAM + #pragma target 2.0 + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON + #pragma skip_variants SHADOWS_SOFT + #pragma multi_compile_shadowcaster + + #pragma vertex vertShadowCaster + #pragma fragment fragShadowCaster + + #include "UnityStandardShadow.cginc" + + ENDCG + } + + // ------------------------------------------------------------------ + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "META" + Tags { "LightMode" = "Meta" } + + Cull Off + + CGPROGRAM + #pragma vertex vert_meta + #pragma fragment frag_meta + + #pragma shader_feature _EMISSION + #pragma shader_feature _METALLICGLOSSMAP + #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature ___ _DETAIL_MULX2 + + #include "UnityStandardMeta.cginc" + ENDCG + } + } + + FallBack "VertexLit" + CustomEditor "StandardShaderGUI" +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader.meta new file mode 100644 index 0000000..c3ba5be --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/StandardFast.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 30a212a88e1063a428c85e50b1e427f2 +timeCreated: 1455735884 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc new file mode 100644 index 0000000..c4bc4b0 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc @@ -0,0 +1,74 @@ +#include "UnityCG.cginc" + +#if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_MainTex); + float4 _MainTex_ST; +#endif + +#if _USECOLOR_ON + float4 _Color; +#endif + +struct appdata_t +{ + float4 vertex : POSITION; + #if _USEMAINTEX_ON + float2 texcoord : TEXCOORD0; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct v2f +{ + float4 vertex : SV_POSITION; + #if _USEMAINTEX_ON + float2 texcoord : TEXCOORD0; + #endif + UNITY_FOG_COORDS(1) + #if _NEAR_PLANE_FADE_ON + float fade : TEXCOORD2; + #endif + UNITY_VERTEX_OUTPUT_STEREO +}; + +v2f vert(appdata_t v) +{ + UNITY_SETUP_INSTANCE_ID(v); + v2f o; + o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); + + #if _USEMAINTEX_ON + o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + #endif + + #if _NEAR_PLANE_FADE_ON + o.fade = ComputeNearPlaneFadeLinear(v.vertex); + #endif + + UNITY_TRANSFER_FOG(o, o.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; +} + +float4 frag(v2f i) : SV_Target +{ + float4 c; + + #if _USEMAINTEX_ON + c = UNITY_SAMPLE_TEX2D(_MainTex, i.texcoord); + #else + c = 1; + #endif + + #if _USECOLOR_ON + c *= _Color; + #endif + + UNITY_APPLY_FOG(i.fogCoord, c); + + #if _NEAR_PLANE_FADE_ON + c.rgb *= i.fade; + #endif + + return c; +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc.meta new file mode 100644 index 0000000..0b7c4d9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0803619fdf239e145a93a8523d180b3a +timeCreated: 1455735882 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader new file mode 100644 index 0000000..f08c4ba --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader @@ -0,0 +1,66 @@ +// Very fast unlit shader. +// No lighting, lightmap support, etc. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Unlit Configurable" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Opaque" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + + Pass + { + Name "FORWARD" + Tags { "LightMode" = "Always" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "UnlitConfigurable.cginc" + + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader.meta new file mode 100644 index 0000000..ff10f3d --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurable.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 06790e211e4a6df409b1e04bc91c4810 +timeCreated: 1455735883 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader new file mode 100644 index 0000000..ac655ee --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader @@ -0,0 +1,66 @@ +// Very fast unlit shader. +// No lighting, lightmap support, etc. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Unlit Configurable Transparent" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Transparent" "Queue" = "Transparent" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + + Pass + { + Name "FORWARD" + Tags { "LightMode" = "Always" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "UnlitConfigurable.cginc" + + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader.meta new file mode 100644 index 0000000..03bb965 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitConfigurableTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5c2339e78c48ab14bb095cea2be5fb1a +timeCreated: 1455735884 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader new file mode 100644 index 0000000..73965e9 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader @@ -0,0 +1,58 @@ +Shader "Unlit/NoDepth" +{ + Properties + { + _MainTex("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "Queue" = "Transparent" } + LOD 100 + + Pass + { + ZTest Always + Blend SrcAlpha OneMinusSrcAlpha + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + v2f vert(appdata v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2f o; + o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); + o.uv = v.uv; + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + // sample the texture + fixed4 col = tex2D(_MainTex, i.uv); + return col; + } + ENDCG + } + } +} diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader.meta new file mode 100644 index 0000000..bc11cf7 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/UnlitNoDepthTest.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e1fd48673918ae242b03ad1ae08a38bd +timeCreated: 1477084602 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc new file mode 100644 index 0000000..6d515b5 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc @@ -0,0 +1,131 @@ +#include "HLSLSupport.cginc" +#include "UnityCG.cginc" +#include "Lighting.cginc" +#include "AutoLight.cginc" + +#if _USEMAINTEX_ON + UNITY_DECLARE_TEX2D(_MainTex); +#endif + +#if _USECOLOR_ON + float4 _Color; +#endif + +#if _USEEMISSIONTEX_ON + UNITY_DECLARE_TEX2D(_EmissionTex); +#endif + +#if _USEMAINTEX_ON || _USEEMISSIONTEX_ON + float4 _MainTex_ST; +#endif + +struct appdata_t +{ + float4 vertex : POSITION; + #if _USEMAINTEX_ON || _USEEMISSIONTEX_ON + float2 texcoord : TEXCOORD0; + #endif + float3 normal : NORMAL; + UNITY_VERTEX_INPUT_INSTANCE_ID +}; + +struct v2f_surf +{ + float4 pos : SV_POSITION; + #if _USEMAINTEX_ON || _USEEMISSIONTEX_ON + float2 pack0 : TEXCOORD0; + #endif + #ifndef LIGHTMAP_OFF + float2 lmap : TEXCOORD1; + #else + float3 vlight : TEXCOORD1; + #endif + LIGHTING_COORDS(2, 3) + UNITY_FOG_COORDS(4) + #if _NEAR_PLANE_FADE_ON + float fade : TEXCOORD5; + #endif + UNITY_VERTEX_OUTPUT_STEREO +}; + +inline float3 LightingLambertVS(float3 normal, float3 lightDir) +{ + float diff = max(0, dot(normal, lightDir)); + return _LightColor0.rgb * diff; +} + +v2f_surf vert(appdata_t v) +{ + UNITY_SETUP_INSTANCE_ID(v); + v2f_surf o; + UNITY_INITIALIZE_OUTPUT(v2f_surf, o); + + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + + #if _USEMAINTEX_ON || _USEEMISSIONTEX_ON + o.pack0.xy = TRANSFORM_TEX(v.texcoord, _MainTex); + #endif + + #ifndef LIGHTMAP_OFF + o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; + #else + float3 worldN = UnityObjectToWorldNormal(v.normal); + o.vlight = ShadeSH9(float4(worldN, 1.0)); + o.vlight += LightingLambertVS(worldN, _WorldSpaceLightPos0.xyz); + #endif + + #if _NEAR_PLANE_FADE_ON + o.fade = ComputeNearPlaneFadeLinear(v.vertex); + #endif + + TRANSFER_VERTEX_TO_FRAGMENT(o); + UNITY_TRANSFER_FOG(o, o.pos); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; +} + +float4 frag(v2f_surf IN) : SV_Target +{ + #if _USEMAINTEX_ON || _USEEMISSIONTEX_ON + float2 uv_MainTex = IN.pack0.xy; + #endif + + float4 surfaceColor; + #if _USEMAINTEX_ON + surfaceColor = UNITY_SAMPLE_TEX2D(_MainTex, uv_MainTex); + #else + surfaceColor = 1; + #endif + + #if _USECOLOR_ON + surfaceColor *= _Color; + #endif + + float atten = LIGHT_ATTENUATION(IN); + float4 finalColor = 0; + + #ifdef LIGHTMAP_OFF + finalColor.rgb = surfaceColor.rgb * IN.vlight * atten; + #else + float3 lm = DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, IN.lmap.xy)); + #ifdef SHADOWS_SCREEN + finalColor.rgb = surfaceColor.rgb * min(lm, atten * 2); + #else + finalColor.rgb = surfaceColor.rgb * lm; + #endif + #endif + + finalColor.a = surfaceColor.a; + + #ifdef _USEEMISSIONTEX_ON + finalColor.rgb += UNITY_SAMPLE_TEX2D(_EmissionTex, uv_MainTex); + #endif + + #if _NEAR_PLANE_FADE_ON + finalColor.rgb *= IN.fade; + #endif + + UNITY_APPLY_FOG(IN.fogCoord, finalColor); + + return finalColor; +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc.meta new file mode 100644 index 0000000..d689324 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7afdcff1c6cc423458b0d3e64adc8f86 +timeCreated: 1455735882 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader new file mode 100644 index 0000000..b83bd19 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader @@ -0,0 +1,74 @@ +// Very fast vertex lit shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Vertex Lit Configurable" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + + Pass + { + Name "FORWARD" + Tags { "LightMode" = "ForwardBase" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "VertexLitConfigurable.cginc" + + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader.meta new file mode 100644 index 0000000..d596258 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurable.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b21aa08825c93084cb4072b24fc90532 +timeCreated: 1455735892 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader new file mode 100644 index 0000000..6690200 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader @@ -0,0 +1,74 @@ +// Very fast vertex lit shader that uses the Unity lighting model. +// Compiles down to only performing the operations you're actually using. +// Uses material property drawers rather than a custom editor for ease of maintenance. + +Shader "HoloToolkit/Vertex Lit Configurable Transparent" +{ + Properties + { + [Header(Main Color)] + [Toggle] _UseColor("Enabled?", Float) = 0 + _Color("Main Color", Color) = (1,1,1,1) + [Space(20)] + + [Header(Base(RGB))] + [Toggle] _UseMainTex("Enabled?", Float) = 1 + _MainTex("Base (RGB)", 2D) = "white" {} + [Space(20)] + + // Uses UV scale, etc from main texture + [Header(Emission(RGB))] + [Toggle] _UseEmissionTex("Enabled?", Float) = 0 + [NoScaleOffset] _EmissionTex("Emission (RGB)", 2D) = "white" {} + [Space(20)] + + [Header(Blend State)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("SrcBlend", Float) = 1 //"One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("DestBlend", Float) = 0 //"Zero" + [Space(20)] + + [Header(Other)] + [Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 2 //"Back" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4 //"LessEqual" + [Enum(Off,0,On,1)] _ZWrite("ZWrite", Float) = 1.0 //"On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("ColorWriteMask", Float) = 15 //"All" + } + + SubShader + { + Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "PerformanceChecks" = "False" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_Cull] + ColorMask[_ColorWriteMask] + + Pass + { + Name "FORWARD" + Tags{ "LightMode" = "ForwardBase" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_fwdbase + #pragma multi_compile_fog + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #pragma shader_feature _USECOLOR_ON + #pragma shader_feature _USEMAINTEX_ON + #pragma shader_feature _USEEMISSIONTEX_ON + #pragma multi_compile __ _NEAR_PLANE_FADE_ON + + #include "HoloToolkitCommon.cginc" + #include "VertexLitConfigurable.cginc" + + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader.meta new file mode 100644 index 0000000..d1a9a81 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/VertexLitConfigurableTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a82e601d90c076c458969fbd127780e6 +timeCreated: 1455735892 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader new file mode 100644 index 0000000..151e715 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader @@ -0,0 +1,54 @@ +/// +/// Simple occlusion shader that can be used to hide other objects. +/// This prevents other objects from being rendered by drawing invisible 'opaque' pixels to the depth buffer. +/// +Shader "HoloToolkit/WindowOcclusion" +{ + Properties + { + } + SubShader + { + Tags + { + "RenderType" = "Opaque" + "Queue" = "Geometry-1" + } + + Pass + { + ColorMask 0 // Color will not be rendered. + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #include "UnityCG.cginc" + + struct v2f + { + float4 pos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_base v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2f o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + half4 frag(v2f i) : COLOR + { + return float4(1,1,1,1); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader.meta new file mode 100644 index 0000000..ea65cf8 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/WindowOcclusion.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d3b5735f1f9d64547aaa4a14c461f402 +timeCreated: 1467403747 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc new file mode 100644 index 0000000..26e2675 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc @@ -0,0 +1,67 @@ +#ifndef MACRO +#define MACRO + +//bootleg ternary operator - no __VA_ARGS__ +#define IIF(cond) IIF_ ## cond +#define IIF_0(t, f) f +#define IIF_1(t, f) t + +#define CONCAT(arg1, arg2) arg1 ## arg2 + +#define TRANSFORM_TEX_00(uv, st) uv +#define TRANSFORM_TEX_10(uv, st) uv * st.xy +#define TRANSFORM_TEX_01(uv, st) uv + st.zw +#define TRANSFORM_TEX_11(uv, st) uv * st.xy + st.zw + +// main tex +#ifdef _MainTex_SCALE_ON + #define _MainTex_SCALE_TOGGLE 1 +#else + #define _MainTex_SCALE_TOGGLE 0 +#endif + +#ifdef _MainTex_OFFSET_ON + #define _MainTex_OFFSET_TOGGLE 1 +#else + #define _MainTex_OFFSET_TOGGLE 0 +#endif + +#define MAINTEX_TYPE_S CONCAT(TRANSFORM_TEX_, _MainTex_SCALE_TOGGLE) +#define MAINTEX_TYPE_SO CONCAT(MAINTEX_TYPE_S, _MainTex_OFFSET_TOGGLE) +#define TRANSFORM_TEX_MAINTEX(uv, st) MAINTEX_TYPE_SO ## (uv, st) + +//bump map +#ifdef _BumpMap_SCALE_ON + #define _BumpMap_SCALE_TOGGLE 1 +#else + #define _BumpMap_SCALE_TOGGLE 0 +#endif + +#ifdef _BumpMap_OFFSET_ON + #define _BumpMap_OFFSET_TOGGLE 1 +#else + #define _BumpMap_OFFSET_TOGGLE 0 +#endif + +#define BUMPMAP_TYPE_S CONCAT(TRANSFORM_TEX_, _BumpMap_SCALE_TOGGLE) +#define BUMPMAP_TYPE_SO CONCAT(BUMPMAP_TYPE_S, _BumpMap_OFFSET_TOGGLE) +#define TRANSFORM_TEX_BUMPMAP(uv, st) BUMPMAP_TYPE_SO ## (uv, st) + +//occlusion map +#ifdef _OcclusionMap_SCALE_ON + #define _OcclusionMap_SCALE_TOGGLE 1 +#else + #define _OcclusionMap_SCALE_TOGGLE 0 +#endif + +#ifdef _OcclusionMap_OFFSET_ON + #define _OcclusionMap_OFFSET_TOGGLE 1 +#else + #define _OcclusionMap_OFFSET_TOGGLE 0 +#endif + +#define OCCLUSIONMAP_TYPE_S CONCAT(TRANSFORM_TEX_, _OcclusionMap_SCALE_TOGGLE) +#define OCCLUSIONMAP_TYPE_SO CONCAT(OCCLUSIONMAP_TYPE_S, _OcclusionMap_OFFSET_TOGGLE) +#define TRANSFORM_TEX_OCCLUSIONMAP(uv, st) OCCLUSIONMAP_TYPE_SO ## (uv, st) + +#endif //MACRO \ No newline at end of file diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc.meta b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc.meta new file mode 100644 index 0000000..dabdd1f --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Shaders/macro.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ed0c72bbcda0bad4c936bbf7453a0f21 +timeCreated: 1481271872 +licenseType: Free +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Textures.meta b/HoloBot/Assets/HoloToolkit/Utilities/Textures.meta new file mode 100644 index 0000000..b5c7487 --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 779ee1853fb999546801816de0d9d5cf +folderAsset: yes +timeCreated: 1477083980 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png b/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png new file mode 100644 index 0000000..c57066a Binary files /dev/null and b/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png differ diff --git a/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png.meta b/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png.meta new file mode 100644 index 0000000..12a889b --- /dev/null +++ b/HoloBot/Assets/HoloToolkit/Utilities/Textures/Arrow.png.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: b7e7ac1cdf109fd4a921ab2ba712a48b +timeCreated: 1477083980 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models.meta b/HoloBot/Assets/Models.meta new file mode 100644 index 0000000..69733a2 --- /dev/null +++ b/HoloBot/Assets/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0568eec7b4b96714a9b3e3616d2c4111 +folderAsset: yes +timeCreated: 1494565704 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/Materials.meta b/HoloBot/Assets/Models/Materials.meta new file mode 100644 index 0000000..26e7006 --- /dev/null +++ b/HoloBot/Assets/Models/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a51f6f266d790c94294e3a2e4c9fa342 +folderAsset: yes +timeCreated: 1494566565 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/Materials/02 - Default.mat b/HoloBot/Assets/Models/Materials/02 - Default.mat new file mode 100644 index 0000000..37f33e7 --- /dev/null +++ b/HoloBot/Assets/Models/Materials/02 - Default.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: 02 - Default + m_Shader: {fileID: 4800000, guid: 30a212a88e1063a428c85e50b1e427f2, type: 3} + m_ShaderKeywords: _EMISSION _GLOSSYREFLECTIONS_OFF + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 0, g: 0.47058827, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/Models/Materials/02 - Default.mat.meta b/HoloBot/Assets/Models/Materials/02 - Default.mat.meta new file mode 100644 index 0000000..3e2698d --- /dev/null +++ b/HoloBot/Assets/Models/Materials/02 - Default.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9cfc0205470fe84b87515fb9b0eb399 +timeCreated: 1456860973 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/Materials/FriendlyMesh.mat b/HoloBot/Assets/Models/Materials/FriendlyMesh.mat new file mode 100644 index 0000000..2e16ef1 --- /dev/null +++ b/HoloBot/Assets/Models/Materials/FriendlyMesh.mat @@ -0,0 +1,127 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: FriendlyMesh + m_Shader: {fileID: 4800000, guid: 30a212a88e1063a428c85e50b1e427f2, type: 3} + m_ShaderKeywords: _EMISSION _GLOSSYREFLECTIONS_OFF + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 0 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 0.5882353, g: 0.5882353, b: 0.5882353, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} diff --git a/HoloBot/Assets/Models/Materials/FriendlyMesh.mat.meta b/HoloBot/Assets/Models/Materials/FriendlyMesh.mat.meta new file mode 100644 index 0000000..cb26b73 --- /dev/null +++ b/HoloBot/Assets/Models/Materials/FriendlyMesh.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 193034ff4e72d6441b8b2bf64e5050bc +timeCreated: 1457112452 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/bg.png b/HoloBot/Assets/Models/bg.png new file mode 100644 index 0000000..6a61d0a Binary files /dev/null and b/HoloBot/Assets/Models/bg.png differ diff --git a/HoloBot/Assets/Models/bg.png.meta b/HoloBot/Assets/Models/bg.png.meta new file mode 100644 index 0000000..68cae72 --- /dev/null +++ b/HoloBot/Assets/Models/bg.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 090295e36901c94458160cd1893003e9 +timeCreated: 1494985606 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Windows Store Apps + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/botAnimatorController.controller b/HoloBot/Assets/Models/botAnimatorController.controller new file mode 100644 index 0000000..1259c30 --- /dev/null +++ b/HoloBot/Assets/Models/botAnimatorController.controller @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: botAnimatorController + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107171355291786880} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &1101056035099718618 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102789482488476378} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.9364407 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &1101660949269164466 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 1102966481554380358} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.9364407 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &1102789482488476378 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101660949269164466} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400002, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1102 &1102966481554380358 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 3 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Idle 0 + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 1101056035099718618} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400002, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &1107171355291786880 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1102789482488476378} + m_Position: {x: 264, y: 108, z: 0} + - serializedVersion: 1 + m_State: {fileID: 1102966481554380358} + m_Position: {x: 264, y: 192, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1102789482488476378} diff --git a/HoloBot/Assets/Models/botAnimatorController.controller.meta b/HoloBot/Assets/Models/botAnimatorController.controller.meta new file mode 100644 index 0000000..c94f77e --- /dev/null +++ b/HoloBot/Assets/Models/botAnimatorController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c44115b69e1e3648a462f0fb937de04 +timeCreated: 1494566613 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/friendly_drone.FBX b/HoloBot/Assets/Models/friendly_drone.FBX new file mode 100644 index 0000000..a51223c Binary files /dev/null and b/HoloBot/Assets/Models/friendly_drone.FBX differ diff --git a/HoloBot/Assets/Models/friendly_drone.FBX.meta b/HoloBot/Assets/Models/friendly_drone.FBX.meta new file mode 100644 index 0000000..50b3ba3 --- /dev/null +++ b/HoloBot/Assets/Models/friendly_drone.FBX.meta @@ -0,0 +1,214 @@ +fileFormatVersion: 2 +guid: 8e7ff86547235d74d900689195c58f15 +timeCreated: 1457056456 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 100002: left_EarBack + 100004: left_EarFront + 100006: right_EarBack + 100008: right_EarFront + 400000: //RootNode + 400002: left_EarBack + 400004: left_EarFront + 400006: right_EarBack + 400008: right_EarFront + 2300000: //RootNode + 2300002: left_EarBack + 2300004: left_EarFront + 2300006: right_EarBack + 2300008: right_EarFront + 3300000: //RootNode + 3300002: left_EarBack + 3300004: left_EarFront + 3300006: right_EarBack + 3300008: right_EarFront + 4300000: Friendly + 4300002: left_EarBack + 4300004: left_EarFront + 4300006: right_EarFront + 4300008: right_EarBack + 7400000: Happy + 7400002: Idle + 7400004: Hit + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleRotations: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: + - serializedVersion: 16 + name: Happy + takeName: Take 001 + firstFrame: 275 + lastFrame: 365 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: left_EarBack + weight: 1 + - path: left_EarFront + weight: 1 + - path: right_EarBack + weight: 1 + - path: right_EarFront + weight: 1 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Idle + takeName: Take 001 + firstFrame: 1 + lastFrame: 119 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: left_EarBack + weight: 1 + - path: left_EarFront + weight: 1 + - path: right_EarBack + weight: 1 + - path: right_EarFront + weight: 1 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: Hit + takeName: Take 001 + firstFrame: 150 + lastFrame: 269 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: left_EarBack + weight: 1 + - path: left_EarFront + weight: 1 + - path: right_EarBack + weight: 1 + - path: right_EarFront + weight: 1 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Models/microphone.png b/HoloBot/Assets/Models/microphone.png new file mode 100644 index 0000000..3c6a824 Binary files /dev/null and b/HoloBot/Assets/Models/microphone.png differ diff --git a/HoloBot/Assets/Models/microphone.png.meta b/HoloBot/Assets/Models/microphone.png.meta new file mode 100644 index 0000000..e690169 --- /dev/null +++ b/HoloBot/Assets/Models/microphone.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 93c8b5a61c22fa44e9f96e3273afb6fb +timeCreated: 1494985031 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Windows Store Apps + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Plugins.meta b/HoloBot/Assets/Plugins.meta new file mode 100644 index 0000000..18d881b --- /dev/null +++ b/HoloBot/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 45f64dce67875f5428204a19bdb31a77 +folderAsset: yes +timeCreated: 1494829725 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Plugins/Newtonsoft.Json.dll b/HoloBot/Assets/Plugins/Newtonsoft.Json.dll new file mode 100644 index 0000000..12fddfa Binary files /dev/null and b/HoloBot/Assets/Plugins/Newtonsoft.Json.dll differ diff --git a/HoloBot/Assets/Plugins/Newtonsoft.Json.dll.meta b/HoloBot/Assets/Plugins/Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..fbcba4c --- /dev/null +++ b/HoloBot/Assets/Plugins/Newtonsoft.Json.dll.meta @@ -0,0 +1,74 @@ +fileFormatVersion: 2 +guid: 09a4040d7f60bb74695ce2df9099f6c6 +timeCreated: 1494831069 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scenes.meta b/HoloBot/Assets/Scenes.meta new file mode 100644 index 0000000..e720ddd --- /dev/null +++ b/HoloBot/Assets/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f770167b5bb72754ba0b0aee15ec2424 +folderAsset: yes +timeCreated: 1494566847 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scenes/MainScene.unity b/HoloBot/Assets/Scenes/MainScene.unity new file mode 100644 index 0000000..6ce1cea --- /dev/null +++ b/HoloBot/Assets/Scenes/MainScene.unity @@ -0,0 +1,1176 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657868, g: 0.49641263, b: 0.57481706, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 4 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_DirectLightInLightProbes: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + accuratePlacement: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &19897403 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 19897404} + - component: {fileID: 19897406} + - component: {fileID: 19897405} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &19897404 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 19897403} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 644654950} + m_Father: {fileID: 962650935} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -12, y: 0} + m_SizeDelta: {x: 99, y: 99} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &19897405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 19897403} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 090295e36901c94458160cd1893003e9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &19897406 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 19897403} +--- !u!1001 &178902124 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000011792100794, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: a611e772ef8ddf64d8106a9cbb70f31c, type: 2} + m_IsPrefabParent: 0 +--- !u!1001 &593495177 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000010560871102, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 20000013304850028, guid: d379ed0a5618c9f479f58bd83a2d0ad3, + type: 2} + propertyPath: m_HDR + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: d379ed0a5618c9f479f58bd83a2d0ad3, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &598845739 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 598845740} + - component: {fileID: 598845743} + - component: {fileID: 598845742} + - component: {fileID: 598845741} + m_Layer: 0 + m_Name: MicrophoneCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &598845740 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 598845739} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0.27600002} + m_LocalScale: {x: 0.001, y: 0.001, z: 1} + m_Children: + - {fileID: 1885698384} + m_Father: {fileID: 1752861317} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.016000004, y: 0.11} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &598845741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 598845739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &598845742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 598845739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 2 +--- !u!223 &598845743 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 598845739} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 2 + m_Camera: {fileID: 1496151371} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &644654949 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 644654950} + - component: {fileID: 644654952} + - component: {fileID: 644654951} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &644654950 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 644654949} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 19897404} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 7.8} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &644654951 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 644654949} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 13 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u7CFB\u7EDF\u521D\u59CB\u5316\u4E2D" +--- !u!222 &644654952 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 644654949} +--- !u!1001 &698548839 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1752861317} + m_Modifications: + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalRotation.x + value: -0.6755903 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalRotation.w + value: 0.73727727 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9500000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_Controller + value: + objectReference: {fileID: 9100000, guid: 7c44115b69e1e3648a462f0fb937de04, type: 2} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -85.00001 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + m_IsPrefabParent: 0 +--- !u!1 &796382859 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 796382860} + m_Layer: 0 + m_Name: ObjectCollection + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &796382860 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796382859} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1752861317} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &962650934 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 962650935} + - component: {fileID: 962650938} + - component: {fileID: 962650937} + - component: {fileID: 962650936} + m_Layer: 0 + m_Name: TipCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &962650935 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 962650934} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: -0.046} + m_LocalScale: {x: 0.003, y: 0.003, z: 1} + m_Children: + - {fileID: 19897404} + m_Father: {fileID: 1752861317} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.349, y: 0.33} + m_SizeDelta: {x: 20, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &962650936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 962650934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &962650937 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 962650934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 5 +--- !u!223 &962650938 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 962650934} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 2 + m_Camera: {fileID: 1496151371} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1050558246 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1050558247} + - component: {fileID: 1050558250} + - component: {fileID: 1050558249} + - component: {fileID: 1050558248} + m_Layer: 0 + m_Name: ResultCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1050558247 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1050558246} + m_LocalRotation: {x: -0, y: -1, z: -0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 1} + m_Children: + - {fileID: 1815457931} + m_Father: {fileID: 1752861317} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.028, y: -0.22} + m_SizeDelta: {x: 10, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1050558248 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1050558246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1050558249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1050558246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 5 +--- !u!223 &1050558250 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1050558246} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1067963993 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1067963995} + - component: {fileID: 1067963994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1067963994 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1067963993} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1067963995 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1067963993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1476003226 stripped +GameObject: + m_PrefabParentObject: {fileID: 100000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + m_PrefabInternal: {fileID: 698548839} +--- !u!4 &1476003227 stripped +Transform: + m_PrefabParentObject: {fileID: 400000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} + m_PrefabInternal: {fileID: 698548839} +--- !u!64 &1476003228 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1476003226} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 4300000, guid: 8e7ff86547235d74d900689195c58f15, type: 3} +--- !u!20 &1496151371 stripped +Camera: + m_PrefabParentObject: {fileID: 20000013304850028, guid: d379ed0a5618c9f479f58bd83a2d0ad3, + type: 2} + m_PrefabInternal: {fileID: 593495177} +--- !u!1 &1752861316 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1752861317} + - component: {fileID: 1752861319} + - component: {fileID: 1752861318} + - component: {fileID: 1752861320} + - component: {fileID: 1752861321} + m_Layer: 0 + m_Name: bot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1752861317 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1752861316} + m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} + m_LocalPosition: {x: 0, y: -0.1, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1476003227} + - {fileID: 962650935} + - {fileID: 598845740} + - {fileID: 1050558247} + m_Father: {fileID: 796382860} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!114 &1752861318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1752861316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e15291a24858fc648a0b993a0bea40f3, type: 3} + m_Name: + m_EditorClassIdentifier: + microphoneIcon: {fileID: 598845739} + responseText: {fileID: 1815457932} + tipText: {fileID: 644654951} +--- !u!114 &1752861319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1752861316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d32d9a84226f97e438c0d786efe20b8e, type: 3} + m_Name: + m_EditorClassIdentifier: + messageLength: 3 +--- !u!114 &1752861320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1752861316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d5919a75953fa3499d008309fb244c5, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!82 &1752861321 +AudioSource: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1752861316} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 +--- !u!1001 &1814810870 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4000011656901714, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 3eddd1c29199313478dd3f912bfab2ab, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &1815457930 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1815457931} + - component: {fileID: 1815457933} + - component: {fileID: 1815457932} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1815457931 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1815457930} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.05, y: 0.05, z: 1} + m_Children: [] + m_Father: {fileID: 1050558247} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1815457932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1815457930} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 8 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1815457933 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1815457930} +--- !u!1 &1885698383 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1885698384} + - component: {fileID: 1885698386} + - component: {fileID: 1885698385} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1885698384 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1885698383} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 598845740} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 99, y: 99} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1885698385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1885698383} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 93c8b5a61c22fa44e9f96e3273afb6fb, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1885698386 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1885698383} +--- !u!1 &1921710927 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1921710930} + - component: {fileID: 1921710929} + - component: {fileID: 1921710928} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1921710928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1921710927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1921710929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1921710927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1921710930 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1921710927} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/HoloBot/Assets/Scenes/MainScene.unity.meta b/HoloBot/Assets/Scenes/MainScene.unity.meta new file mode 100644 index 0000000..622e69c --- /dev/null +++ b/HoloBot/Assets/Scenes/MainScene.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2205462c259b0af4c911d6da99c833fe +timeCreated: 1494566860 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts.meta b/HoloBot/Assets/Scripts.meta new file mode 100644 index 0000000..c34a84a --- /dev/null +++ b/HoloBot/Assets/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ddd352279e66097418f90a3fcb284d84 +folderAsset: yes +timeCreated: 1494570397 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/BotService.cs b/HoloBot/Assets/Scripts/BotService.cs new file mode 100644 index 0000000..72b613d --- /dev/null +++ b/HoloBot/Assets/Scripts/BotService.cs @@ -0,0 +1,276 @@ +#if WINDOWS_UWP +using Newtonsoft.Json; +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; +#endif + +namespace BotClient +{ +#if WINDOWS_UWP + class Conversation + { + public string conversationId { get; set; } + public string token { get; set; } + public int expires_in { get; set; } + public string streamUrl { get; set; } + public string referenceGrammarId { get; set; } + public string eTag { get; set; } + } + + public class Activity + { + public string type { get; set; } + public string id { get; set;} + public string timestamp { get; set; } + public string localTimestamp { get; set; } + public string serviceUrl { get; set; } + public string channelId { get; set; } + public ChannelAccount from { get; set; } + public ConversationAccount conversation { get; set; } + public ChannelAccount recipient { get; set; } + public string textFormat { get; set; } + public string attachmentLayout { get; set; } + public ChannelAccount[] membersAdded { get; set; } + public ChannelAccount[] membersRemoved { get; set; } + public string topicName { get; set; } + public bool historyDisclosed { get; set; } + public string locale; + public string text { get; set; } + public string speak { get; set; } + public string inputHint { get; set; } + public string summary { get; set; } + public SuggestedActions suggestedActions { get; set; } + public Attachment[] attachments { get; set; } + public Entity[] entities { get; set; } + public Object channelData { get; set; } + public string action { get; set; } + public string replyToId { get; set; } + public Object value { get; set; } + public string name { get; set; } + public ConversationReference relatesTo { get; set; } + public string code { get; set; } + } + + public class ChannelAccount + { + public string id { get; set; } + public string name { get; set; } + } + + public class ConversationAccount + { + public bool isGroup { get; set; } + public string id { get; set; } + public string name { get; set; } + } + + public class SuggestedActions + { + public string[] to { get; set; } + public CardAction[] actions { get; set; } + } + + public class Attachment + { + public string contentType { get; set; } + public string contentUrl { get; set; } + public Object content { get; set; } + public string name { get; set; } + public string thumbnailUrl { get; set; } + } + + public class Entity + { + public string type { get; set; } + } + + public class ConversationReference + { + public string activityId { get; set; } + public ChannelAccount user { get; set; } + public ChannelAccount bot { get; set; } + public ConversationAccount conversation { get; set; } + public string channelId { get; set; } + public string serviceUrl { get; set; } + } + + public class CardAction + { + public string type { get; set; } + public string title { get; set; } + public string image { get; set; } + public Object value { get; set; } + } + + public class ActivitySet + { + public Activity[] activities { get; set; } + public string watermark { get; set; } + } + + public class BotService + { + //Bot Framework Directline通道key + private string APIKEY = "aDyJxnUSx30.cwA.WOg.4DzXtwItzBC6jyUCxHXG8fLKcgdx2zZYf2BkkfW5Lpc"; + private string BASEHOST = "https://directline.botframework.com/"; + private string activeConversation = null; + private string activeWatermark; + + /// + /// json序列化 + /// + /// + /// + /// + public static string JsonSerializer(T t) + { + try + { + string JsonStr = JsonConvert.SerializeObject(t); + return JsonStr; + } + catch + { + return null; + } + } + + /// + /// Json反序列化 + /// + /// + /// + /// + public static T JsonDeserialize(string JsonStr) + { + try + { + return JsonConvert.DeserializeObject(JsonStr); + } + catch + { + return default(T); + } + } + + /// + /// 建立会话 + /// + /// + public async Task StartConversation() + { + using (var client = new HttpClient()) + { + client.BaseAddress = new Uri(BASEHOST); + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + //添加header + client.DefaultRequestHeaders.Add("Authorization", "Bearer " + APIKEY); + + HttpResponseMessage response = await client.PostAsync("/v3/directline/conversations", null); + if (response.IsSuccessStatusCode) + { + var result = response.Content.ReadAsStringAsync().Result; + Conversation myConversation = JsonDeserialize(result); + if (myConversation == null) + { + return null; + } + activeConversation = myConversation.conversationId; + return myConversation.conversationId; + } + } + return null; + } + + /// + /// 发送消息 + /// + /// 消息内容 + /// + public async Task SendMessage(string message) + { + using (var client = new HttpClient()) + { + string conversationId = activeConversation; + if (conversationId == null) + { + return false; + } + + client.BaseAddress = new Uri(BASEHOST); + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + //添加认证header + client.DefaultRequestHeaders.Add("Authorization", "Bearer " + APIKEY); + + var activity = new Activity() + { + type = "message", + from = new ChannelAccount { id = "Adjacentech"}, + text = message + }; + + string postBody = JsonSerializer(activity); + HttpResponseMessage response = await client.PostAsync("/v3/directline/conversations/" + conversationId + "/activities", + new StringContent(postBody, Encoding.UTF8, "application/json")); + if (response.IsSuccessStatusCode) + { + var re = response.Content.ReadAsStringAsync().Result; + return true; + } + return false; + } + } + + /// + /// 获取响应消息 + /// + /// + public async Task GetMessages() + { + using (var client = new HttpClient()) + { + string conversationId = activeConversation; + if (activeConversation == null) + { + return null; + } + client.BaseAddress = new Uri(BASEHOST); + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + //添加认证header + client.DefaultRequestHeaders.Add("Authorization", "Bearer " + APIKEY); + + ActivitySet activitySet = new ActivitySet(); + string messageURL = "/v3/directline/conversations/" + conversationId + "/activities"; + if (activeWatermark != null) + { + messageURL += "/?watermark=" + activeWatermark; + } + + HttpResponseMessage response = await client.GetAsync(messageURL); + if (response.IsSuccessStatusCode) + { + var result = response.Content.ReadAsStringAsync().Result; + activitySet = JsonConvert.DeserializeObject(result); + activeWatermark = activitySet.watermark; + return activitySet; + } + return activitySet; + } + } + } +#endif + +#if !WINDOWS_UWP + public class BotService + { + + } +#endif +} + diff --git a/HoloBot/Assets/Scripts/BotService.cs.meta b/HoloBot/Assets/Scripts/BotService.cs.meta new file mode 100644 index 0000000..587e201 --- /dev/null +++ b/HoloBot/Assets/Scripts/BotService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a659c337a3d58c64bb6bddb1f8621261 +timeCreated: 1494571108 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/JSON.meta b/HoloBot/Assets/Scripts/JSON.meta new file mode 100644 index 0000000..ba74e12 --- /dev/null +++ b/HoloBot/Assets/Scripts/JSON.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae7bfcc0c4dac66448ba353258b4e067 +folderAsset: yes +timeCreated: 1494897633 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/JSON/JSONObject.cs b/HoloBot/Assets/Scripts/JSON/JSONObject.cs new file mode 100644 index 0000000..90d23dc --- /dev/null +++ b/HoloBot/Assets/Scripts/JSON/JSONObject.cs @@ -0,0 +1,1183 @@ +#define PRETTY //Comment out when you no longer need to read JSON to disable pretty Print system-wide +//Using doubles will cause errors in VectorTemplates.cs; Unity speaks floats +#define USEFLOAT //Use floats for numbers instead of doubles (enable if you're getting too many significant digits in string output) +//#define POOLING //Currently using a build setting for this one (also it's experimental) + +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 +using UnityEngine; +using Debug = UnityEngine.Debug; +#endif +using System.Diagnostics; +using System.Collections; +using System.Collections.Generic; +using System.Text; +/* +Copyright (c) 2015 Matt Schoen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +public class JSONObject : IEnumerable { +#if POOLING + const int MAX_POOL_SIZE = 10000; + public static Queue releaseQueue = new Queue(); +#endif + + const int MAX_DEPTH = 100; + const string INFINITY = "\"INFINITY\""; + const string NEGINFINITY = "\"NEGINFINITY\""; + const string NaN = "\"NaN\""; + public static readonly char[] WHITESPACE = { ' ', '\r', '\n', '\t', '\uFEFF', '\u0009' }; + public enum Type { NULL, STRING, NUMBER, OBJECT, ARRAY, BOOL, BAKED } + public bool isContainer { get { return (type == Type.ARRAY || type == Type.OBJECT); } } + public Type type = Type.NULL; + public int Count { + get { + if(list == null) + return -1; + return list.Count; + } + } + public List list; + public List keys; + public string str; +#if USEFLOAT + public float n; + public float f { + get { + return n; + } + } +#else + public double n; + public float f { + get { + return (float)n; + } + } +#endif + public bool useInt; + public long i; + public bool b; + public delegate void AddJSONContents(JSONObject self); + + public static JSONObject nullJO { get { return Create(Type.NULL); } } //an empty, null object + public static JSONObject obj { get { return Create(Type.OBJECT); } } //an empty object + public static JSONObject arr { get { return Create(Type.ARRAY); } } //an empty array + + public JSONObject(Type t) { + type = t; + switch(t) { + case Type.ARRAY: + list = new List(); + break; + case Type.OBJECT: + list = new List(); + keys = new List(); + break; + } + } + public JSONObject(bool b) { + type = Type.BOOL; + this.b = b; + } +#if USEFLOAT + public JSONObject(float f) { + type = Type.NUMBER; + n = f; + } +#else + public JSONObject(double d) { + type = Type.NUMBER; + n = d; + } +#endif + public JSONObject(int i) { + type = Type.NUMBER; + this.i = i; + useInt = true; + n = i; + } + public JSONObject(long l) { + type = Type.NUMBER; + i = l; + useInt = true; + n = l; + } + public JSONObject(Dictionary dic) { + type = Type.OBJECT; + keys = new List(); + list = new List(); + //Not sure if it's worth removing the foreach here + foreach(KeyValuePair kvp in dic) { + keys.Add(kvp.Key); + list.Add(CreateStringObject(kvp.Value)); + } + } + public JSONObject(Dictionary dic) { + type = Type.OBJECT; + keys = new List(); + list = new List(); + //Not sure if it's worth removing the foreach here + foreach(KeyValuePair kvp in dic) { + keys.Add(kvp.Key); + list.Add(kvp.Value); + } + } + public JSONObject(AddJSONContents content) { + content.Invoke(this); + } + public JSONObject(JSONObject[] objs) { + type = Type.ARRAY; + list = new List(objs); + } + //Convenience function for creating a JSONObject containing a string. This is not part of the constructor so that malformed JSON data doesn't just turn into a string object + public static JSONObject StringObject(string val) { return CreateStringObject(val); } + public void Absorb(JSONObject obj) { + list.AddRange(obj.list); + keys.AddRange(obj.keys); + str = obj.str; + n = obj.n; + useInt = obj.useInt; + i = obj.i; + b = obj.b; + type = obj.type; + } + public static JSONObject Create() { +#if POOLING + JSONObject result = null; + while(result == null && releaseQueue.Count > 0) { + result = releaseQueue.Dequeue(); +#if DEV + //The following cases should NEVER HAPPEN (but they do...) + if(result == null) + Debug.WriteLine("wtf " + releaseQueue.Count); + else if(result.list != null) + Debug.WriteLine("wtflist " + result.list.Count); +#endif + } + if(result != null) + return result; +#endif + return new JSONObject(); + } + public static JSONObject Create(Type t) { + JSONObject obj = Create(); + obj.type = t; + switch(t) { + case Type.ARRAY: + obj.list = new List(); + break; + case Type.OBJECT: + obj.list = new List(); + obj.keys = new List(); + break; + } + return obj; + } + public static JSONObject Create(bool val) { + JSONObject obj = Create(); + obj.type = Type.BOOL; + obj.b = val; + return obj; + } + public static JSONObject Create(float val) { + JSONObject obj = Create(); + obj.type = Type.NUMBER; + obj.n = val; + return obj; + } + public static JSONObject Create(int val) { + JSONObject obj = Create(); + obj.type = Type.NUMBER; + obj.n = val; + obj.useInt = true; + obj.i = val; + return obj; + } + public static JSONObject Create(long val) { + JSONObject obj = Create(); + obj.type = Type.NUMBER; + obj.n = val; + obj.useInt = true; + obj.i = val; + return obj; + } + public static JSONObject CreateStringObject(string val) { + JSONObject obj = Create(); + obj.type = Type.STRING; + obj.str = val; + return obj; + } + public static JSONObject CreateBakedObject(string val) { + JSONObject bakedObject = Create(); + bakedObject.type = Type.BAKED; + bakedObject.str = val; + return bakedObject; + } + /// + /// Create a JSONObject by parsing string data + /// + /// The string to be parsed + /// The maximum depth for the parser to search. Set this to to 1 for the first level, + /// 2 for the first 2 levels, etc. It defaults to -2 because -1 is the depth value that is parsed (see below) + /// Whether to store levels beyond maxDepth in baked JSONObjects + /// Whether to be strict in the parsing. For example, non-strict parsing will successfully + /// parse "a string" into a string-type + /// + public static JSONObject Create(string val, int maxDepth = -2, bool storeExcessLevels = false, bool strict = false) { + JSONObject obj = Create(); + obj.Parse(val, maxDepth, storeExcessLevels, strict); + return obj; + } + public static JSONObject Create(AddJSONContents content) { + JSONObject obj = Create(); + content.Invoke(obj); + return obj; + } + public static JSONObject Create(Dictionary dic) { + JSONObject obj = Create(); + obj.type = Type.OBJECT; + obj.keys = new List(); + obj.list = new List(); + //Not sure if it's worth removing the foreach here + foreach(KeyValuePair kvp in dic) { + obj.keys.Add(kvp.Key); + obj.list.Add(CreateStringObject(kvp.Value)); + } + return obj; + } + public JSONObject() { } + #region PARSE + public JSONObject(string str, int maxDepth = -2, bool storeExcessLevels = false, bool strict = false) { //create a new JSONObject from a string (this will also create any children, and parse the whole string) + Parse(str, maxDepth, storeExcessLevels, strict); + } + void Parse(string str, int maxDepth = -2, bool storeExcessLevels = false, bool strict = false) { + if(!string.IsNullOrEmpty(str)) { + str = str.Trim(WHITESPACE); + if(strict) { + if(str[0] != '[' && str[0] != '{') { + type = Type.NULL; +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.LogWarning +#else + Debug.WriteLine +#endif + ("Improper (strict) JSON formatting. First character must be [ or {"); + return; + } + } + if(str.Length > 0) { +#if UNITY_WP8 || UNITY_WSA + if (str == "true") { + type = Type.BOOL; + b = true; + } else if (str == "false") { + type = Type.BOOL; + b = false; + } else if (str == "null") { + type = Type.NULL; +#else + if(string.Compare(str, "true", true) == 0) { + type = Type.BOOL; + b = true; + } else if(string.Compare(str, "false", true) == 0) { + type = Type.BOOL; + b = false; + } else if(string.Compare(str, "null", true) == 0) { + type = Type.NULL; +#endif +#if USEFLOAT + } else if(str == INFINITY) { + type = Type.NUMBER; + n = float.PositiveInfinity; + } else if(str == NEGINFINITY) { + type = Type.NUMBER; + n = float.NegativeInfinity; + } else if(str == NaN) { + type = Type.NUMBER; + n = float.NaN; +#else + } else if(str == INFINITY) { + type = Type.NUMBER; + n = double.PositiveInfinity; + } else if(str == NEGINFINITY) { + type = Type.NUMBER; + n = double.NegativeInfinity; + } else if(str == NaN) { + type = Type.NUMBER; + n = double.NaN; +#endif + } else if(str[0] == '"') { + type = Type.STRING; + this.str = str.Substring(1, str.Length - 2); + } else { + int tokenTmp = 1; + /* + * Checking for the following formatting (www.json.org) + * object - {"field1":value,"field2":value} + * array - [value,value,value] + * value - string - "string" + * - number - 0.0 + * - bool - true -or- false + * - null - null + */ + int offset = 0; + switch(str[offset]) { + case '{': + type = Type.OBJECT; + keys = new List(); + list = new List(); + break; + case '[': + type = Type.ARRAY; + list = new List(); + break; + default: + try { +#if USEFLOAT + n = System.Convert.ToSingle(str); +#else + n = System.Convert.ToDouble(str); +#endif + if(!str.Contains(".")) { + i = System.Convert.ToInt64(str); + useInt = true; + } + type = Type.NUMBER; + } catch(System.FormatException) { + type = Type.NULL; +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.LogWarning +#else + Debug.WriteLine +#endif + ("improper JSON formatting:" + str); + } + return; + } + string propName = ""; + bool openQuote = false; + bool inProp = false; + int depth = 0; + while(++offset < str.Length) { + if(System.Array.IndexOf(WHITESPACE, str[offset]) > -1) + continue; + if(str[offset] == '\\') { + offset += 1; + continue; + } + if(str[offset] == '"') { + if(openQuote) { + if(!inProp && depth == 0 && type == Type.OBJECT) + propName = str.Substring(tokenTmp + 1, offset - tokenTmp - 1); + openQuote = false; + } else { + if(depth == 0 && type == Type.OBJECT) + tokenTmp = offset; + openQuote = true; + } + } + if(openQuote) + continue; + if(type == Type.OBJECT && depth == 0) { + if(str[offset] == ':') { + tokenTmp = offset + 1; + inProp = true; + } + } + + if(str[offset] == '[' || str[offset] == '{') { + depth++; + } else if(str[offset] == ']' || str[offset] == '}') { + depth--; + } + //if (encounter a ',' at top level) || a closing ]/} + if((str[offset] == ',' && depth == 0) || depth < 0) { + inProp = false; + string inner = str.Substring(tokenTmp, offset - tokenTmp).Trim(WHITESPACE); + if(inner.Length > 0) { + if(type == Type.OBJECT) + keys.Add(propName); + if(maxDepth != -1) //maxDepth of -1 is the end of the line + list.Add(Create(inner, (maxDepth < -1) ? -2 : maxDepth - 1, storeExcessLevels)); + else if(storeExcessLevels) + list.Add(CreateBakedObject(inner)); + + } + tokenTmp = offset + 1; + } + } + } + } else type = Type.NULL; + } else type = Type.NULL; //If the string is missing, this is a null + //Profiler.EndSample(); + } + #endregion + public bool IsNumber { get { return type == Type.NUMBER; } } + public bool IsNull { get { return type == Type.NULL; } } + public bool IsString { get { return type == Type.STRING; } } + public bool IsBool { get { return type == Type.BOOL; } } + public bool IsArray { get { return type == Type.ARRAY; } } + public bool IsObject { get { return type == Type.OBJECT || type == Type.BAKED; } } + public void Add(bool val) { + Add(Create(val)); + } + public void Add(float val) { + Add(Create(val)); + } + public void Add(int val) { + Add(Create(val)); + } + public void Add(string str) { + Add(CreateStringObject(str)); + } + public void Add(AddJSONContents content) { + Add(Create(content)); + } + public void Add(JSONObject obj) { + if(obj) { //Don't do anything if the object is null + if(type != Type.ARRAY) { + type = Type.ARRAY; //Congratulations, son, you're an ARRAY now + if(list == null) + list = new List(); + } + list.Add(obj); + } + } + public void AddField(string name, bool val) { + AddField(name, Create(val)); + } + public void AddField(string name, float val) { + AddField(name, Create(val)); + } + public void AddField(string name, int val) { + AddField(name, Create(val)); + } + public void AddField(string name, long val) { + AddField(name, Create(val)); + } + public void AddField(string name, AddJSONContents content) { + AddField(name, Create(content)); + } + public void AddField(string name, string val) { + AddField(name, CreateStringObject(val)); + } + public void AddField(string name, JSONObject obj) { + if(obj) { //Don't do anything if the object is null + if(type != Type.OBJECT) { + if(keys == null) + keys = new List(); + if(type == Type.ARRAY) { + for(int i = 0; i < list.Count; i++) + keys.Add(i + ""); + } else + if(list == null) + list = new List(); + type = Type.OBJECT; //Congratulations, son, you're an OBJECT now + } + keys.Add(name); + list.Add(obj); + } + } + public void SetField(string name, string val) { SetField(name, CreateStringObject(val)); } + public void SetField(string name, bool val) { SetField(name, Create(val)); } + public void SetField(string name, float val) { SetField(name, Create(val)); } + public void SetField(string name, int val) { SetField(name, Create(val)); } + public void SetField(string name, JSONObject obj) { + if(HasField(name)) { + list.Remove(this[name]); + keys.Remove(name); + } + AddField(name, obj); + } + public void RemoveField(string name) { + if(keys.IndexOf(name) > -1) { + list.RemoveAt(keys.IndexOf(name)); + keys.Remove(name); + } + } + public delegate void FieldNotFound(string name); + public delegate void GetFieldResponse(JSONObject obj); + public bool GetField(out bool field, string name, bool fallback) { + field = fallback; + return GetField(ref field, name); + } + public bool GetField(ref bool field, string name, FieldNotFound fail = null) { + if(type == Type.OBJECT) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = list[index].b; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } +#if USEFLOAT + public bool GetField(out float field, string name, float fallback) { +#else + public bool GetField(out double field, string name, double fallback) { +#endif + field = fallback; + return GetField(ref field, name); + } +#if USEFLOAT + public bool GetField(ref float field, string name, FieldNotFound fail = null) { +#else + public bool GetField(ref double field, string name, FieldNotFound fail = null) { +#endif + if(type == Type.OBJECT) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = list[index].n; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } + public bool GetField(out int field, string name, int fallback) { + field = fallback; + return GetField(ref field, name); + } + public bool GetField(ref int field, string name, FieldNotFound fail = null) { + if(IsObject) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = (int)list[index].n; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } + public bool GetField(out long field, string name, long fallback) { + field = fallback; + return GetField(ref field, name); + } + public bool GetField(ref long field, string name, FieldNotFound fail = null) { + if(IsObject) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = (long)list[index].n; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } + public bool GetField(out uint field, string name, uint fallback) { + field = fallback; + return GetField(ref field, name); + } + public bool GetField(ref uint field, string name, FieldNotFound fail = null) { + if(IsObject) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = (uint)list[index].n; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } + public bool GetField(out string field, string name, string fallback) { + field = fallback; + return GetField(ref field, name); + } + public bool GetField(ref string field, string name, FieldNotFound fail = null) { + if(IsObject) { + int index = keys.IndexOf(name); + if(index >= 0) { + field = list[index].str; + return true; + } + } + if(fail != null) fail.Invoke(name); + return false; + } + public void GetField(string name, GetFieldResponse response, FieldNotFound fail = null) { + if(response != null && IsObject) { + int index = keys.IndexOf(name); + if(index >= 0) { + response.Invoke(list[index]); + return; + } + } + if(fail != null) fail.Invoke(name); + } + public JSONObject GetField(string name) { + if(IsObject) + for(int i = 0; i < keys.Count; i++) + if(keys[i] == name) + return list[i]; + return null; + } + public bool HasFields(string[] names) { + if(!IsObject) + return false; + for(int i = 0; i < names.Length; i++) + if(!keys.Contains(names[i])) + return false; + return true; + } + public bool HasField(string name) { + if(!IsObject) + return false; + for(int i = 0; i < keys.Count; i++) + if(keys[i] == name) + return true; + return false; + } + public void Clear() { + type = Type.NULL; + if(list != null) + list.Clear(); + if(keys != null) + keys.Clear(); + str = ""; + n = 0; + b = false; + } + /// + /// Copy a JSONObject. This could probably work better + /// + /// + public JSONObject Copy() { + return Create(Print()); + } + /* + * The Merge function is experimental. Use at your own risk. + */ + public void Merge(JSONObject obj) { + MergeRecur(this, obj); + } + /// + /// Merge object right into left recursively + /// + /// The left (base) object + /// The right (new) object + static void MergeRecur(JSONObject left, JSONObject right) { + if(left.type == Type.NULL) + left.Absorb(right); + else if(left.type == Type.OBJECT && right.type == Type.OBJECT) { + for(int i = 0; i < right.list.Count; i++) { + string key = right.keys[i]; + if(right[i].isContainer) { + if(left.HasField(key)) + MergeRecur(left[key], right[i]); + else + left.AddField(key, right[i]); + } else { + if(left.HasField(key)) + left.SetField(key, right[i]); + else + left.AddField(key, right[i]); + } + } + } else if(left.type == Type.ARRAY && right.type == Type.ARRAY) { + if(right.Count > left.Count) { +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.LogError +#else + Debug.WriteLine +#endif + ("Cannot merge arrays when right object has more elements"); + return; + } + for(int i = 0; i < right.list.Count; i++) { + if(left[i].type == right[i].type) { //Only overwrite with the same type + if(left[i].isContainer) + MergeRecur(left[i], right[i]); + else { + left[i] = right[i]; + } + } + } + } + } + public void Bake() { + if(type != Type.BAKED) { + str = Print(); + type = Type.BAKED; + } + } + public IEnumerable BakeAsync() { + if(type != Type.BAKED) { + foreach(string s in PrintAsync()) { + if(s == null) + yield return s; + else { + str = s; + } + } + type = Type.BAKED; + } + } +#pragma warning disable 219 + public string Print(bool pretty = false) { + StringBuilder builder = new StringBuilder(); + Stringify(0, builder, pretty); + return builder.ToString(); + } + public IEnumerable PrintAsync(bool pretty = false) { + StringBuilder builder = new StringBuilder(); + printWatch.Reset(); + printWatch.Start(); + foreach(IEnumerable e in StringifyAsync(0, builder, pretty)) { + yield return null; + } + yield return builder.ToString(); + } +#pragma warning restore 219 + #region STRINGIFY + const float maxFrameTime = 0.008f; + static readonly Stopwatch printWatch = new Stopwatch(); + IEnumerable StringifyAsync(int depth, StringBuilder builder, bool pretty = false) { //Convert the JSONObject into a string + //Profiler.BeginSample("JSONprint"); + if(depth++ > MAX_DEPTH) { +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.Log +#else + Debug.WriteLine +#endif + ("reached max depth!"); + yield break; + } + if(printWatch.Elapsed.TotalSeconds > maxFrameTime) { + printWatch.Reset(); + yield return null; + printWatch.Start(); + } + switch(type) { + case Type.BAKED: + builder.Append(str); + break; + case Type.STRING: + builder.AppendFormat("\"{0}\"", str); + break; + case Type.NUMBER: + if(useInt) { + builder.Append(i.ToString()); + } else { +#if USEFLOAT + if(float.IsInfinity(n)) + builder.Append(INFINITY); + else if(float.IsNegativeInfinity(n)) + builder.Append(NEGINFINITY); + else if(float.IsNaN(n)) + builder.Append(NaN); +#else + if(double.IsInfinity(n)) + builder.Append(INFINITY); + else if(double.IsNegativeInfinity(n)) + builder.Append(NEGINFINITY); + else if(double.IsNaN(n)) + builder.Append(NaN); +#endif + else + builder.Append(n.ToString()); + } + break; + case Type.OBJECT: + builder.Append("{"); + if(list.Count > 0) { +#if(PRETTY) //for a bit more readability, comment the define above to disable system-wide + if(pretty) + builder.Append("\n"); +#endif + for(int i = 0; i < list.Count; i++) { + string key = keys[i]; + JSONObject obj = list[i]; + if(obj) { +#if(PRETTY) + if(pretty) + for(int j = 0; j < depth; j++) + builder.Append("\t"); //for a bit more readability +#endif + builder.AppendFormat("\"{0}\":", key); + foreach(IEnumerable e in obj.StringifyAsync(depth, builder, pretty)) + yield return e; + builder.Append(","); +#if(PRETTY) + if(pretty) + builder.Append("\n"); +#endif + } + } +#if(PRETTY) + if(pretty) + builder.Length -= 2; + else +#endif + builder.Length--; + } +#if(PRETTY) + if(pretty && list.Count > 0) { + builder.Append("\n"); + for(int j = 0; j < depth - 1; j++) + builder.Append("\t"); //for a bit more readability + } +#endif + builder.Append("}"); + break; + case Type.ARRAY: + builder.Append("["); + if(list.Count > 0) { +#if(PRETTY) + if(pretty) + builder.Append("\n"); //for a bit more readability +#endif + for(int i = 0; i < list.Count; i++) { + if(list[i]) { +#if(PRETTY) + if(pretty) + for(int j = 0; j < depth; j++) + builder.Append("\t"); //for a bit more readability +#endif + foreach(IEnumerable e in list[i].StringifyAsync(depth, builder, pretty)) + yield return e; + builder.Append(","); +#if(PRETTY) + if(pretty) + builder.Append("\n"); //for a bit more readability +#endif + } + } +#if(PRETTY) + if(pretty) + builder.Length -= 2; + else +#endif + builder.Length--; + } +#if(PRETTY) + if(pretty && list.Count > 0) { + builder.Append("\n"); + for(int j = 0; j < depth - 1; j++) + builder.Append("\t"); //for a bit more readability + } +#endif + builder.Append("]"); + break; + case Type.BOOL: + if(b) + builder.Append("true"); + else + builder.Append("false"); + break; + case Type.NULL: + builder.Append("null"); + break; + } + //Profiler.EndSample(); + } + //TODO: Refactor Stringify functions to share core logic + /* + * I know, I know, this is really bad form. It turns out that there is a + * significant amount of garbage created when calling as a coroutine, so this + * method is duplicated. Hopefully there won't be too many future changes, but + * I would still like a more elegant way to optionaly yield + */ + void Stringify(int depth, StringBuilder builder, bool pretty = false) { //Convert the JSONObject into a string + //Profiler.BeginSample("JSONprint"); + if(depth++ > MAX_DEPTH) { +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.Log +#else + Debug.WriteLine +#endif + ("reached max depth!"); + return; + } + switch(type) { + case Type.BAKED: + builder.Append(str); + break; + case Type.STRING: + builder.AppendFormat("\"{0}\"", str); + break; + case Type.NUMBER: + if(useInt) { + builder.Append(i.ToString()); + } else { +#if USEFLOAT + if(float.IsInfinity(n)) + builder.Append(INFINITY); + else if(float.IsNegativeInfinity(n)) + builder.Append(NEGINFINITY); + else if(float.IsNaN(n)) + builder.Append(NaN); +#else + if(double.IsInfinity(n)) + builder.Append(INFINITY); + else if(double.IsNegativeInfinity(n)) + builder.Append(NEGINFINITY); + else if(double.IsNaN(n)) + builder.Append(NaN); +#endif + else + builder.Append(n.ToString()); + } + break; + case Type.OBJECT: + builder.Append("{"); + if(list.Count > 0) { +#if(PRETTY) //for a bit more readability, comment the define above to disable system-wide + if(pretty) + builder.Append("\n"); +#endif + for(int i = 0; i < list.Count; i++) { + string key = keys[i]; + JSONObject obj = list[i]; + if(obj) { +#if(PRETTY) + if(pretty) + for(int j = 0; j < depth; j++) + builder.Append("\t"); //for a bit more readability +#endif + builder.AppendFormat("\"{0}\":", key); + obj.Stringify(depth, builder, pretty); + builder.Append(","); +#if(PRETTY) + if(pretty) + builder.Append("\n"); +#endif + } + } +#if(PRETTY) + if(pretty) + builder.Length -= 2; + else +#endif + builder.Length--; + } +#if(PRETTY) + if(pretty && list.Count > 0) { + builder.Append("\n"); + for(int j = 0; j < depth - 1; j++) + builder.Append("\t"); //for a bit more readability + } +#endif + builder.Append("}"); + break; + case Type.ARRAY: + builder.Append("["); + if(list.Count > 0) { +#if(PRETTY) + if(pretty) + builder.Append("\n"); //for a bit more readability +#endif + for(int i = 0; i < list.Count; i++) { + if(list[i]) { +#if(PRETTY) + if(pretty) + for(int j = 0; j < depth; j++) + builder.Append("\t"); //for a bit more readability +#endif + list[i].Stringify(depth, builder, pretty); + builder.Append(","); +#if(PRETTY) + if(pretty) + builder.Append("\n"); //for a bit more readability +#endif + } + } +#if(PRETTY) + if(pretty) + builder.Length -= 2; + else +#endif + builder.Length--; + } +#if(PRETTY) + if(pretty && list.Count > 0) { + builder.Append("\n"); + for(int j = 0; j < depth - 1; j++) + builder.Append("\t"); //for a bit more readability + } +#endif + builder.Append("]"); + break; + case Type.BOOL: + if(b) + builder.Append("true"); + else + builder.Append("false"); + break; + case Type.NULL: + builder.Append("null"); + break; + } + //Profiler.EndSample(); + } + #endregion +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + public static implicit operator WWWForm(JSONObject obj) { + WWWForm form = new WWWForm(); + for(int i = 0; i < obj.list.Count; i++) { + string key = i + ""; + if(obj.type == Type.OBJECT) + key = obj.keys[i]; + string val = obj.list[i].ToString(); + if(obj.list[i].type == Type.STRING) + val = val.Replace("\"", ""); + form.AddField(key, val); + } + return form; + } +#endif + public JSONObject this[int index] { + get { + if(list.Count > index) return list[index]; + return null; + } + set { + if(list.Count > index) + list[index] = value; + } + } + public JSONObject this[string index] { + get { + return GetField(index); + } + set { + SetField(index, value); + } + } + public override string ToString() { + return Print(); + } + public string ToString(bool pretty) { + return Print(pretty); + } + public Dictionary ToDictionary() { + if(type == Type.OBJECT) { + Dictionary result = new Dictionary(); + for(int i = 0; i < list.Count; i++) { + JSONObject val = list[i]; + switch(val.type) { + case Type.STRING: result.Add(keys[i], val.str); break; + case Type.NUMBER: result.Add(keys[i], val.n + ""); break; + case Type.BOOL: result.Add(keys[i], val.b + ""); break; + default: +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.LogWarning +#else + Debug.WriteLine +#endif + ("Omitting object: " + keys[i] + " in dictionary conversion"); + break; + } + } + return result; + } +#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5 + Debug.Log +#else + Debug.WriteLine +#endif + ("Tried to turn non-Object JSONObject into a dictionary"); + return null; + } + public static implicit operator bool(JSONObject o) { + return o != null; + } +#if POOLING + static bool pool = true; + public static void ClearPool() { + pool = false; + releaseQueue.Clear(); + pool = true; + } + + ~JSONObject() { + if(pool && releaseQueue.Count < MAX_POOL_SIZE) { + type = Type.NULL; + list = null; + keys = null; + str = ""; + n = 0; + b = false; + releaseQueue.Enqueue(this); + } + } +#endif + + IEnumerator IEnumerable.GetEnumerator() + { + return (IEnumerator)GetEnumerator(); + } + + public JSONObjectEnumer GetEnumerator() + { + return new JSONObjectEnumer(this); + } +} + +public class JSONObjectEnumer : IEnumerator +{ + public JSONObject _jobj; + + // Enumerators are positioned before the first element + // until the first MoveNext() call. + int position = -1; + + public JSONObjectEnumer(JSONObject jsonObject) + { + Debug.Assert(jsonObject.isContainer); //must be an array or object to itterate + _jobj = jsonObject; + } + + public bool MoveNext() + { + position++; + return (position < _jobj.Count); + } + + public void Reset() + { + position = -1; + } + + object IEnumerator.Current + { + get + { + return Current; + } + } + + public JSONObject Current + { + get + { + if (_jobj.IsArray) + { + return _jobj[position]; + } + else + { + string key = _jobj.keys[position]; + return _jobj[key]; + } + } + } +} diff --git a/HoloBot/Assets/Scripts/JSON/JSONObject.cs.meta b/HoloBot/Assets/Scripts/JSON/JSONObject.cs.meta new file mode 100644 index 0000000..924e031 --- /dev/null +++ b/HoloBot/Assets/Scripts/JSON/JSONObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23ade7c375098aa4aa6f34f6a8b9df33 +timeCreated: 1495071519 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/ModelManager.cs b/HoloBot/Assets/Scripts/ModelManager.cs new file mode 100644 index 0000000..884d776 --- /dev/null +++ b/HoloBot/Assets/Scripts/ModelManager.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using HoloToolkit.Unity.InputModule; +using System; +using HoloToolkit.Unity; +using UnityEngine.UI; + +public class ModelManager : Singleton, IInputClickHandler { + + public GameObject microphoneIcon = null; + public Text responseText = null; + public Text tipText = null; + + // Use this for initialization + void Start () { + + } + + // Update is called once per frame + void Update () { + + } + + public void SetMicrophoneIcon(bool showFlag) + { + if (microphoneIcon != null) + { + microphoneIcon.SetActive(showFlag); + } + } + + /// + /// 设置bot 提示内容 + /// + /// + public void SetTipText(string text) + { + if (tipText != null) + { + tipText.text = text; + } + } + + /// + /// 显示响应消息 + /// + /// + public void SetResponseText(string text) + { + if (responseText != null) + { + responseText.text = text; + } + } + + public void OnInputClicked(InputClickedEventData eventData) + { + if (SpeechToText.Instance.IsRecording()) + { + SpeechToText.Instance.RecordStop(); + } + else + { + SpeechToText.Instance.Record(); + } + } +} diff --git a/HoloBot/Assets/Scripts/ModelManager.cs.meta b/HoloBot/Assets/Scripts/ModelManager.cs.meta new file mode 100644 index 0000000..d11dc86 --- /dev/null +++ b/HoloBot/Assets/Scripts/ModelManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e15291a24858fc648a0b993a0bea40f3 +timeCreated: 1494849903 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/SavWav.cs b/HoloBot/Assets/Scripts/SavWav.cs new file mode 100644 index 0000000..b9a018e --- /dev/null +++ b/HoloBot/Assets/Scripts/SavWav.cs @@ -0,0 +1,186 @@ +// Copyright (c) 2012 Calvin Rien +// http://the.darktable.com +// +// This software is provided 'as-is', without any express or implied warranty. In +// no event will the authors be held liable for any damages arising from the use +// of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not claim +// that you wrote the original software. If you use this software in a product, +// an acknowledgment in the product documentation would be appreciated but is not +// required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +// ============================================================================= +// +// derived from Gregorio Zanon's script +// http://forum.unity3d.com/threads/119295-Writing-AudioListener.GetOutputData-to-wav-problem?p=806734&viewfull=1#post806734 + +using System; +using System.IO; +using UnityEngine; +using System.Collections.Generic; + +public static class SavWav { + + const int HEADER_SIZE = 44; + + public static bool Save(string filename, AudioClip clip) { + if (!filename.ToLower().EndsWith(".wav")) { + filename += ".wav"; + } + + var filepath = Path.Combine(Application.persistentDataPath, filename); + + Debug.Log(filepath); + + // Make sure directory exists if user is saving to sub dir. + Directory.CreateDirectory(Path.GetDirectoryName(filepath)); + + using (var fileStream = CreateEmpty(filepath)) { + + ConvertAndWrite(fileStream, clip); + + WriteHeader(fileStream, clip); + } + + return true; // TODO: return false if there's a failure saving the file + } + + public static AudioClip TrimSilence(AudioClip clip, float min) { + var samples = new float[clip.samples]; + + clip.GetData(samples, 0); + + return TrimSilence(new List(samples), min, clip.channels, clip.frequency); + } + + public static AudioClip TrimSilence(List samples, float min, int channels, int hz) { + return TrimSilence(samples, min, channels, hz, false, false); + } + + public static AudioClip TrimSilence(List samples, float min, int channels, int hz, bool _3D, bool stream) { + int i; + + for (i=0; i min) { + break; + } + } + + samples.RemoveRange(0, i); + + for (i=samples.Count - 1; i>0; i--) { + if (Mathf.Abs(samples[i]) > min) { + break; + } + } + + samples.RemoveRange(i, samples.Count - i); + + var clip = AudioClip.Create("TempClip", samples.Count, channels, hz, _3D, stream); + + clip.SetData(samples.ToArray(), 0); + + return clip; + } + + static FileStream CreateEmpty(string filepath) { + var fileStream = new FileStream(filepath, FileMode.Create); + byte emptyByte = new byte(); + + for(int i = 0; i < HEADER_SIZE; i++) //preparing the header + { + fileStream.WriteByte(emptyByte); + } + + return fileStream; + } + + static void ConvertAndWrite(FileStream fileStream, AudioClip clip) { + + var samples = new float[clip.samples]; + + clip.GetData(samples, 0); + + Int16[] intData = new Int16[samples.Length]; + //converting in 2 float[] steps to Int16[], //then Int16[] to Byte[] + + Byte[] bytesData = new Byte[samples.Length * 2]; + //bytesData array is twice the size of + //dataSource array because a float converted in Int16 is 2 bytes. + + int rescaleFactor = 32767; //to convert float to Int16 + + for (int i = 0; i +{ + public int messageLength = 3; //录音时间,单位:秒 + + private bool recording = false; + private static string deviceName = string.Empty; //microphone设备名称 + private int samplingRate; //采样率 + private AudioClip audioClip; + + private static string fetchUri = "https://api.cognitive.microsoft.com/sts/v1.0"; + private static string subscriptionKey = "745d51f70a804bae90da163207801d3e"; //Bing Speech 订阅key + private string token = null; + private const int refreshTokenDuration = 9 * 60; //Access token每10分钟后过期,9分钟后重新获取token + private float startTime; + BotService botService; + + private AudioSource audioSource; + + void Start () { + int unUsed; + Microphone.GetDeviceCaps(deviceName, out unUsed, out samplingRate); + StartCoroutine(FetchToken(true)); + startTime = Time.time; + botService = new BotService(); + audioSource = gameObject.GetComponent(); +#if WINDOWS_UWP + botService.StartConversation(); +#endif + } + + void Update () { + if (recording && !Microphone.IsRecording(deviceName)) + { + RecordStop(); + } + + //token即将过期时,重新获取token + if (Time.time - startTime >= refreshTokenDuration) + { + Debug.Log("ReFetchToken"); + StartCoroutine(FetchToken(false)); + startTime = Time.time; + } + } + + /// + /// 获取Bing Speech Token值 + /// + /// + public string GetToken() + { + return token; + } + + public bool IsRecording() + { + return recording; + } + + /// + /// 获取token + /// + /// + private IEnumerator FetchToken(bool showTipFlag) + { + var headers = new Dictionary() { + { "Ocp-Apim-Subscription-Key", subscriptionKey } + }; + UriBuilder uriBuilder = new UriBuilder(fetchUri); + uriBuilder.Path += "/issueToken"; + byte[] postdata = new byte[1]; + WWW www = new WWW(uriBuilder.ToString(), postdata, headers); + yield return www; + token = www.text; + Debug.Log(token); + if (showTipFlag) + { + ModelManager.Instance.SetTipText("点我进行提问"); + } + } + + /// + /// 使用Bing Speech API,将语音文件转成text + /// + /// + /// + private IEnumerator AudioToText(string filepath) + { + string requestUri = "https://speech.platform.bing.com/recognize"; + requestUri += @"?scenarios=smd"; + requestUri += @"&appid=D4D52672-91D7-4C74-8AD8-42B1D98141A5"; // You must use this ID. + requestUri += @"&locale=zh-CN"; + requestUri += @"&device.os=win10"; + requestUri += @"&version=3.0"; + requestUri += @"&format=json"; + requestUri += @"&instanceid=565D69FF-E928-4B7E-87DA-9A750B96D9E3"; + requestUri += @"&requestid=" + Guid.NewGuid().ToString(); + + FileStream fs = null; + using (fs = new FileStream(filepath, FileMode.Open, FileAccess.Read)) + { + byte[] buffer = null; + buffer = new Byte[(int)fs.Length]; + fs.Read(buffer, 0, buffer.Length); + var headers = new Dictionary() { + { "Authorization", "Bearer " + token }, + { "Content-Type", @"audio/wav; codec=""audio/pcm""; samplerate=16000" } + }; + WWW www = new WWW(requestUri, buffer, headers); + + yield return www; + try + { + string result = www.text; + JSONObject jsonObj = new JSONObject(result); + string resultStr = jsonObj.GetField("header").GetField("name").str; + resultStr = TrimResultStr(resultStr); + ModelManager.Instance.SetResponseText("问:" + resultStr); +#if WINDOWS_UWP + SendMessage(resultStr); +#endif + } + catch + { + TextToSpeech.Instance.SpeakText("对不起,无法听清您说什么"); + } + } + } + +#if WINDOWS_UWP + private async void SendMessage(string message) + { + string result = "对不起,无法回答您的问题"; + if (await botService.SendMessage(message)) + { + ActivitySet messages = await botService.GetMessages(); + if (messages != null) + { + for (int i = 1; i < messages.activities.Length; i++) + { + result = messages.activities[i].text; + } + } + } + UnityEngine.WSA.Application.InvokeOnAppThread(() => +        { + TextToSpeech.Instance.SpeakText(result); +        }, false); + } +#endif + + /// + /// 对Speech API返回的结果进行处理,去除最后的句号,防止影响结果 + /// + /// + /// + private string TrimResultStr(string result) + { + string resultStr = result; + if (resultStr != null) + { + int index = resultStr.LastIndexOf("。"); + if (index > 0) + { + resultStr = resultStr.Remove(index, 1); + } + } + return resultStr; + } + + /// + /// 开始录音 + /// + public void Record() + { + recording = true; + audioSource.Stop(); + + ModelManager.Instance.SetMicrophoneIcon(true); + ModelManager.Instance.SetTipText("正在聆听中"); + ModelManager.Instance.SetResponseText(""); + + if (Microphone.IsRecording(deviceName)) + { + return; + } + audioClip = StartRecording(); + } + + /// + /// 停止录音,将语音保存成文件 + /// + public void RecordStop() + { + recording = false; + + ModelManager.Instance.SetMicrophoneIcon(false); + ModelManager.Instance.SetTipText("思考中,请稍候"); + + StopRecording(); + string filename = "myfile.wav"; + var filepath = Path.Combine(Application.persistentDataPath, filename); + SavWav.Save(filename, audioClip); + StartCoroutine(AudioToText(filepath)); + } + + /// + /// 开始录音 + /// + /// + private AudioClip StartRecording() + { + return Microphone.Start(deviceName, false, messageLength, 16000); + } + + /// + /// 停止录音 + /// + private void StopRecording() + { + if (Microphone.IsRecording(deviceName)) + { + Microphone.End(deviceName); + } + } +} diff --git a/HoloBot/Assets/Scripts/SpeechToText.cs.meta b/HoloBot/Assets/Scripts/SpeechToText.cs.meta new file mode 100644 index 0000000..e1cdb25 --- /dev/null +++ b/HoloBot/Assets/Scripts/SpeechToText.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d32d9a84226f97e438c0d786efe20b8e +timeCreated: 1494849750 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/Scripts/TextToSpeech.cs b/HoloBot/Assets/Scripts/TextToSpeech.cs new file mode 100644 index 0000000..6a25dc3 --- /dev/null +++ b/HoloBot/Assets/Scripts/TextToSpeech.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using HoloToolkit.Unity; +using System.IO; +using System; + +public class TextToSpeech : Singleton +{ + private static string SSML = "{0}"; + AudioSource audioSource; + // Use this for initialization + void Start () { + audioSource = gameObject.GetComponent(); + } + + // Update is called once per frame + void Update () { + + } + + /// + /// 使用bing speech api,将文字转为中文语音 + /// + /// + /// + public IEnumerator TextToAudio(string text) + { + string requestUri = "https://speech.platform.bing.com/synthesize"; + byte[] buffer = System.Text.Encoding.UTF8.GetBytes(string.Format(SSML, text)); + var headers = new Dictionary() { + { "Authorization", "Bearer " + SpeechToText.Instance.GetToken() }, + { "Content-Type", @"audio/wav; samplerate=16000" }, + { "X-Microsoft-OutputFormat", @"riff-16khz-16bit-mono-pcm"}, + { "X-Search-AppId", Guid.NewGuid().ToString().Replace("-", "")}, + { "X-Search-ClientID", Guid.NewGuid().ToString().Replace("-", "")}, + { "User-Agent", "TTSHololens"} + }; + audioSource.Stop(); + WWW www = new WWW(requestUri, buffer, headers); + yield return www; + audioSource.clip = www.GetAudioClip(false, true, AudioType.WAV); + audioSource.Play(); + ModelManager.Instance.SetTipText("点我进行提问"); + ModelManager.Instance.SetResponseText("答:" + text); + } + + public void SpeakText(string text) + { + StartCoroutine(TextToAudio(text)); + } +} diff --git a/HoloBot/Assets/Scripts/TextToSpeech.cs.meta b/HoloBot/Assets/Scripts/TextToSpeech.cs.meta new file mode 100644 index 0000000..0962e5c --- /dev/null +++ b/HoloBot/Assets/Scripts/TextToSpeech.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d5919a75953fa3499d008309fb244c5 +timeCreated: 1494904254 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/Assets/WSATestCertificate.pfx b/HoloBot/Assets/WSATestCertificate.pfx new file mode 100644 index 0000000..da918e0 Binary files /dev/null and b/HoloBot/Assets/WSATestCertificate.pfx differ diff --git a/HoloBot/Assets/WSATestCertificate.pfx.meta b/HoloBot/Assets/WSATestCertificate.pfx.meta new file mode 100644 index 0000000..35259bc --- /dev/null +++ b/HoloBot/Assets/WSATestCertificate.pfx.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c951627c9d97da41a8eff3de939d13d +timeCreated: 1494830474 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/HoloBot/HoloBot.Editor.csproj b/HoloBot/HoloBot.Editor.csproj new file mode 100644 index 0000000..232be87 --- /dev/null +++ b/HoloBot/HoloBot.Editor.csproj @@ -0,0 +1,200 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {0D522E03-A34A-48C4-680F-2B679D2D43EB} + Library + Assembly-CSharp-Editor + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v3.5 + Unity Full v3.5 + + Editor:5 + WSAPlayer:21 + 5.5.0f3 + + 4 + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_5_0;UNITY_5_5;UNITY_5;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_GENERICS;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_SCRIPTING_NEW_CSHARP_COMPILER;UNITY_METRO;UNITY_METRO_API;UNITY_WINRT;ENABLE_WINRT_PINVOKE;ENABLE_LAZY_METHOD_CACHING;ENABLE_MOVIES;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_NETWORK;ENABLE_EVENT_QUEUE;UNITY_PLATFORM_THREAD_TO_CORE_MAPPING;ENABLE_SUBSTANCE;PLATFORM_SUPPORTS_ADS_ID;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;CURL_STATICLIB;ENABLE_VR;UNITY_WSA;ENABLE_DOTNET;ENABLE_PROFILER;UNITY_WSA_10_0;UNITY_WINRT_10_0;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU + false + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_5_0;UNITY_5_5;UNITY_5;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_GENERICS;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_SCRIPTING_NEW_CSHARP_COMPILER;UNITY_METRO;UNITY_METRO_API;UNITY_WINRT;ENABLE_WINRT_PINVOKE;ENABLE_LAZY_METHOD_CACHING;ENABLE_MOVIES;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_NETWORK;ENABLE_EVENT_QUEUE;UNITY_PLATFORM_THREAD_TO_CORE_MAPPING;ENABLE_SUBSTANCE;PLATFORM_SUPPORTS_ADS_ID;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;CURL_STATICLIB;ENABLE_VR;UNITY_WSA;ENABLE_DOTNET;ENABLE_PROFILER;UNITY_WSA_10_0;UNITY_WINRT_10_0;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU + false + + + + + + + + + + + + Library\UnityAssemblies\UnityEngine.dll + + + Library\UnityAssemblies\UnityEditor.dll + + + Library\UnityAssemblies\UnityEngine.Advertisements.dll + + + Library\UnityAssemblies\UnityEditor.Advertisements.dll + + + Library\UnityAssemblies\nunit.framework.dll + + + Library\UnityAssemblies\UnityEditor.EditorTestsRunner.dll + + + Library\UnityAssemblies\UnityEngine.UI.dll + + + Library\UnityAssemblies\UnityEditor.UI.dll + + + Library\UnityAssemblies\UnityEngine.Networking.dll + + + Library\UnityAssemblies\UnityEditor.Networking.dll + + + Library\UnityAssemblies\UnityEditor.PlaymodeTestsRunner.dll + + + Library\UnityAssemblies\UnityEngine.PlaymodeTestsRunner.dll + + + Library\UnityAssemblies\UnityEditor.TreeEditor.dll + + + Library\UnityAssemblies\UnityEngine.Analytics.dll + + + Library\UnityAssemblies\UnityEditor.Analytics.dll + + + Library\UnityAssemblies\UnityEditor.HoloLens.dll + + + Library\UnityAssemblies\UnityEngine.HoloLens.dll + + + Library\UnityAssemblies\UnityEngine.Purchasing.dll + + + Library\UnityAssemblies\UnityEditor.VR.dll + + + Library\UnityAssemblies\UnityEngine.VR.dll + + + Library\UnityAssemblies\UnityEditor.Graphs.dll + + + Library\UnityAssemblies\UnityEditor.WSA.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.WebGL.Extensions.dll + + + Library\UnityAssemblies\UnityEditor.WindowsStandalone.Extensions.dll + + + Library\UnityAssemblies\SyntaxTree.VisualStudio.Unity.Bridge.dll + + + Library\UnityAssemblies\Mono.Cecil.dll + + + + + {BD6A67AB-3154-F483-4EF6-7BC8267093A0} + HoloBot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HoloBot/HoloBot.csproj b/HoloBot/HoloBot.csproj new file mode 100644 index 0000000..52128d3 --- /dev/null +++ b/HoloBot/HoloBot.csproj @@ -0,0 +1,358 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {BD6A67AB-3154-F483-4EF6-7BC8267093A0} + Library + Assembly-CSharp + 512 + {E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + .NETFramework + v3.5 + Unity Subset v3.5 + + Game:1 + WSAPlayer:21 + 5.5.0f3 + + 4 + + + pdbonly + false + Temp\UnityVS_bin\Debug\ + Temp\UnityVS_obj\Debug\ + prompt + 4 + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_5_0;UNITY_5_5;UNITY_5;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_GENERICS;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_SCRIPTING_NEW_CSHARP_COMPILER;UNITY_METRO;UNITY_METRO_API;UNITY_WINRT;ENABLE_WINRT_PINVOKE;ENABLE_LAZY_METHOD_CACHING;ENABLE_MOVIES;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_NETWORK;ENABLE_EVENT_QUEUE;UNITY_PLATFORM_THREAD_TO_CORE_MAPPING;ENABLE_SUBSTANCE;PLATFORM_SUPPORTS_ADS_ID;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;CURL_STATICLIB;ENABLE_VR;UNITY_WSA;ENABLE_DOTNET;ENABLE_PROFILER;UNITY_WSA_10_0;UNITY_WINRT_10_0;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU + false + + + pdbonly + false + Temp\UnityVS_bin\Release\ + Temp\UnityVS_obj\Release\ + prompt + 4 + TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_5_0;UNITY_5_5;UNITY_5;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_GENERICS;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_SCRIPTING_NEW_CSHARP_COMPILER;UNITY_METRO;UNITY_METRO_API;UNITY_WINRT;ENABLE_WINRT_PINVOKE;ENABLE_LAZY_METHOD_CACHING;ENABLE_MOVIES;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_NETWORK;ENABLE_EVENT_QUEUE;UNITY_PLATFORM_THREAD_TO_CORE_MAPPING;ENABLE_SUBSTANCE;PLATFORM_SUPPORTS_ADS_ID;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;CURL_STATICLIB;ENABLE_VR;UNITY_WSA;ENABLE_DOTNET;ENABLE_PROFILER;UNITY_WSA_10_0;UNITY_WINRT_10_0;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;UNITY_TEAM_LICENSE;ENABLE_VSTU + false + + + + + + + + + + + + Library\UnityAssemblies\UnityEngine.dll + + + Library\UnityAssemblies\UnityEngine.Advertisements.dll + + + Library\UnityAssemblies\UnityEngine.UI.dll + + + Library\UnityAssemblies\UnityEngine.Networking.dll + + + Library\UnityAssemblies\UnityEngine.PlaymodeTestsRunner.dll + + + Library\UnityAssemblies\UnityEngine.Analytics.dll + + + Library\UnityAssemblies\UnityEngine.HoloLens.dll + + + Library\UnityAssemblies\UnityEngine.Purchasing.dll + + + Library\UnityAssemblies\UnityEngine.VR.dll + + + Library\UnityAssemblies\UnityEditor.dll + + + Library\UnityAssemblies\Mono.Cecil.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HoloBot/HoloBot.sln b/HoloBot/HoloBot.sln new file mode 100644 index 0000000..cdba383 --- /dev/null +++ b/HoloBot/HoloBot.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2015 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoloBot", "HoloBot.csproj", "{BD6A67AB-3154-F483-4EF6-7BC8267093A0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HoloBot.Editor", "HoloBot.Editor.csproj", "{0D522E03-A34A-48C4-680F-2B679D2D43EB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BD6A67AB-3154-F483-4EF6-7BC8267093A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD6A67AB-3154-F483-4EF6-7BC8267093A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD6A67AB-3154-F483-4EF6-7BC8267093A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD6A67AB-3154-F483-4EF6-7BC8267093A0}.Release|Any CPU.Build.0 = Release|Any CPU + {0D522E03-A34A-48C4-680F-2B679D2D43EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D522E03-A34A-48C4-680F-2B679D2D43EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D522E03-A34A-48C4-680F-2B679D2D43EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D522E03-A34A-48C4-680F-2B679D2D43EB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/HoloBot/Library/AnnotationManager b/HoloBot/Library/AnnotationManager new file mode 100644 index 0000000..a8365d1 Binary files /dev/null and b/HoloBot/Library/AnnotationManager differ diff --git a/HoloBot/Library/AssetImportState b/HoloBot/Library/AssetImportState new file mode 100644 index 0000000..6a3ab32 --- /dev/null +++ b/HoloBot/Library/AssetImportState @@ -0,0 +1 @@ +21;3;4;0;0 \ No newline at end of file diff --git a/HoloBot/Library/AssetServerCacheV3 b/HoloBot/Library/AssetServerCacheV3 new file mode 100644 index 0000000..fadb5f2 Binary files /dev/null and b/HoloBot/Library/AssetServerCacheV3 differ diff --git a/HoloBot/Library/AssetVersioning.db b/HoloBot/Library/AssetVersioning.db new file mode 100644 index 0000000..2f50a71 Binary files /dev/null and b/HoloBot/Library/AssetVersioning.db differ diff --git a/HoloBot/Library/BuildPlayer.prefs b/HoloBot/Library/BuildPlayer.prefs new file mode 100644 index 0000000..e69de29 diff --git a/HoloBot/Library/BuildSettings.asset b/HoloBot/Library/BuildSettings.asset new file mode 100644 index 0000000..516c6f8 Binary files /dev/null and b/HoloBot/Library/BuildSettings.asset differ diff --git a/HoloBot/Library/CurrentLayout.dwlt b/HoloBot/Library/CurrentLayout.dwlt new file mode 100644 index 0000000..aa999a9 Binary files /dev/null and b/HoloBot/Library/CurrentLayout.dwlt differ diff --git a/HoloBot/Library/EditorUserBuildSettings.asset b/HoloBot/Library/EditorUserBuildSettings.asset new file mode 100644 index 0000000..3ead5fd Binary files /dev/null and b/HoloBot/Library/EditorUserBuildSettings.asset differ diff --git a/HoloBot/Library/EditorUserSettings.asset b/HoloBot/Library/EditorUserSettings.asset new file mode 100644 index 0000000..aa41f2d Binary files /dev/null and b/HoloBot/Library/EditorUserSettings.asset differ diff --git a/HoloBot/Library/InspectorExpandedItems.asset b/HoloBot/Library/InspectorExpandedItems.asset new file mode 100644 index 0000000..5d6eb6f Binary files /dev/null and b/HoloBot/Library/InspectorExpandedItems.asset differ diff --git a/HoloBot/Library/LastBuild.buildreport b/HoloBot/Library/LastBuild.buildreport new file mode 100644 index 0000000..e6d7765 Binary files /dev/null and b/HoloBot/Library/LastBuild.buildreport differ diff --git a/HoloBot/Library/LastSceneManagerSetup.txt b/HoloBot/Library/LastSceneManagerSetup.txt new file mode 100644 index 0000000..6b1e600 --- /dev/null +++ b/HoloBot/Library/LastSceneManagerSetup.txt @@ -0,0 +1,4 @@ +sceneSetups: +- path: Assets/Scenes/MainScene.unity + isLoaded: 1 + isActive: 1 diff --git a/HoloBot/Library/LibraryFormatVersion.txt b/HoloBot/Library/LibraryFormatVersion.txt new file mode 100644 index 0000000..6185f09 --- /dev/null +++ b/HoloBot/Library/LibraryFormatVersion.txt @@ -0,0 +1,2 @@ +unityRebuildLibraryVersion: 11 +unityForwardCompatibleVersion: 40 diff --git a/HoloBot/Library/MonoManager.asset b/HoloBot/Library/MonoManager.asset new file mode 100644 index 0000000..a3d6722 Binary files /dev/null and b/HoloBot/Library/MonoManager.asset differ diff --git a/HoloBot/Library/ProjectSettings.asset b/HoloBot/Library/ProjectSettings.asset new file mode 100644 index 0000000..f75b689 --- /dev/null +++ b/HoloBot/Library/ProjectSettings.asset @@ -0,0 +1,489 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + productGUID: e833af804f9ab1341bb304da959f8b6d + AndroidProfiler: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: HoloBot + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21176471, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_SplashScreenBackgroundLandscape: {fileID: 0} + m_SplashScreenBackgroundPortrait: {fileID: 0} + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_MobileMTRendering: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + tizenShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + disableDepthAndStencilBuffers: 0 + defaultIsFullScreen: 1 + defaultIsNativeResolution: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + gpuSkinning: 0 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 0 + allowFullscreenSwitch: 1 + macFullscreenMode: 2 + d3d9FullscreenMode: 1 + d3d11FullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + n3dsDisableStereoscopicView: 0 + n3dsEnableSharedListOpt: 1 + n3dsEnableVSync: 0 + uiUse16BitDepthBuffer: 0 + ignoreAlphaClear: 0 + xboxOneResolution: 0 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + videoMemoryForVertexBuffers: 0 + psp2PowerMode: 0 + psp2AcquireBGM: 1 + wiiUTVResolution: 0 + wiiUGamePadMSAA: 1 + wiiUSupportsNunchuk: 0 + wiiUSupportsClassicController: 0 + wiiUSupportsBalanceBoard: 0 + wiiUSupportsMotionPlus: 0 + wiiUSupportsProController: 0 + wiiUAllowScreenCapture: 1 + wiiUControllerCount: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleIdentifier: com.Company.ProductName + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 0 + protectGraphicsMemory: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 9 + AndroidPreferredInstallLocation: 1 + aotOptions: + apiCompatibilityLevel: 2 + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + iPhoneBuildNumber: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + preloadShaders: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: + serializedVersion: 2 + m_Bits: 238 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSLargeIconLayers: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageWideLayers: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + appleDeveloperTeamID: + AndroidTargetDevice: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + androidEnableBanner: 1 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsAPIs: [] + m_BuildTargetVRSettings: + - m_BuildTarget: Metro + m_Enabled: 1 + m_Devices: + - HoloLens + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + webPlayerTemplate: APPLICATION:Default + m_TemplateCustomTags: {} + wiiUTitleID: 0005000011000000 + wiiUGroupID: 00010000 + wiiUCommonSaveSize: 4096 + wiiUAccountSaveSize: 2048 + wiiUOlvAccessKey: 0 + wiiUTinCode: 0 + wiiUJoinGameId: 0 + wiiUJoinGameModeMask: 0000000000000000 + wiiUCommonBossSize: 0 + wiiUAccountBossSize: 0 + wiiUAddOnUniqueIDs: [] + wiiUMainThreadStackSize: 3072 + wiiULoaderThreadStackSize: 1024 + wiiUSystemHeapSize: 128 + wiiUTVStartupScreen: {fileID: 0} + wiiUGamePadStartupScreen: {fileID: 0} + wiiUDrcBufferDisabled: 0 + wiiUProfilerLibPath: + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + XboxTitleId: + XboxImageXexPath: + XboxSpaPath: + XboxGenerateSpa: 0 + XboxDeployKinectResources: 0 + XboxSplashScreen: {fileID: 0} + xboxEnableSpeech: 0 + xboxAdditionalTitleMemorySize: 0 + xboxDeployKinectHeadOrientation: 0 + xboxDeployKinectHeadPosition: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 1 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutReprojectionRate: 120 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4UseDebugIl2cppLibs: 0 + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 3 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4IncludedModules: [] + monoEnv: + psp2Splashimage: {fileID: 0} + psp2NPTrophyPackPath: + psp2NPSupportGBMorGJP: 0 + psp2NPAgeRating: 12 + psp2NPTitleDatPath: + psp2NPCommsID: + psp2NPCommunicationsID: + psp2NPCommsPassphrase: + psp2NPCommsSig: + psp2ParamSfxPath: + psp2ManualPath: + psp2LiveAreaGatePath: + psp2LiveAreaBackroundPath: + psp2LiveAreaPath: + psp2LiveAreaTrialPath: + psp2PatchChangeInfoPath: + psp2PatchOriginalPackage: + psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui + psp2KeystoneFile: + psp2MemoryExpansionMode: 0 + psp2DRMType: 0 + psp2StorageType: 0 + psp2MediaCapacity: 0 + psp2DLCConfigPath: + psp2ThumbnailPath: + psp2BackgroundPath: + psp2SoundPath: + psp2TrophyCommId: + psp2TrophyPackagePath: + psp2PackagedResourcesPath: + psp2SaveDataQuota: 10240 + psp2ParentalLevel: 1 + psp2ShortTitle: Not Set + psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF + psp2Category: 0 + psp2MasterVersion: 01.00 + psp2AppVersion: 01.00 + psp2TVBootMode: 0 + psp2EnterButtonAssignment: 2 + psp2TVDisableEmu: 0 + psp2AllowTwitterDialog: 1 + psp2Upgradable: 0 + psp2HealthWarning: 0 + psp2UseLibLocation: 0 + psp2InfoBarOnStartup: 0 + psp2InfoBarColor: 0 + psp2UseDebugIl2cppLibs: 0 + psmSplashimage: {fileID: 0} + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLDataCaching: 0 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLUseWasm: 0 + webGLCompressionFormat: 1 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: {} + incrementalIl2cppBuild: {} + additionalIl2CppArgs: + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: HoloBot + metroPackageVersion: 1.0.0.0 + metroCertificatePath: Assets\WSATestCertificate.pfx + metroCertificatePassword: + metroCertificateSubject: DefaultCompany + metroCertificateIssuer: DefaultCompany + metroCertificateNotAfter: 0051a5024aecd301 + metroApplicationDescription: HoloBot + wsaImages: {} + metroTileShortName: HoloBot + metroCommandLineArgsFile: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: + WindowsStoreApps: + AllJoyn: False + BlockedChatMessages: False + Bluetooth: False + Chat: False + CodeGeneration: False + EnterpriseAuthentication: False + HumanInterfaceDevice: False + InputInjectionBrokered: False + InternetClient: True + InternetClientServer: True + Location: False + Microphone: True + MusicLibrary: False + Objects3D: False + PhoneCall: False + PicturesLibrary: False + PrivateNetworkClientServer: False + Proximity: False + RemovableStorage: False + SharedUserCertificates: False + SpatialPerception: False + UserAccountInformation: False + VideosLibrary: False + VoipCall: False + WebCam: False + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + tizenProductDescription: + tizenProductURL: + tizenSigningProfileName: + tizenGPSPermissions: 0 + tizenMicrophonePermissions: 0 + tizenDeploymentTarget: + tizenDeploymentTargetType: 0 + tizenMinOSVersion: 0 + n3dsUseExtSaveData: 0 + n3dsCompressStaticMem: 1 + n3dsExtSaveDataNumber: 0x12345 + n3dsStackSize: 131072 + n3dsTargetPlatform: 2 + n3dsRegion: 7 + n3dsMediaSize: 0 + n3dsLogoStyle: 3 + n3dsTitle: GameName + n3dsProductCode: + n3dsApplicationId: 0xFF3FF + stvDeviceAddress: + stvProductDescription: + stvProductAuthor: + stvProductAuthorEmail: + stvProductLink: + stvProductCategory: 0 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + vrEditorSettings: {} + cloudServicesEnabled: {} + cloudProjectId: + projectName: + organizationId: + cloudEnabled: 0 diff --git a/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll new file mode 100644 index 0000000..da609dd Binary files /dev/null and b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll differ diff --git a/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb new file mode 100644 index 0000000..d897b77 Binary files /dev/null and b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll.mdb differ diff --git a/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll new file mode 100644 index 0000000..907cc3a Binary files /dev/null and b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll differ diff --git a/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb new file mode 100644 index 0000000..9b3b648 Binary files /dev/null and b/HoloBot/Library/ScriptAssemblies/Assembly-CSharp.dll.mdb differ diff --git a/HoloBot/Library/ScriptAssemblies/BuiltinAssemblies.stamp b/HoloBot/Library/ScriptAssemblies/BuiltinAssemblies.stamp new file mode 100644 index 0000000..2fa967c --- /dev/null +++ b/HoloBot/Library/ScriptAssemblies/BuiltinAssemblies.stamp @@ -0,0 +1,2 @@ +0000.5836f728.0000 +0000.583702a0.0000 \ No newline at end of file diff --git a/HoloBot/Library/ScriptMapper b/HoloBot/Library/ScriptMapper new file mode 100644 index 0000000..fe2e4b8 Binary files /dev/null and b/HoloBot/Library/ScriptMapper differ diff --git a/HoloBot/Library/ShaderCache.db b/HoloBot/Library/ShaderCache.db new file mode 100644 index 0000000..93f0bb9 Binary files /dev/null and b/HoloBot/Library/ShaderCache.db differ diff --git a/HoloBot/Library/ShaderCache/0/00586d8ab9589f25c3301e1f60843013.bin b/HoloBot/Library/ShaderCache/0/00586d8ab9589f25c3301e1f60843013.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/00586d8ab9589f25c3301e1f60843013.bin differ diff --git a/HoloBot/Library/ShaderCache/0/005ba6536ebc2361a1e22f1131db9f77.bin b/HoloBot/Library/ShaderCache/0/005ba6536ebc2361a1e22f1131db9f77.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/005ba6536ebc2361a1e22f1131db9f77.bin differ diff --git a/HoloBot/Library/ShaderCache/0/005bc6ae542b681e3dcd27ec930f0e5e.bin b/HoloBot/Library/ShaderCache/0/005bc6ae542b681e3dcd27ec930f0e5e.bin new file mode 100644 index 0000000..61ecbee Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/005bc6ae542b681e3dcd27ec930f0e5e.bin differ diff --git a/HoloBot/Library/ShaderCache/0/006e2fbb8b5007f5dd2184039d14bb46.bin b/HoloBot/Library/ShaderCache/0/006e2fbb8b5007f5dd2184039d14bb46.bin new file mode 100644 index 0000000..d46d61a Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/006e2fbb8b5007f5dd2184039d14bb46.bin differ diff --git a/HoloBot/Library/ShaderCache/0/008b709b361291db4f653ef52afff843.bin b/HoloBot/Library/ShaderCache/0/008b709b361291db4f653ef52afff843.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/008b709b361291db4f653ef52afff843.bin differ diff --git a/HoloBot/Library/ShaderCache/0/00d39d3e0a2634f354eb6a76daa0b821.bin b/HoloBot/Library/ShaderCache/0/00d39d3e0a2634f354eb6a76daa0b821.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/00d39d3e0a2634f354eb6a76daa0b821.bin differ diff --git a/HoloBot/Library/ShaderCache/0/014db537414d6f4cf8fde297c65caa38.bin b/HoloBot/Library/ShaderCache/0/014db537414d6f4cf8fde297c65caa38.bin new file mode 100644 index 0000000..fddbe3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/014db537414d6f4cf8fde297c65caa38.bin differ diff --git a/HoloBot/Library/ShaderCache/0/014fafd65182cd8e95e7fde81b962ee2.bin b/HoloBot/Library/ShaderCache/0/014fafd65182cd8e95e7fde81b962ee2.bin new file mode 100644 index 0000000..ad524b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/014fafd65182cd8e95e7fde81b962ee2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0162c69e983237fd106c1b754ddf4884.bin b/HoloBot/Library/ShaderCache/0/0162c69e983237fd106c1b754ddf4884.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0162c69e983237fd106c1b754ddf4884.bin differ diff --git a/HoloBot/Library/ShaderCache/0/016f41420dc343401eaab207d7747084.bin b/HoloBot/Library/ShaderCache/0/016f41420dc343401eaab207d7747084.bin new file mode 100644 index 0000000..1d825dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/016f41420dc343401eaab207d7747084.bin differ diff --git a/HoloBot/Library/ShaderCache/0/017e1bb224804c5b50330dece422d09b.bin b/HoloBot/Library/ShaderCache/0/017e1bb224804c5b50330dece422d09b.bin new file mode 100644 index 0000000..8ce4cef Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/017e1bb224804c5b50330dece422d09b.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0193ea8a8fdd236d7cfb624c73cea230.bin b/HoloBot/Library/ShaderCache/0/0193ea8a8fdd236d7cfb624c73cea230.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0193ea8a8fdd236d7cfb624c73cea230.bin differ diff --git a/HoloBot/Library/ShaderCache/0/01c553bb8f32a13d4e7d7179037c13cc.bin b/HoloBot/Library/ShaderCache/0/01c553bb8f32a13d4e7d7179037c13cc.bin new file mode 100644 index 0000000..b5f5351 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/01c553bb8f32a13d4e7d7179037c13cc.bin differ diff --git a/HoloBot/Library/ShaderCache/0/01c98b52d8a5c71ae239baab7ca9df53.bin b/HoloBot/Library/ShaderCache/0/01c98b52d8a5c71ae239baab7ca9df53.bin new file mode 100644 index 0000000..dd799f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/01c98b52d8a5c71ae239baab7ca9df53.bin differ diff --git a/HoloBot/Library/ShaderCache/0/01f7c29441751406b124d998925616ca.bin b/HoloBot/Library/ShaderCache/0/01f7c29441751406b124d998925616ca.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/01f7c29441751406b124d998925616ca.bin differ diff --git a/HoloBot/Library/ShaderCache/0/01fec10f8119fe3be9fad35d5a86ad25.bin b/HoloBot/Library/ShaderCache/0/01fec10f8119fe3be9fad35d5a86ad25.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/01fec10f8119fe3be9fad35d5a86ad25.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0201e90aba2d6040c0be73157669cb89.bin b/HoloBot/Library/ShaderCache/0/0201e90aba2d6040c0be73157669cb89.bin new file mode 100644 index 0000000..0619302 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0201e90aba2d6040c0be73157669cb89.bin differ diff --git a/HoloBot/Library/ShaderCache/0/02054817b49c8448202f258c82f91ea0.bin b/HoloBot/Library/ShaderCache/0/02054817b49c8448202f258c82f91ea0.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/02054817b49c8448202f258c82f91ea0.bin differ diff --git a/HoloBot/Library/ShaderCache/0/020656c12bc6ff6297ec1772ec3c0166.bin b/HoloBot/Library/ShaderCache/0/020656c12bc6ff6297ec1772ec3c0166.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/020656c12bc6ff6297ec1772ec3c0166.bin differ diff --git a/HoloBot/Library/ShaderCache/0/021b0d5d205ab5e33367bf9d9f07a054.bin b/HoloBot/Library/ShaderCache/0/021b0d5d205ab5e33367bf9d9f07a054.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/021b0d5d205ab5e33367bf9d9f07a054.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0230ca0c5d148d0bbde824113b2e3f69.bin b/HoloBot/Library/ShaderCache/0/0230ca0c5d148d0bbde824113b2e3f69.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0230ca0c5d148d0bbde824113b2e3f69.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0251a04d2341544800176452e0947201.bin b/HoloBot/Library/ShaderCache/0/0251a04d2341544800176452e0947201.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0251a04d2341544800176452e0947201.bin differ diff --git a/HoloBot/Library/ShaderCache/0/02787328b6b14e41cfdf9e4878e9395f.bin b/HoloBot/Library/ShaderCache/0/02787328b6b14e41cfdf9e4878e9395f.bin new file mode 100644 index 0000000..c41ec78 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/02787328b6b14e41cfdf9e4878e9395f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/028f10179cad82679d60027e0f12fab2.bin b/HoloBot/Library/ShaderCache/0/028f10179cad82679d60027e0f12fab2.bin new file mode 100644 index 0000000..3d30794 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/028f10179cad82679d60027e0f12fab2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/02e735175bc8070776f9c90c5aac1fda.bin b/HoloBot/Library/ShaderCache/0/02e735175bc8070776f9c90c5aac1fda.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/02e735175bc8070776f9c90c5aac1fda.bin differ diff --git a/HoloBot/Library/ShaderCache/0/02f9067006c1a88821e620261b717a77.bin b/HoloBot/Library/ShaderCache/0/02f9067006c1a88821e620261b717a77.bin new file mode 100644 index 0000000..d554e75 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/02f9067006c1a88821e620261b717a77.bin differ diff --git a/HoloBot/Library/ShaderCache/0/03779a2dcf3d15e0cead97aa53ba9a53.bin b/HoloBot/Library/ShaderCache/0/03779a2dcf3d15e0cead97aa53ba9a53.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/03779a2dcf3d15e0cead97aa53ba9a53.bin differ diff --git a/HoloBot/Library/ShaderCache/0/037c7d38f98c27bfc7b5f957bc41e949.bin b/HoloBot/Library/ShaderCache/0/037c7d38f98c27bfc7b5f957bc41e949.bin new file mode 100644 index 0000000..55b908b Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/037c7d38f98c27bfc7b5f957bc41e949.bin differ diff --git a/HoloBot/Library/ShaderCache/0/038ce595674b2ae7f7e94a60cf0c9a58.bin b/HoloBot/Library/ShaderCache/0/038ce595674b2ae7f7e94a60cf0c9a58.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/038ce595674b2ae7f7e94a60cf0c9a58.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0397fb737e8798515f40603e943bbefe.bin b/HoloBot/Library/ShaderCache/0/0397fb737e8798515f40603e943bbefe.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0397fb737e8798515f40603e943bbefe.bin differ diff --git a/HoloBot/Library/ShaderCache/0/03e1d522e66eb49b47e40676d5058877.bin b/HoloBot/Library/ShaderCache/0/03e1d522e66eb49b47e40676d5058877.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/03e1d522e66eb49b47e40676d5058877.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0408516a3e2c9f3513c4d65361f854c0.bin b/HoloBot/Library/ShaderCache/0/0408516a3e2c9f3513c4d65361f854c0.bin new file mode 100644 index 0000000..fe04f40 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0408516a3e2c9f3513c4d65361f854c0.bin differ diff --git a/HoloBot/Library/ShaderCache/0/04b95488d82a8b53597b5ad06d3f9c9a.bin b/HoloBot/Library/ShaderCache/0/04b95488d82a8b53597b5ad06d3f9c9a.bin new file mode 100644 index 0000000..ee08906 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/04b95488d82a8b53597b5ad06d3f9c9a.bin differ diff --git a/HoloBot/Library/ShaderCache/0/04b9e1f85af1aa69240e3f0b30cc45cd.bin b/HoloBot/Library/ShaderCache/0/04b9e1f85af1aa69240e3f0b30cc45cd.bin new file mode 100644 index 0000000..5c8e858 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/04b9e1f85af1aa69240e3f0b30cc45cd.bin differ diff --git a/HoloBot/Library/ShaderCache/0/050be4c7d001d8823e45788f235020fe.bin b/HoloBot/Library/ShaderCache/0/050be4c7d001d8823e45788f235020fe.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/050be4c7d001d8823e45788f235020fe.bin differ diff --git a/HoloBot/Library/ShaderCache/0/050e216da447b2cfd447ff2af5634f65.bin b/HoloBot/Library/ShaderCache/0/050e216da447b2cfd447ff2af5634f65.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/050e216da447b2cfd447ff2af5634f65.bin differ diff --git a/HoloBot/Library/ShaderCache/0/051d364dea48e336392327c6f063e7f1.bin b/HoloBot/Library/ShaderCache/0/051d364dea48e336392327c6f063e7f1.bin new file mode 100644 index 0000000..7874adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/051d364dea48e336392327c6f063e7f1.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0527fd33bce01641514eb45c38242331.bin b/HoloBot/Library/ShaderCache/0/0527fd33bce01641514eb45c38242331.bin new file mode 100644 index 0000000..5799e13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0527fd33bce01641514eb45c38242331.bin differ diff --git a/HoloBot/Library/ShaderCache/0/053781caff9e6f2a0fd3f25525707b90.bin b/HoloBot/Library/ShaderCache/0/053781caff9e6f2a0fd3f25525707b90.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/053781caff9e6f2a0fd3f25525707b90.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0569d6359062c5941cf1ab4d01728556.bin b/HoloBot/Library/ShaderCache/0/0569d6359062c5941cf1ab4d01728556.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0569d6359062c5941cf1ab4d01728556.bin differ diff --git a/HoloBot/Library/ShaderCache/0/056b72c727531611de940d802f5fa33e.bin b/HoloBot/Library/ShaderCache/0/056b72c727531611de940d802f5fa33e.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/056b72c727531611de940d802f5fa33e.bin differ diff --git a/HoloBot/Library/ShaderCache/0/059c06ad637703baf977d131e74ce12e.bin b/HoloBot/Library/ShaderCache/0/059c06ad637703baf977d131e74ce12e.bin new file mode 100644 index 0000000..f4c6f61 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/059c06ad637703baf977d131e74ce12e.bin differ diff --git a/HoloBot/Library/ShaderCache/0/059f6d1f6e1c0b6dc4f0385f82566e07.bin b/HoloBot/Library/ShaderCache/0/059f6d1f6e1c0b6dc4f0385f82566e07.bin new file mode 100644 index 0000000..01ac4fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/059f6d1f6e1c0b6dc4f0385f82566e07.bin differ diff --git a/HoloBot/Library/ShaderCache/0/05d399b43c7d75ef234a2260191336e7.bin b/HoloBot/Library/ShaderCache/0/05d399b43c7d75ef234a2260191336e7.bin new file mode 100644 index 0000000..ac959f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/05d399b43c7d75ef234a2260191336e7.bin differ diff --git a/HoloBot/Library/ShaderCache/0/05e564e31a7896b98e2f2c94ddb95985.bin b/HoloBot/Library/ShaderCache/0/05e564e31a7896b98e2f2c94ddb95985.bin new file mode 100644 index 0000000..6759386 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/05e564e31a7896b98e2f2c94ddb95985.bin differ diff --git a/HoloBot/Library/ShaderCache/0/05fc5688fdb897c4fee20a2c0c04ce98.bin b/HoloBot/Library/ShaderCache/0/05fc5688fdb897c4fee20a2c0c04ce98.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/05fc5688fdb897c4fee20a2c0c04ce98.bin differ diff --git a/HoloBot/Library/ShaderCache/0/061f6798b533909ac15bab1d7849d748.bin b/HoloBot/Library/ShaderCache/0/061f6798b533909ac15bab1d7849d748.bin new file mode 100644 index 0000000..b591b0e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/061f6798b533909ac15bab1d7849d748.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0668c357b01dbf0451ae287dc0bfe469.bin b/HoloBot/Library/ShaderCache/0/0668c357b01dbf0451ae287dc0bfe469.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0668c357b01dbf0451ae287dc0bfe469.bin differ diff --git a/HoloBot/Library/ShaderCache/0/066fe8d4b461c9faf7ef53e024360efc.bin b/HoloBot/Library/ShaderCache/0/066fe8d4b461c9faf7ef53e024360efc.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/066fe8d4b461c9faf7ef53e024360efc.bin differ diff --git a/HoloBot/Library/ShaderCache/0/06b0e5d024133030ee4537aeaa6566d2.bin b/HoloBot/Library/ShaderCache/0/06b0e5d024133030ee4537aeaa6566d2.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/06b0e5d024133030ee4537aeaa6566d2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/071d77f66b99dcdfabac846290f16e05.bin b/HoloBot/Library/ShaderCache/0/071d77f66b99dcdfabac846290f16e05.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/071d77f66b99dcdfabac846290f16e05.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0723cf632bfb8d9af6c6d49ddeeb2159.bin b/HoloBot/Library/ShaderCache/0/0723cf632bfb8d9af6c6d49ddeeb2159.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0723cf632bfb8d9af6c6d49ddeeb2159.bin differ diff --git a/HoloBot/Library/ShaderCache/0/07294079f588ff4ae563324200c09761.bin b/HoloBot/Library/ShaderCache/0/07294079f588ff4ae563324200c09761.bin new file mode 100644 index 0000000..c324f19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/07294079f588ff4ae563324200c09761.bin differ diff --git a/HoloBot/Library/ShaderCache/0/073ec56b6d9bafcf55c8d4dc469e9c36.bin b/HoloBot/Library/ShaderCache/0/073ec56b6d9bafcf55c8d4dc469e9c36.bin new file mode 100644 index 0000000..299aa09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/073ec56b6d9bafcf55c8d4dc469e9c36.bin differ diff --git a/HoloBot/Library/ShaderCache/0/075317e1d9917935a0aac80ce93539b5.bin b/HoloBot/Library/ShaderCache/0/075317e1d9917935a0aac80ce93539b5.bin new file mode 100644 index 0000000..2173041 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/075317e1d9917935a0aac80ce93539b5.bin differ diff --git a/HoloBot/Library/ShaderCache/0/07d7594ca9b0d42c791a560a478db05c.bin b/HoloBot/Library/ShaderCache/0/07d7594ca9b0d42c791a560a478db05c.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/07d7594ca9b0d42c791a560a478db05c.bin differ diff --git a/HoloBot/Library/ShaderCache/0/07f2d1c49631a3d650ada8abfb810b08.bin b/HoloBot/Library/ShaderCache/0/07f2d1c49631a3d650ada8abfb810b08.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/07f2d1c49631a3d650ada8abfb810b08.bin differ diff --git a/HoloBot/Library/ShaderCache/0/08037ba45cd7c361ccc3dd37df96a688.bin b/HoloBot/Library/ShaderCache/0/08037ba45cd7c361ccc3dd37df96a688.bin new file mode 100644 index 0000000..8336fda Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/08037ba45cd7c361ccc3dd37df96a688.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0845b973cc4cde4742b24bdbfe3f2830.bin b/HoloBot/Library/ShaderCache/0/0845b973cc4cde4742b24bdbfe3f2830.bin new file mode 100644 index 0000000..ac959f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0845b973cc4cde4742b24bdbfe3f2830.bin differ diff --git a/HoloBot/Library/ShaderCache/0/084faf51e547564da77ee6cada44d09b.bin b/HoloBot/Library/ShaderCache/0/084faf51e547564da77ee6cada44d09b.bin new file mode 100644 index 0000000..724bbc1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/084faf51e547564da77ee6cada44d09b.bin differ diff --git a/HoloBot/Library/ShaderCache/0/088052865895574e4f646868a6e50476.bin b/HoloBot/Library/ShaderCache/0/088052865895574e4f646868a6e50476.bin new file mode 100644 index 0000000..4096f1c Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/088052865895574e4f646868a6e50476.bin differ diff --git a/HoloBot/Library/ShaderCache/0/08cf83e72f14db793ffdc3b6524afdd2.bin b/HoloBot/Library/ShaderCache/0/08cf83e72f14db793ffdc3b6524afdd2.bin new file mode 100644 index 0000000..fc0f8c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/08cf83e72f14db793ffdc3b6524afdd2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/08d086aae0c159f23c3f0037e03644cf.bin b/HoloBot/Library/ShaderCache/0/08d086aae0c159f23c3f0037e03644cf.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/08d086aae0c159f23c3f0037e03644cf.bin differ diff --git a/HoloBot/Library/ShaderCache/0/08d989940259a93d4f71d9705b20ae9b.bin b/HoloBot/Library/ShaderCache/0/08d989940259a93d4f71d9705b20ae9b.bin new file mode 100644 index 0000000..cd7325b Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/08d989940259a93d4f71d9705b20ae9b.bin differ diff --git a/HoloBot/Library/ShaderCache/0/08e0a29b5388d5fc4f3caa2046a69328.bin b/HoloBot/Library/ShaderCache/0/08e0a29b5388d5fc4f3caa2046a69328.bin new file mode 100644 index 0000000..591041d Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/08e0a29b5388d5fc4f3caa2046a69328.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0960cdbd6c64d75fc29e40ae32c24be9.bin b/HoloBot/Library/ShaderCache/0/0960cdbd6c64d75fc29e40ae32c24be9.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0960cdbd6c64d75fc29e40ae32c24be9.bin differ diff --git a/HoloBot/Library/ShaderCache/0/097399f14fbe962f371735fb9c9268d3.bin b/HoloBot/Library/ShaderCache/0/097399f14fbe962f371735fb9c9268d3.bin new file mode 100644 index 0000000..bd66f04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/097399f14fbe962f371735fb9c9268d3.bin differ diff --git a/HoloBot/Library/ShaderCache/0/098d993168dd006b4546a6cc0d5b43ed.bin b/HoloBot/Library/ShaderCache/0/098d993168dd006b4546a6cc0d5b43ed.bin new file mode 100644 index 0000000..da37e6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/098d993168dd006b4546a6cc0d5b43ed.bin differ diff --git a/HoloBot/Library/ShaderCache/0/09be7b6254a9e4249d36da6bda27c869.bin b/HoloBot/Library/ShaderCache/0/09be7b6254a9e4249d36da6bda27c869.bin new file mode 100644 index 0000000..a0452fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/09be7b6254a9e4249d36da6bda27c869.bin differ diff --git a/HoloBot/Library/ShaderCache/0/09ce0ceb91c4a019b8bc5e552e966560.bin b/HoloBot/Library/ShaderCache/0/09ce0ceb91c4a019b8bc5e552e966560.bin new file mode 100644 index 0000000..df35ff0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/09ce0ceb91c4a019b8bc5e552e966560.bin differ diff --git a/HoloBot/Library/ShaderCache/0/09d7be2502e6bbfb32d7d713943521c7.bin b/HoloBot/Library/ShaderCache/0/09d7be2502e6bbfb32d7d713943521c7.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/09d7be2502e6bbfb32d7d713943521c7.bin differ diff --git a/HoloBot/Library/ShaderCache/0/09e2db27d1fe7cf8f0474a38f923e15a.bin b/HoloBot/Library/ShaderCache/0/09e2db27d1fe7cf8f0474a38f923e15a.bin new file mode 100644 index 0000000..7e5d043 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/09e2db27d1fe7cf8f0474a38f923e15a.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a156544e8642b90a83326731279368f.bin b/HoloBot/Library/ShaderCache/0/0a156544e8642b90a83326731279368f.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a156544e8642b90a83326731279368f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a2021e79ba727fbddd8afed9c7f530f.bin b/HoloBot/Library/ShaderCache/0/0a2021e79ba727fbddd8afed9c7f530f.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a2021e79ba727fbddd8afed9c7f530f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a2f621d6f33c63eda4cd7afa49b1477.bin b/HoloBot/Library/ShaderCache/0/0a2f621d6f33c63eda4cd7afa49b1477.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a2f621d6f33c63eda4cd7afa49b1477.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a46a722ee03c9b1149a940b0064f790.bin b/HoloBot/Library/ShaderCache/0/0a46a722ee03c9b1149a940b0064f790.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a46a722ee03c9b1149a940b0064f790.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a6c8d0f817eae090bd3679804f64d8a.bin b/HoloBot/Library/ShaderCache/0/0a6c8d0f817eae090bd3679804f64d8a.bin new file mode 100644 index 0000000..e5bd8ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a6c8d0f817eae090bd3679804f64d8a.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0a7bc3cfadf60ed3af5371a22db4de0d.bin b/HoloBot/Library/ShaderCache/0/0a7bc3cfadf60ed3af5371a22db4de0d.bin new file mode 100644 index 0000000..b591b0e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0a7bc3cfadf60ed3af5371a22db4de0d.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0aa206a77449fce1983f6b56d8f60e14.bin b/HoloBot/Library/ShaderCache/0/0aa206a77449fce1983f6b56d8f60e14.bin new file mode 100644 index 0000000..9f3c685 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0aa206a77449fce1983f6b56d8f60e14.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0aab32f108a958418637615be44348c1.bin b/HoloBot/Library/ShaderCache/0/0aab32f108a958418637615be44348c1.bin new file mode 100644 index 0000000..e6e27b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0aab32f108a958418637615be44348c1.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0acbf0d77886f75ef968418e40f20f57.bin b/HoloBot/Library/ShaderCache/0/0acbf0d77886f75ef968418e40f20f57.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0acbf0d77886f75ef968418e40f20f57.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0acf057359c8d475c5d716ef6d17cef7.bin b/HoloBot/Library/ShaderCache/0/0acf057359c8d475c5d716ef6d17cef7.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0acf057359c8d475c5d716ef6d17cef7.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0ae263a31a6c6a7f1a762e51c33a7de9.bin b/HoloBot/Library/ShaderCache/0/0ae263a31a6c6a7f1a762e51c33a7de9.bin new file mode 100644 index 0000000..4ba00de Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0ae263a31a6c6a7f1a762e51c33a7de9.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0afc99a6fcdd7fbd225e8acf840bedd7.bin b/HoloBot/Library/ShaderCache/0/0afc99a6fcdd7fbd225e8acf840bedd7.bin new file mode 100644 index 0000000..1f554ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0afc99a6fcdd7fbd225e8acf840bedd7.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0b1a41060a5eba75a75d3e86d2494e81.bin b/HoloBot/Library/ShaderCache/0/0b1a41060a5eba75a75d3e86d2494e81.bin new file mode 100644 index 0000000..92fab16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0b1a41060a5eba75a75d3e86d2494e81.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0b22aee087f4c5169d5f452f3d3f6c86.bin b/HoloBot/Library/ShaderCache/0/0b22aee087f4c5169d5f452f3d3f6c86.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0b22aee087f4c5169d5f452f3d3f6c86.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0b24ed44bafa0edc42c769b5f5edd970.bin b/HoloBot/Library/ShaderCache/0/0b24ed44bafa0edc42c769b5f5edd970.bin new file mode 100644 index 0000000..f2da1c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0b24ed44bafa0edc42c769b5f5edd970.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0b2f1185bbadfa6c5b1cb3c79ab3ad43.bin b/HoloBot/Library/ShaderCache/0/0b2f1185bbadfa6c5b1cb3c79ab3ad43.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0b2f1185bbadfa6c5b1cb3c79ab3ad43.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0b594d7c87eefd552a41689998963e62.bin b/HoloBot/Library/ShaderCache/0/0b594d7c87eefd552a41689998963e62.bin new file mode 100644 index 0000000..e6f00ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0b594d7c87eefd552a41689998963e62.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0bc8576632ee26e9be39563dc9731624.bin b/HoloBot/Library/ShaderCache/0/0bc8576632ee26e9be39563dc9731624.bin new file mode 100644 index 0000000..6e24d13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0bc8576632ee26e9be39563dc9731624.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0bcadc08aef3373c37f982e1881f24bb.bin b/HoloBot/Library/ShaderCache/0/0bcadc08aef3373c37f982e1881f24bb.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0bcadc08aef3373c37f982e1881f24bb.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0be87471f3344bb4ac06bd690a45fe4f.bin b/HoloBot/Library/ShaderCache/0/0be87471f3344bb4ac06bd690a45fe4f.bin new file mode 100644 index 0000000..d832abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0be87471f3344bb4ac06bd690a45fe4f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0bf335b008b491576fdbb75716845b2f.bin b/HoloBot/Library/ShaderCache/0/0bf335b008b491576fdbb75716845b2f.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0bf335b008b491576fdbb75716845b2f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0bf8cafcd8424c2fd7ba5b9a707d1769.bin b/HoloBot/Library/ShaderCache/0/0bf8cafcd8424c2fd7ba5b9a707d1769.bin new file mode 100644 index 0000000..17760d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0bf8cafcd8424c2fd7ba5b9a707d1769.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c1929827446f4985e9934c36d17bfa3.bin b/HoloBot/Library/ShaderCache/0/0c1929827446f4985e9934c36d17bfa3.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c1929827446f4985e9934c36d17bfa3.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c37e5f0974a79a93e4a60d922174701.bin b/HoloBot/Library/ShaderCache/0/0c37e5f0974a79a93e4a60d922174701.bin new file mode 100644 index 0000000..65323c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c37e5f0974a79a93e4a60d922174701.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c4fef3f855a31fee7f9690aa508003c.bin b/HoloBot/Library/ShaderCache/0/0c4fef3f855a31fee7f9690aa508003c.bin new file mode 100644 index 0000000..6e46021 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c4fef3f855a31fee7f9690aa508003c.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c602d904828c73d0947d15fe4ce80cc.bin b/HoloBot/Library/ShaderCache/0/0c602d904828c73d0947d15fe4ce80cc.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c602d904828c73d0947d15fe4ce80cc.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c6d21b5f53cd5ca8799525473adf3d2.bin b/HoloBot/Library/ShaderCache/0/0c6d21b5f53cd5ca8799525473adf3d2.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c6d21b5f53cd5ca8799525473adf3d2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0c6ec3711fdb9434aeaa440dd72fd67d.bin b/HoloBot/Library/ShaderCache/0/0c6ec3711fdb9434aeaa440dd72fd67d.bin new file mode 100644 index 0000000..d99825f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0c6ec3711fdb9434aeaa440dd72fd67d.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0cff33e0146485f4893e3e85cd78991c.bin b/HoloBot/Library/ShaderCache/0/0cff33e0146485f4893e3e85cd78991c.bin new file mode 100644 index 0000000..a978c3a Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0cff33e0146485f4893e3e85cd78991c.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d11ba5bcc91b6470312fbd0eb226dd5.bin b/HoloBot/Library/ShaderCache/0/0d11ba5bcc91b6470312fbd0eb226dd5.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d11ba5bcc91b6470312fbd0eb226dd5.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d380bb97673c782529f85b96ce1cbd0.bin b/HoloBot/Library/ShaderCache/0/0d380bb97673c782529f85b96ce1cbd0.bin new file mode 100644 index 0000000..8d98f80 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d380bb97673c782529f85b96ce1cbd0.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d5f31f9c5671d817ddebffa67852de6.bin b/HoloBot/Library/ShaderCache/0/0d5f31f9c5671d817ddebffa67852de6.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d5f31f9c5671d817ddebffa67852de6.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d5f3762d0f183675a18493f25fd55a4.bin b/HoloBot/Library/ShaderCache/0/0d5f3762d0f183675a18493f25fd55a4.bin new file mode 100644 index 0000000..dbd59a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d5f3762d0f183675a18493f25fd55a4.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d918c1aa8a25ff2cbb18ac489c56c63.bin b/HoloBot/Library/ShaderCache/0/0d918c1aa8a25ff2cbb18ac489c56c63.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d918c1aa8a25ff2cbb18ac489c56c63.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0d980bb31745e6d6bef18ac873142fd6.bin b/HoloBot/Library/ShaderCache/0/0d980bb31745e6d6bef18ac873142fd6.bin new file mode 100644 index 0000000..0c186b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0d980bb31745e6d6bef18ac873142fd6.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0da9de8b34e8c9af1573b901a04d9d68.bin b/HoloBot/Library/ShaderCache/0/0da9de8b34e8c9af1573b901a04d9d68.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0da9de8b34e8c9af1573b901a04d9d68.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0db858ba3f40c3fbe034d9bd40909bed.bin b/HoloBot/Library/ShaderCache/0/0db858ba3f40c3fbe034d9bd40909bed.bin new file mode 100644 index 0000000..558df4a Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0db858ba3f40c3fbe034d9bd40909bed.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e087b64d127c7e1c8852da06f453eda.bin b/HoloBot/Library/ShaderCache/0/0e087b64d127c7e1c8852da06f453eda.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e087b64d127c7e1c8852da06f453eda.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e0a88ac4f85a4614413822455e287b3.bin b/HoloBot/Library/ShaderCache/0/0e0a88ac4f85a4614413822455e287b3.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e0a88ac4f85a4614413822455e287b3.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e5eac8b550d42d71fc66213276d49b3.bin b/HoloBot/Library/ShaderCache/0/0e5eac8b550d42d71fc66213276d49b3.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e5eac8b550d42d71fc66213276d49b3.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e76d66354854af9407eff5d30dd29d0.bin b/HoloBot/Library/ShaderCache/0/0e76d66354854af9407eff5d30dd29d0.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e76d66354854af9407eff5d30dd29d0.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e77842ca2a6b558a877341fd5bffc13.bin b/HoloBot/Library/ShaderCache/0/0e77842ca2a6b558a877341fd5bffc13.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e77842ca2a6b558a877341fd5bffc13.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e923188dc3fd76a8bb6a9a7effc670c.bin b/HoloBot/Library/ShaderCache/0/0e923188dc3fd76a8bb6a9a7effc670c.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e923188dc3fd76a8bb6a9a7effc670c.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0e9b0827e6f5a1a93fddb6dd6ff22432.bin b/HoloBot/Library/ShaderCache/0/0e9b0827e6f5a1a93fddb6dd6ff22432.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0e9b0827e6f5a1a93fddb6dd6ff22432.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0ea4006201fe0a31a7d8aa55f05d3542.bin b/HoloBot/Library/ShaderCache/0/0ea4006201fe0a31a7d8aa55f05d3542.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0ea4006201fe0a31a7d8aa55f05d3542.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0ea71478719171a2b5809a7be10b6634.bin b/HoloBot/Library/ShaderCache/0/0ea71478719171a2b5809a7be10b6634.bin new file mode 100644 index 0000000..47adc6f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0ea71478719171a2b5809a7be10b6634.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0eb7a36ec7523d702b1cd13b725cf40e.bin b/HoloBot/Library/ShaderCache/0/0eb7a36ec7523d702b1cd13b725cf40e.bin new file mode 100644 index 0000000..762968f Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0eb7a36ec7523d702b1cd13b725cf40e.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0eeb2925226c0c5ca5125f562fa20d49.bin b/HoloBot/Library/ShaderCache/0/0eeb2925226c0c5ca5125f562fa20d49.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0eeb2925226c0c5ca5125f562fa20d49.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0efa974d59843f16c9971eb58fdbcd5f.bin b/HoloBot/Library/ShaderCache/0/0efa974d59843f16c9971eb58fdbcd5f.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0efa974d59843f16c9971eb58fdbcd5f.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f1e369108aa203586e010fa0be8c27d.bin b/HoloBot/Library/ShaderCache/0/0f1e369108aa203586e010fa0be8c27d.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f1e369108aa203586e010fa0be8c27d.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f3b4668559e1bbe4e43270e4f188d76.bin b/HoloBot/Library/ShaderCache/0/0f3b4668559e1bbe4e43270e4f188d76.bin new file mode 100644 index 0000000..fbeb8b1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f3b4668559e1bbe4e43270e4f188d76.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f4c9ec5917cdc3ed405cc0f14d347c8.bin b/HoloBot/Library/ShaderCache/0/0f4c9ec5917cdc3ed405cc0f14d347c8.bin new file mode 100644 index 0000000..1d6101e Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f4c9ec5917cdc3ed405cc0f14d347c8.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f5da4bc6f85a2b9d2400856ab4d0798.bin b/HoloBot/Library/ShaderCache/0/0f5da4bc6f85a2b9d2400856ab4d0798.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f5da4bc6f85a2b9d2400856ab4d0798.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f63b1c9a336f0797c81405d79fadc8e.bin b/HoloBot/Library/ShaderCache/0/0f63b1c9a336f0797c81405d79fadc8e.bin new file mode 100644 index 0000000..ed2c780 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f63b1c9a336f0797c81405d79fadc8e.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f6c3a35f574e73bc6ac3488e8e6abfd.bin b/HoloBot/Library/ShaderCache/0/0f6c3a35f574e73bc6ac3488e8e6abfd.bin new file mode 100644 index 0000000..d8489eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f6c3a35f574e73bc6ac3488e8e6abfd.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0f9882c196c8e197e2d9e8fe7ec2cd80.bin b/HoloBot/Library/ShaderCache/0/0f9882c196c8e197e2d9e8fe7ec2cd80.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0f9882c196c8e197e2d9e8fe7ec2cd80.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0fac114309c529323a5ec68266b6e8e2.bin b/HoloBot/Library/ShaderCache/0/0fac114309c529323a5ec68266b6e8e2.bin new file mode 100644 index 0000000..69f2119 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0fac114309c529323a5ec68266b6e8e2.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0fdc32cce5cc79903c829d53a745a57d.bin b/HoloBot/Library/ShaderCache/0/0fdc32cce5cc79903c829d53a745a57d.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0fdc32cce5cc79903c829d53a745a57d.bin differ diff --git a/HoloBot/Library/ShaderCache/0/0fe16adbad3e2d6345aca34780d0f88a.bin b/HoloBot/Library/ShaderCache/0/0fe16adbad3e2d6345aca34780d0f88a.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/0/0fe16adbad3e2d6345aca34780d0f88a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin b/HoloBot/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin new file mode 100644 index 0000000..e2346e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/100dcd9bfe86244d27c70958a3dc5647.bin b/HoloBot/Library/ShaderCache/1/100dcd9bfe86244d27c70958a3dc5647.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/100dcd9bfe86244d27c70958a3dc5647.bin differ diff --git a/HoloBot/Library/ShaderCache/1/100f98b219c85e0e079e20aa0528c323.bin b/HoloBot/Library/ShaderCache/1/100f98b219c85e0e079e20aa0528c323.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/100f98b219c85e0e079e20aa0528c323.bin differ diff --git a/HoloBot/Library/ShaderCache/1/101b9cddb4d126e2ebd0676d123d77fa.bin b/HoloBot/Library/ShaderCache/1/101b9cddb4d126e2ebd0676d123d77fa.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/101b9cddb4d126e2ebd0676d123d77fa.bin differ diff --git a/HoloBot/Library/ShaderCache/1/104077910c3ed379285a67b1bdf2c5ed.bin b/HoloBot/Library/ShaderCache/1/104077910c3ed379285a67b1bdf2c5ed.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/104077910c3ed379285a67b1bdf2c5ed.bin differ diff --git a/HoloBot/Library/ShaderCache/1/104e998f3d3ef9492720f3274fd559a4.bin b/HoloBot/Library/ShaderCache/1/104e998f3d3ef9492720f3274fd559a4.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/104e998f3d3ef9492720f3274fd559a4.bin differ diff --git a/HoloBot/Library/ShaderCache/1/10a3b8078d3ae9b68bac5ec49dc74b30.bin b/HoloBot/Library/ShaderCache/1/10a3b8078d3ae9b68bac5ec49dc74b30.bin new file mode 100644 index 0000000..7b99fc7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/10a3b8078d3ae9b68bac5ec49dc74b30.bin differ diff --git a/HoloBot/Library/ShaderCache/1/10ef910d53b7b8ac9916be1274569257.bin b/HoloBot/Library/ShaderCache/1/10ef910d53b7b8ac9916be1274569257.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/10ef910d53b7b8ac9916be1274569257.bin differ diff --git a/HoloBot/Library/ShaderCache/1/10f9a0b98b89724fe38c40815bcf7572.bin b/HoloBot/Library/ShaderCache/1/10f9a0b98b89724fe38c40815bcf7572.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/10f9a0b98b89724fe38c40815bcf7572.bin differ diff --git a/HoloBot/Library/ShaderCache/1/110540c3d2005a9bdc2c6b362bfb819b.bin b/HoloBot/Library/ShaderCache/1/110540c3d2005a9bdc2c6b362bfb819b.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/110540c3d2005a9bdc2c6b362bfb819b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/11328d67f936c5029bac44e353081c13.bin b/HoloBot/Library/ShaderCache/1/11328d67f936c5029bac44e353081c13.bin new file mode 100644 index 0000000..e6f00ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/11328d67f936c5029bac44e353081c13.bin differ diff --git a/HoloBot/Library/ShaderCache/1/114f7de7e201429ac5366179b1e8506a.bin b/HoloBot/Library/ShaderCache/1/114f7de7e201429ac5366179b1e8506a.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/114f7de7e201429ac5366179b1e8506a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/11d8f0c892054cc03f465b5d8d35454d.bin b/HoloBot/Library/ShaderCache/1/11d8f0c892054cc03f465b5d8d35454d.bin new file mode 100644 index 0000000..4a6fce7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/11d8f0c892054cc03f465b5d8d35454d.bin differ diff --git a/HoloBot/Library/ShaderCache/1/11db087b456f1c68391196195a00c696.bin b/HoloBot/Library/ShaderCache/1/11db087b456f1c68391196195a00c696.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/11db087b456f1c68391196195a00c696.bin differ diff --git a/HoloBot/Library/ShaderCache/1/11dc00b93b77d5f2a35a17e75a6706c9.bin b/HoloBot/Library/ShaderCache/1/11dc00b93b77d5f2a35a17e75a6706c9.bin new file mode 100644 index 0000000..6d3a24e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/11dc00b93b77d5f2a35a17e75a6706c9.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1212cc5368d0f225336ca2d656ceca43.bin b/HoloBot/Library/ShaderCache/1/1212cc5368d0f225336ca2d656ceca43.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1212cc5368d0f225336ca2d656ceca43.bin differ diff --git a/HoloBot/Library/ShaderCache/1/12330ebe1495d3a0c16f43bc8b12a77a.bin b/HoloBot/Library/ShaderCache/1/12330ebe1495d3a0c16f43bc8b12a77a.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/12330ebe1495d3a0c16f43bc8b12a77a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/12449a442acae44edd27f3d9b8c5e141.bin b/HoloBot/Library/ShaderCache/1/12449a442acae44edd27f3d9b8c5e141.bin new file mode 100644 index 0000000..94abe5d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/12449a442acae44edd27f3d9b8c5e141.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1258edc334df99f14bf4d40f627b26ae.bin b/HoloBot/Library/ShaderCache/1/1258edc334df99f14bf4d40f627b26ae.bin new file mode 100644 index 0000000..bf33f17 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1258edc334df99f14bf4d40f627b26ae.bin differ diff --git a/HoloBot/Library/ShaderCache/1/12aecbcbc69d124f14bbca696a9c46de.bin b/HoloBot/Library/ShaderCache/1/12aecbcbc69d124f14bbca696a9c46de.bin new file mode 100644 index 0000000..94f16e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/12aecbcbc69d124f14bbca696a9c46de.bin differ diff --git a/HoloBot/Library/ShaderCache/1/12f2863b54b9179fa1f02778a33b8b2a.bin b/HoloBot/Library/ShaderCache/1/12f2863b54b9179fa1f02778a33b8b2a.bin new file mode 100644 index 0000000..633ea16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/12f2863b54b9179fa1f02778a33b8b2a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/12fbbc583126e19244ef6a56d15ade85.bin b/HoloBot/Library/ShaderCache/1/12fbbc583126e19244ef6a56d15ade85.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/12fbbc583126e19244ef6a56d15ade85.bin differ diff --git a/HoloBot/Library/ShaderCache/1/131316d51e03a2318215edb441423f1a.bin b/HoloBot/Library/ShaderCache/1/131316d51e03a2318215edb441423f1a.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/131316d51e03a2318215edb441423f1a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/134614626d300e138a0a942070b69892.bin b/HoloBot/Library/ShaderCache/1/134614626d300e138a0a942070b69892.bin new file mode 100644 index 0000000..690ea38 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/134614626d300e138a0a942070b69892.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1351bce11bc02ac64b6b41c0175b62e9.bin b/HoloBot/Library/ShaderCache/1/1351bce11bc02ac64b6b41c0175b62e9.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1351bce11bc02ac64b6b41c0175b62e9.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13532812edc9362dd9c36ea10a50fbc0.bin b/HoloBot/Library/ShaderCache/1/13532812edc9362dd9c36ea10a50fbc0.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13532812edc9362dd9c36ea10a50fbc0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/136ac8b295e0a7f927c9cf295ce7e42c.bin b/HoloBot/Library/ShaderCache/1/136ac8b295e0a7f927c9cf295ce7e42c.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/136ac8b295e0a7f927c9cf295ce7e42c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/137179e847daca2bb10e600f92cbe1bf.bin b/HoloBot/Library/ShaderCache/1/137179e847daca2bb10e600f92cbe1bf.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/137179e847daca2bb10e600f92cbe1bf.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13a519f0b8ba51a23880defd247a6f8b.bin b/HoloBot/Library/ShaderCache/1/13a519f0b8ba51a23880defd247a6f8b.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13a519f0b8ba51a23880defd247a6f8b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13b9fb50d7fa304ed63530f000c9142c.bin b/HoloBot/Library/ShaderCache/1/13b9fb50d7fa304ed63530f000c9142c.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13b9fb50d7fa304ed63530f000c9142c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13ba6625bcf37aa3b7efdb2631cbc5ec.bin b/HoloBot/Library/ShaderCache/1/13ba6625bcf37aa3b7efdb2631cbc5ec.bin new file mode 100644 index 0000000..19bea58 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13ba6625bcf37aa3b7efdb2631cbc5ec.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13d6a9240f8a60e1c64b0b9ff53e52ab.bin b/HoloBot/Library/ShaderCache/1/13d6a9240f8a60e1c64b0b9ff53e52ab.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13d6a9240f8a60e1c64b0b9ff53e52ab.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13d86b0abfeb53ff346c301b9e40d1e4.bin b/HoloBot/Library/ShaderCache/1/13d86b0abfeb53ff346c301b9e40d1e4.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13d86b0abfeb53ff346c301b9e40d1e4.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13deee5cbbb031c9dd822aad074b80dc.bin b/HoloBot/Library/ShaderCache/1/13deee5cbbb031c9dd822aad074b80dc.bin new file mode 100644 index 0000000..cb03ee4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13deee5cbbb031c9dd822aad074b80dc.bin differ diff --git a/HoloBot/Library/ShaderCache/1/13e04c4ad9745ac81ac3a0a9c184a7a3.bin b/HoloBot/Library/ShaderCache/1/13e04c4ad9745ac81ac3a0a9c184a7a3.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/13e04c4ad9745ac81ac3a0a9c184a7a3.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1402d998ef399b0009ced49d7dfe553b.bin b/HoloBot/Library/ShaderCache/1/1402d998ef399b0009ced49d7dfe553b.bin new file mode 100644 index 0000000..cd62536 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1402d998ef399b0009ced49d7dfe553b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1430ba4abf8efb8355ceb1918dc78728.bin b/HoloBot/Library/ShaderCache/1/1430ba4abf8efb8355ceb1918dc78728.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1430ba4abf8efb8355ceb1918dc78728.bin differ diff --git a/HoloBot/Library/ShaderCache/1/143888bbe39dde72991db0c7979c1fbf.bin b/HoloBot/Library/ShaderCache/1/143888bbe39dde72991db0c7979c1fbf.bin new file mode 100644 index 0000000..55b908b Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/143888bbe39dde72991db0c7979c1fbf.bin differ diff --git a/HoloBot/Library/ShaderCache/1/146afaa74294282ad76ffdaf27fc5436.bin b/HoloBot/Library/ShaderCache/1/146afaa74294282ad76ffdaf27fc5436.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/146afaa74294282ad76ffdaf27fc5436.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1471653bcf90e58e27f917ec4d95a725.bin b/HoloBot/Library/ShaderCache/1/1471653bcf90e58e27f917ec4d95a725.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1471653bcf90e58e27f917ec4d95a725.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1475dece93b00afc368e103a0dc7a019.bin b/HoloBot/Library/ShaderCache/1/1475dece93b00afc368e103a0dc7a019.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1475dece93b00afc368e103a0dc7a019.bin differ diff --git a/HoloBot/Library/ShaderCache/1/14b1c2794052eb1665d3583f9f6c7dd5.bin b/HoloBot/Library/ShaderCache/1/14b1c2794052eb1665d3583f9f6c7dd5.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/14b1c2794052eb1665d3583f9f6c7dd5.bin differ diff --git a/HoloBot/Library/ShaderCache/1/14e3d33bf4798673e83130dcf4130719.bin b/HoloBot/Library/ShaderCache/1/14e3d33bf4798673e83130dcf4130719.bin new file mode 100644 index 0000000..0c186b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/14e3d33bf4798673e83130dcf4130719.bin differ diff --git a/HoloBot/Library/ShaderCache/1/14f3f009102e98e90f2ed9ddab97bd8c.bin b/HoloBot/Library/ShaderCache/1/14f3f009102e98e90f2ed9ddab97bd8c.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/14f3f009102e98e90f2ed9ddab97bd8c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/152344c34cc30cf86741d58cb29a76a6.bin b/HoloBot/Library/ShaderCache/1/152344c34cc30cf86741d58cb29a76a6.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/152344c34cc30cf86741d58cb29a76a6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1524b91e6eb3c6b1d3c9188f2d53cd2f.bin b/HoloBot/Library/ShaderCache/1/1524b91e6eb3c6b1d3c9188f2d53cd2f.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1524b91e6eb3c6b1d3c9188f2d53cd2f.bin differ diff --git a/HoloBot/Library/ShaderCache/1/154c48c413894b1e3126207ce2383835.bin b/HoloBot/Library/ShaderCache/1/154c48c413894b1e3126207ce2383835.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/154c48c413894b1e3126207ce2383835.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15777d600a34cddf850d4d5d8a71b26d.bin b/HoloBot/Library/ShaderCache/1/15777d600a34cddf850d4d5d8a71b26d.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15777d600a34cddf850d4d5d8a71b26d.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15b5eec9d3cd26abcf9ffe78514698e6.bin b/HoloBot/Library/ShaderCache/1/15b5eec9d3cd26abcf9ffe78514698e6.bin new file mode 100644 index 0000000..690ea38 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15b5eec9d3cd26abcf9ffe78514698e6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15c1eac3d0b374f11e7d83f3dd6db622.bin b/HoloBot/Library/ShaderCache/1/15c1eac3d0b374f11e7d83f3dd6db622.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15c1eac3d0b374f11e7d83f3dd6db622.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15c648af80ad2044ad0f1a564ac3b786.bin b/HoloBot/Library/ShaderCache/1/15c648af80ad2044ad0f1a564ac3b786.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15c648af80ad2044ad0f1a564ac3b786.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15d1ca42785e42a4f9015ef4bf6e6b9b.bin b/HoloBot/Library/ShaderCache/1/15d1ca42785e42a4f9015ef4bf6e6b9b.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15d1ca42785e42a4f9015ef4bf6e6b9b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/15d4782a1140a6a1c538dfa8742a1258.bin b/HoloBot/Library/ShaderCache/1/15d4782a1140a6a1c538dfa8742a1258.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/15d4782a1140a6a1c538dfa8742a1258.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16636c7dc49e186fc5baf153ed69e933.bin b/HoloBot/Library/ShaderCache/1/16636c7dc49e186fc5baf153ed69e933.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16636c7dc49e186fc5baf153ed69e933.bin differ diff --git a/HoloBot/Library/ShaderCache/1/166486b13e6c2a2861db79ce0ea95a79.bin b/HoloBot/Library/ShaderCache/1/166486b13e6c2a2861db79ce0ea95a79.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/166486b13e6c2a2861db79ce0ea95a79.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1678fb5fcc97e95edd7782536af72e44.bin b/HoloBot/Library/ShaderCache/1/1678fb5fcc97e95edd7782536af72e44.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1678fb5fcc97e95edd7782536af72e44.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1696f4428fff46edce19f23507a73521.bin b/HoloBot/Library/ShaderCache/1/1696f4428fff46edce19f23507a73521.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1696f4428fff46edce19f23507a73521.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16aaebf87d8f3fb103599d4bf76449c5.bin b/HoloBot/Library/ShaderCache/1/16aaebf87d8f3fb103599d4bf76449c5.bin new file mode 100644 index 0000000..746df64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16aaebf87d8f3fb103599d4bf76449c5.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16be83c419845bacf0e8d436764a502a.bin b/HoloBot/Library/ShaderCache/1/16be83c419845bacf0e8d436764a502a.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16be83c419845bacf0e8d436764a502a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16cbbbc9b32970f724f865c57605d9ab.bin b/HoloBot/Library/ShaderCache/1/16cbbbc9b32970f724f865c57605d9ab.bin new file mode 100644 index 0000000..1cdc337 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16cbbbc9b32970f724f865c57605d9ab.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16cc7174779cc460d65c776459e28968.bin b/HoloBot/Library/ShaderCache/1/16cc7174779cc460d65c776459e28968.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16cc7174779cc460d65c776459e28968.bin differ diff --git a/HoloBot/Library/ShaderCache/1/16cc8e71daf1fe776a2e2f7d99d13229.bin b/HoloBot/Library/ShaderCache/1/16cc8e71daf1fe776a2e2f7d99d13229.bin new file mode 100644 index 0000000..0619302 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/16cc8e71daf1fe776a2e2f7d99d13229.bin differ diff --git a/HoloBot/Library/ShaderCache/1/171773708bf48bfeed956611d0d7ac1b.bin b/HoloBot/Library/ShaderCache/1/171773708bf48bfeed956611d0d7ac1b.bin new file mode 100644 index 0000000..0485742 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/171773708bf48bfeed956611d0d7ac1b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17211385649071ca534a5167ed521e45.bin b/HoloBot/Library/ShaderCache/1/17211385649071ca534a5167ed521e45.bin new file mode 100644 index 0000000..8d98f80 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17211385649071ca534a5167ed521e45.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17302b1dfe784c95d12e73cd01334110.bin b/HoloBot/Library/ShaderCache/1/17302b1dfe784c95d12e73cd01334110.bin new file mode 100644 index 0000000..2295df9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17302b1dfe784c95d12e73cd01334110.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17348482085dc6697ff1227e9ee3a5d3.bin b/HoloBot/Library/ShaderCache/1/17348482085dc6697ff1227e9ee3a5d3.bin new file mode 100644 index 0000000..e3a15a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17348482085dc6697ff1227e9ee3a5d3.bin differ diff --git a/HoloBot/Library/ShaderCache/1/173a1b25a03327fe6e860925d7e5f4da.bin b/HoloBot/Library/ShaderCache/1/173a1b25a03327fe6e860925d7e5f4da.bin new file mode 100644 index 0000000..6d43c7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/173a1b25a03327fe6e860925d7e5f4da.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1741b45314e44650dbb0836430796b06.bin b/HoloBot/Library/ShaderCache/1/1741b45314e44650dbb0836430796b06.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1741b45314e44650dbb0836430796b06.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1744948e406d4afc5c782f26f3a15dee.bin b/HoloBot/Library/ShaderCache/1/1744948e406d4afc5c782f26f3a15dee.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1744948e406d4afc5c782f26f3a15dee.bin differ diff --git a/HoloBot/Library/ShaderCache/1/174b0612418563f3f328f6ec506c5d95.bin b/HoloBot/Library/ShaderCache/1/174b0612418563f3f328f6ec506c5d95.bin new file mode 100644 index 0000000..7dea44f Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/174b0612418563f3f328f6ec506c5d95.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1750c71ee64365240c255ac762366b68.bin b/HoloBot/Library/ShaderCache/1/1750c71ee64365240c255ac762366b68.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1750c71ee64365240c255ac762366b68.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17954024a4f2d6175461813d7d66cf45.bin b/HoloBot/Library/ShaderCache/1/17954024a4f2d6175461813d7d66cf45.bin new file mode 100644 index 0000000..e596307 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17954024a4f2d6175461813d7d66cf45.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17a6b3d4f5f23a154689ad92b70368ff.bin b/HoloBot/Library/ShaderCache/1/17a6b3d4f5f23a154689ad92b70368ff.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17a6b3d4f5f23a154689ad92b70368ff.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17bc9ffe0c06c0438aa57b1422dbd2af.bin b/HoloBot/Library/ShaderCache/1/17bc9ffe0c06c0438aa57b1422dbd2af.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17bc9ffe0c06c0438aa57b1422dbd2af.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17efd7b0259283776352343b232425ff.bin b/HoloBot/Library/ShaderCache/1/17efd7b0259283776352343b232425ff.bin new file mode 100644 index 0000000..99f0fcc Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17efd7b0259283776352343b232425ff.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17fa59bbaa6f3848a29288f09b05db83.bin b/HoloBot/Library/ShaderCache/1/17fa59bbaa6f3848a29288f09b05db83.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17fa59bbaa6f3848a29288f09b05db83.bin differ diff --git a/HoloBot/Library/ShaderCache/1/17fef9f4465e51c28cf1b7802984dca3.bin b/HoloBot/Library/ShaderCache/1/17fef9f4465e51c28cf1b7802984dca3.bin new file mode 100644 index 0000000..d4c4d55 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/17fef9f4465e51c28cf1b7802984dca3.bin differ diff --git a/HoloBot/Library/ShaderCache/1/180888f26c0857ecb77896d15d02027d.bin b/HoloBot/Library/ShaderCache/1/180888f26c0857ecb77896d15d02027d.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/180888f26c0857ecb77896d15d02027d.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1810dae0cf9d75f956697a47d5e95ec4.bin b/HoloBot/Library/ShaderCache/1/1810dae0cf9d75f956697a47d5e95ec4.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1810dae0cf9d75f956697a47d5e95ec4.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1815e182e02fd379050dba63ee8461c0.bin b/HoloBot/Library/ShaderCache/1/1815e182e02fd379050dba63ee8461c0.bin new file mode 100644 index 0000000..3108318 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1815e182e02fd379050dba63ee8461c0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/181ab2283d4f3744b013110470b33b62.bin b/HoloBot/Library/ShaderCache/1/181ab2283d4f3744b013110470b33b62.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/181ab2283d4f3744b013110470b33b62.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18503f45812bde7730cdd4c89cced981.bin b/HoloBot/Library/ShaderCache/1/18503f45812bde7730cdd4c89cced981.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18503f45812bde7730cdd4c89cced981.bin differ diff --git a/HoloBot/Library/ShaderCache/1/187691d47e187914e3cef18dff63a042.bin b/HoloBot/Library/ShaderCache/1/187691d47e187914e3cef18dff63a042.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/187691d47e187914e3cef18dff63a042.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1876dbf694919ddedb220be69bd64a56.bin b/HoloBot/Library/ShaderCache/1/1876dbf694919ddedb220be69bd64a56.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1876dbf694919ddedb220be69bd64a56.bin differ diff --git a/HoloBot/Library/ShaderCache/1/187ee324a84f23c14b8f9127d9f4cb68.bin b/HoloBot/Library/ShaderCache/1/187ee324a84f23c14b8f9127d9f4cb68.bin new file mode 100644 index 0000000..af5683e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/187ee324a84f23c14b8f9127d9f4cb68.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1880ecd43bb47fcf2ef37d9b306d8feb.bin b/HoloBot/Library/ShaderCache/1/1880ecd43bb47fcf2ef37d9b306d8feb.bin new file mode 100644 index 0000000..5f58b19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1880ecd43bb47fcf2ef37d9b306d8feb.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1881ecec20ece909e338464d342ad258.bin b/HoloBot/Library/ShaderCache/1/1881ecec20ece909e338464d342ad258.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1881ecec20ece909e338464d342ad258.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18a8eb92b197b53b52397677f52a49df.bin b/HoloBot/Library/ShaderCache/1/18a8eb92b197b53b52397677f52a49df.bin new file mode 100644 index 0000000..cf6c67e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18a8eb92b197b53b52397677f52a49df.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18b775d99ad2958de16cc4872538cf63.bin b/HoloBot/Library/ShaderCache/1/18b775d99ad2958de16cc4872538cf63.bin new file mode 100644 index 0000000..dc2cc67 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18b775d99ad2958de16cc4872538cf63.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18c391de836ca36ba279e7f4bea2e543.bin b/HoloBot/Library/ShaderCache/1/18c391de836ca36ba279e7f4bea2e543.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18c391de836ca36ba279e7f4bea2e543.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18ef467e06f2cdc5884cff4b83de622d.bin b/HoloBot/Library/ShaderCache/1/18ef467e06f2cdc5884cff4b83de622d.bin new file mode 100644 index 0000000..02e6594 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18ef467e06f2cdc5884cff4b83de622d.bin differ diff --git a/HoloBot/Library/ShaderCache/1/18ff3ce3502a19b0ff95b7c1a4a1449b.bin b/HoloBot/Library/ShaderCache/1/18ff3ce3502a19b0ff95b7c1a4a1449b.bin new file mode 100644 index 0000000..440f8e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/18ff3ce3502a19b0ff95b7c1a4a1449b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/19417ff05c179afda658a909dc30752e.bin b/HoloBot/Library/ShaderCache/1/19417ff05c179afda658a909dc30752e.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/19417ff05c179afda658a909dc30752e.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1950705d1451cf0f1ea21e31857806d1.bin b/HoloBot/Library/ShaderCache/1/1950705d1451cf0f1ea21e31857806d1.bin new file mode 100644 index 0000000..00d0c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1950705d1451cf0f1ea21e31857806d1.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1957f6c1c3b713ca3dfe3a6419c257db.bin b/HoloBot/Library/ShaderCache/1/1957f6c1c3b713ca3dfe3a6419c257db.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1957f6c1c3b713ca3dfe3a6419c257db.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1977cd06e32065f62119b989d8f35484.bin b/HoloBot/Library/ShaderCache/1/1977cd06e32065f62119b989d8f35484.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1977cd06e32065f62119b989d8f35484.bin differ diff --git a/HoloBot/Library/ShaderCache/1/198daaa2752bca3505478a93a1043575.bin b/HoloBot/Library/ShaderCache/1/198daaa2752bca3505478a93a1043575.bin new file mode 100644 index 0000000..f44b484 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/198daaa2752bca3505478a93a1043575.bin differ diff --git a/HoloBot/Library/ShaderCache/1/19e82db8888bc9770d64e65d876e9bc7.bin b/HoloBot/Library/ShaderCache/1/19e82db8888bc9770d64e65d876e9bc7.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/19e82db8888bc9770d64e65d876e9bc7.bin differ diff --git a/HoloBot/Library/ShaderCache/1/19ea0da84691790b0f994e1013c24599.bin b/HoloBot/Library/ShaderCache/1/19ea0da84691790b0f994e1013c24599.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/19ea0da84691790b0f994e1013c24599.bin differ diff --git a/HoloBot/Library/ShaderCache/1/19f0fab13d06cb2c04fb2f72f6f75782.bin b/HoloBot/Library/ShaderCache/1/19f0fab13d06cb2c04fb2f72f6f75782.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/19f0fab13d06cb2c04fb2f72f6f75782.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1a27e75c5ec86a9fab82336a96a0b1bb.bin b/HoloBot/Library/ShaderCache/1/1a27e75c5ec86a9fab82336a96a0b1bb.bin new file mode 100644 index 0000000..a554a39 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1a27e75c5ec86a9fab82336a96a0b1bb.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1a280c14f559cac5411316b08c8c530c.bin b/HoloBot/Library/ShaderCache/1/1a280c14f559cac5411316b08c8c530c.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1a280c14f559cac5411316b08c8c530c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1a4eb0cb0aa2fcf2ffea78372669386e.bin b/HoloBot/Library/ShaderCache/1/1a4eb0cb0aa2fcf2ffea78372669386e.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1a4eb0cb0aa2fcf2ffea78372669386e.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1a5a23f494fd70dfbc43065062085793.bin b/HoloBot/Library/ShaderCache/1/1a5a23f494fd70dfbc43065062085793.bin new file mode 100644 index 0000000..e8fa1cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1a5a23f494fd70dfbc43065062085793.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ab0f751bff79b820cca79a2048176ad.bin b/HoloBot/Library/ShaderCache/1/1ab0f751bff79b820cca79a2048176ad.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ab0f751bff79b820cca79a2048176ad.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ab5b13122fed4023d32a9a389e24b44.bin b/HoloBot/Library/ShaderCache/1/1ab5b13122fed4023d32a9a389e24b44.bin new file mode 100644 index 0000000..bf33f17 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ab5b13122fed4023d32a9a389e24b44.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1acdae9c79c360f4ff86bf4df136164c.bin b/HoloBot/Library/ShaderCache/1/1acdae9c79c360f4ff86bf4df136164c.bin new file mode 100644 index 0000000..fe0d67d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1acdae9c79c360f4ff86bf4df136164c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ad6e4cc5e206c30094bca72925a8107.bin b/HoloBot/Library/ShaderCache/1/1ad6e4cc5e206c30094bca72925a8107.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ad6e4cc5e206c30094bca72925a8107.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ae4ee746a83dc8c5f3664ae048cd6e7.bin b/HoloBot/Library/ShaderCache/1/1ae4ee746a83dc8c5f3664ae048cd6e7.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ae4ee746a83dc8c5f3664ae048cd6e7.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1aeafc101978b9a7151b0d275568bc35.bin b/HoloBot/Library/ShaderCache/1/1aeafc101978b9a7151b0d275568bc35.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1aeafc101978b9a7151b0d275568bc35.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1aec4fb172b09a12fffa42b84c410ed6.bin b/HoloBot/Library/ShaderCache/1/1aec4fb172b09a12fffa42b84c410ed6.bin new file mode 100644 index 0000000..69f2119 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1aec4fb172b09a12fffa42b84c410ed6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1aff39bc2109303f41e2e90970fdfd05.bin b/HoloBot/Library/ShaderCache/1/1aff39bc2109303f41e2e90970fdfd05.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1aff39bc2109303f41e2e90970fdfd05.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b273a4040c2fb7de973611eddffda35.bin b/HoloBot/Library/ShaderCache/1/1b273a4040c2fb7de973611eddffda35.bin new file mode 100644 index 0000000..bf43d6e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b273a4040c2fb7de973611eddffda35.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b3a458b453b7cfaa61514732342fd02.bin b/HoloBot/Library/ShaderCache/1/1b3a458b453b7cfaa61514732342fd02.bin new file mode 100644 index 0000000..a536e20 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b3a458b453b7cfaa61514732342fd02.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b64ce5f978a76e3ef47e6261530a97b.bin b/HoloBot/Library/ShaderCache/1/1b64ce5f978a76e3ef47e6261530a97b.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b64ce5f978a76e3ef47e6261530a97b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b681eaf14bf01018df6357ffe218b92.bin b/HoloBot/Library/ShaderCache/1/1b681eaf14bf01018df6357ffe218b92.bin new file mode 100644 index 0000000..63123de Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b681eaf14bf01018df6357ffe218b92.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b6d86c1d4f284a9e3a168cba47691fb.bin b/HoloBot/Library/ShaderCache/1/1b6d86c1d4f284a9e3a168cba47691fb.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b6d86c1d4f284a9e3a168cba47691fb.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b87da4bb35df35147c3c05bc8a277c7.bin b/HoloBot/Library/ShaderCache/1/1b87da4bb35df35147c3c05bc8a277c7.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b87da4bb35df35147c3c05bc8a277c7.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b883de79641a170a01423d32636a99b.bin b/HoloBot/Library/ShaderCache/1/1b883de79641a170a01423d32636a99b.bin new file mode 100644 index 0000000..a8f8ef5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b883de79641a170a01423d32636a99b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1b9055312081d6f81bdeccc4c60c6e38.bin b/HoloBot/Library/ShaderCache/1/1b9055312081d6f81bdeccc4c60c6e38.bin new file mode 100644 index 0000000..8f5c60d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1b9055312081d6f81bdeccc4c60c6e38.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ba042f3735d7d6bfd17964be80d4f20.bin b/HoloBot/Library/ShaderCache/1/1ba042f3735d7d6bfd17964be80d4f20.bin new file mode 100644 index 0000000..9eb382e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ba042f3735d7d6bfd17964be80d4f20.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ba38c5e6833d060d798fa1f704cf98a.bin b/HoloBot/Library/ShaderCache/1/1ba38c5e6833d060d798fa1f704cf98a.bin new file mode 100644 index 0000000..b77195e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ba38c5e6833d060d798fa1f704cf98a.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1bc7cba2846acfc3ea6a20e4827c003c.bin b/HoloBot/Library/ShaderCache/1/1bc7cba2846acfc3ea6a20e4827c003c.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1bc7cba2846acfc3ea6a20e4827c003c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1bd7a97441020ce701cc9fafb6498f08.bin b/HoloBot/Library/ShaderCache/1/1bd7a97441020ce701cc9fafb6498f08.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1bd7a97441020ce701cc9fafb6498f08.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1c493b43d31a450803af0151e8a1c38f.bin b/HoloBot/Library/ShaderCache/1/1c493b43d31a450803af0151e8a1c38f.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1c493b43d31a450803af0151e8a1c38f.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1c5fbd9e7bd8d12517b8db68ef3f075c.bin b/HoloBot/Library/ShaderCache/1/1c5fbd9e7bd8d12517b8db68ef3f075c.bin new file mode 100644 index 0000000..740a3f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1c5fbd9e7bd8d12517b8db68ef3f075c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1c7626204188a4b1818e8888e3533e52.bin b/HoloBot/Library/ShaderCache/1/1c7626204188a4b1818e8888e3533e52.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1c7626204188a4b1818e8888e3533e52.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1cac93293fec099a9fb8cb28df41c4d0.bin b/HoloBot/Library/ShaderCache/1/1cac93293fec099a9fb8cb28df41c4d0.bin new file mode 100644 index 0000000..5c8e858 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1cac93293fec099a9fb8cb28df41c4d0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1cb10e4e338b71d344d6514f6abe0f81.bin b/HoloBot/Library/ShaderCache/1/1cb10e4e338b71d344d6514f6abe0f81.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1cb10e4e338b71d344d6514f6abe0f81.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1cc05aaede9e2b8f59f059406b9188c8.bin b/HoloBot/Library/ShaderCache/1/1cc05aaede9e2b8f59f059406b9188c8.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1cc05aaede9e2b8f59f059406b9188c8.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1cefdd5a131a84a5fb15a19786539061.bin b/HoloBot/Library/ShaderCache/1/1cefdd5a131a84a5fb15a19786539061.bin new file mode 100644 index 0000000..e73c01e Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1cefdd5a131a84a5fb15a19786539061.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1cff30f5d976e431dc2d539b5e227e5b.bin b/HoloBot/Library/ShaderCache/1/1cff30f5d976e431dc2d539b5e227e5b.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1cff30f5d976e431dc2d539b5e227e5b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d0199e949db05f68d3a519fc139399c.bin b/HoloBot/Library/ShaderCache/1/1d0199e949db05f68d3a519fc139399c.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d0199e949db05f68d3a519fc139399c.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d03616a9b1db2c59b1867eac3d28e43.bin b/HoloBot/Library/ShaderCache/1/1d03616a9b1db2c59b1867eac3d28e43.bin new file mode 100644 index 0000000..c3511a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d03616a9b1db2c59b1867eac3d28e43.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d07200450950f17d712b1c1a2cf72e7.bin b/HoloBot/Library/ShaderCache/1/1d07200450950f17d712b1c1a2cf72e7.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d07200450950f17d712b1c1a2cf72e7.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d2d46015619ee2c7e7d9ac168788bc6.bin b/HoloBot/Library/ShaderCache/1/1d2d46015619ee2c7e7d9ac168788bc6.bin new file mode 100644 index 0000000..ee08906 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d2d46015619ee2c7e7d9ac168788bc6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d376ca6439cbd1d03d8079294d6ad18.bin b/HoloBot/Library/ShaderCache/1/1d376ca6439cbd1d03d8079294d6ad18.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d376ca6439cbd1d03d8079294d6ad18.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d37ad7fb3255f302c402f4076c660f2.bin b/HoloBot/Library/ShaderCache/1/1d37ad7fb3255f302c402f4076c660f2.bin new file mode 100644 index 0000000..c65a542 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d37ad7fb3255f302c402f4076c660f2.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d4536b4502aad8831de39e1fcdc6829.bin b/HoloBot/Library/ShaderCache/1/1d4536b4502aad8831de39e1fcdc6829.bin new file mode 100644 index 0000000..8d98f80 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d4536b4502aad8831de39e1fcdc6829.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d482558397cad4b5e59dc1d92f142c6.bin b/HoloBot/Library/ShaderCache/1/1d482558397cad4b5e59dc1d92f142c6.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d482558397cad4b5e59dc1d92f142c6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d4cbc11029cc21887949010eea144b6.bin b/HoloBot/Library/ShaderCache/1/1d4cbc11029cc21887949010eea144b6.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d4cbc11029cc21887949010eea144b6.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d4cc35a561f4b3de0b0b2b1a2967db0.bin b/HoloBot/Library/ShaderCache/1/1d4cc35a561f4b3de0b0b2b1a2967db0.bin new file mode 100644 index 0000000..2338ae6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d4cc35a561f4b3de0b0b2b1a2967db0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1d5a725c24f13b05c61eb243307905a0.bin b/HoloBot/Library/ShaderCache/1/1d5a725c24f13b05c61eb243307905a0.bin new file mode 100644 index 0000000..c01c457 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1d5a725c24f13b05c61eb243307905a0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1db5f0bc8b40dbce6cff294b473c5fed.bin b/HoloBot/Library/ShaderCache/1/1db5f0bc8b40dbce6cff294b473c5fed.bin new file mode 100644 index 0000000..5898f70 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1db5f0bc8b40dbce6cff294b473c5fed.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1dc656cdfba291a02fa1284933fff34e.bin b/HoloBot/Library/ShaderCache/1/1dc656cdfba291a02fa1284933fff34e.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1dc656cdfba291a02fa1284933fff34e.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1dc8dbeb11d078507f484e69ea104f47.bin b/HoloBot/Library/ShaderCache/1/1dc8dbeb11d078507f484e69ea104f47.bin new file mode 100644 index 0000000..fe0d67d Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1dc8dbeb11d078507f484e69ea104f47.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1e2775f89ea159dd42076604084f45b2.bin b/HoloBot/Library/ShaderCache/1/1e2775f89ea159dd42076604084f45b2.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1e2775f89ea159dd42076604084f45b2.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1e44b154f356519337c5c4fe915aec74.bin b/HoloBot/Library/ShaderCache/1/1e44b154f356519337c5c4fe915aec74.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1e44b154f356519337c5c4fe915aec74.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1e983fed7a4a9375c50ac58077e53a0b.bin b/HoloBot/Library/ShaderCache/1/1e983fed7a4a9375c50ac58077e53a0b.bin new file mode 100644 index 0000000..1e61ca8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1e983fed7a4a9375c50ac58077e53a0b.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1ea75f54ea6349fc2c8efe9fd597df1d.bin b/HoloBot/Library/ShaderCache/1/1ea75f54ea6349fc2c8efe9fd597df1d.bin new file mode 100644 index 0000000..2651962 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1ea75f54ea6349fc2c8efe9fd597df1d.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1efb2ea47b8b2df53938c974bb76124f.bin b/HoloBot/Library/ShaderCache/1/1efb2ea47b8b2df53938c974bb76124f.bin new file mode 100644 index 0000000..0bf8fc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1efb2ea47b8b2df53938c974bb76124f.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1efc64d27b82a885bf40326ab68666f5.bin b/HoloBot/Library/ShaderCache/1/1efc64d27b82a885bf40326ab68666f5.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1efc64d27b82a885bf40326ab68666f5.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1efef4e334912d699fc6ca6a0e4af025.bin b/HoloBot/Library/ShaderCache/1/1efef4e334912d699fc6ca6a0e4af025.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1efef4e334912d699fc6ca6a0e4af025.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f07218df087761bc03d8ce3342702f1.bin b/HoloBot/Library/ShaderCache/1/1f07218df087761bc03d8ce3342702f1.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f07218df087761bc03d8ce3342702f1.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f1d82c5b1e56c34c0c6950c185ce1ed.bin b/HoloBot/Library/ShaderCache/1/1f1d82c5b1e56c34c0c6950c185ce1ed.bin new file mode 100644 index 0000000..9c4763a Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f1d82c5b1e56c34c0c6950c185ce1ed.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f38e10cdb826703f153f5f53f84b6a1.bin b/HoloBot/Library/ShaderCache/1/1f38e10cdb826703f153f5f53f84b6a1.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f38e10cdb826703f153f5f53f84b6a1.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f4959d0b10d31959e4c7e5b0db5609e.bin b/HoloBot/Library/ShaderCache/1/1f4959d0b10d31959e4c7e5b0db5609e.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f4959d0b10d31959e4c7e5b0db5609e.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f5f8768b98aa88cb76fc0d8d0d384a0.bin b/HoloBot/Library/ShaderCache/1/1f5f8768b98aa88cb76fc0d8d0d384a0.bin new file mode 100644 index 0000000..567a9dd Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f5f8768b98aa88cb76fc0d8d0d384a0.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1f850c1304a7214feb95572747863094.bin b/HoloBot/Library/ShaderCache/1/1f850c1304a7214feb95572747863094.bin new file mode 100644 index 0000000..a185740 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1f850c1304a7214feb95572747863094.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1fa2b9b4e61ccea9f2e60ccf0cfd74eb.bin b/HoloBot/Library/ShaderCache/1/1fa2b9b4e61ccea9f2e60ccf0cfd74eb.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1fa2b9b4e61ccea9f2e60ccf0cfd74eb.bin differ diff --git a/HoloBot/Library/ShaderCache/1/1fcf59890e27854d32266cbb8e41de79.bin b/HoloBot/Library/ShaderCache/1/1fcf59890e27854d32266cbb8e41de79.bin new file mode 100644 index 0000000..d75132b Binary files /dev/null and b/HoloBot/Library/ShaderCache/1/1fcf59890e27854d32266cbb8e41de79.bin differ diff --git a/HoloBot/Library/ShaderCache/2/200713256a6b00544e3b3046d7e928ff.bin b/HoloBot/Library/ShaderCache/2/200713256a6b00544e3b3046d7e928ff.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/200713256a6b00544e3b3046d7e928ff.bin differ diff --git a/HoloBot/Library/ShaderCache/2/202c5b6c74d9da2c3c3392d9525a2798.bin b/HoloBot/Library/ShaderCache/2/202c5b6c74d9da2c3c3392d9525a2798.bin new file mode 100644 index 0000000..189bbdf Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/202c5b6c74d9da2c3c3392d9525a2798.bin differ diff --git a/HoloBot/Library/ShaderCache/2/204d8326434b528065a77dae5d800e64.bin b/HoloBot/Library/ShaderCache/2/204d8326434b528065a77dae5d800e64.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/204d8326434b528065a77dae5d800e64.bin differ diff --git a/HoloBot/Library/ShaderCache/2/205c4897695913f369507928fe37606e.bin b/HoloBot/Library/ShaderCache/2/205c4897695913f369507928fe37606e.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/205c4897695913f369507928fe37606e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/207ba88f8399650e3791a3de82ef2cab.bin b/HoloBot/Library/ShaderCache/2/207ba88f8399650e3791a3de82ef2cab.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/207ba88f8399650e3791a3de82ef2cab.bin differ diff --git a/HoloBot/Library/ShaderCache/2/209b87f5f2af4871c70e98c652d5c81f.bin b/HoloBot/Library/ShaderCache/2/209b87f5f2af4871c70e98c652d5c81f.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/209b87f5f2af4871c70e98c652d5c81f.bin differ diff --git a/HoloBot/Library/ShaderCache/2/209dc3ef552e39e12da76daf023f1ff8.bin b/HoloBot/Library/ShaderCache/2/209dc3ef552e39e12da76daf023f1ff8.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/209dc3ef552e39e12da76daf023f1ff8.bin differ diff --git a/HoloBot/Library/ShaderCache/2/212bc354e52397bd094cc663eb3dcc34.bin b/HoloBot/Library/ShaderCache/2/212bc354e52397bd094cc663eb3dcc34.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/212bc354e52397bd094cc663eb3dcc34.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2182444c448df30f596e693dfd18144d.bin b/HoloBot/Library/ShaderCache/2/2182444c448df30f596e693dfd18144d.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2182444c448df30f596e693dfd18144d.bin differ diff --git a/HoloBot/Library/ShaderCache/2/21a2fba0b9cabf7dd170b23e0c50aa99.bin b/HoloBot/Library/ShaderCache/2/21a2fba0b9cabf7dd170b23e0c50aa99.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/21a2fba0b9cabf7dd170b23e0c50aa99.bin differ diff --git a/HoloBot/Library/ShaderCache/2/21edaaebef23d60109b9904d7a2b67bd.bin b/HoloBot/Library/ShaderCache/2/21edaaebef23d60109b9904d7a2b67bd.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/21edaaebef23d60109b9904d7a2b67bd.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2216115a87b1e7f0589d7c0eaf5cae63.bin b/HoloBot/Library/ShaderCache/2/2216115a87b1e7f0589d7c0eaf5cae63.bin new file mode 100644 index 0000000..af30b5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2216115a87b1e7f0589d7c0eaf5cae63.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2234605f8764df125d89d91daf32739d.bin b/HoloBot/Library/ShaderCache/2/2234605f8764df125d89d91daf32739d.bin new file mode 100644 index 0000000..dfdbd56 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2234605f8764df125d89d91daf32739d.bin differ diff --git a/HoloBot/Library/ShaderCache/2/224cfb45030706b5e83e7588c9e737a7.bin b/HoloBot/Library/ShaderCache/2/224cfb45030706b5e83e7588c9e737a7.bin new file mode 100644 index 0000000..cad4012 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/224cfb45030706b5e83e7588c9e737a7.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2267d933cd114d708df8e11388408208.bin b/HoloBot/Library/ShaderCache/2/2267d933cd114d708df8e11388408208.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2267d933cd114d708df8e11388408208.bin differ diff --git a/HoloBot/Library/ShaderCache/2/227099cc6346f684de8858a6b5cbd7f6.bin b/HoloBot/Library/ShaderCache/2/227099cc6346f684de8858a6b5cbd7f6.bin new file mode 100644 index 0000000..0d2bd01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/227099cc6346f684de8858a6b5cbd7f6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2276c9a13ac2904bbf1f071308428741.bin b/HoloBot/Library/ShaderCache/2/2276c9a13ac2904bbf1f071308428741.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2276c9a13ac2904bbf1f071308428741.bin differ diff --git a/HoloBot/Library/ShaderCache/2/22a147855fb14aa6c600d2b2dae7737b.bin b/HoloBot/Library/ShaderCache/2/22a147855fb14aa6c600d2b2dae7737b.bin new file mode 100644 index 0000000..4391efc Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/22a147855fb14aa6c600d2b2dae7737b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/22c926a582b666ce0ce77c04cc4c52ef.bin b/HoloBot/Library/ShaderCache/2/22c926a582b666ce0ce77c04cc4c52ef.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/22c926a582b666ce0ce77c04cc4c52ef.bin differ diff --git a/HoloBot/Library/ShaderCache/2/22f8df176a9404ff4690dac7b88d540a.bin b/HoloBot/Library/ShaderCache/2/22f8df176a9404ff4690dac7b88d540a.bin new file mode 100644 index 0000000..41efa10 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/22f8df176a9404ff4690dac7b88d540a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/23055f494a46c1af780cbfbba6449038.bin b/HoloBot/Library/ShaderCache/2/23055f494a46c1af780cbfbba6449038.bin new file mode 100644 index 0000000..790e755 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/23055f494a46c1af780cbfbba6449038.bin differ diff --git a/HoloBot/Library/ShaderCache/2/231b883b0fff4472ef8683e235b397d4.bin b/HoloBot/Library/ShaderCache/2/231b883b0fff4472ef8683e235b397d4.bin new file mode 100644 index 0000000..af8c8fa Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/231b883b0fff4472ef8683e235b397d4.bin differ diff --git a/HoloBot/Library/ShaderCache/2/237007589a9aec5c60bd16e0c389bd8c.bin b/HoloBot/Library/ShaderCache/2/237007589a9aec5c60bd16e0c389bd8c.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/237007589a9aec5c60bd16e0c389bd8c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2377f5bb84ecaad43f981dee37da8e52.bin b/HoloBot/Library/ShaderCache/2/2377f5bb84ecaad43f981dee37da8e52.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2377f5bb84ecaad43f981dee37da8e52.bin differ diff --git a/HoloBot/Library/ShaderCache/2/239f4fab12795a8f77e36f1381cb08eb.bin b/HoloBot/Library/ShaderCache/2/239f4fab12795a8f77e36f1381cb08eb.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/239f4fab12795a8f77e36f1381cb08eb.bin differ diff --git a/HoloBot/Library/ShaderCache/2/23d8f733d2477c14247db03d7e17dc57.bin b/HoloBot/Library/ShaderCache/2/23d8f733d2477c14247db03d7e17dc57.bin new file mode 100644 index 0000000..32dbe1d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/23d8f733d2477c14247db03d7e17dc57.bin differ diff --git a/HoloBot/Library/ShaderCache/2/23ec7b745e582915e484f97f8d61e486.bin b/HoloBot/Library/ShaderCache/2/23ec7b745e582915e484f97f8d61e486.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/23ec7b745e582915e484f97f8d61e486.bin differ diff --git a/HoloBot/Library/ShaderCache/2/23edf15927fd3483f68c39c28fef2943.bin b/HoloBot/Library/ShaderCache/2/23edf15927fd3483f68c39c28fef2943.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/23edf15927fd3483f68c39c28fef2943.bin differ diff --git a/HoloBot/Library/ShaderCache/2/23ef65c13c5416c2b6574957d758f68f.bin b/HoloBot/Library/ShaderCache/2/23ef65c13c5416c2b6574957d758f68f.bin new file mode 100644 index 0000000..a00d39a Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/23ef65c13c5416c2b6574957d758f68f.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2404767c2c4874f86335a7d58e88de45.bin b/HoloBot/Library/ShaderCache/2/2404767c2c4874f86335a7d58e88de45.bin new file mode 100644 index 0000000..878f327 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2404767c2c4874f86335a7d58e88de45.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2410a130f36875531df9af886963b8d8.bin b/HoloBot/Library/ShaderCache/2/2410a130f36875531df9af886963b8d8.bin new file mode 100644 index 0000000..92fab16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2410a130f36875531df9af886963b8d8.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2435e537c4c091813708b5c2fa323232.bin b/HoloBot/Library/ShaderCache/2/2435e537c4c091813708b5c2fa323232.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2435e537c4c091813708b5c2fa323232.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2445e2257c70f90a8225eb20120cf838.bin b/HoloBot/Library/ShaderCache/2/2445e2257c70f90a8225eb20120cf838.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2445e2257c70f90a8225eb20120cf838.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2451e106ff5ac3f71701ba32bb28a748.bin b/HoloBot/Library/ShaderCache/2/2451e106ff5ac3f71701ba32bb28a748.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2451e106ff5ac3f71701ba32bb28a748.bin differ diff --git a/HoloBot/Library/ShaderCache/2/246be1b7ec08d32f18c3b7295446daf2.bin b/HoloBot/Library/ShaderCache/2/246be1b7ec08d32f18c3b7295446daf2.bin new file mode 100644 index 0000000..e2346e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/246be1b7ec08d32f18c3b7295446daf2.bin differ diff --git a/HoloBot/Library/ShaderCache/2/246caf287ce9caac13f1ab3c06cbdaff.bin b/HoloBot/Library/ShaderCache/2/246caf287ce9caac13f1ab3c06cbdaff.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/246caf287ce9caac13f1ab3c06cbdaff.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2470bb1a47928b791642ff821484135f.bin b/HoloBot/Library/ShaderCache/2/2470bb1a47928b791642ff821484135f.bin new file mode 100644 index 0000000..6e24d13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2470bb1a47928b791642ff821484135f.bin differ diff --git a/HoloBot/Library/ShaderCache/2/24a62fc11491e08f07bf7aa012221fc6.bin b/HoloBot/Library/ShaderCache/2/24a62fc11491e08f07bf7aa012221fc6.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/24a62fc11491e08f07bf7aa012221fc6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/24bc11211528d553a0002e61152ae767.bin b/HoloBot/Library/ShaderCache/2/24bc11211528d553a0002e61152ae767.bin new file mode 100644 index 0000000..44aaaa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/24bc11211528d553a0002e61152ae767.bin differ diff --git a/HoloBot/Library/ShaderCache/2/24c01079ea226deaccd6f72e7f44c73a.bin b/HoloBot/Library/ShaderCache/2/24c01079ea226deaccd6f72e7f44c73a.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/24c01079ea226deaccd6f72e7f44c73a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2502b393b379f435028991dcd0933dce.bin b/HoloBot/Library/ShaderCache/2/2502b393b379f435028991dcd0933dce.bin new file mode 100644 index 0000000..f6fe3d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2502b393b379f435028991dcd0933dce.bin differ diff --git a/HoloBot/Library/ShaderCache/2/251aad9e7af8a097e0356e5cf5e3686e.bin b/HoloBot/Library/ShaderCache/2/251aad9e7af8a097e0356e5cf5e3686e.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/251aad9e7af8a097e0356e5cf5e3686e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2543d5da801bd019f55a4b8b503d0d7d.bin b/HoloBot/Library/ShaderCache/2/2543d5da801bd019f55a4b8b503d0d7d.bin new file mode 100644 index 0000000..17760d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2543d5da801bd019f55a4b8b503d0d7d.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25447414b3f19aec6f305fde913f1446.bin b/HoloBot/Library/ShaderCache/2/25447414b3f19aec6f305fde913f1446.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25447414b3f19aec6f305fde913f1446.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2554dea01e505702a40e6b783aea848e.bin b/HoloBot/Library/ShaderCache/2/2554dea01e505702a40e6b783aea848e.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2554dea01e505702a40e6b783aea848e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2571fafa7fd7c8d451ed089f8d7fec8d.bin b/HoloBot/Library/ShaderCache/2/2571fafa7fd7c8d451ed089f8d7fec8d.bin new file mode 100644 index 0000000..44b39ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2571fafa7fd7c8d451ed089f8d7fec8d.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2582f59ce0b50e4e0293686fb1519fe2.bin b/HoloBot/Library/ShaderCache/2/2582f59ce0b50e4e0293686fb1519fe2.bin new file mode 100644 index 0000000..ee08906 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2582f59ce0b50e4e0293686fb1519fe2.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2593fef1ca90f840c7f9fcc3f50a8f07.bin b/HoloBot/Library/ShaderCache/2/2593fef1ca90f840c7f9fcc3f50a8f07.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2593fef1ca90f840c7f9fcc3f50a8f07.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25996b0d6133696a4cadd3c040a20f1d.bin b/HoloBot/Library/ShaderCache/2/25996b0d6133696a4cadd3c040a20f1d.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25996b0d6133696a4cadd3c040a20f1d.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25bc6ea72d31e666f69f9fd1142a4687.bin b/HoloBot/Library/ShaderCache/2/25bc6ea72d31e666f69f9fd1142a4687.bin new file mode 100644 index 0000000..9936adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25bc6ea72d31e666f69f9fd1142a4687.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25d9650ca2992c071e09be9424417366.bin b/HoloBot/Library/ShaderCache/2/25d9650ca2992c071e09be9424417366.bin new file mode 100644 index 0000000..2245eaa Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25d9650ca2992c071e09be9424417366.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25e61e4bf1fbc14bce43cad53db34c44.bin b/HoloBot/Library/ShaderCache/2/25e61e4bf1fbc14bce43cad53db34c44.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25e61e4bf1fbc14bce43cad53db34c44.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25f87b393192449784aef657f6e52a20.bin b/HoloBot/Library/ShaderCache/2/25f87b393192449784aef657f6e52a20.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25f87b393192449784aef657f6e52a20.bin differ diff --git a/HoloBot/Library/ShaderCache/2/25fcc9c8566416a7c657935ec4ad7cd6.bin b/HoloBot/Library/ShaderCache/2/25fcc9c8566416a7c657935ec4ad7cd6.bin new file mode 100644 index 0000000..3d13378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/25fcc9c8566416a7c657935ec4ad7cd6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/260bfe5f669b08f7baf3de16c6805d39.bin b/HoloBot/Library/ShaderCache/2/260bfe5f669b08f7baf3de16c6805d39.bin new file mode 100644 index 0000000..3d13378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/260bfe5f669b08f7baf3de16c6805d39.bin differ diff --git a/HoloBot/Library/ShaderCache/2/260c00f14dba60aa35e1dcf879db76c9.bin b/HoloBot/Library/ShaderCache/2/260c00f14dba60aa35e1dcf879db76c9.bin new file mode 100644 index 0000000..eb33410 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/260c00f14dba60aa35e1dcf879db76c9.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26278b4a30538c8084e4f2ae04cc620a.bin b/HoloBot/Library/ShaderCache/2/26278b4a30538c8084e4f2ae04cc620a.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26278b4a30538c8084e4f2ae04cc620a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26287c0216963137fcf10cf4fb77c4ae.bin b/HoloBot/Library/ShaderCache/2/26287c0216963137fcf10cf4fb77c4ae.bin new file mode 100644 index 0000000..3f683b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26287c0216963137fcf10cf4fb77c4ae.bin differ diff --git a/HoloBot/Library/ShaderCache/2/262e07a247556406e6936759f8ebfb10.bin b/HoloBot/Library/ShaderCache/2/262e07a247556406e6936759f8ebfb10.bin new file mode 100644 index 0000000..ad524b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/262e07a247556406e6936759f8ebfb10.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26b66ee789fb830e7468378bbee2d394.bin b/HoloBot/Library/ShaderCache/2/26b66ee789fb830e7468378bbee2d394.bin new file mode 100644 index 0000000..bde6cbe Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26b66ee789fb830e7468378bbee2d394.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26c494d03d3b30cf51b0256b215b4058.bin b/HoloBot/Library/ShaderCache/2/26c494d03d3b30cf51b0256b215b4058.bin new file mode 100644 index 0000000..d4c8cf8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26c494d03d3b30cf51b0256b215b4058.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26d1831aa2caaadf14c8dcf885ed20f0.bin b/HoloBot/Library/ShaderCache/2/26d1831aa2caaadf14c8dcf885ed20f0.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26d1831aa2caaadf14c8dcf885ed20f0.bin differ diff --git a/HoloBot/Library/ShaderCache/2/26d247bee7311b5907092c13516edace.bin b/HoloBot/Library/ShaderCache/2/26d247bee7311b5907092c13516edace.bin new file mode 100644 index 0000000..3bc8210 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/26d247bee7311b5907092c13516edace.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2724ca5a3818bf81c24532742e246708.bin b/HoloBot/Library/ShaderCache/2/2724ca5a3818bf81c24532742e246708.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2724ca5a3818bf81c24532742e246708.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2759247ae9b88f40f41ca79bb99fa6be.bin b/HoloBot/Library/ShaderCache/2/2759247ae9b88f40f41ca79bb99fa6be.bin new file mode 100644 index 0000000..7c4d601 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2759247ae9b88f40f41ca79bb99fa6be.bin differ diff --git a/HoloBot/Library/ShaderCache/2/278b7cbe037ae8436059976fe5ffd915.bin b/HoloBot/Library/ShaderCache/2/278b7cbe037ae8436059976fe5ffd915.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/278b7cbe037ae8436059976fe5ffd915.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2795b15772f841199b65acd9a3ef6eaf.bin b/HoloBot/Library/ShaderCache/2/2795b15772f841199b65acd9a3ef6eaf.bin new file mode 100644 index 0000000..55bca4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2795b15772f841199b65acd9a3ef6eaf.bin differ diff --git a/HoloBot/Library/ShaderCache/2/27b5ae9e0e8c96895777d26395d9a57c.bin b/HoloBot/Library/ShaderCache/2/27b5ae9e0e8c96895777d26395d9a57c.bin new file mode 100644 index 0000000..0804ad9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/27b5ae9e0e8c96895777d26395d9a57c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/27da62bb6300a4c4664ab25a17c1ed0e.bin b/HoloBot/Library/ShaderCache/2/27da62bb6300a4c4664ab25a17c1ed0e.bin new file mode 100644 index 0000000..76aa9d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/27da62bb6300a4c4664ab25a17c1ed0e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/27e14087efe03ad602d6a86014903825.bin b/HoloBot/Library/ShaderCache/2/27e14087efe03ad602d6a86014903825.bin new file mode 100644 index 0000000..559e664 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/27e14087efe03ad602d6a86014903825.bin differ diff --git a/HoloBot/Library/ShaderCache/2/27ee7dc0f132e849610bdda4d720b1b6.bin b/HoloBot/Library/ShaderCache/2/27ee7dc0f132e849610bdda4d720b1b6.bin new file mode 100644 index 0000000..e2346e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/27ee7dc0f132e849610bdda4d720b1b6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/28108b143c703e95cd7b774b8143bff8.bin b/HoloBot/Library/ShaderCache/2/28108b143c703e95cd7b774b8143bff8.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/28108b143c703e95cd7b774b8143bff8.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2823a5cf27b1595a3e8bc3deced01266.bin b/HoloBot/Library/ShaderCache/2/2823a5cf27b1595a3e8bc3deced01266.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2823a5cf27b1595a3e8bc3deced01266.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2829b7c2e25eb62d5b5955b2bb2f0d92.bin b/HoloBot/Library/ShaderCache/2/2829b7c2e25eb62d5b5955b2bb2f0d92.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2829b7c2e25eb62d5b5955b2bb2f0d92.bin differ diff --git a/HoloBot/Library/ShaderCache/2/285d46cba80f8293581f63c59d0cc8b0.bin b/HoloBot/Library/ShaderCache/2/285d46cba80f8293581f63c59d0cc8b0.bin new file mode 100644 index 0000000..44b7123 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/285d46cba80f8293581f63c59d0cc8b0.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2866993a156898a6af6afa746ac4309a.bin b/HoloBot/Library/ShaderCache/2/2866993a156898a6af6afa746ac4309a.bin new file mode 100644 index 0000000..babdf0d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2866993a156898a6af6afa746ac4309a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/286c7d08238b57f7ea3744680080ba71.bin b/HoloBot/Library/ShaderCache/2/286c7d08238b57f7ea3744680080ba71.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/286c7d08238b57f7ea3744680080ba71.bin differ diff --git a/HoloBot/Library/ShaderCache/2/28879995971016b1ad734142914e38ef.bin b/HoloBot/Library/ShaderCache/2/28879995971016b1ad734142914e38ef.bin new file mode 100644 index 0000000..afb55bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/28879995971016b1ad734142914e38ef.bin differ diff --git a/HoloBot/Library/ShaderCache/2/29002c20584ddd8d9cc425580d65771c.bin b/HoloBot/Library/ShaderCache/2/29002c20584ddd8d9cc425580d65771c.bin new file mode 100644 index 0000000..df63d7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/29002c20584ddd8d9cc425580d65771c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/29208d7dab4a1c856069580c93c5d7c4.bin b/HoloBot/Library/ShaderCache/2/29208d7dab4a1c856069580c93c5d7c4.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/29208d7dab4a1c856069580c93c5d7c4.bin differ diff --git a/HoloBot/Library/ShaderCache/2/293b69a336734d8162d4ca826b9ca936.bin b/HoloBot/Library/ShaderCache/2/293b69a336734d8162d4ca826b9ca936.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/293b69a336734d8162d4ca826b9ca936.bin differ diff --git a/HoloBot/Library/ShaderCache/2/295432ae2f01fce4b713969c7f061ef7.bin b/HoloBot/Library/ShaderCache/2/295432ae2f01fce4b713969c7f061ef7.bin new file mode 100644 index 0000000..b52a35b Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/295432ae2f01fce4b713969c7f061ef7.bin differ diff --git a/HoloBot/Library/ShaderCache/2/295e68af82ee4b795d6ecf78ca9d41fc.bin b/HoloBot/Library/ShaderCache/2/295e68af82ee4b795d6ecf78ca9d41fc.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/295e68af82ee4b795d6ecf78ca9d41fc.bin differ diff --git a/HoloBot/Library/ShaderCache/2/297822175ec8d43725ba16bf7117d6cb.bin b/HoloBot/Library/ShaderCache/2/297822175ec8d43725ba16bf7117d6cb.bin new file mode 100644 index 0000000..212ed35 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/297822175ec8d43725ba16bf7117d6cb.bin differ diff --git a/HoloBot/Library/ShaderCache/2/298fabeefbb28ec03ac57b59cbe1665b.bin b/HoloBot/Library/ShaderCache/2/298fabeefbb28ec03ac57b59cbe1665b.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/298fabeefbb28ec03ac57b59cbe1665b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/29948753058e14c7b0cc7c8b4dc826f1.bin b/HoloBot/Library/ShaderCache/2/29948753058e14c7b0cc7c8b4dc826f1.bin new file mode 100644 index 0000000..50f60de Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/29948753058e14c7b0cc7c8b4dc826f1.bin differ diff --git a/HoloBot/Library/ShaderCache/2/29997bc35cb31a384b449a8752a99f92.bin b/HoloBot/Library/ShaderCache/2/29997bc35cb31a384b449a8752a99f92.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/29997bc35cb31a384b449a8752a99f92.bin differ diff --git a/HoloBot/Library/ShaderCache/2/29bf56343f21599885309cd0c5ae0f03.bin b/HoloBot/Library/ShaderCache/2/29bf56343f21599885309cd0c5ae0f03.bin new file mode 100644 index 0000000..2338ae6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/29bf56343f21599885309cd0c5ae0f03.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a03a8e9318213361c6c6ec38ebb9b83.bin b/HoloBot/Library/ShaderCache/2/2a03a8e9318213361c6c6ec38ebb9b83.bin new file mode 100644 index 0000000..b54dcee Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a03a8e9318213361c6c6ec38ebb9b83.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a2ddacab6a5c11915ab02f76b583a28.bin b/HoloBot/Library/ShaderCache/2/2a2ddacab6a5c11915ab02f76b583a28.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a2ddacab6a5c11915ab02f76b583a28.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a31e533d26a77273fdaea50749b70f7.bin b/HoloBot/Library/ShaderCache/2/2a31e533d26a77273fdaea50749b70f7.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a31e533d26a77273fdaea50749b70f7.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a3875c2b0df135404376c5a1a80ea37.bin b/HoloBot/Library/ShaderCache/2/2a3875c2b0df135404376c5a1a80ea37.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a3875c2b0df135404376c5a1a80ea37.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a3b3dfa0a79165b63042f1e81b2d81e.bin b/HoloBot/Library/ShaderCache/2/2a3b3dfa0a79165b63042f1e81b2d81e.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a3b3dfa0a79165b63042f1e81b2d81e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a4648a48d3a38f068c671a49f92b386.bin b/HoloBot/Library/ShaderCache/2/2a4648a48d3a38f068c671a49f92b386.bin new file mode 100644 index 0000000..965ca9d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a4648a48d3a38f068c671a49f92b386.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a607820e5009022326b0a5e37f3409b.bin b/HoloBot/Library/ShaderCache/2/2a607820e5009022326b0a5e37f3409b.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a607820e5009022326b0a5e37f3409b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a6858d61beae24e34b5977fac7eceff.bin b/HoloBot/Library/ShaderCache/2/2a6858d61beae24e34b5977fac7eceff.bin new file mode 100644 index 0000000..866cca7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a6858d61beae24e34b5977fac7eceff.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a810a6d738768d76baa113a0f160070.bin b/HoloBot/Library/ShaderCache/2/2a810a6d738768d76baa113a0f160070.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a810a6d738768d76baa113a0f160070.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2a852352908cda2704a9cc9742996c1e.bin b/HoloBot/Library/ShaderCache/2/2a852352908cda2704a9cc9742996c1e.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2a852352908cda2704a9cc9742996c1e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2aa30f4c52cf4729d4fe2b874bf22264.bin b/HoloBot/Library/ShaderCache/2/2aa30f4c52cf4729d4fe2b874bf22264.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2aa30f4c52cf4729d4fe2b874bf22264.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ad2665f49bc1dc2acd930efefda4c65.bin b/HoloBot/Library/ShaderCache/2/2ad2665f49bc1dc2acd930efefda4c65.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ad2665f49bc1dc2acd930efefda4c65.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ae9ddee3c12cf6b539d9828d51c4542.bin b/HoloBot/Library/ShaderCache/2/2ae9ddee3c12cf6b539d9828d51c4542.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ae9ddee3c12cf6b539d9828d51c4542.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2aeb139cb6e9b6b602435c6af62bc9dc.bin b/HoloBot/Library/ShaderCache/2/2aeb139cb6e9b6b602435c6af62bc9dc.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2aeb139cb6e9b6b602435c6af62bc9dc.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2af785def314a1117b1aa97ee58ebc1c.bin b/HoloBot/Library/ShaderCache/2/2af785def314a1117b1aa97ee58ebc1c.bin new file mode 100644 index 0000000..0ce36d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2af785def314a1117b1aa97ee58ebc1c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b04cac829bb71afd91291adc5f0daeb.bin b/HoloBot/Library/ShaderCache/2/2b04cac829bb71afd91291adc5f0daeb.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b04cac829bb71afd91291adc5f0daeb.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b381cb7766f2972bf8775b9d10f2000.bin b/HoloBot/Library/ShaderCache/2/2b381cb7766f2972bf8775b9d10f2000.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b381cb7766f2972bf8775b9d10f2000.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b3909eb36f0797a0b6a4c49df5084d3.bin b/HoloBot/Library/ShaderCache/2/2b3909eb36f0797a0b6a4c49df5084d3.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b3909eb36f0797a0b6a4c49df5084d3.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b3f0c71da4432656755e5b3db9148c9.bin b/HoloBot/Library/ShaderCache/2/2b3f0c71da4432656755e5b3db9148c9.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b3f0c71da4432656755e5b3db9148c9.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b6adc72052a4716e6f8c30c7edae2aa.bin b/HoloBot/Library/ShaderCache/2/2b6adc72052a4716e6f8c30c7edae2aa.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b6adc72052a4716e6f8c30c7edae2aa.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b6c5477f903741a8603c9ce6c3206e7.bin b/HoloBot/Library/ShaderCache/2/2b6c5477f903741a8603c9ce6c3206e7.bin new file mode 100644 index 0000000..5ab7acb Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b6c5477f903741a8603c9ce6c3206e7.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b7870116c73a59a06067cbd1e92c276.bin b/HoloBot/Library/ShaderCache/2/2b7870116c73a59a06067cbd1e92c276.bin new file mode 100644 index 0000000..4e3a0fc Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b7870116c73a59a06067cbd1e92c276.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2b83e471d7e4452f6e826229a964eaee.bin b/HoloBot/Library/ShaderCache/2/2b83e471d7e4452f6e826229a964eaee.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2b83e471d7e4452f6e826229a964eaee.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2bc122b3a798047cf26a9852f2fb653b.bin b/HoloBot/Library/ShaderCache/2/2bc122b3a798047cf26a9852f2fb653b.bin new file mode 100644 index 0000000..6db9dfe Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2bc122b3a798047cf26a9852f2fb653b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2bc7b86a96053ae2d82270755da9f06b.bin b/HoloBot/Library/ShaderCache/2/2bc7b86a96053ae2d82270755da9f06b.bin new file mode 100644 index 0000000..9f7abf4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2bc7b86a96053ae2d82270755da9f06b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c158ca744d833362209df01ae775643.bin b/HoloBot/Library/ShaderCache/2/2c158ca744d833362209df01ae775643.bin new file mode 100644 index 0000000..09e43de Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c158ca744d833362209df01ae775643.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c2f6c3f257bccfbda327b05aa304d14.bin b/HoloBot/Library/ShaderCache/2/2c2f6c3f257bccfbda327b05aa304d14.bin new file mode 100644 index 0000000..8f0cf33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c2f6c3f257bccfbda327b05aa304d14.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c48f9c2439064eee16eb245bf3cf0db.bin b/HoloBot/Library/ShaderCache/2/2c48f9c2439064eee16eb245bf3cf0db.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c48f9c2439064eee16eb245bf3cf0db.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c5b7c3ca9c3105343d9c9050861ebb1.bin b/HoloBot/Library/ShaderCache/2/2c5b7c3ca9c3105343d9c9050861ebb1.bin new file mode 100644 index 0000000..cb03ee4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c5b7c3ca9c3105343d9c9050861ebb1.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c5da3692acfbe8108cee857d0a1f590.bin b/HoloBot/Library/ShaderCache/2/2c5da3692acfbe8108cee857d0a1f590.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c5da3692acfbe8108cee857d0a1f590.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2c84b84b0ea6674f084f22530f5d456b.bin b/HoloBot/Library/ShaderCache/2/2c84b84b0ea6674f084f22530f5d456b.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2c84b84b0ea6674f084f22530f5d456b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ca76facb20b0282a74ae7e6428523b6.bin b/HoloBot/Library/ShaderCache/2/2ca76facb20b0282a74ae7e6428523b6.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ca76facb20b0282a74ae7e6428523b6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2cb029d3d6dfd160653fc38baaed2824.bin b/HoloBot/Library/ShaderCache/2/2cb029d3d6dfd160653fc38baaed2824.bin new file mode 100644 index 0000000..8335076 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2cb029d3d6dfd160653fc38baaed2824.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2cbd881f68e0c75173e04aa31d2b3077.bin b/HoloBot/Library/ShaderCache/2/2cbd881f68e0c75173e04aa31d2b3077.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2cbd881f68e0c75173e04aa31d2b3077.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ccfc33e6e6ae6558407d79c541ce888.bin b/HoloBot/Library/ShaderCache/2/2ccfc33e6e6ae6558407d79c541ce888.bin new file mode 100644 index 0000000..040821d Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ccfc33e6e6ae6558407d79c541ce888.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d00578f645314fca9d84c1f435f6652.bin b/HoloBot/Library/ShaderCache/2/2d00578f645314fca9d84c1f435f6652.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d00578f645314fca9d84c1f435f6652.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d28ce847ed69889fbe238f4879aa97c.bin b/HoloBot/Library/ShaderCache/2/2d28ce847ed69889fbe238f4879aa97c.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d28ce847ed69889fbe238f4879aa97c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d3bc2dec8299a45ba1eac19e47b77e1.bin b/HoloBot/Library/ShaderCache/2/2d3bc2dec8299a45ba1eac19e47b77e1.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d3bc2dec8299a45ba1eac19e47b77e1.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d42b8e64f56243592fd23f01ee1958a.bin b/HoloBot/Library/ShaderCache/2/2d42b8e64f56243592fd23f01ee1958a.bin new file mode 100644 index 0000000..fbeb8b1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d42b8e64f56243592fd23f01ee1958a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d4e8c8c8c5c622f8c11963a6d6adc2a.bin b/HoloBot/Library/ShaderCache/2/2d4e8c8c8c5c622f8c11963a6d6adc2a.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d4e8c8c8c5c622f8c11963a6d6adc2a.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d602594f9ea35e64fddef1c76327f45.bin b/HoloBot/Library/ShaderCache/2/2d602594f9ea35e64fddef1c76327f45.bin new file mode 100644 index 0000000..3108318 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d602594f9ea35e64fddef1c76327f45.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d7975195ece78be30b6f40d6a5f3c6c.bin b/HoloBot/Library/ShaderCache/2/2d7975195ece78be30b6f40d6a5f3c6c.bin new file mode 100644 index 0000000..a0452fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d7975195ece78be30b6f40d6a5f3c6c.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d8d76b564525df0669f7e961dea5897.bin b/HoloBot/Library/ShaderCache/2/2d8d76b564525df0669f7e961dea5897.bin new file mode 100644 index 0000000..48e3f15 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d8d76b564525df0669f7e961dea5897.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2d9a2744cbd993848c9ec571756c0ca5.bin b/HoloBot/Library/ShaderCache/2/2d9a2744cbd993848c9ec571756c0ca5.bin new file mode 100644 index 0000000..cdd44bc Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2d9a2744cbd993848c9ec571756c0ca5.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2dcc5878c8cfd5807a3bc13e5cda4bda.bin b/HoloBot/Library/ShaderCache/2/2dcc5878c8cfd5807a3bc13e5cda4bda.bin new file mode 100644 index 0000000..9d7f256 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2dcc5878c8cfd5807a3bc13e5cda4bda.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2dd601d91392f357682d0cf2a617360b.bin b/HoloBot/Library/ShaderCache/2/2dd601d91392f357682d0cf2a617360b.bin new file mode 100644 index 0000000..2338ae6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2dd601d91392f357682d0cf2a617360b.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2df7928e3c295206b9a5c2b9576aacf6.bin b/HoloBot/Library/ShaderCache/2/2df7928e3c295206b9a5c2b9576aacf6.bin new file mode 100644 index 0000000..48d7db1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2df7928e3c295206b9a5c2b9576aacf6.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e03186890e0c782e9af97369d12f6fd.bin b/HoloBot/Library/ShaderCache/2/2e03186890e0c782e9af97369d12f6fd.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e03186890e0c782e9af97369d12f6fd.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e076908c2da2eb10d8b52bdaa04b404.bin b/HoloBot/Library/ShaderCache/2/2e076908c2da2eb10d8b52bdaa04b404.bin new file mode 100644 index 0000000..794d613 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e076908c2da2eb10d8b52bdaa04b404.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e0bf101175f1490318b460c691227a4.bin b/HoloBot/Library/ShaderCache/2/2e0bf101175f1490318b460c691227a4.bin new file mode 100644 index 0000000..cd7325b Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e0bf101175f1490318b460c691227a4.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e19f055983ffefd9b8967c86d201d08.bin b/HoloBot/Library/ShaderCache/2/2e19f055983ffefd9b8967c86d201d08.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e19f055983ffefd9b8967c86d201d08.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e52c17f0f996b726c22bfac05b99d6e.bin b/HoloBot/Library/ShaderCache/2/2e52c17f0f996b726c22bfac05b99d6e.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e52c17f0f996b726c22bfac05b99d6e.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2e90c8e00f5a127776016739f96c3bb7.bin b/HoloBot/Library/ShaderCache/2/2e90c8e00f5a127776016739f96c3bb7.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2e90c8e00f5a127776016739f96c3bb7.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ea40467eb133aaf34ab09d242301590.bin b/HoloBot/Library/ShaderCache/2/2ea40467eb133aaf34ab09d242301590.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ea40467eb133aaf34ab09d242301590.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2ea9bc87692afd45c836e9b793cdc530.bin b/HoloBot/Library/ShaderCache/2/2ea9bc87692afd45c836e9b793cdc530.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2ea9bc87692afd45c836e9b793cdc530.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2f078af40ed3d6b26aae06ff2c5bb875.bin b/HoloBot/Library/ShaderCache/2/2f078af40ed3d6b26aae06ff2c5bb875.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2f078af40ed3d6b26aae06ff2c5bb875.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2f1969157804ca1737438d0190c66812.bin b/HoloBot/Library/ShaderCache/2/2f1969157804ca1737438d0190c66812.bin new file mode 100644 index 0000000..3d13378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2f1969157804ca1737438d0190c66812.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2f46b265a1020e1318b7466371d93275.bin b/HoloBot/Library/ShaderCache/2/2f46b265a1020e1318b7466371d93275.bin new file mode 100644 index 0000000..ae00f07 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2f46b265a1020e1318b7466371d93275.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2f4a6a1acd86d15bf137155f295dbb41.bin b/HoloBot/Library/ShaderCache/2/2f4a6a1acd86d15bf137155f295dbb41.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2f4a6a1acd86d15bf137155f295dbb41.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2fba09bb844b16f18f0088dc37340636.bin b/HoloBot/Library/ShaderCache/2/2fba09bb844b16f18f0088dc37340636.bin new file mode 100644 index 0000000..89a1c21 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2fba09bb844b16f18f0088dc37340636.bin differ diff --git a/HoloBot/Library/ShaderCache/2/2fcd1f8ef290340644237b7f14839324.bin b/HoloBot/Library/ShaderCache/2/2fcd1f8ef290340644237b7f14839324.bin new file mode 100644 index 0000000..3532977 Binary files /dev/null and b/HoloBot/Library/ShaderCache/2/2fcd1f8ef290340644237b7f14839324.bin differ diff --git a/HoloBot/Library/ShaderCache/3/301278579700daff79cfdbbf679bad57.bin b/HoloBot/Library/ShaderCache/3/301278579700daff79cfdbbf679bad57.bin new file mode 100644 index 0000000..9f3c685 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/301278579700daff79cfdbbf679bad57.bin differ diff --git a/HoloBot/Library/ShaderCache/3/305c9b61094a5a7bc6e70af0c120fa49.bin b/HoloBot/Library/ShaderCache/3/305c9b61094a5a7bc6e70af0c120fa49.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/305c9b61094a5a7bc6e70af0c120fa49.bin differ diff --git a/HoloBot/Library/ShaderCache/3/309dc3d4fb539d998deb80faf9ebde6b.bin b/HoloBot/Library/ShaderCache/3/309dc3d4fb539d998deb80faf9ebde6b.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/309dc3d4fb539d998deb80faf9ebde6b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/30d7652e69009e86ff54fd47e2015b17.bin b/HoloBot/Library/ShaderCache/3/30d7652e69009e86ff54fd47e2015b17.bin new file mode 100644 index 0000000..4ba00de Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/30d7652e69009e86ff54fd47e2015b17.bin differ diff --git a/HoloBot/Library/ShaderCache/3/30e1c80e8c96a547e580c8c1357f1e17.bin b/HoloBot/Library/ShaderCache/3/30e1c80e8c96a547e580c8c1357f1e17.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/30e1c80e8c96a547e580c8c1357f1e17.bin differ diff --git a/HoloBot/Library/ShaderCache/3/30fd8f04d1f332b25230b0e2e277d9b8.bin b/HoloBot/Library/ShaderCache/3/30fd8f04d1f332b25230b0e2e277d9b8.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/30fd8f04d1f332b25230b0e2e277d9b8.bin differ diff --git a/HoloBot/Library/ShaderCache/3/310976a3d3b8e3d95b8219f0ec5d7758.bin b/HoloBot/Library/ShaderCache/3/310976a3d3b8e3d95b8219f0ec5d7758.bin new file mode 100644 index 0000000..065cd4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/310976a3d3b8e3d95b8219f0ec5d7758.bin differ diff --git a/HoloBot/Library/ShaderCache/3/313de7a4d84146dd44b22457fc48fbf1.bin b/HoloBot/Library/ShaderCache/3/313de7a4d84146dd44b22457fc48fbf1.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/313de7a4d84146dd44b22457fc48fbf1.bin differ diff --git a/HoloBot/Library/ShaderCache/3/314b1941a3de16c306898f7bda14b014.bin b/HoloBot/Library/ShaderCache/3/314b1941a3de16c306898f7bda14b014.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/314b1941a3de16c306898f7bda14b014.bin differ diff --git a/HoloBot/Library/ShaderCache/3/314cd45514e33bbe41da533439c6b317.bin b/HoloBot/Library/ShaderCache/3/314cd45514e33bbe41da533439c6b317.bin new file mode 100644 index 0000000..45f4d28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/314cd45514e33bbe41da533439c6b317.bin differ diff --git a/HoloBot/Library/ShaderCache/3/31a52fbc8d9f195d1696ccdba420556f.bin b/HoloBot/Library/ShaderCache/3/31a52fbc8d9f195d1696ccdba420556f.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/31a52fbc8d9f195d1696ccdba420556f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/31c58ae72b2a070078bc5588e1bfd068.bin b/HoloBot/Library/ShaderCache/3/31c58ae72b2a070078bc5588e1bfd068.bin new file mode 100644 index 0000000..cac5f63 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/31c58ae72b2a070078bc5588e1bfd068.bin differ diff --git a/HoloBot/Library/ShaderCache/3/31cea7da6c406fdc199c60302768235c.bin b/HoloBot/Library/ShaderCache/3/31cea7da6c406fdc199c60302768235c.bin new file mode 100644 index 0000000..55feff3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/31cea7da6c406fdc199c60302768235c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/31da1375f510e77d1bcc2eeb1207029b.bin b/HoloBot/Library/ShaderCache/3/31da1375f510e77d1bcc2eeb1207029b.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/31da1375f510e77d1bcc2eeb1207029b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3221a490cf8e0e252c4fd44cf48a8342.bin b/HoloBot/Library/ShaderCache/3/3221a490cf8e0e252c4fd44cf48a8342.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3221a490cf8e0e252c4fd44cf48a8342.bin differ diff --git a/HoloBot/Library/ShaderCache/3/326dc0d004aad0f66f7bda2f2fa88abc.bin b/HoloBot/Library/ShaderCache/3/326dc0d004aad0f66f7bda2f2fa88abc.bin new file mode 100644 index 0000000..299aed8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/326dc0d004aad0f66f7bda2f2fa88abc.bin differ diff --git a/HoloBot/Library/ShaderCache/3/32974838e4f854a9f6efccadf739d78b.bin b/HoloBot/Library/ShaderCache/3/32974838e4f854a9f6efccadf739d78b.bin new file mode 100644 index 0000000..b5f5351 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/32974838e4f854a9f6efccadf739d78b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/32d017013c4dd35cb2dd100d2db08d6d.bin b/HoloBot/Library/ShaderCache/3/32d017013c4dd35cb2dd100d2db08d6d.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/32d017013c4dd35cb2dd100d2db08d6d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/32d598666e028f5eedcf30452a1bd4b6.bin b/HoloBot/Library/ShaderCache/3/32d598666e028f5eedcf30452a1bd4b6.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/32d598666e028f5eedcf30452a1bd4b6.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3311e9c982557e3e14142f60ec640ece.bin b/HoloBot/Library/ShaderCache/3/3311e9c982557e3e14142f60ec640ece.bin new file mode 100644 index 0000000..e6f00ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3311e9c982557e3e14142f60ec640ece.bin differ diff --git a/HoloBot/Library/ShaderCache/3/332ff179c952401b2d22a5371426baf3.bin b/HoloBot/Library/ShaderCache/3/332ff179c952401b2d22a5371426baf3.bin new file mode 100644 index 0000000..0555d13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/332ff179c952401b2d22a5371426baf3.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3353894be3a73dd915682bc12cd4b284.bin b/HoloBot/Library/ShaderCache/3/3353894be3a73dd915682bc12cd4b284.bin new file mode 100644 index 0000000..a6e4112 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3353894be3a73dd915682bc12cd4b284.bin differ diff --git a/HoloBot/Library/ShaderCache/3/33811420b0761faa965db43b30108b87.bin b/HoloBot/Library/ShaderCache/3/33811420b0761faa965db43b30108b87.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/33811420b0761faa965db43b30108b87.bin differ diff --git a/HoloBot/Library/ShaderCache/3/339741e96ded1c2e9333831b6d69b682.bin b/HoloBot/Library/ShaderCache/3/339741e96ded1c2e9333831b6d69b682.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/339741e96ded1c2e9333831b6d69b682.bin differ diff --git a/HoloBot/Library/ShaderCache/3/33b64e9121d75276c29e507b8eff747e.bin b/HoloBot/Library/ShaderCache/3/33b64e9121d75276c29e507b8eff747e.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/33b64e9121d75276c29e507b8eff747e.bin differ diff --git a/HoloBot/Library/ShaderCache/3/33b9e5503f8e13e4c6373defb98c533d.bin b/HoloBot/Library/ShaderCache/3/33b9e5503f8e13e4c6373defb98c533d.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/33b9e5503f8e13e4c6373defb98c533d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/341dc1738a84cecc851f149681fb340d.bin b/HoloBot/Library/ShaderCache/3/341dc1738a84cecc851f149681fb340d.bin new file mode 100644 index 0000000..3b71699 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/341dc1738a84cecc851f149681fb340d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/341ff7913eed6297f8e77285acae235b.bin b/HoloBot/Library/ShaderCache/3/341ff7913eed6297f8e77285acae235b.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/341ff7913eed6297f8e77285acae235b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34221dab4abbfdf020a8b15e185b295c.bin b/HoloBot/Library/ShaderCache/3/34221dab4abbfdf020a8b15e185b295c.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34221dab4abbfdf020a8b15e185b295c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34222bef0a7d0650d948b89ce3cf36b0.bin b/HoloBot/Library/ShaderCache/3/34222bef0a7d0650d948b89ce3cf36b0.bin new file mode 100644 index 0000000..94be850 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34222bef0a7d0650d948b89ce3cf36b0.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34349cbe1a7770510ed1ec40fe9ed262.bin b/HoloBot/Library/ShaderCache/3/34349cbe1a7770510ed1ec40fe9ed262.bin new file mode 100644 index 0000000..ef78521 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34349cbe1a7770510ed1ec40fe9ed262.bin differ diff --git a/HoloBot/Library/ShaderCache/3/343715b64b8c0b4d026677e4dfbc1c0b.bin b/HoloBot/Library/ShaderCache/3/343715b64b8c0b4d026677e4dfbc1c0b.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/343715b64b8c0b4d026677e4dfbc1c0b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3457beea831546ba6ac43636931112c3.bin b/HoloBot/Library/ShaderCache/3/3457beea831546ba6ac43636931112c3.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3457beea831546ba6ac43636931112c3.bin differ diff --git a/HoloBot/Library/ShaderCache/3/345bcb560d7456880ab8d92db0759f94.bin b/HoloBot/Library/ShaderCache/3/345bcb560d7456880ab8d92db0759f94.bin new file mode 100644 index 0000000..6adf780 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/345bcb560d7456880ab8d92db0759f94.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3467e298d179b0741a4bf2296e042a14.bin b/HoloBot/Library/ShaderCache/3/3467e298d179b0741a4bf2296e042a14.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3467e298d179b0741a4bf2296e042a14.bin differ diff --git a/HoloBot/Library/ShaderCache/3/347be8dfaede39b8f41c709930340707.bin b/HoloBot/Library/ShaderCache/3/347be8dfaede39b8f41c709930340707.bin new file mode 100644 index 0000000..7333fc0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/347be8dfaede39b8f41c709930340707.bin differ diff --git a/HoloBot/Library/ShaderCache/3/348d150226a11c7777769489dacf6e45.bin b/HoloBot/Library/ShaderCache/3/348d150226a11c7777769489dacf6e45.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/348d150226a11c7777769489dacf6e45.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3494d8330726320ef32cb822c3be2137.bin b/HoloBot/Library/ShaderCache/3/3494d8330726320ef32cb822c3be2137.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3494d8330726320ef32cb822c3be2137.bin differ diff --git a/HoloBot/Library/ShaderCache/3/349d046cef0b1d1f1836e33872702a07.bin b/HoloBot/Library/ShaderCache/3/349d046cef0b1d1f1836e33872702a07.bin new file mode 100644 index 0000000..e2346e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/349d046cef0b1d1f1836e33872702a07.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34d847477ae80c22eaf4171589235b68.bin b/HoloBot/Library/ShaderCache/3/34d847477ae80c22eaf4171589235b68.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34d847477ae80c22eaf4171589235b68.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34dbbf0af45775eccd24ef220f472d04.bin b/HoloBot/Library/ShaderCache/3/34dbbf0af45775eccd24ef220f472d04.bin new file mode 100644 index 0000000..732eefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34dbbf0af45775eccd24ef220f472d04.bin differ diff --git a/HoloBot/Library/ShaderCache/3/34e30b379ee61a47051f8e4cdf5521f0.bin b/HoloBot/Library/ShaderCache/3/34e30b379ee61a47051f8e4cdf5521f0.bin new file mode 100644 index 0000000..6c1e674 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/34e30b379ee61a47051f8e4cdf5521f0.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35219520413b2fb4a1349994fd82e7a7.bin b/HoloBot/Library/ShaderCache/3/35219520413b2fb4a1349994fd82e7a7.bin new file mode 100644 index 0000000..d0cda5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35219520413b2fb4a1349994fd82e7a7.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35515ca5e2d630f5d365be6ea2b1e278.bin b/HoloBot/Library/ShaderCache/3/35515ca5e2d630f5d365be6ea2b1e278.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35515ca5e2d630f5d365be6ea2b1e278.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3560f6778be3af41e5e3fb7b5cd2ee9f.bin b/HoloBot/Library/ShaderCache/3/3560f6778be3af41e5e3fb7b5cd2ee9f.bin new file mode 100644 index 0000000..06ccd71 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3560f6778be3af41e5e3fb7b5cd2ee9f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35866e00cf2ac71bc176f2c99c03bae4.bin b/HoloBot/Library/ShaderCache/3/35866e00cf2ac71bc176f2c99c03bae4.bin new file mode 100644 index 0000000..790e755 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35866e00cf2ac71bc176f2c99c03bae4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/358835d4723ebed2df547c2cc5e94fc2.bin b/HoloBot/Library/ShaderCache/3/358835d4723ebed2df547c2cc5e94fc2.bin new file mode 100644 index 0000000..f62f192 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/358835d4723ebed2df547c2cc5e94fc2.bin differ diff --git a/HoloBot/Library/ShaderCache/3/359f95a7498a19451e46a881aaccc68c.bin b/HoloBot/Library/ShaderCache/3/359f95a7498a19451e46a881aaccc68c.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/359f95a7498a19451e46a881aaccc68c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35c055708c01c1e40763c64b5256637d.bin b/HoloBot/Library/ShaderCache/3/35c055708c01c1e40763c64b5256637d.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35c055708c01c1e40763c64b5256637d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35ebc87271d5f5bcc8c11d1be88f4484.bin b/HoloBot/Library/ShaderCache/3/35ebc87271d5f5bcc8c11d1be88f4484.bin new file mode 100644 index 0000000..c199961 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35ebc87271d5f5bcc8c11d1be88f4484.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35fda69bb8def6dd87ac4c4cffecc312.bin b/HoloBot/Library/ShaderCache/3/35fda69bb8def6dd87ac4c4cffecc312.bin new file mode 100644 index 0000000..c4c447b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35fda69bb8def6dd87ac4c4cffecc312.bin differ diff --git a/HoloBot/Library/ShaderCache/3/35fe1371a5d7b3c8d017f7ea66383f55.bin b/HoloBot/Library/ShaderCache/3/35fe1371a5d7b3c8d017f7ea66383f55.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/35fe1371a5d7b3c8d017f7ea66383f55.bin differ diff --git a/HoloBot/Library/ShaderCache/3/36069fcbf2b66057cc650e033b13076c.bin b/HoloBot/Library/ShaderCache/3/36069fcbf2b66057cc650e033b13076c.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/36069fcbf2b66057cc650e033b13076c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/361d59ba978cecf27f698d6af89f82f1.bin b/HoloBot/Library/ShaderCache/3/361d59ba978cecf27f698d6af89f82f1.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/361d59ba978cecf27f698d6af89f82f1.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3640e700d291c2ebe04f57d9a3d67be4.bin b/HoloBot/Library/ShaderCache/3/3640e700d291c2ebe04f57d9a3d67be4.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3640e700d291c2ebe04f57d9a3d67be4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/365e0b6199682dc78799c048cb68a153.bin b/HoloBot/Library/ShaderCache/3/365e0b6199682dc78799c048cb68a153.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/365e0b6199682dc78799c048cb68a153.bin differ diff --git a/HoloBot/Library/ShaderCache/3/365f632b0a8573ffcddfeb399b5c9362.bin b/HoloBot/Library/ShaderCache/3/365f632b0a8573ffcddfeb399b5c9362.bin new file mode 100644 index 0000000..d0cda5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/365f632b0a8573ffcddfeb399b5c9362.bin differ diff --git a/HoloBot/Library/ShaderCache/3/366423f02adb639118ca84c6c19571a7.bin b/HoloBot/Library/ShaderCache/3/366423f02adb639118ca84c6c19571a7.bin new file mode 100644 index 0000000..527d1ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/366423f02adb639118ca84c6c19571a7.bin differ diff --git a/HoloBot/Library/ShaderCache/3/366c84b50d6046d8cae0ac83d0ce522b.bin b/HoloBot/Library/ShaderCache/3/366c84b50d6046d8cae0ac83d0ce522b.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/366c84b50d6046d8cae0ac83d0ce522b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/366f559b912d78a9be5a9baff20642e6.bin b/HoloBot/Library/ShaderCache/3/366f559b912d78a9be5a9baff20642e6.bin new file mode 100644 index 0000000..8ce4cef Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/366f559b912d78a9be5a9baff20642e6.bin differ diff --git a/HoloBot/Library/ShaderCache/3/371e8a6aa9316f48de0386bde75b6a6d.bin b/HoloBot/Library/ShaderCache/3/371e8a6aa9316f48de0386bde75b6a6d.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/371e8a6aa9316f48de0386bde75b6a6d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3728970c3650c2f29e583e7269292a71.bin b/HoloBot/Library/ShaderCache/3/3728970c3650c2f29e583e7269292a71.bin new file mode 100644 index 0000000..278421e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3728970c3650c2f29e583e7269292a71.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3731a19902e28bf06bd919f8a33e1506.bin b/HoloBot/Library/ShaderCache/3/3731a19902e28bf06bd919f8a33e1506.bin new file mode 100644 index 0000000..29ae73b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3731a19902e28bf06bd919f8a33e1506.bin differ diff --git a/HoloBot/Library/ShaderCache/3/373e6ee0d25df13f9367149ac0d7db72.bin b/HoloBot/Library/ShaderCache/3/373e6ee0d25df13f9367149ac0d7db72.bin new file mode 100644 index 0000000..1c6e2ef Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/373e6ee0d25df13f9367149ac0d7db72.bin differ diff --git a/HoloBot/Library/ShaderCache/3/376028df95e81759a234c8ec74ce7535.bin b/HoloBot/Library/ShaderCache/3/376028df95e81759a234c8ec74ce7535.bin new file mode 100644 index 0000000..87f8dec Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/376028df95e81759a234c8ec74ce7535.bin differ diff --git a/HoloBot/Library/ShaderCache/3/376e25082686118668c03ccbd9f58766.bin b/HoloBot/Library/ShaderCache/3/376e25082686118668c03ccbd9f58766.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/376e25082686118668c03ccbd9f58766.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3798af784212e3d81493f15e7a081592.bin b/HoloBot/Library/ShaderCache/3/3798af784212e3d81493f15e7a081592.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3798af784212e3d81493f15e7a081592.bin differ diff --git a/HoloBot/Library/ShaderCache/3/37a9cf5e0d6c025e354b1badd73e602b.bin b/HoloBot/Library/ShaderCache/3/37a9cf5e0d6c025e354b1badd73e602b.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/37a9cf5e0d6c025e354b1badd73e602b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/37ab17dc6efdf26469da99197dc04edd.bin b/HoloBot/Library/ShaderCache/3/37ab17dc6efdf26469da99197dc04edd.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/37ab17dc6efdf26469da99197dc04edd.bin differ diff --git a/HoloBot/Library/ShaderCache/3/37bdd29b013c39243ee1195154836dd9.bin b/HoloBot/Library/ShaderCache/3/37bdd29b013c39243ee1195154836dd9.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/37bdd29b013c39243ee1195154836dd9.bin differ diff --git a/HoloBot/Library/ShaderCache/3/37d08a8a93c7062bf98102ba726fb636.bin b/HoloBot/Library/ShaderCache/3/37d08a8a93c7062bf98102ba726fb636.bin new file mode 100644 index 0000000..8be8d8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/37d08a8a93c7062bf98102ba726fb636.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3805bb8013f646b1fc12b9aaa3b0b162.bin b/HoloBot/Library/ShaderCache/3/3805bb8013f646b1fc12b9aaa3b0b162.bin new file mode 100644 index 0000000..1643417 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3805bb8013f646b1fc12b9aaa3b0b162.bin differ diff --git a/HoloBot/Library/ShaderCache/3/380f6592e9b94038b109c410a313b39f.bin b/HoloBot/Library/ShaderCache/3/380f6592e9b94038b109c410a313b39f.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/380f6592e9b94038b109c410a313b39f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3812bc8f15b80e33c52d870cb300f2c6.bin b/HoloBot/Library/ShaderCache/3/3812bc8f15b80e33c52d870cb300f2c6.bin new file mode 100644 index 0000000..3e4edff Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3812bc8f15b80e33c52d870cb300f2c6.bin differ diff --git a/HoloBot/Library/ShaderCache/3/382c8ff229d33f1be14e91896d71c992.bin b/HoloBot/Library/ShaderCache/3/382c8ff229d33f1be14e91896d71c992.bin new file mode 100644 index 0000000..1d6101e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/382c8ff229d33f1be14e91896d71c992.bin differ diff --git a/HoloBot/Library/ShaderCache/3/383907bc4f3801b924445c112e2bcdd5.bin b/HoloBot/Library/ShaderCache/3/383907bc4f3801b924445c112e2bcdd5.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/383907bc4f3801b924445c112e2bcdd5.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3879b20370ee50869c6b89c1b67da7ca.bin b/HoloBot/Library/ShaderCache/3/3879b20370ee50869c6b89c1b67da7ca.bin new file mode 100644 index 0000000..ed2c780 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3879b20370ee50869c6b89c1b67da7ca.bin differ diff --git a/HoloBot/Library/ShaderCache/3/38f3560564cacc9271abec144edddb97.bin b/HoloBot/Library/ShaderCache/3/38f3560564cacc9271abec144edddb97.bin new file mode 100644 index 0000000..0485742 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/38f3560564cacc9271abec144edddb97.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3927642f4d4e58858d739a6bf1c1577b.bin b/HoloBot/Library/ShaderCache/3/3927642f4d4e58858d739a6bf1c1577b.bin new file mode 100644 index 0000000..1d6e08f Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3927642f4d4e58858d739a6bf1c1577b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39280bb8c18d3dca37aefc83b9645fb4.bin b/HoloBot/Library/ShaderCache/3/39280bb8c18d3dca37aefc83b9645fb4.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39280bb8c18d3dca37aefc83b9645fb4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39290dc5fe5316e0b9acb9a3798a6672.bin b/HoloBot/Library/ShaderCache/3/39290dc5fe5316e0b9acb9a3798a6672.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39290dc5fe5316e0b9acb9a3798a6672.bin differ diff --git a/HoloBot/Library/ShaderCache/3/393a419d8fb56f88bd3d840e3062748a.bin b/HoloBot/Library/ShaderCache/3/393a419d8fb56f88bd3d840e3062748a.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/393a419d8fb56f88bd3d840e3062748a.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39592350a70b1a19629582644220af82.bin b/HoloBot/Library/ShaderCache/3/39592350a70b1a19629582644220af82.bin new file mode 100644 index 0000000..dfbffb8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39592350a70b1a19629582644220af82.bin differ diff --git a/HoloBot/Library/ShaderCache/3/395ac31b811c88f183ffecac01870fd8.bin b/HoloBot/Library/ShaderCache/3/395ac31b811c88f183ffecac01870fd8.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/395ac31b811c88f183ffecac01870fd8.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3981e3c1dd9237a8dd7139d96d15cc69.bin b/HoloBot/Library/ShaderCache/3/3981e3c1dd9237a8dd7139d96d15cc69.bin new file mode 100644 index 0000000..fddbe3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3981e3c1dd9237a8dd7139d96d15cc69.bin differ diff --git a/HoloBot/Library/ShaderCache/3/398591f9a9030d7f23356db7da8092f3.bin b/HoloBot/Library/ShaderCache/3/398591f9a9030d7f23356db7da8092f3.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/398591f9a9030d7f23356db7da8092f3.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39b94c72cf2035147be7f3e9db049a88.bin b/HoloBot/Library/ShaderCache/3/39b94c72cf2035147be7f3e9db049a88.bin new file mode 100644 index 0000000..2954408 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39b94c72cf2035147be7f3e9db049a88.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39cb1d333861a1871cb857cae3ebfdaa.bin b/HoloBot/Library/ShaderCache/3/39cb1d333861a1871cb857cae3ebfdaa.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39cb1d333861a1871cb857cae3ebfdaa.bin differ diff --git a/HoloBot/Library/ShaderCache/3/39eba2fbe019bcfd5a26994e66a0a7ab.bin b/HoloBot/Library/ShaderCache/3/39eba2fbe019bcfd5a26994e66a0a7ab.bin new file mode 100644 index 0000000..339116e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/39eba2fbe019bcfd5a26994e66a0a7ab.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a10d41f3d7c4942f950a81bebf5fbc6.bin b/HoloBot/Library/ShaderCache/3/3a10d41f3d7c4942f950a81bebf5fbc6.bin new file mode 100644 index 0000000..c36168b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a10d41f3d7c4942f950a81bebf5fbc6.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a2039fdc0483d1297d951cdbef390eb.bin b/HoloBot/Library/ShaderCache/3/3a2039fdc0483d1297d951cdbef390eb.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a2039fdc0483d1297d951cdbef390eb.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a3feec74267722f86b2e4864462edfa.bin b/HoloBot/Library/ShaderCache/3/3a3feec74267722f86b2e4864462edfa.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a3feec74267722f86b2e4864462edfa.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a7dd7262601822e885dcc52c936c9c2.bin b/HoloBot/Library/ShaderCache/3/3a7dd7262601822e885dcc52c936c9c2.bin new file mode 100644 index 0000000..af5683e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a7dd7262601822e885dcc52c936c9c2.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a7fa3e5d8f8603763570329fcf026bc.bin b/HoloBot/Library/ShaderCache/3/3a7fa3e5d8f8603763570329fcf026bc.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a7fa3e5d8f8603763570329fcf026bc.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3a89dfa93955550d75fb79a4e59a77d4.bin b/HoloBot/Library/ShaderCache/3/3a89dfa93955550d75fb79a4e59a77d4.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3a89dfa93955550d75fb79a4e59a77d4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3aec95acf0c372e07c754fda1d2ec5fe.bin b/HoloBot/Library/ShaderCache/3/3aec95acf0c372e07c754fda1d2ec5fe.bin new file mode 100644 index 0000000..1ca4883 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3aec95acf0c372e07c754fda1d2ec5fe.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b0c0628082820af9c07e514eda0a9d1.bin b/HoloBot/Library/ShaderCache/3/3b0c0628082820af9c07e514eda0a9d1.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b0c0628082820af9c07e514eda0a9d1.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b139bde511153fdeb792243f59cfd2e.bin b/HoloBot/Library/ShaderCache/3/3b139bde511153fdeb792243f59cfd2e.bin new file mode 100644 index 0000000..4e6718b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b139bde511153fdeb792243f59cfd2e.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b208ceef0ef3d5c2e51ce4f2f3dd471.bin b/HoloBot/Library/ShaderCache/3/3b208ceef0ef3d5c2e51ce4f2f3dd471.bin new file mode 100644 index 0000000..dfdbd56 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b208ceef0ef3d5c2e51ce4f2f3dd471.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b302cbb08862b1513b00cb2769eebe9.bin b/HoloBot/Library/ShaderCache/3/3b302cbb08862b1513b00cb2769eebe9.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b302cbb08862b1513b00cb2769eebe9.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b3638f86842d90675701d8523268e7c.bin b/HoloBot/Library/ShaderCache/3/3b3638f86842d90675701d8523268e7c.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b3638f86842d90675701d8523268e7c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b671dc0bcdd6ec4d5aaf9eccc4a64a3.bin b/HoloBot/Library/ShaderCache/3/3b671dc0bcdd6ec4d5aaf9eccc4a64a3.bin new file mode 100644 index 0000000..7b4be4b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b671dc0bcdd6ec4d5aaf9eccc4a64a3.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b70a9781e41f7d61aeda089e19a5d74.bin b/HoloBot/Library/ShaderCache/3/3b70a9781e41f7d61aeda089e19a5d74.bin new file mode 100644 index 0000000..86a049a Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b70a9781e41f7d61aeda089e19a5d74.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b768be205939df6c57ef15d5106f82f.bin b/HoloBot/Library/ShaderCache/3/3b768be205939df6c57ef15d5106f82f.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b768be205939df6c57ef15d5106f82f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b82d7136dcfa130d1ad6e0985832b04.bin b/HoloBot/Library/ShaderCache/3/3b82d7136dcfa130d1ad6e0985832b04.bin new file mode 100644 index 0000000..1183b77 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b82d7136dcfa130d1ad6e0985832b04.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3b90a47426ee0aef78f052b74ffcac0c.bin b/HoloBot/Library/ShaderCache/3/3b90a47426ee0aef78f052b74ffcac0c.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3b90a47426ee0aef78f052b74ffcac0c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3bb844968330b5ce57e6303d91c882ad.bin b/HoloBot/Library/ShaderCache/3/3bb844968330b5ce57e6303d91c882ad.bin new file mode 100644 index 0000000..2641235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3bb844968330b5ce57e6303d91c882ad.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3be66f946c6b85ece5af321f39589440.bin b/HoloBot/Library/ShaderCache/3/3be66f946c6b85ece5af321f39589440.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3be66f946c6b85ece5af321f39589440.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3beeeab29bf60a57e7edd07d831350c9.bin b/HoloBot/Library/ShaderCache/3/3beeeab29bf60a57e7edd07d831350c9.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3beeeab29bf60a57e7edd07d831350c9.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3c28296914254752b2c2689217afadf1.bin b/HoloBot/Library/ShaderCache/3/3c28296914254752b2c2689217afadf1.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3c28296914254752b2c2689217afadf1.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3c60cf1c04f61cb460145178808daca0.bin b/HoloBot/Library/ShaderCache/3/3c60cf1c04f61cb460145178808daca0.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3c60cf1c04f61cb460145178808daca0.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3c9230c96b627d4db30ba826f9e64be9.bin b/HoloBot/Library/ShaderCache/3/3c9230c96b627d4db30ba826f9e64be9.bin new file mode 100644 index 0000000..7ca588b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3c9230c96b627d4db30ba826f9e64be9.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3cd7a4ab18198e52418ac57de604546f.bin b/HoloBot/Library/ShaderCache/3/3cd7a4ab18198e52418ac57de604546f.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3cd7a4ab18198e52418ac57de604546f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3cdf6530779b68f4fff2f435b265fefe.bin b/HoloBot/Library/ShaderCache/3/3cdf6530779b68f4fff2f435b265fefe.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3cdf6530779b68f4fff2f435b265fefe.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d1f2c80e1b2d6127b0e1a965902fab3.bin b/HoloBot/Library/ShaderCache/3/3d1f2c80e1b2d6127b0e1a965902fab3.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d1f2c80e1b2d6127b0e1a965902fab3.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d3e9f454919d1e16fceba65c6760ba6.bin b/HoloBot/Library/ShaderCache/3/3d3e9f454919d1e16fceba65c6760ba6.bin new file mode 100644 index 0000000..eaa77ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d3e9f454919d1e16fceba65c6760ba6.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d4cbf98184923fb5e02c2508977fcab.bin b/HoloBot/Library/ShaderCache/3/3d4cbf98184923fb5e02c2508977fcab.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d4cbf98184923fb5e02c2508977fcab.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d72548126ca7c58abcced50ae7f888f.bin b/HoloBot/Library/ShaderCache/3/3d72548126ca7c58abcced50ae7f888f.bin new file mode 100644 index 0000000..eb33410 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d72548126ca7c58abcced50ae7f888f.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d87ecf53d7c05aaa5a27e3ecd608619.bin b/HoloBot/Library/ShaderCache/3/3d87ecf53d7c05aaa5a27e3ecd608619.bin new file mode 100644 index 0000000..94f16e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d87ecf53d7c05aaa5a27e3ecd608619.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d88a8e335d24e2602eab410d9f9f5c5.bin b/HoloBot/Library/ShaderCache/3/3d88a8e335d24e2602eab410d9f9f5c5.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d88a8e335d24e2602eab410d9f9f5c5.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3d96f99bdc7330795fcc0f2c114981eb.bin b/HoloBot/Library/ShaderCache/3/3d96f99bdc7330795fcc0f2c114981eb.bin new file mode 100644 index 0000000..86ede5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3d96f99bdc7330795fcc0f2c114981eb.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3de0917e354f2d2af6445ebde070f10c.bin b/HoloBot/Library/ShaderCache/3/3de0917e354f2d2af6445ebde070f10c.bin new file mode 100644 index 0000000..9eb382e Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3de0917e354f2d2af6445ebde070f10c.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3de883d47aa185f24c5deb970d7e3caa.bin b/HoloBot/Library/ShaderCache/3/3de883d47aa185f24c5deb970d7e3caa.bin new file mode 100644 index 0000000..89a1c21 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3de883d47aa185f24c5deb970d7e3caa.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3df50718b4a15c7a806099614beeff7b.bin b/HoloBot/Library/ShaderCache/3/3df50718b4a15c7a806099614beeff7b.bin new file mode 100644 index 0000000..e0de2a8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3df50718b4a15c7a806099614beeff7b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3e081eb0be367ff1985f3e27e8703e8b.bin b/HoloBot/Library/ShaderCache/3/3e081eb0be367ff1985f3e27e8703e8b.bin new file mode 100644 index 0000000..e5bd8ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3e081eb0be367ff1985f3e27e8703e8b.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3e3aa9bbb415226f9decf0c716b61623.bin b/HoloBot/Library/ShaderCache/3/3e3aa9bbb415226f9decf0c716b61623.bin new file mode 100644 index 0000000..7874adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3e3aa9bbb415226f9decf0c716b61623.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3e6a3cd52c57413032e444d041de75d4.bin b/HoloBot/Library/ShaderCache/3/3e6a3cd52c57413032e444d041de75d4.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3e6a3cd52c57413032e444d041de75d4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3e7e242716db1ce1332b25412a287775.bin b/HoloBot/Library/ShaderCache/3/3e7e242716db1ce1332b25412a287775.bin new file mode 100644 index 0000000..2295df9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3e7e242716db1ce1332b25412a287775.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3ec3a4484b0271391f61dadb340baae9.bin b/HoloBot/Library/ShaderCache/3/3ec3a4484b0271391f61dadb340baae9.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3ec3a4484b0271391f61dadb340baae9.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3ed76a4297de92f3cee523a929b98e90.bin b/HoloBot/Library/ShaderCache/3/3ed76a4297de92f3cee523a929b98e90.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3ed76a4297de92f3cee523a929b98e90.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3f0f83c09365e464ec1d4d49db306936.bin b/HoloBot/Library/ShaderCache/3/3f0f83c09365e464ec1d4d49db306936.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3f0f83c09365e464ec1d4d49db306936.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3f234c31c1cb092c7d6256cc93f60a5a.bin b/HoloBot/Library/ShaderCache/3/3f234c31c1cb092c7d6256cc93f60a5a.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3f234c31c1cb092c7d6256cc93f60a5a.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3fa17ca238e58ab30d73d25d9ad1ae59.bin b/HoloBot/Library/ShaderCache/3/3fa17ca238e58ab30d73d25d9ad1ae59.bin new file mode 100644 index 0000000..334f4cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3fa17ca238e58ab30d73d25d9ad1ae59.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3fb4b68111edef7d5e18fd02af7ce63d.bin b/HoloBot/Library/ShaderCache/3/3fb4b68111edef7d5e18fd02af7ce63d.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3fb4b68111edef7d5e18fd02af7ce63d.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3fcb1a2fddf712444c5f715c5df41306.bin b/HoloBot/Library/ShaderCache/3/3fcb1a2fddf712444c5f715c5df41306.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3fcb1a2fddf712444c5f715c5df41306.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3fe125ae9d0ed98a862b846986ee17d4.bin b/HoloBot/Library/ShaderCache/3/3fe125ae9d0ed98a862b846986ee17d4.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3fe125ae9d0ed98a862b846986ee17d4.bin differ diff --git a/HoloBot/Library/ShaderCache/3/3ffba0050f3f415bb684e09168670577.bin b/HoloBot/Library/ShaderCache/3/3ffba0050f3f415bb684e09168670577.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/3/3ffba0050f3f415bb684e09168670577.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4024a514405d50959bb07ec3d39c5220.bin b/HoloBot/Library/ShaderCache/4/4024a514405d50959bb07ec3d39c5220.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4024a514405d50959bb07ec3d39c5220.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4026357af5c2e9156182d52149f60d01.bin b/HoloBot/Library/ShaderCache/4/4026357af5c2e9156182d52149f60d01.bin new file mode 100644 index 0000000..97d13ee Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4026357af5c2e9156182d52149f60d01.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4061b3566dcd77169197f0eb8e58d723.bin b/HoloBot/Library/ShaderCache/4/4061b3566dcd77169197f0eb8e58d723.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4061b3566dcd77169197f0eb8e58d723.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4062faf2a4e3fd741b1ba553f805e375.bin b/HoloBot/Library/ShaderCache/4/4062faf2a4e3fd741b1ba553f805e375.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4062faf2a4e3fd741b1ba553f805e375.bin differ diff --git a/HoloBot/Library/ShaderCache/4/40929192641322f257f951f540493d2f.bin b/HoloBot/Library/ShaderCache/4/40929192641322f257f951f540493d2f.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/40929192641322f257f951f540493d2f.bin differ diff --git a/HoloBot/Library/ShaderCache/4/40b583b67b1b81c4c64e8ffe3afc1f35.bin b/HoloBot/Library/ShaderCache/4/40b583b67b1b81c4c64e8ffe3afc1f35.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/40b583b67b1b81c4c64e8ffe3afc1f35.bin differ diff --git a/HoloBot/Library/ShaderCache/4/40e3316ce8f5d477a0b455ebd9b79a74.bin b/HoloBot/Library/ShaderCache/4/40e3316ce8f5d477a0b455ebd9b79a74.bin new file mode 100644 index 0000000..d46d61a Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/40e3316ce8f5d477a0b455ebd9b79a74.bin differ diff --git a/HoloBot/Library/ShaderCache/4/414a0316819895aecf9eb83eb1711aa1.bin b/HoloBot/Library/ShaderCache/4/414a0316819895aecf9eb83eb1711aa1.bin new file mode 100644 index 0000000..b95e91a Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/414a0316819895aecf9eb83eb1711aa1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41504fa1d946f70742b7ce3cbc22b610.bin b/HoloBot/Library/ShaderCache/4/41504fa1d946f70742b7ce3cbc22b610.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41504fa1d946f70742b7ce3cbc22b610.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4169f09cfde82f8db2ecfb3b85877f80.bin b/HoloBot/Library/ShaderCache/4/4169f09cfde82f8db2ecfb3b85877f80.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4169f09cfde82f8db2ecfb3b85877f80.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4180086d0b1ad482e8d6b5bd8f3f0bd3.bin b/HoloBot/Library/ShaderCache/4/4180086d0b1ad482e8d6b5bd8f3f0bd3.bin new file mode 100644 index 0000000..58212e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4180086d0b1ad482e8d6b5bd8f3f0bd3.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41a341694e7a7a9f9d4f5d7169436d1d.bin b/HoloBot/Library/ShaderCache/4/41a341694e7a7a9f9d4f5d7169436d1d.bin new file mode 100644 index 0000000..12a0596 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41a341694e7a7a9f9d4f5d7169436d1d.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41a781204bcf1bdb68e41d0f9b523277.bin b/HoloBot/Library/ShaderCache/4/41a781204bcf1bdb68e41d0f9b523277.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41a781204bcf1bdb68e41d0f9b523277.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41a7cee814968795ffd3bc35b7bac734.bin b/HoloBot/Library/ShaderCache/4/41a7cee814968795ffd3bc35b7bac734.bin new file mode 100644 index 0000000..e414cdd Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41a7cee814968795ffd3bc35b7bac734.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41adbd173f55bc235827781213071b09.bin b/HoloBot/Library/ShaderCache/4/41adbd173f55bc235827781213071b09.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41adbd173f55bc235827781213071b09.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41d0cf695f1f0d7d468f287420445614.bin b/HoloBot/Library/ShaderCache/4/41d0cf695f1f0d7d468f287420445614.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41d0cf695f1f0d7d468f287420445614.bin differ diff --git a/HoloBot/Library/ShaderCache/4/41d1c9cd1223d28cc84a6727b0355e40.bin b/HoloBot/Library/ShaderCache/4/41d1c9cd1223d28cc84a6727b0355e40.bin new file mode 100644 index 0000000..cc261a6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/41d1c9cd1223d28cc84a6727b0355e40.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4208e657b200dc9a910919dcf3d48cc8.bin b/HoloBot/Library/ShaderCache/4/4208e657b200dc9a910919dcf3d48cc8.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4208e657b200dc9a910919dcf3d48cc8.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4228a3efbfdc9d44e671ff144e2f69f4.bin b/HoloBot/Library/ShaderCache/4/4228a3efbfdc9d44e671ff144e2f69f4.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4228a3efbfdc9d44e671ff144e2f69f4.bin differ diff --git a/HoloBot/Library/ShaderCache/4/42a3c2bc8d1ad6575fe24a639488336d.bin b/HoloBot/Library/ShaderCache/4/42a3c2bc8d1ad6575fe24a639488336d.bin new file mode 100644 index 0000000..f62f192 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/42a3c2bc8d1ad6575fe24a639488336d.bin differ diff --git a/HoloBot/Library/ShaderCache/4/42ae09c222aa56671a648e537e592cf0.bin b/HoloBot/Library/ShaderCache/4/42ae09c222aa56671a648e537e592cf0.bin new file mode 100644 index 0000000..1d6101e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/42ae09c222aa56671a648e537e592cf0.bin differ diff --git a/HoloBot/Library/ShaderCache/4/42d2ef6447f28f0ae5b98719c3516161.bin b/HoloBot/Library/ShaderCache/4/42d2ef6447f28f0ae5b98719c3516161.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/42d2ef6447f28f0ae5b98719c3516161.bin differ diff --git a/HoloBot/Library/ShaderCache/4/42e1722851366243c025af4d5a83bd55.bin b/HoloBot/Library/ShaderCache/4/42e1722851366243c025af4d5a83bd55.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/42e1722851366243c025af4d5a83bd55.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43077a3cc413da8e7a342b4be458d448.bin b/HoloBot/Library/ShaderCache/4/43077a3cc413da8e7a342b4be458d448.bin new file mode 100644 index 0000000..d7da91c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43077a3cc413da8e7a342b4be458d448.bin differ diff --git a/HoloBot/Library/ShaderCache/4/433841e3909dacdb56c7ba09a8e8e65a.bin b/HoloBot/Library/ShaderCache/4/433841e3909dacdb56c7ba09a8e8e65a.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/433841e3909dacdb56c7ba09a8e8e65a.bin differ diff --git a/HoloBot/Library/ShaderCache/4/435098849de765357500a0975bc81cd8.bin b/HoloBot/Library/ShaderCache/4/435098849de765357500a0975bc81cd8.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/435098849de765357500a0975bc81cd8.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43a5717229cdde46f35f1836a6245adc.bin b/HoloBot/Library/ShaderCache/4/43a5717229cdde46f35f1836a6245adc.bin new file mode 100644 index 0000000..36c6de6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43a5717229cdde46f35f1836a6245adc.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43ca07a508ca5eb86c0a708e4a7730bc.bin b/HoloBot/Library/ShaderCache/4/43ca07a508ca5eb86c0a708e4a7730bc.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43ca07a508ca5eb86c0a708e4a7730bc.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43cf2fc0b9185f765eadacd958c61a19.bin b/HoloBot/Library/ShaderCache/4/43cf2fc0b9185f765eadacd958c61a19.bin new file mode 100644 index 0000000..ed89dae Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43cf2fc0b9185f765eadacd958c61a19.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43d7159edc03954f299ecb6fa53cda30.bin b/HoloBot/Library/ShaderCache/4/43d7159edc03954f299ecb6fa53cda30.bin new file mode 100644 index 0000000..181f0af Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43d7159edc03954f299ecb6fa53cda30.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43e5c79f0a07ab2f4c6fcab133e8a4c1.bin b/HoloBot/Library/ShaderCache/4/43e5c79f0a07ab2f4c6fcab133e8a4c1.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43e5c79f0a07ab2f4c6fcab133e8a4c1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/43f3b27f8e44d202f28537d960f62a56.bin b/HoloBot/Library/ShaderCache/4/43f3b27f8e44d202f28537d960f62a56.bin new file mode 100644 index 0000000..df63d7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/43f3b27f8e44d202f28537d960f62a56.bin differ diff --git a/HoloBot/Library/ShaderCache/4/442a5849ac2c544d4ec65c78f862b43b.bin b/HoloBot/Library/ShaderCache/4/442a5849ac2c544d4ec65c78f862b43b.bin new file mode 100644 index 0000000..cad4012 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/442a5849ac2c544d4ec65c78f862b43b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/445a368b87f0b633fcf9af9b9d107bdc.bin b/HoloBot/Library/ShaderCache/4/445a368b87f0b633fcf9af9b9d107bdc.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/445a368b87f0b633fcf9af9b9d107bdc.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4498269ab2b8f3223983678f5908e75e.bin b/HoloBot/Library/ShaderCache/4/4498269ab2b8f3223983678f5908e75e.bin new file mode 100644 index 0000000..732eefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4498269ab2b8f3223983678f5908e75e.bin differ diff --git a/HoloBot/Library/ShaderCache/4/449c95ba31c3f615f35e9e245f955c5c.bin b/HoloBot/Library/ShaderCache/4/449c95ba31c3f615f35e9e245f955c5c.bin new file mode 100644 index 0000000..cac5f63 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/449c95ba31c3f615f35e9e245f955c5c.bin differ diff --git a/HoloBot/Library/ShaderCache/4/44e6d9176b4c47dce337b40fdffe45a2.bin b/HoloBot/Library/ShaderCache/4/44e6d9176b4c47dce337b40fdffe45a2.bin new file mode 100644 index 0000000..c324f19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/44e6d9176b4c47dce337b40fdffe45a2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/44f230757f08e0035f0db842586dbd08.bin b/HoloBot/Library/ShaderCache/4/44f230757f08e0035f0db842586dbd08.bin new file mode 100644 index 0000000..1cdc337 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/44f230757f08e0035f0db842586dbd08.bin differ diff --git a/HoloBot/Library/ShaderCache/4/44f7ce4d8a7cc1f1961c55f1e0177d33.bin b/HoloBot/Library/ShaderCache/4/44f7ce4d8a7cc1f1961c55f1e0177d33.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/44f7ce4d8a7cc1f1961c55f1e0177d33.bin differ diff --git a/HoloBot/Library/ShaderCache/4/44f86b35d00ac2e9a3959a5c5fc0f7bc.bin b/HoloBot/Library/ShaderCache/4/44f86b35d00ac2e9a3959a5c5fc0f7bc.bin new file mode 100644 index 0000000..3bc8210 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/44f86b35d00ac2e9a3959a5c5fc0f7bc.bin differ diff --git a/HoloBot/Library/ShaderCache/4/44ff9b1ce18ddfe1b18c9798d18b6d3b.bin b/HoloBot/Library/ShaderCache/4/44ff9b1ce18ddfe1b18c9798d18b6d3b.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/44ff9b1ce18ddfe1b18c9798d18b6d3b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/450cf09c22409e7179c68396568bde66.bin b/HoloBot/Library/ShaderCache/4/450cf09c22409e7179c68396568bde66.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/450cf09c22409e7179c68396568bde66.bin differ diff --git a/HoloBot/Library/ShaderCache/4/453172d904324f83ec371e6ec100e0d3.bin b/HoloBot/Library/ShaderCache/4/453172d904324f83ec371e6ec100e0d3.bin new file mode 100644 index 0000000..e2d08ef Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/453172d904324f83ec371e6ec100e0d3.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45501c2be8b4cc2c409426486f59ea94.bin b/HoloBot/Library/ShaderCache/4/45501c2be8b4cc2c409426486f59ea94.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45501c2be8b4cc2c409426486f59ea94.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4564665e2b810874e8493c779bdd88d2.bin b/HoloBot/Library/ShaderCache/4/4564665e2b810874e8493c779bdd88d2.bin new file mode 100644 index 0000000..8d9b41f Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4564665e2b810874e8493c779bdd88d2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4574ed591ce41bef3e50641b3c91e702.bin b/HoloBot/Library/ShaderCache/4/4574ed591ce41bef3e50641b3c91e702.bin new file mode 100644 index 0000000..f53a830 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4574ed591ce41bef3e50641b3c91e702.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45a74261d43de346e237702c37b7ca96.bin b/HoloBot/Library/ShaderCache/4/45a74261d43de346e237702c37b7ca96.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45a74261d43de346e237702c37b7ca96.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45b85f043b44d4a903877aa1b458f6e2.bin b/HoloBot/Library/ShaderCache/4/45b85f043b44d4a903877aa1b458f6e2.bin new file mode 100644 index 0000000..00d0c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45b85f043b44d4a903877aa1b458f6e2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45e12e72d6d60a19a2b8fe8e28e1ebd4.bin b/HoloBot/Library/ShaderCache/4/45e12e72d6d60a19a2b8fe8e28e1ebd4.bin new file mode 100644 index 0000000..559e664 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45e12e72d6d60a19a2b8fe8e28e1ebd4.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45f5f9c963520f1ffb9762a51010b07f.bin b/HoloBot/Library/ShaderCache/4/45f5f9c963520f1ffb9762a51010b07f.bin new file mode 100644 index 0000000..de8c9ab Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45f5f9c963520f1ffb9762a51010b07f.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45f8f5947a7eb3d85c7470b977722769.bin b/HoloBot/Library/ShaderCache/4/45f8f5947a7eb3d85c7470b977722769.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45f8f5947a7eb3d85c7470b977722769.bin differ diff --git a/HoloBot/Library/ShaderCache/4/45f92de3c4b7f48871e8d41f4e0ecccf.bin b/HoloBot/Library/ShaderCache/4/45f92de3c4b7f48871e8d41f4e0ecccf.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/45f92de3c4b7f48871e8d41f4e0ecccf.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4651bedaaa46e20aa27b5262669e31ce.bin b/HoloBot/Library/ShaderCache/4/4651bedaaa46e20aa27b5262669e31ce.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4651bedaaa46e20aa27b5262669e31ce.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4695931980d9791443d60139a549a4a1.bin b/HoloBot/Library/ShaderCache/4/4695931980d9791443d60139a549a4a1.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4695931980d9791443d60139a549a4a1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/469c3838819bc525aa17456af140ebe9.bin b/HoloBot/Library/ShaderCache/4/469c3838819bc525aa17456af140ebe9.bin new file mode 100644 index 0000000..a3d9540 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/469c3838819bc525aa17456af140ebe9.bin differ diff --git a/HoloBot/Library/ShaderCache/4/46a895b9e3b7717f2b9d637acfdb95a6.bin b/HoloBot/Library/ShaderCache/4/46a895b9e3b7717f2b9d637acfdb95a6.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/46a895b9e3b7717f2b9d637acfdb95a6.bin differ diff --git a/HoloBot/Library/ShaderCache/4/46ba0b8d7d289b3c0cb11c0cd72eb51e.bin b/HoloBot/Library/ShaderCache/4/46ba0b8d7d289b3c0cb11c0cd72eb51e.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/46ba0b8d7d289b3c0cb11c0cd72eb51e.bin differ diff --git a/HoloBot/Library/ShaderCache/4/46c75467abf2539de0bb78d74e86060f.bin b/HoloBot/Library/ShaderCache/4/46c75467abf2539de0bb78d74e86060f.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/46c75467abf2539de0bb78d74e86060f.bin differ diff --git a/HoloBot/Library/ShaderCache/4/46e739d5b46079fe4ea0be969278cda6.bin b/HoloBot/Library/ShaderCache/4/46e739d5b46079fe4ea0be969278cda6.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/46e739d5b46079fe4ea0be969278cda6.bin differ diff --git a/HoloBot/Library/ShaderCache/4/46ef1856dfe4059f190a9c97d999eecb.bin b/HoloBot/Library/ShaderCache/4/46ef1856dfe4059f190a9c97d999eecb.bin new file mode 100644 index 0000000..0d30117 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/46ef1856dfe4059f190a9c97d999eecb.bin differ diff --git a/HoloBot/Library/ShaderCache/4/471429a0f16de11d55038461fcd76b6e.bin b/HoloBot/Library/ShaderCache/4/471429a0f16de11d55038461fcd76b6e.bin new file mode 100644 index 0000000..03fd995 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/471429a0f16de11d55038461fcd76b6e.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4725fba5077f6a3e2dc8553c2bb35e04.bin b/HoloBot/Library/ShaderCache/4/4725fba5077f6a3e2dc8553c2bb35e04.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4725fba5077f6a3e2dc8553c2bb35e04.bin differ diff --git a/HoloBot/Library/ShaderCache/4/477c7ce9073b67b4ef8d582e39ea2b30.bin b/HoloBot/Library/ShaderCache/4/477c7ce9073b67b4ef8d582e39ea2b30.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/477c7ce9073b67b4ef8d582e39ea2b30.bin differ diff --git a/HoloBot/Library/ShaderCache/4/478ac4e1ba246ad63b9c621439f63842.bin b/HoloBot/Library/ShaderCache/4/478ac4e1ba246ad63b9c621439f63842.bin new file mode 100644 index 0000000..690ea38 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/478ac4e1ba246ad63b9c621439f63842.bin differ diff --git a/HoloBot/Library/ShaderCache/4/47cdc27d4e44eae32dd1c9524e1aeb84.bin b/HoloBot/Library/ShaderCache/4/47cdc27d4e44eae32dd1c9524e1aeb84.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/47cdc27d4e44eae32dd1c9524e1aeb84.bin differ diff --git a/HoloBot/Library/ShaderCache/4/47d6632cbe8b7f1bc9921c22708782d7.bin b/HoloBot/Library/ShaderCache/4/47d6632cbe8b7f1bc9921c22708782d7.bin new file mode 100644 index 0000000..0d4b39d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/47d6632cbe8b7f1bc9921c22708782d7.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4817faead8f1b0b88e3c55405c2a2529.bin b/HoloBot/Library/ShaderCache/4/4817faead8f1b0b88e3c55405c2a2529.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4817faead8f1b0b88e3c55405c2a2529.bin differ diff --git a/HoloBot/Library/ShaderCache/4/482194c448741f9050453dbe848f95f3.bin b/HoloBot/Library/ShaderCache/4/482194c448741f9050453dbe848f95f3.bin new file mode 100644 index 0000000..a909f14 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/482194c448741f9050453dbe848f95f3.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4823354ce4625731b7c4c2b56dc9a327.bin b/HoloBot/Library/ShaderCache/4/4823354ce4625731b7c4c2b56dc9a327.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4823354ce4625731b7c4c2b56dc9a327.bin differ diff --git a/HoloBot/Library/ShaderCache/4/482514ec2cf5586409bb283964727f7d.bin b/HoloBot/Library/ShaderCache/4/482514ec2cf5586409bb283964727f7d.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/482514ec2cf5586409bb283964727f7d.bin differ diff --git a/HoloBot/Library/ShaderCache/4/48798282614ef2701f5f470534f342a9.bin b/HoloBot/Library/ShaderCache/4/48798282614ef2701f5f470534f342a9.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/48798282614ef2701f5f470534f342a9.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4880126da6c54a4f5c5621a613cd19f2.bin b/HoloBot/Library/ShaderCache/4/4880126da6c54a4f5c5621a613cd19f2.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4880126da6c54a4f5c5621a613cd19f2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/48f1ae437c5ba5ad2044f2e74bd7ae97.bin b/HoloBot/Library/ShaderCache/4/48f1ae437c5ba5ad2044f2e74bd7ae97.bin new file mode 100644 index 0000000..189bbdf Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/48f1ae437c5ba5ad2044f2e74bd7ae97.bin differ diff --git a/HoloBot/Library/ShaderCache/4/490d5f45ad29ad590c09df138aec74ec.bin b/HoloBot/Library/ShaderCache/4/490d5f45ad29ad590c09df138aec74ec.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/490d5f45ad29ad590c09df138aec74ec.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4913fe54dfbabb417edae5b0eb04f6dd.bin b/HoloBot/Library/ShaderCache/4/4913fe54dfbabb417edae5b0eb04f6dd.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4913fe54dfbabb417edae5b0eb04f6dd.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4955a564443cbd53f88513cddcf132ee.bin b/HoloBot/Library/ShaderCache/4/4955a564443cbd53f88513cddcf132ee.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4955a564443cbd53f88513cddcf132ee.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4963187eb159f193f92efad1d4a19180.bin b/HoloBot/Library/ShaderCache/4/4963187eb159f193f92efad1d4a19180.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4963187eb159f193f92efad1d4a19180.bin differ diff --git a/HoloBot/Library/ShaderCache/4/49f6299aeb1272f566fb64abae9237c5.bin b/HoloBot/Library/ShaderCache/4/49f6299aeb1272f566fb64abae9237c5.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/49f6299aeb1272f566fb64abae9237c5.bin differ diff --git a/HoloBot/Library/ShaderCache/4/49f91420b03951ca597fde035bf33fea.bin b/HoloBot/Library/ShaderCache/4/49f91420b03951ca597fde035bf33fea.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/49f91420b03951ca597fde035bf33fea.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4a1075236a344f157d94a8a6c9533316.bin b/HoloBot/Library/ShaderCache/4/4a1075236a344f157d94a8a6c9533316.bin new file mode 100644 index 0000000..b52a35b Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4a1075236a344f157d94a8a6c9533316.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4a1a73adb717f328eef4a41649c88061.bin b/HoloBot/Library/ShaderCache/4/4a1a73adb717f328eef4a41649c88061.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4a1a73adb717f328eef4a41649c88061.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4a8d2f8b8e91d9043c8390eff0b40feb.bin b/HoloBot/Library/ShaderCache/4/4a8d2f8b8e91d9043c8390eff0b40feb.bin new file mode 100644 index 0000000..54add9a Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4a8d2f8b8e91d9043c8390eff0b40feb.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4abedbf52479d87e29803be58d386db2.bin b/HoloBot/Library/ShaderCache/4/4abedbf52479d87e29803be58d386db2.bin new file mode 100644 index 0000000..eb33410 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4abedbf52479d87e29803be58d386db2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ac1b197f6abd8c5c0094a8cfedef132.bin b/HoloBot/Library/ShaderCache/4/4ac1b197f6abd8c5c0094a8cfedef132.bin new file mode 100644 index 0000000..991df8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ac1b197f6abd8c5c0094a8cfedef132.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4acd8d7c6fbaa019539f70d9d1d682e3.bin b/HoloBot/Library/ShaderCache/4/4acd8d7c6fbaa019539f70d9d1d682e3.bin new file mode 100644 index 0000000..c4c447b Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4acd8d7c6fbaa019539f70d9d1d682e3.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ad6b89d44a370232b430fd6c07157a0.bin b/HoloBot/Library/ShaderCache/4/4ad6b89d44a370232b430fd6c07157a0.bin new file mode 100644 index 0000000..800aa8e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ad6b89d44a370232b430fd6c07157a0.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ae0f155c259897892c719a0aa0ec090.bin b/HoloBot/Library/ShaderCache/4/4ae0f155c259897892c719a0aa0ec090.bin new file mode 100644 index 0000000..4377945 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ae0f155c259897892c719a0aa0ec090.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ae2134fd8b149183565cac9e7ed00c6.bin b/HoloBot/Library/ShaderCache/4/4ae2134fd8b149183565cac9e7ed00c6.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ae2134fd8b149183565cac9e7ed00c6.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4aec82f48290d01076e2746955143e26.bin b/HoloBot/Library/ShaderCache/4/4aec82f48290d01076e2746955143e26.bin new file mode 100644 index 0000000..cdd44bc Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4aec82f48290d01076e2746955143e26.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4af9c367909d4a64da953e17ae310991.bin b/HoloBot/Library/ShaderCache/4/4af9c367909d4a64da953e17ae310991.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4af9c367909d4a64da953e17ae310991.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b2c03086d7fad08b03151c1a7e21178.bin b/HoloBot/Library/ShaderCache/4/4b2c03086d7fad08b03151c1a7e21178.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b2c03086d7fad08b03151c1a7e21178.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b3b87269ea92ab7b76170c86339628c.bin b/HoloBot/Library/ShaderCache/4/4b3b87269ea92ab7b76170c86339628c.bin new file mode 100644 index 0000000..01060b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b3b87269ea92ab7b76170c86339628c.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b3ba7da0b1b3ef3d9fcf8b038a884ab.bin b/HoloBot/Library/ShaderCache/4/4b3ba7da0b1b3ef3d9fcf8b038a884ab.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b3ba7da0b1b3ef3d9fcf8b038a884ab.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b48b7e3099d47778c76ad08942a0f78.bin b/HoloBot/Library/ShaderCache/4/4b48b7e3099d47778c76ad08942a0f78.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b48b7e3099d47778c76ad08942a0f78.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b4f19d24fbd672bd4ef6c5287e6fd8e.bin b/HoloBot/Library/ShaderCache/4/4b4f19d24fbd672bd4ef6c5287e6fd8e.bin new file mode 100644 index 0000000..233aec7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b4f19d24fbd672bd4ef6c5287e6fd8e.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b6479d3b7233bb6b8e50330daa958e1.bin b/HoloBot/Library/ShaderCache/4/4b6479d3b7233bb6b8e50330daa958e1.bin new file mode 100644 index 0000000..3b71699 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b6479d3b7233bb6b8e50330daa958e1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b6727828f2e6b592dce604817d5615c.bin b/HoloBot/Library/ShaderCache/4/4b6727828f2e6b592dce604817d5615c.bin new file mode 100644 index 0000000..0bf8fc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b6727828f2e6b592dce604817d5615c.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b67a0edaa59e2c6629d3fdab22e1e09.bin b/HoloBot/Library/ShaderCache/4/4b67a0edaa59e2c6629d3fdab22e1e09.bin new file mode 100644 index 0000000..89a1c21 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b67a0edaa59e2c6629d3fdab22e1e09.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b90cd9667f183d93be392286dac795b.bin b/HoloBot/Library/ShaderCache/4/4b90cd9667f183d93be392286dac795b.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b90cd9667f183d93be392286dac795b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4b9ffb7e159bf20fb3cbc6bae0a1467d.bin b/HoloBot/Library/ShaderCache/4/4b9ffb7e159bf20fb3cbc6bae0a1467d.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4b9ffb7e159bf20fb3cbc6bae0a1467d.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4babd603477c0ef326d4ec66f9caa862.bin b/HoloBot/Library/ShaderCache/4/4babd603477c0ef326d4ec66f9caa862.bin new file mode 100644 index 0000000..072d630 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4babd603477c0ef326d4ec66f9caa862.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4bd7d040fb4f6f3436d942ebbdadb103.bin b/HoloBot/Library/ShaderCache/4/4bd7d040fb4f6f3436d942ebbdadb103.bin new file mode 100644 index 0000000..32022cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4bd7d040fb4f6f3436d942ebbdadb103.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4c849e92348c6aaaf5d90e5dee2b5e2b.bin b/HoloBot/Library/ShaderCache/4/4c849e92348c6aaaf5d90e5dee2b5e2b.bin new file mode 100644 index 0000000..e2b97a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4c849e92348c6aaaf5d90e5dee2b5e2b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4cc7263247819ab96be2a07aabcb764c.bin b/HoloBot/Library/ShaderCache/4/4cc7263247819ab96be2a07aabcb764c.bin new file mode 100644 index 0000000..b576065 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4cc7263247819ab96be2a07aabcb764c.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4cd46b713ca1ff953f36b84aec9a7ac9.bin b/HoloBot/Library/ShaderCache/4/4cd46b713ca1ff953f36b84aec9a7ac9.bin new file mode 100644 index 0000000..d832abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4cd46b713ca1ff953f36b84aec9a7ac9.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d24ad72761adbdb32d759e50653b52e.bin b/HoloBot/Library/ShaderCache/4/4d24ad72761adbdb32d759e50653b52e.bin new file mode 100644 index 0000000..991df8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d24ad72761adbdb32d759e50653b52e.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d3231f340d309f034cc0edf0966603c.bin b/HoloBot/Library/ShaderCache/4/4d3231f340d309f034cc0edf0966603c.bin new file mode 100644 index 0000000..2fc30c3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d3231f340d309f034cc0edf0966603c.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d430c212a4873417776638bb1a6838b.bin b/HoloBot/Library/ShaderCache/4/4d430c212a4873417776638bb1a6838b.bin new file mode 100644 index 0000000..bd05db5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d430c212a4873417776638bb1a6838b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d67d658cca694427d08eef429fa328b.bin b/HoloBot/Library/ShaderCache/4/4d67d658cca694427d08eef429fa328b.bin new file mode 100644 index 0000000..3d13378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d67d658cca694427d08eef429fa328b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d6f4a78066c466e4ebf49b7c77d0473.bin b/HoloBot/Library/ShaderCache/4/4d6f4a78066c466e4ebf49b7c77d0473.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d6f4a78066c466e4ebf49b7c77d0473.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d978fa646d6ffadda36250b21547a84.bin b/HoloBot/Library/ShaderCache/4/4d978fa646d6ffadda36250b21547a84.bin new file mode 100644 index 0000000..5799e13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d978fa646d6ffadda36250b21547a84.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4d9efe58b81e05a6ef6c3ff3720fa9a2.bin b/HoloBot/Library/ShaderCache/4/4d9efe58b81e05a6ef6c3ff3720fa9a2.bin new file mode 100644 index 0000000..2651962 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4d9efe58b81e05a6ef6c3ff3720fa9a2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4da5d8468f954f94baa13ad9b279512f.bin b/HoloBot/Library/ShaderCache/4/4da5d8468f954f94baa13ad9b279512f.bin new file mode 100644 index 0000000..c324f19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4da5d8468f954f94baa13ad9b279512f.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4dae1f87d550a8d12dc31afe9169fde6.bin b/HoloBot/Library/ShaderCache/4/4dae1f87d550a8d12dc31afe9169fde6.bin new file mode 100644 index 0000000..2451063 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4dae1f87d550a8d12dc31afe9169fde6.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4deea86fe212d60f2fc41a1a26827f87.bin b/HoloBot/Library/ShaderCache/4/4deea86fe212d60f2fc41a1a26827f87.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4deea86fe212d60f2fc41a1a26827f87.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4df5e2446dad8f03e17917019c2cba06.bin b/HoloBot/Library/ShaderCache/4/4df5e2446dad8f03e17917019c2cba06.bin new file mode 100644 index 0000000..a185740 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4df5e2446dad8f03e17917019c2cba06.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e150d038081c747f42cf49e309e1646.bin b/HoloBot/Library/ShaderCache/4/4e150d038081c747f42cf49e309e1646.bin new file mode 100644 index 0000000..878f327 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e150d038081c747f42cf49e309e1646.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e21f5d09404782cd991b3fc4498b487.bin b/HoloBot/Library/ShaderCache/4/4e21f5d09404782cd991b3fc4498b487.bin new file mode 100644 index 0000000..2c63f64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e21f5d09404782cd991b3fc4498b487.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e2344ddae2d6e67d3b480acb2653a8a.bin b/HoloBot/Library/ShaderCache/4/4e2344ddae2d6e67d3b480acb2653a8a.bin new file mode 100644 index 0000000..bde6cbe Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e2344ddae2d6e67d3b480acb2653a8a.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e626a9e10b95ab5c184bd1a55d05974.bin b/HoloBot/Library/ShaderCache/4/4e626a9e10b95ab5c184bd1a55d05974.bin new file mode 100644 index 0000000..c4c447b Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e626a9e10b95ab5c184bd1a55d05974.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e7b24c752ff2b80d4e74bac74791a30.bin b/HoloBot/Library/ShaderCache/4/4e7b24c752ff2b80d4e74bac74791a30.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e7b24c752ff2b80d4e74bac74791a30.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e87aa11fcba3660f4cff0634e0e58a1.bin b/HoloBot/Library/ShaderCache/4/4e87aa11fcba3660f4cff0634e0e58a1.bin new file mode 100644 index 0000000..a00d39a Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e87aa11fcba3660f4cff0634e0e58a1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4e9f62cb466614dacd30b06dc6aabc04.bin b/HoloBot/Library/ShaderCache/4/4e9f62cb466614dacd30b06dc6aabc04.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4e9f62cb466614dacd30b06dc6aabc04.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4eaed2fcf3281cb43fea4b7701b4ba63.bin b/HoloBot/Library/ShaderCache/4/4eaed2fcf3281cb43fea4b7701b4ba63.bin new file mode 100644 index 0000000..9f7abf4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4eaed2fcf3281cb43fea4b7701b4ba63.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ed52e9534b103128fd0c2d3360b59d2.bin b/HoloBot/Library/ShaderCache/4/4ed52e9534b103128fd0c2d3360b59d2.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ed52e9534b103128fd0c2d3360b59d2.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4eec97d839d18b633c6a975761a90fa5.bin b/HoloBot/Library/ShaderCache/4/4eec97d839d18b633c6a975761a90fa5.bin new file mode 100644 index 0000000..44b7123 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4eec97d839d18b633c6a975761a90fa5.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4eef2c8c105ce89cc20070664e356190.bin b/HoloBot/Library/ShaderCache/4/4eef2c8c105ce89cc20070664e356190.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4eef2c8c105ce89cc20070664e356190.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4eff0e00de060fe1762e0101ca7e222b.bin b/HoloBot/Library/ShaderCache/4/4eff0e00de060fe1762e0101ca7e222b.bin new file mode 100644 index 0000000..3f2af34 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4eff0e00de060fe1762e0101ca7e222b.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4f339264adb6e2af199d7c628d1d69b1.bin b/HoloBot/Library/ShaderCache/4/4f339264adb6e2af199d7c628d1d69b1.bin new file mode 100644 index 0000000..b52a35b Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4f339264adb6e2af199d7c628d1d69b1.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4f3ae9fdfdd63c62ea13182a4a590094.bin b/HoloBot/Library/ShaderCache/4/4f3ae9fdfdd63c62ea13182a4a590094.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4f3ae9fdfdd63c62ea13182a4a590094.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4f59f0554a6eaa825554260f8f66e558.bin b/HoloBot/Library/ShaderCache/4/4f59f0554a6eaa825554260f8f66e558.bin new file mode 100644 index 0000000..d8489eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4f59f0554a6eaa825554260f8f66e558.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4f721da9af0aac3821e262e25838cfdd.bin b/HoloBot/Library/ShaderCache/4/4f721da9af0aac3821e262e25838cfdd.bin new file mode 100644 index 0000000..f44b484 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4f721da9af0aac3821e262e25838cfdd.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4f85597623f449eb169f977ec7178320.bin b/HoloBot/Library/ShaderCache/4/4f85597623f449eb169f977ec7178320.bin new file mode 100644 index 0000000..ac5374f Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4f85597623f449eb169f977ec7178320.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4fad46a4178ffd75e34e7b62a5bda736.bin b/HoloBot/Library/ShaderCache/4/4fad46a4178ffd75e34e7b62a5bda736.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4fad46a4178ffd75e34e7b62a5bda736.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4fce70fcd0ed0da549e09d9909b078fe.bin b/HoloBot/Library/ShaderCache/4/4fce70fcd0ed0da549e09d9909b078fe.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4fce70fcd0ed0da549e09d9909b078fe.bin differ diff --git a/HoloBot/Library/ShaderCache/4/4ff0ac8512cd5a62dfe3e7afbeda7681.bin b/HoloBot/Library/ShaderCache/4/4ff0ac8512cd5a62dfe3e7afbeda7681.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/4/4ff0ac8512cd5a62dfe3e7afbeda7681.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5041a615206a4d880df125d85405d3e8.bin b/HoloBot/Library/ShaderCache/5/5041a615206a4d880df125d85405d3e8.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5041a615206a4d880df125d85405d3e8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/50507321b4d12dfe227cf3e5aefd2300.bin b/HoloBot/Library/ShaderCache/5/50507321b4d12dfe227cf3e5aefd2300.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/50507321b4d12dfe227cf3e5aefd2300.bin differ diff --git a/HoloBot/Library/ShaderCache/5/50558a3f97aa45d1618f87558bfe715a.bin b/HoloBot/Library/ShaderCache/5/50558a3f97aa45d1618f87558bfe715a.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/50558a3f97aa45d1618f87558bfe715a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/508200bb801662bae7bafd35d533adf4.bin b/HoloBot/Library/ShaderCache/5/508200bb801662bae7bafd35d533adf4.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/508200bb801662bae7bafd35d533adf4.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5096fcc3061229ae952373288658b62f.bin b/HoloBot/Library/ShaderCache/5/5096fcc3061229ae952373288658b62f.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5096fcc3061229ae952373288658b62f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/50b1cbde9968a86a06c61c4a9daa901f.bin b/HoloBot/Library/ShaderCache/5/50b1cbde9968a86a06c61c4a9daa901f.bin new file mode 100644 index 0000000..0804ad9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/50b1cbde9968a86a06c61c4a9daa901f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/50b65eaa26a650d885e586ae8c993480.bin b/HoloBot/Library/ShaderCache/5/50b65eaa26a650d885e586ae8c993480.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/50b65eaa26a650d885e586ae8c993480.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5124efe82f4862e0b0ba1a5ebe0bb9ae.bin b/HoloBot/Library/ShaderCache/5/5124efe82f4862e0b0ba1a5ebe0bb9ae.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5124efe82f4862e0b0ba1a5ebe0bb9ae.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5130966668199a6d2f308086aad5136d.bin b/HoloBot/Library/ShaderCache/5/5130966668199a6d2f308086aad5136d.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5130966668199a6d2f308086aad5136d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51567ce7b9741900296d7d1e325e5851.bin b/HoloBot/Library/ShaderCache/5/51567ce7b9741900296d7d1e325e5851.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51567ce7b9741900296d7d1e325e5851.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51688ef105399ccf76c7323d16250d0f.bin b/HoloBot/Library/ShaderCache/5/51688ef105399ccf76c7323d16250d0f.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51688ef105399ccf76c7323d16250d0f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51821cd03f898c9a620d9a5b7f58f4b6.bin b/HoloBot/Library/ShaderCache/5/51821cd03f898c9a620d9a5b7f58f4b6.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51821cd03f898c9a620d9a5b7f58f4b6.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51906e0c606f5f518ca93a68424c76b5.bin b/HoloBot/Library/ShaderCache/5/51906e0c606f5f518ca93a68424c76b5.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51906e0c606f5f518ca93a68424c76b5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51a0225b349e3270e344348e6bce0d2d.bin b/HoloBot/Library/ShaderCache/5/51a0225b349e3270e344348e6bce0d2d.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51a0225b349e3270e344348e6bce0d2d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51a12b4763d39f63001497ec9da668c8.bin b/HoloBot/Library/ShaderCache/5/51a12b4763d39f63001497ec9da668c8.bin new file mode 100644 index 0000000..a978c3a Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51a12b4763d39f63001497ec9da668c8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51ac9f8ce416ed5c6344e2c6d099dc1a.bin b/HoloBot/Library/ShaderCache/5/51ac9f8ce416ed5c6344e2c6d099dc1a.bin new file mode 100644 index 0000000..b77195e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51ac9f8ce416ed5c6344e2c6d099dc1a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51c4e835c62cccf9500a6ae9533d0f15.bin b/HoloBot/Library/ShaderCache/5/51c4e835c62cccf9500a6ae9533d0f15.bin new file mode 100644 index 0000000..1e94ace Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51c4e835c62cccf9500a6ae9533d0f15.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51ec439d6535580365ad8e612751b512.bin b/HoloBot/Library/ShaderCache/5/51ec439d6535580365ad8e612751b512.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51ec439d6535580365ad8e612751b512.bin differ diff --git a/HoloBot/Library/ShaderCache/5/51f6c2f3244324af7f04ea8e51841579.bin b/HoloBot/Library/ShaderCache/5/51f6c2f3244324af7f04ea8e51841579.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/51f6c2f3244324af7f04ea8e51841579.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5207f5372b3c1befb3f8e2c76cf914cf.bin b/HoloBot/Library/ShaderCache/5/5207f5372b3c1befb3f8e2c76cf914cf.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5207f5372b3c1befb3f8e2c76cf914cf.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5223ebaee79eef00a3835be7ab4c8e90.bin b/HoloBot/Library/ShaderCache/5/5223ebaee79eef00a3835be7ab4c8e90.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5223ebaee79eef00a3835be7ab4c8e90.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52300cc98a0562a6197a97b9a633af13.bin b/HoloBot/Library/ShaderCache/5/52300cc98a0562a6197a97b9a633af13.bin new file mode 100644 index 0000000..27cb558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52300cc98a0562a6197a97b9a633af13.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52350688f236784a23fc2ee67c1c9339.bin b/HoloBot/Library/ShaderCache/5/52350688f236784a23fc2ee67c1c9339.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52350688f236784a23fc2ee67c1c9339.bin differ diff --git a/HoloBot/Library/ShaderCache/5/526f598881e8c32af1bf5a7f17499658.bin b/HoloBot/Library/ShaderCache/5/526f598881e8c32af1bf5a7f17499658.bin new file mode 100644 index 0000000..89451e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/526f598881e8c32af1bf5a7f17499658.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52753d902f09ba93f087c1f4a7ddfdb7.bin b/HoloBot/Library/ShaderCache/5/52753d902f09ba93f087c1f4a7ddfdb7.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52753d902f09ba93f087c1f4a7ddfdb7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5282935172593337c67dfcecacb5f4f7.bin b/HoloBot/Library/ShaderCache/5/5282935172593337c67dfcecacb5f4f7.bin new file mode 100644 index 0000000..b96ac1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5282935172593337c67dfcecacb5f4f7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52c22ff2bddc497a19c5a29069d54312.bin b/HoloBot/Library/ShaderCache/5/52c22ff2bddc497a19c5a29069d54312.bin new file mode 100644 index 0000000..dc18c43 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52c22ff2bddc497a19c5a29069d54312.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52daea611a43cff2ccae04a2e95be868.bin b/HoloBot/Library/ShaderCache/5/52daea611a43cff2ccae04a2e95be868.bin new file mode 100644 index 0000000..5f58b19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52daea611a43cff2ccae04a2e95be868.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52e170e3465495326097c5f6cbcdd703.bin b/HoloBot/Library/ShaderCache/5/52e170e3465495326097c5f6cbcdd703.bin new file mode 100644 index 0000000..12a0596 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52e170e3465495326097c5f6cbcdd703.bin differ diff --git a/HoloBot/Library/ShaderCache/5/52e6b342663072186d7fc068014da18d.bin b/HoloBot/Library/ShaderCache/5/52e6b342663072186d7fc068014da18d.bin new file mode 100644 index 0000000..42114b6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/52e6b342663072186d7fc068014da18d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/53264ddf1aba5b9c2ab7788e2b3caa52.bin b/HoloBot/Library/ShaderCache/5/53264ddf1aba5b9c2ab7788e2b3caa52.bin new file mode 100644 index 0000000..01ac4fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/53264ddf1aba5b9c2ab7788e2b3caa52.bin differ diff --git a/HoloBot/Library/ShaderCache/5/532997cf70b9c4b7b573d63a036682b5.bin b/HoloBot/Library/ShaderCache/5/532997cf70b9c4b7b573d63a036682b5.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/532997cf70b9c4b7b573d63a036682b5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5356e7c4f58ab84640c6b170ffe0293f.bin b/HoloBot/Library/ShaderCache/5/5356e7c4f58ab84640c6b170ffe0293f.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5356e7c4f58ab84640c6b170ffe0293f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/53ad538a0a173ab0b7343544bddb26fe.bin b/HoloBot/Library/ShaderCache/5/53ad538a0a173ab0b7343544bddb26fe.bin new file mode 100644 index 0000000..8d9b41f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/53ad538a0a173ab0b7343544bddb26fe.bin differ diff --git a/HoloBot/Library/ShaderCache/5/53d9d3fdaebc85ec2338c8fb67966732.bin b/HoloBot/Library/ShaderCache/5/53d9d3fdaebc85ec2338c8fb67966732.bin new file mode 100644 index 0000000..4ba00de Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/53d9d3fdaebc85ec2338c8fb67966732.bin differ diff --git a/HoloBot/Library/ShaderCache/5/53e1bb8abe7dc87068ca05b03860110d.bin b/HoloBot/Library/ShaderCache/5/53e1bb8abe7dc87068ca05b03860110d.bin new file mode 100644 index 0000000..3b842f7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/53e1bb8abe7dc87068ca05b03860110d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/53e7087f28824228f0c7ce6ea3826005.bin b/HoloBot/Library/ShaderCache/5/53e7087f28824228f0c7ce6ea3826005.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/53e7087f28824228f0c7ce6ea3826005.bin differ diff --git a/HoloBot/Library/ShaderCache/5/540436455fecf433e382ebd0b6c803cf.bin b/HoloBot/Library/ShaderCache/5/540436455fecf433e382ebd0b6c803cf.bin new file mode 100644 index 0000000..99931a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/540436455fecf433e382ebd0b6c803cf.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5405b76658c7cc1e5f2bd2af4e645a50.bin b/HoloBot/Library/ShaderCache/5/5405b76658c7cc1e5f2bd2af4e645a50.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5405b76658c7cc1e5f2bd2af4e645a50.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5407c644de841c9f781a192f84d6ae7c.bin b/HoloBot/Library/ShaderCache/5/5407c644de841c9f781a192f84d6ae7c.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5407c644de841c9f781a192f84d6ae7c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/54159b20347dd4420ff94d9d8d83387d.bin b/HoloBot/Library/ShaderCache/5/54159b20347dd4420ff94d9d8d83387d.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/54159b20347dd4420ff94d9d8d83387d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/541832fb1b93e5de70f8ea873e6c1d60.bin b/HoloBot/Library/ShaderCache/5/541832fb1b93e5de70f8ea873e6c1d60.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/541832fb1b93e5de70f8ea873e6c1d60.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5428e1b84d7e44bac998f877e0f6df0e.bin b/HoloBot/Library/ShaderCache/5/5428e1b84d7e44bac998f877e0f6df0e.bin new file mode 100644 index 0000000..50f60de Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5428e1b84d7e44bac998f877e0f6df0e.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5430abccef74b3e4641ca21887d41dfa.bin b/HoloBot/Library/ShaderCache/5/5430abccef74b3e4641ca21887d41dfa.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5430abccef74b3e4641ca21887d41dfa.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5439546bae316417d901e030c2006a40.bin b/HoloBot/Library/ShaderCache/5/5439546bae316417d901e030c2006a40.bin new file mode 100644 index 0000000..c211b44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5439546bae316417d901e030c2006a40.bin differ diff --git a/HoloBot/Library/ShaderCache/5/54462b6cd1cc0ae802763645b93fa741.bin b/HoloBot/Library/ShaderCache/5/54462b6cd1cc0ae802763645b93fa741.bin new file mode 100644 index 0000000..0d30117 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/54462b6cd1cc0ae802763645b93fa741.bin differ diff --git a/HoloBot/Library/ShaderCache/5/54817b325ddd75a2cc107f1ff1d61778.bin b/HoloBot/Library/ShaderCache/5/54817b325ddd75a2cc107f1ff1d61778.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/54817b325ddd75a2cc107f1ff1d61778.bin differ diff --git a/HoloBot/Library/ShaderCache/5/549627efac5d26c27915e6306dccf96a.bin b/HoloBot/Library/ShaderCache/5/549627efac5d26c27915e6306dccf96a.bin new file mode 100644 index 0000000..0c92bda Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/549627efac5d26c27915e6306dccf96a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5499655905600ea2129853c524199a4c.bin b/HoloBot/Library/ShaderCache/5/5499655905600ea2129853c524199a4c.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5499655905600ea2129853c524199a4c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/549c8d0f6ebef93dc7a56f3a1afe6421.bin b/HoloBot/Library/ShaderCache/5/549c8d0f6ebef93dc7a56f3a1afe6421.bin new file mode 100644 index 0000000..8cdd7d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/549c8d0f6ebef93dc7a56f3a1afe6421.bin differ diff --git a/HoloBot/Library/ShaderCache/5/54a7b8b39db0961db7de4625e9157a98.bin b/HoloBot/Library/ShaderCache/5/54a7b8b39db0961db7de4625e9157a98.bin new file mode 100644 index 0000000..87f6693 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/54a7b8b39db0961db7de4625e9157a98.bin differ diff --git a/HoloBot/Library/ShaderCache/5/54ced99fd54b591531a4f0155e19df00.bin b/HoloBot/Library/ShaderCache/5/54ced99fd54b591531a4f0155e19df00.bin new file mode 100644 index 0000000..61ecbee Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/54ced99fd54b591531a4f0155e19df00.bin differ diff --git a/HoloBot/Library/ShaderCache/5/550b490e6e79f304d556877c5420ce30.bin b/HoloBot/Library/ShaderCache/5/550b490e6e79f304d556877c5420ce30.bin new file mode 100644 index 0000000..b77195e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/550b490e6e79f304d556877c5420ce30.bin differ diff --git a/HoloBot/Library/ShaderCache/5/552300379eca1aed9c4b180f752fc7ec.bin b/HoloBot/Library/ShaderCache/5/552300379eca1aed9c4b180f752fc7ec.bin new file mode 100644 index 0000000..1183b77 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/552300379eca1aed9c4b180f752fc7ec.bin differ diff --git a/HoloBot/Library/ShaderCache/5/555150960c86b9b8d1fa7ea18bc646b5.bin b/HoloBot/Library/ShaderCache/5/555150960c86b9b8d1fa7ea18bc646b5.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/555150960c86b9b8d1fa7ea18bc646b5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/555f1d57f100a4b8cff26260f88b3687.bin b/HoloBot/Library/ShaderCache/5/555f1d57f100a4b8cff26260f88b3687.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/555f1d57f100a4b8cff26260f88b3687.bin differ diff --git a/HoloBot/Library/ShaderCache/5/559953736473b704985ffc37c1d1129c.bin b/HoloBot/Library/ShaderCache/5/559953736473b704985ffc37c1d1129c.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/559953736473b704985ffc37c1d1129c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/55a6d5110e4429d8ddbd951fa2d9dfbd.bin b/HoloBot/Library/ShaderCache/5/55a6d5110e4429d8ddbd951fa2d9dfbd.bin new file mode 100644 index 0000000..42114b6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/55a6d5110e4429d8ddbd951fa2d9dfbd.bin differ diff --git a/HoloBot/Library/ShaderCache/5/560813b03c056445b4085beded2d56bd.bin b/HoloBot/Library/ShaderCache/5/560813b03c056445b4085beded2d56bd.bin new file mode 100644 index 0000000..a978c3a Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/560813b03c056445b4085beded2d56bd.bin differ diff --git a/HoloBot/Library/ShaderCache/5/560f571d67b80a7524f4bae58e6db1fd.bin b/HoloBot/Library/ShaderCache/5/560f571d67b80a7524f4bae58e6db1fd.bin new file mode 100644 index 0000000..b780102 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/560f571d67b80a7524f4bae58e6db1fd.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5636c394cc33814f82462a240252c232.bin b/HoloBot/Library/ShaderCache/5/5636c394cc33814f82462a240252c232.bin new file mode 100644 index 0000000..8aab65b Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5636c394cc33814f82462a240252c232.bin differ diff --git a/HoloBot/Library/ShaderCache/5/56707e9fa74a5728b6cd1639211d32f5.bin b/HoloBot/Library/ShaderCache/5/56707e9fa74a5728b6cd1639211d32f5.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/56707e9fa74a5728b6cd1639211d32f5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5676b12db40a200814a1ecb1ff5e1d52.bin b/HoloBot/Library/ShaderCache/5/5676b12db40a200814a1ecb1ff5e1d52.bin new file mode 100644 index 0000000..4c59858 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5676b12db40a200814a1ecb1ff5e1d52.bin differ diff --git a/HoloBot/Library/ShaderCache/5/567c563478a3682362bc1499d0e6f252.bin b/HoloBot/Library/ShaderCache/5/567c563478a3682362bc1499d0e6f252.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/567c563478a3682362bc1499d0e6f252.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5682fddeeec381ca5f28c66a14c88acf.bin b/HoloBot/Library/ShaderCache/5/5682fddeeec381ca5f28c66a14c88acf.bin new file mode 100644 index 0000000..ac5374f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5682fddeeec381ca5f28c66a14c88acf.bin differ diff --git a/HoloBot/Library/ShaderCache/5/569f31df455d4492f2448ecf08a17c6b.bin b/HoloBot/Library/ShaderCache/5/569f31df455d4492f2448ecf08a17c6b.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/569f31df455d4492f2448ecf08a17c6b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/56a2792243b54bf2e4aaed7db2c346c0.bin b/HoloBot/Library/ShaderCache/5/56a2792243b54bf2e4aaed7db2c346c0.bin new file mode 100644 index 0000000..3e60b25 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/56a2792243b54bf2e4aaed7db2c346c0.bin differ diff --git a/HoloBot/Library/ShaderCache/5/56ce54076e1fcb2c14e1669c114eb311.bin b/HoloBot/Library/ShaderCache/5/56ce54076e1fcb2c14e1669c114eb311.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/56ce54076e1fcb2c14e1669c114eb311.bin differ diff --git a/HoloBot/Library/ShaderCache/5/56fb4eac033538a4cc6ee677b6d66e6c.bin b/HoloBot/Library/ShaderCache/5/56fb4eac033538a4cc6ee677b6d66e6c.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/56fb4eac033538a4cc6ee677b6d66e6c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/572233fe436ae6a5ce447a88c3016d1b.bin b/HoloBot/Library/ShaderCache/5/572233fe436ae6a5ce447a88c3016d1b.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/572233fe436ae6a5ce447a88c3016d1b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/572b7b7cb18d13da0c963a5211832048.bin b/HoloBot/Library/ShaderCache/5/572b7b7cb18d13da0c963a5211832048.bin new file mode 100644 index 0000000..41efa10 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/572b7b7cb18d13da0c963a5211832048.bin differ diff --git a/HoloBot/Library/ShaderCache/5/572fd4408b9714b4e51730f0734f0114.bin b/HoloBot/Library/ShaderCache/5/572fd4408b9714b4e51730f0734f0114.bin new file mode 100644 index 0000000..ad524b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/572fd4408b9714b4e51730f0734f0114.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5760336dc6288b133ca02236e71ba2d5.bin b/HoloBot/Library/ShaderCache/5/5760336dc6288b133ca02236e71ba2d5.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5760336dc6288b133ca02236e71ba2d5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/576a709e00cc06c2de323d99d42fe0f2.bin b/HoloBot/Library/ShaderCache/5/576a709e00cc06c2de323d99d42fe0f2.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/576a709e00cc06c2de323d99d42fe0f2.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57700af252f04d6a04b2f4f088aafed6.bin b/HoloBot/Library/ShaderCache/5/57700af252f04d6a04b2f4f088aafed6.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57700af252f04d6a04b2f4f088aafed6.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5771dba468be4b223a0b871f62de92e9.bin b/HoloBot/Library/ShaderCache/5/5771dba468be4b223a0b871f62de92e9.bin new file mode 100644 index 0000000..99f0fcc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5771dba468be4b223a0b871f62de92e9.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5789ced7cdb11fc82544414133cfaef8.bin b/HoloBot/Library/ShaderCache/5/5789ced7cdb11fc82544414133cfaef8.bin new file mode 100644 index 0000000..965ca9d Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5789ced7cdb11fc82544414133cfaef8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57b8aba8da03663f477260010893ab66.bin b/HoloBot/Library/ShaderCache/5/57b8aba8da03663f477260010893ab66.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57b8aba8da03663f477260010893ab66.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57c011fa8590f981e3989d36b9d98c99.bin b/HoloBot/Library/ShaderCache/5/57c011fa8590f981e3989d36b9d98c99.bin new file mode 100644 index 0000000..5d22f62 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57c011fa8590f981e3989d36b9d98c99.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57c086c27ccf3a612f7b8e02302d9d0b.bin b/HoloBot/Library/ShaderCache/5/57c086c27ccf3a612f7b8e02302d9d0b.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57c086c27ccf3a612f7b8e02302d9d0b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57db64a5db430214438892a47c583a40.bin b/HoloBot/Library/ShaderCache/5/57db64a5db430214438892a47c583a40.bin new file mode 100644 index 0000000..4a6fce7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57db64a5db430214438892a47c583a40.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57f74025b8d46f7165549b3e9543b59d.bin b/HoloBot/Library/ShaderCache/5/57f74025b8d46f7165549b3e9543b59d.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57f74025b8d46f7165549b3e9543b59d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/57f84aa6fbbc36ad241e4666e4143bc5.bin b/HoloBot/Library/ShaderCache/5/57f84aa6fbbc36ad241e4666e4143bc5.bin new file mode 100644 index 0000000..6adf780 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/57f84aa6fbbc36ad241e4666e4143bc5.bin differ diff --git a/HoloBot/Library/ShaderCache/5/580b15da0ba9a6d402fe0944cf97ba13.bin b/HoloBot/Library/ShaderCache/5/580b15da0ba9a6d402fe0944cf97ba13.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/580b15da0ba9a6d402fe0944cf97ba13.bin differ diff --git a/HoloBot/Library/ShaderCache/5/582a8ae11d95593f38be0112b4cbc43c.bin b/HoloBot/Library/ShaderCache/5/582a8ae11d95593f38be0112b4cbc43c.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/582a8ae11d95593f38be0112b4cbc43c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/584446e2d845616663c60ec0494257b2.bin b/HoloBot/Library/ShaderCache/5/584446e2d845616663c60ec0494257b2.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/584446e2d845616663c60ec0494257b2.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58670ed24d15e587adbe1643c4e13cd8.bin b/HoloBot/Library/ShaderCache/5/58670ed24d15e587adbe1643c4e13cd8.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58670ed24d15e587adbe1643c4e13cd8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/587f86dd8996b701f65dba96a3313b2d.bin b/HoloBot/Library/ShaderCache/5/587f86dd8996b701f65dba96a3313b2d.bin new file mode 100644 index 0000000..87f6693 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/587f86dd8996b701f65dba96a3313b2d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/588fc532b12514777ce7332c9269135a.bin b/HoloBot/Library/ShaderCache/5/588fc532b12514777ce7332c9269135a.bin new file mode 100644 index 0000000..d4c4d55 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/588fc532b12514777ce7332c9269135a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/589ef383fa9c8fec1b8bb7b79c20cf9b.bin b/HoloBot/Library/ShaderCache/5/589ef383fa9c8fec1b8bb7b79c20cf9b.bin new file mode 100644 index 0000000..6e24d13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/589ef383fa9c8fec1b8bb7b79c20cf9b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58c557e02245a56385eb539520bd7970.bin b/HoloBot/Library/ShaderCache/5/58c557e02245a56385eb539520bd7970.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58c557e02245a56385eb539520bd7970.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58d0ba4d889b3ce9f6f81d07a2c4b646.bin b/HoloBot/Library/ShaderCache/5/58d0ba4d889b3ce9f6f81d07a2c4b646.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58d0ba4d889b3ce9f6f81d07a2c4b646.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58d0d4adc6830e3e04e7a945ef7b2218.bin b/HoloBot/Library/ShaderCache/5/58d0d4adc6830e3e04e7a945ef7b2218.bin new file mode 100644 index 0000000..552d2cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58d0d4adc6830e3e04e7a945ef7b2218.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58d89dd628c8a4f7ba1dffa3d7621421.bin b/HoloBot/Library/ShaderCache/5/58d89dd628c8a4f7ba1dffa3d7621421.bin new file mode 100644 index 0000000..1ca4883 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58d89dd628c8a4f7ba1dffa3d7621421.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58ebe3e78e0ae04baaa93b07734f0251.bin b/HoloBot/Library/ShaderCache/5/58ebe3e78e0ae04baaa93b07734f0251.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58ebe3e78e0ae04baaa93b07734f0251.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58f052d798f52e8f58cf378728daee0b.bin b/HoloBot/Library/ShaderCache/5/58f052d798f52e8f58cf378728daee0b.bin new file mode 100644 index 0000000..a554a39 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58f052d798f52e8f58cf378728daee0b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/58f7d98d6e643fbf90ce102279033f1e.bin b/HoloBot/Library/ShaderCache/5/58f7d98d6e643fbf90ce102279033f1e.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/58f7d98d6e643fbf90ce102279033f1e.bin differ diff --git a/HoloBot/Library/ShaderCache/5/59169660419475d1297bcdd41f6ca2e2.bin b/HoloBot/Library/ShaderCache/5/59169660419475d1297bcdd41f6ca2e2.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/59169660419475d1297bcdd41f6ca2e2.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5933a280a4848b487f70a6aa9b792a66.bin b/HoloBot/Library/ShaderCache/5/5933a280a4848b487f70a6aa9b792a66.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5933a280a4848b487f70a6aa9b792a66.bin differ diff --git a/HoloBot/Library/ShaderCache/5/59454425f858035fb916dbc2d9d5320e.bin b/HoloBot/Library/ShaderCache/5/59454425f858035fb916dbc2d9d5320e.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/59454425f858035fb916dbc2d9d5320e.bin differ diff --git a/HoloBot/Library/ShaderCache/5/594f448ffc631556c24457984ae3ded9.bin b/HoloBot/Library/ShaderCache/5/594f448ffc631556c24457984ae3ded9.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/594f448ffc631556c24457984ae3ded9.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5958ffe946b940dfaf2d48338b6465a3.bin b/HoloBot/Library/ShaderCache/5/5958ffe946b940dfaf2d48338b6465a3.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5958ffe946b940dfaf2d48338b6465a3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/59795cab0785f4f3b76262a764e774c3.bin b/HoloBot/Library/ShaderCache/5/59795cab0785f4f3b76262a764e774c3.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/59795cab0785f4f3b76262a764e774c3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/599dd67dc1a7b4fabc3726890c7f7e71.bin b/HoloBot/Library/ShaderCache/5/599dd67dc1a7b4fabc3726890c7f7e71.bin new file mode 100644 index 0000000..3f683b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/599dd67dc1a7b4fabc3726890c7f7e71.bin differ diff --git a/HoloBot/Library/ShaderCache/5/59bdee93e919125606e3625ca787bfa3.bin b/HoloBot/Library/ShaderCache/5/59bdee93e919125606e3625ca787bfa3.bin new file mode 100644 index 0000000..7e3b4de Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/59bdee93e919125606e3625ca787bfa3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a0a9e0195baf07b0b7d975ec5ee18cd.bin b/HoloBot/Library/ShaderCache/5/5a0a9e0195baf07b0b7d975ec5ee18cd.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a0a9e0195baf07b0b7d975ec5ee18cd.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a33b1041a3fc07fb6048f953ed14c2d.bin b/HoloBot/Library/ShaderCache/5/5a33b1041a3fc07fb6048f953ed14c2d.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a33b1041a3fc07fb6048f953ed14c2d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a3e196ee64c368869d6f69fb0bcd134.bin b/HoloBot/Library/ShaderCache/5/5a3e196ee64c368869d6f69fb0bcd134.bin new file mode 100644 index 0000000..0d2bd01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a3e196ee64c368869d6f69fb0bcd134.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a43717fcbf42e2f100220a9453c7f30.bin b/HoloBot/Library/ShaderCache/5/5a43717fcbf42e2f100220a9453c7f30.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a43717fcbf42e2f100220a9453c7f30.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a6f75f5cf3e7eb7f309df1062340375.bin b/HoloBot/Library/ShaderCache/5/5a6f75f5cf3e7eb7f309df1062340375.bin new file mode 100644 index 0000000..f7b1551 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a6f75f5cf3e7eb7f309df1062340375.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5a790806b751ab61cf7c75dfa33d3174.bin b/HoloBot/Library/ShaderCache/5/5a790806b751ab61cf7c75dfa33d3174.bin new file mode 100644 index 0000000..f6996e3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5a790806b751ab61cf7c75dfa33d3174.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ab3667f2a0f0e758e1612edaaa02bf4.bin b/HoloBot/Library/ShaderCache/5/5ab3667f2a0f0e758e1612edaaa02bf4.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ab3667f2a0f0e758e1612edaaa02bf4.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ac0b3946af27620837641f9f6f286e1.bin b/HoloBot/Library/ShaderCache/5/5ac0b3946af27620837641f9f6f286e1.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ac0b3946af27620837641f9f6f286e1.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5b2f47d5f091e37e5ff576e0b67de74a.bin b/HoloBot/Library/ShaderCache/5/5b2f47d5f091e37e5ff576e0b67de74a.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5b2f47d5f091e37e5ff576e0b67de74a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5b5c2378d1a332b14a9ebc1e5811adb9.bin b/HoloBot/Library/ShaderCache/5/5b5c2378d1a332b14a9ebc1e5811adb9.bin new file mode 100644 index 0000000..947cd2f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5b5c2378d1a332b14a9ebc1e5811adb9.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin b/HoloBot/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5b870a021897ec50a1d7fc0d5a51cf37.bin b/HoloBot/Library/ShaderCache/5/5b870a021897ec50a1d7fc0d5a51cf37.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5b870a021897ec50a1d7fc0d5a51cf37.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5bb2b624ec3d22583ffc42ca1eff0176.bin b/HoloBot/Library/ShaderCache/5/5bb2b624ec3d22583ffc42ca1eff0176.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5bb2b624ec3d22583ffc42ca1eff0176.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5bb66a91bb6630144c75a4b30ff7f88b.bin b/HoloBot/Library/ShaderCache/5/5bb66a91bb6630144c75a4b30ff7f88b.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5bb66a91bb6630144c75a4b30ff7f88b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5bd420dd90b7863360ad5ac6d087b6a9.bin b/HoloBot/Library/ShaderCache/5/5bd420dd90b7863360ad5ac6d087b6a9.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5bd420dd90b7863360ad5ac6d087b6a9.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5c2383e08f122918c5fbcfea8956eaa8.bin b/HoloBot/Library/ShaderCache/5/5c2383e08f122918c5fbcfea8956eaa8.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5c2383e08f122918c5fbcfea8956eaa8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5c268e4c6c52401d465d82503deee2ab.bin b/HoloBot/Library/ShaderCache/5/5c268e4c6c52401d465d82503deee2ab.bin new file mode 100644 index 0000000..dfbffb8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5c268e4c6c52401d465d82503deee2ab.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5cacc1d736ed8fd7ab789932f058a6e7.bin b/HoloBot/Library/ShaderCache/5/5cacc1d736ed8fd7ab789932f058a6e7.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5cacc1d736ed8fd7ab789932f058a6e7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5cbbb36c4dc2c561556008324351d374.bin b/HoloBot/Library/ShaderCache/5/5cbbb36c4dc2c561556008324351d374.bin new file mode 100644 index 0000000..2e9e55a Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5cbbb36c4dc2c561556008324351d374.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5cc729d1193b2fa3b80494d05a82a4f3.bin b/HoloBot/Library/ShaderCache/5/5cc729d1193b2fa3b80494d05a82a4f3.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5cc729d1193b2fa3b80494d05a82a4f3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5d16ff57cd396cf8df04792bbbc73ef6.bin b/HoloBot/Library/ShaderCache/5/5d16ff57cd396cf8df04792bbbc73ef6.bin new file mode 100644 index 0000000..2b38035 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5d16ff57cd396cf8df04792bbbc73ef6.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5d22db4dea091824c9092ccb2008c331.bin b/HoloBot/Library/ShaderCache/5/5d22db4dea091824c9092ccb2008c331.bin new file mode 100644 index 0000000..48d7db1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5d22db4dea091824c9092ccb2008c331.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5d673473e1022c112e82c855591411e8.bin b/HoloBot/Library/ShaderCache/5/5d673473e1022c112e82c855591411e8.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5d673473e1022c112e82c855591411e8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5d8e34c6fea3973749313b02d16044e2.bin b/HoloBot/Library/ShaderCache/5/5d8e34c6fea3973749313b02d16044e2.bin new file mode 100644 index 0000000..7ca588b Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5d8e34c6fea3973749313b02d16044e2.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5df1673ce2b6287744eab2d13f616a9f.bin b/HoloBot/Library/ShaderCache/5/5df1673ce2b6287744eab2d13f616a9f.bin new file mode 100644 index 0000000..9f7abf4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5df1673ce2b6287744eab2d13f616a9f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5df5a9d06396eedaa547bcca288d95c0.bin b/HoloBot/Library/ShaderCache/5/5df5a9d06396eedaa547bcca288d95c0.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5df5a9d06396eedaa547bcca288d95c0.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e1a739e02c757cedaecf7a0c8d2af7f.bin b/HoloBot/Library/ShaderCache/5/5e1a739e02c757cedaecf7a0c8d2af7f.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e1a739e02c757cedaecf7a0c8d2af7f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e237b580938ece3e321ee731d2962fa.bin b/HoloBot/Library/ShaderCache/5/5e237b580938ece3e321ee731d2962fa.bin new file mode 100644 index 0000000..800aa8e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e237b580938ece3e321ee731d2962fa.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e271b91795a8e9a27e69e2ab8b7d7d8.bin b/HoloBot/Library/ShaderCache/5/5e271b91795a8e9a27e69e2ab8b7d7d8.bin new file mode 100644 index 0000000..4a6fce7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e271b91795a8e9a27e69e2ab8b7d7d8.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e2ef50b9e7f2d40a57a1fad24a94c72.bin b/HoloBot/Library/ShaderCache/5/5e2ef50b9e7f2d40a57a1fad24a94c72.bin new file mode 100644 index 0000000..27b58c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e2ef50b9e7f2d40a57a1fad24a94c72.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e3ea2df926e683da70064ff52444ce3.bin b/HoloBot/Library/ShaderCache/5/5e3ea2df926e683da70064ff52444ce3.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e3ea2df926e683da70064ff52444ce3.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e4176f2329242088f7bae1a18381c25.bin b/HoloBot/Library/ShaderCache/5/5e4176f2329242088f7bae1a18381c25.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e4176f2329242088f7bae1a18381c25.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e41daaddcdb6cfc5d90108769ab5eec.bin b/HoloBot/Library/ShaderCache/5/5e41daaddcdb6cfc5d90108769ab5eec.bin new file mode 100644 index 0000000..f44b484 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e41daaddcdb6cfc5d90108769ab5eec.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e7f88a00df2044625116dc944d8bbbc.bin b/HoloBot/Library/ShaderCache/5/5e7f88a00df2044625116dc944d8bbbc.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e7f88a00df2044625116dc944d8bbbc.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e7fe8cc70a2326dbc5c407f1bfe370d.bin b/HoloBot/Library/ShaderCache/5/5e7fe8cc70a2326dbc5c407f1bfe370d.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e7fe8cc70a2326dbc5c407f1bfe370d.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5e95c8a7d4354c4ae89549f5a52653b7.bin b/HoloBot/Library/ShaderCache/5/5e95c8a7d4354c4ae89549f5a52653b7.bin new file mode 100644 index 0000000..c41ec78 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5e95c8a7d4354c4ae89549f5a52653b7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5eb2ee02f99f6acea4b6c028d3210b45.bin b/HoloBot/Library/ShaderCache/5/5eb2ee02f99f6acea4b6c028d3210b45.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5eb2ee02f99f6acea4b6c028d3210b45.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5eb48fab04521b90ac3cbbe1f48da78a.bin b/HoloBot/Library/ShaderCache/5/5eb48fab04521b90ac3cbbe1f48da78a.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5eb48fab04521b90ac3cbbe1f48da78a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5eb7576fc12be2ccdeb68a7d70846b38.bin b/HoloBot/Library/ShaderCache/5/5eb7576fc12be2ccdeb68a7d70846b38.bin new file mode 100644 index 0000000..790e755 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5eb7576fc12be2ccdeb68a7d70846b38.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ec1499da37798c32adfa5866ed08ede.bin b/HoloBot/Library/ShaderCache/5/5ec1499da37798c32adfa5866ed08ede.bin new file mode 100644 index 0000000..4391efc Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ec1499da37798c32adfa5866ed08ede.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ec89cbff336f5d2c4a407bb5f8fe288.bin b/HoloBot/Library/ShaderCache/5/5ec89cbff336f5d2c4a407bb5f8fe288.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ec89cbff336f5d2c4a407bb5f8fe288.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ecf4d4c4376732362409f13fa895f0a.bin b/HoloBot/Library/ShaderCache/5/5ecf4d4c4376732362409f13fa895f0a.bin new file mode 100644 index 0000000..c2c373f Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ecf4d4c4376732362409f13fa895f0a.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ed91a2fe78ff623c1bfd1a6bdb0ac69.bin b/HoloBot/Library/ShaderCache/5/5ed91a2fe78ff623c1bfd1a6bdb0ac69.bin new file mode 100644 index 0000000..882f3f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ed91a2fe78ff623c1bfd1a6bdb0ac69.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5ee96cd23dc92ad5077c19ea6373c62c.bin b/HoloBot/Library/ShaderCache/5/5ee96cd23dc92ad5077c19ea6373c62c.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5ee96cd23dc92ad5077c19ea6373c62c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f2f13547032b0540d0d00b205000894.bin b/HoloBot/Library/ShaderCache/5/5f2f13547032b0540d0d00b205000894.bin new file mode 100644 index 0000000..0f4d082 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f2f13547032b0540d0d00b205000894.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f3424036761bd5aeb234a2fd74a30f7.bin b/HoloBot/Library/ShaderCache/5/5f3424036761bd5aeb234a2fd74a30f7.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f3424036761bd5aeb234a2fd74a30f7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f3c681d220b37ae24402a73bd78321f.bin b/HoloBot/Library/ShaderCache/5/5f3c681d220b37ae24402a73bd78321f.bin new file mode 100644 index 0000000..6759386 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f3c681d220b37ae24402a73bd78321f.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f55018da31349881a92b2015ba4dcbe.bin b/HoloBot/Library/ShaderCache/5/5f55018da31349881a92b2015ba4dcbe.bin new file mode 100644 index 0000000..7fc19d6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f55018da31349881a92b2015ba4dcbe.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f61ea41ea8d3c5461984c5a6ee1577b.bin b/HoloBot/Library/ShaderCache/5/5f61ea41ea8d3c5461984c5a6ee1577b.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f61ea41ea8d3c5461984c5a6ee1577b.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5f93c98a1dfe6df8cab49f5401aa3dd9.bin b/HoloBot/Library/ShaderCache/5/5f93c98a1dfe6df8cab49f5401aa3dd9.bin new file mode 100644 index 0000000..e9056a8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5f93c98a1dfe6df8cab49f5401aa3dd9.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5fb62932645d47b536ccfc14f90f3e5c.bin b/HoloBot/Library/ShaderCache/5/5fb62932645d47b536ccfc14f90f3e5c.bin new file mode 100644 index 0000000..8cdd7d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5fb62932645d47b536ccfc14f90f3e5c.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5fc066bdcb8745b3595bd2b57fab8aa7.bin b/HoloBot/Library/ShaderCache/5/5fc066bdcb8745b3595bd2b57fab8aa7.bin new file mode 100644 index 0000000..9eb382e Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5fc066bdcb8745b3595bd2b57fab8aa7.bin differ diff --git a/HoloBot/Library/ShaderCache/5/5fe31595851e8d753abdb197d8dbb692.bin b/HoloBot/Library/ShaderCache/5/5fe31595851e8d753abdb197d8dbb692.bin new file mode 100644 index 0000000..41efa10 Binary files /dev/null and b/HoloBot/Library/ShaderCache/5/5fe31595851e8d753abdb197d8dbb692.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6015002f47786a0940abb84b5ef30a90.bin b/HoloBot/Library/ShaderCache/6/6015002f47786a0940abb84b5ef30a90.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6015002f47786a0940abb84b5ef30a90.bin differ diff --git a/HoloBot/Library/ShaderCache/6/601b7ba0c5232e51d09853115e945fed.bin b/HoloBot/Library/ShaderCache/6/601b7ba0c5232e51d09853115e945fed.bin new file mode 100644 index 0000000..0804ad9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/601b7ba0c5232e51d09853115e945fed.bin differ diff --git a/HoloBot/Library/ShaderCache/6/606e1156e471fa5b2b603b601bf641b6.bin b/HoloBot/Library/ShaderCache/6/606e1156e471fa5b2b603b601bf641b6.bin new file mode 100644 index 0000000..e44e7f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/606e1156e471fa5b2b603b601bf641b6.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60916881408e27bd146831d16edc4b13.bin b/HoloBot/Library/ShaderCache/6/60916881408e27bd146831d16edc4b13.bin new file mode 100644 index 0000000..8df700f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60916881408e27bd146831d16edc4b13.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60a296295426733e41af6d8bf4103ee5.bin b/HoloBot/Library/ShaderCache/6/60a296295426733e41af6d8bf4103ee5.bin new file mode 100644 index 0000000..892bb23 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60a296295426733e41af6d8bf4103ee5.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60a29ec480b7460117df28e987431fa7.bin b/HoloBot/Library/ShaderCache/6/60a29ec480b7460117df28e987431fa7.bin new file mode 100644 index 0000000..991df8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60a29ec480b7460117df28e987431fa7.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60b74f927dc986f194523f133a195cc3.bin b/HoloBot/Library/ShaderCache/6/60b74f927dc986f194523f133a195cc3.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60b74f927dc986f194523f133a195cc3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60bbadeea0ab9de039bdabc5a99e8313.bin b/HoloBot/Library/ShaderCache/6/60bbadeea0ab9de039bdabc5a99e8313.bin new file mode 100644 index 0000000..b96ac1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60bbadeea0ab9de039bdabc5a99e8313.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60c6c9afaa301ee474ecbe32efc079bb.bin b/HoloBot/Library/ShaderCache/6/60c6c9afaa301ee474ecbe32efc079bb.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60c6c9afaa301ee474ecbe32efc079bb.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60e7e21b26b44e154f27c4e40af01207.bin b/HoloBot/Library/ShaderCache/6/60e7e21b26b44e154f27c4e40af01207.bin new file mode 100644 index 0000000..dbd59a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60e7e21b26b44e154f27c4e40af01207.bin differ diff --git a/HoloBot/Library/ShaderCache/6/60f116ab3e9783e8535666eca49f0006.bin b/HoloBot/Library/ShaderCache/6/60f116ab3e9783e8535666eca49f0006.bin new file mode 100644 index 0000000..d46d61a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/60f116ab3e9783e8535666eca49f0006.bin differ diff --git a/HoloBot/Library/ShaderCache/6/613356f3bd433dada187727d5fbffe39.bin b/HoloBot/Library/ShaderCache/6/613356f3bd433dada187727d5fbffe39.bin new file mode 100644 index 0000000..6329d50 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/613356f3bd433dada187727d5fbffe39.bin differ diff --git a/HoloBot/Library/ShaderCache/6/615e542b058027f4de619a99817e23a0.bin b/HoloBot/Library/ShaderCache/6/615e542b058027f4de619a99817e23a0.bin new file mode 100644 index 0000000..e73c01e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/615e542b058027f4de619a99817e23a0.bin differ diff --git a/HoloBot/Library/ShaderCache/6/61b2034173ad4509f41012e94b28e270.bin b/HoloBot/Library/ShaderCache/6/61b2034173ad4509f41012e94b28e270.bin new file mode 100644 index 0000000..01cfbbe Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/61b2034173ad4509f41012e94b28e270.bin differ diff --git a/HoloBot/Library/ShaderCache/6/61b79f695f9264e15755566c86caf5ef.bin b/HoloBot/Library/ShaderCache/6/61b79f695f9264e15755566c86caf5ef.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/61b79f695f9264e15755566c86caf5ef.bin differ diff --git a/HoloBot/Library/ShaderCache/6/61d2ed4e4cd02429ef4ea950ddfcde1a.bin b/HoloBot/Library/ShaderCache/6/61d2ed4e4cd02429ef4ea950ddfcde1a.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/61d2ed4e4cd02429ef4ea950ddfcde1a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/61fdc4306ba387af18fcf53745033f14.bin b/HoloBot/Library/ShaderCache/6/61fdc4306ba387af18fcf53745033f14.bin new file mode 100644 index 0000000..f3180d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/61fdc4306ba387af18fcf53745033f14.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6202a42d4fcb822837257245d3ff7022.bin b/HoloBot/Library/ShaderCache/6/6202a42d4fcb822837257245d3ff7022.bin new file mode 100644 index 0000000..9936adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6202a42d4fcb822837257245d3ff7022.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6241669a3e91b95a7acae3fcc6e95810.bin b/HoloBot/Library/ShaderCache/6/6241669a3e91b95a7acae3fcc6e95810.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6241669a3e91b95a7acae3fcc6e95810.bin differ diff --git a/HoloBot/Library/ShaderCache/6/626f60d406f4343197de8d6d33a5b070.bin b/HoloBot/Library/ShaderCache/6/626f60d406f4343197de8d6d33a5b070.bin new file mode 100644 index 0000000..4096f1c Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/626f60d406f4343197de8d6d33a5b070.bin differ diff --git a/HoloBot/Library/ShaderCache/6/62789d39c73a2a1f9890ebc708e1253a.bin b/HoloBot/Library/ShaderCache/6/62789d39c73a2a1f9890ebc708e1253a.bin new file mode 100644 index 0000000..fde5743 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/62789d39c73a2a1f9890ebc708e1253a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/62bd850347e38c65676dbce396638213.bin b/HoloBot/Library/ShaderCache/6/62bd850347e38c65676dbce396638213.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/62bd850347e38c65676dbce396638213.bin differ diff --git a/HoloBot/Library/ShaderCache/6/62d26d5218800b98deb98c04a17860a4.bin b/HoloBot/Library/ShaderCache/6/62d26d5218800b98deb98c04a17860a4.bin new file mode 100644 index 0000000..47adc6f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/62d26d5218800b98deb98c04a17860a4.bin differ diff --git a/HoloBot/Library/ShaderCache/6/62edded90af83a756930e88c0e4495bd.bin b/HoloBot/Library/ShaderCache/6/62edded90af83a756930e88c0e4495bd.bin new file mode 100644 index 0000000..0d30117 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/62edded90af83a756930e88c0e4495bd.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6321b40b87e8b02095e1d932f3c5ce67.bin b/HoloBot/Library/ShaderCache/6/6321b40b87e8b02095e1d932f3c5ce67.bin new file mode 100644 index 0000000..d528d8b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6321b40b87e8b02095e1d932f3c5ce67.bin differ diff --git a/HoloBot/Library/ShaderCache/6/632d586b9f42d004a6177a6d6046652c.bin b/HoloBot/Library/ShaderCache/6/632d586b9f42d004a6177a6d6046652c.bin new file mode 100644 index 0000000..7fc19d6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/632d586b9f42d004a6177a6d6046652c.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6358a9519d8efab83a2cbca13fde3042.bin b/HoloBot/Library/ShaderCache/6/6358a9519d8efab83a2cbca13fde3042.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6358a9519d8efab83a2cbca13fde3042.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63772661b3159f8d6d9e16cfb9282d2a.bin b/HoloBot/Library/ShaderCache/6/63772661b3159f8d6d9e16cfb9282d2a.bin new file mode 100644 index 0000000..ac959f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63772661b3159f8d6d9e16cfb9282d2a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/637fd8f0e1e085dd13495fdcd4ba9128.bin b/HoloBot/Library/ShaderCache/6/637fd8f0e1e085dd13495fdcd4ba9128.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/637fd8f0e1e085dd13495fdcd4ba9128.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6382beb5fc04bcdb002a05c13ccef945.bin b/HoloBot/Library/ShaderCache/6/6382beb5fc04bcdb002a05c13ccef945.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6382beb5fc04bcdb002a05c13ccef945.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63b18657fe149477d88f9b4fcd692390.bin b/HoloBot/Library/ShaderCache/6/63b18657fe149477d88f9b4fcd692390.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63b18657fe149477d88f9b4fcd692390.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63d303c0d82e0c3600bc80821a71e610.bin b/HoloBot/Library/ShaderCache/6/63d303c0d82e0c3600bc80821a71e610.bin new file mode 100644 index 0000000..dfbffb8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63d303c0d82e0c3600bc80821a71e610.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63d36d50c5470284a557787e0ab4c9a2.bin b/HoloBot/Library/ShaderCache/6/63d36d50c5470284a557787e0ab4c9a2.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63d36d50c5470284a557787e0ab4c9a2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63e324d6ee4ff596cd6f34d247faaa1b.bin b/HoloBot/Library/ShaderCache/6/63e324d6ee4ff596cd6f34d247faaa1b.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63e324d6ee4ff596cd6f34d247faaa1b.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63ee4500d3f182f26e3db1805a9ff2d4.bin b/HoloBot/Library/ShaderCache/6/63ee4500d3f182f26e3db1805a9ff2d4.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63ee4500d3f182f26e3db1805a9ff2d4.bin differ diff --git a/HoloBot/Library/ShaderCache/6/63f232d2336eeb8e167e4651716e4950.bin b/HoloBot/Library/ShaderCache/6/63f232d2336eeb8e167e4651716e4950.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/63f232d2336eeb8e167e4651716e4950.bin differ diff --git a/HoloBot/Library/ShaderCache/6/641ba8083a44b5d4944a92413ee0f16f.bin b/HoloBot/Library/ShaderCache/6/641ba8083a44b5d4944a92413ee0f16f.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/641ba8083a44b5d4944a92413ee0f16f.bin differ diff --git a/HoloBot/Library/ShaderCache/6/642f126bb7edeb8f0db74a73a8f75960.bin b/HoloBot/Library/ShaderCache/6/642f126bb7edeb8f0db74a73a8f75960.bin new file mode 100644 index 0000000..d75132b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/642f126bb7edeb8f0db74a73a8f75960.bin differ diff --git a/HoloBot/Library/ShaderCache/6/643c9e210ecbf86e3890eb1e5cab9b63.bin b/HoloBot/Library/ShaderCache/6/643c9e210ecbf86e3890eb1e5cab9b63.bin new file mode 100644 index 0000000..09e43de Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/643c9e210ecbf86e3890eb1e5cab9b63.bin differ diff --git a/HoloBot/Library/ShaderCache/6/649ae117512505d2a2dcf046031173ee.bin b/HoloBot/Library/ShaderCache/6/649ae117512505d2a2dcf046031173ee.bin new file mode 100644 index 0000000..065cd4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/649ae117512505d2a2dcf046031173ee.bin differ diff --git a/HoloBot/Library/ShaderCache/6/64f0401d854c5cabe7d7192d37432f2c.bin b/HoloBot/Library/ShaderCache/6/64f0401d854c5cabe7d7192d37432f2c.bin new file mode 100644 index 0000000..2173041 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/64f0401d854c5cabe7d7192d37432f2c.bin differ diff --git a/HoloBot/Library/ShaderCache/6/64f0ae42ed37cc74795676912e13ff99.bin b/HoloBot/Library/ShaderCache/6/64f0ae42ed37cc74795676912e13ff99.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/64f0ae42ed37cc74795676912e13ff99.bin differ diff --git a/HoloBot/Library/ShaderCache/6/64fedeb00a10c5731a4793368994f3f2.bin b/HoloBot/Library/ShaderCache/6/64fedeb00a10c5731a4793368994f3f2.bin new file mode 100644 index 0000000..78a5ad6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/64fedeb00a10c5731a4793368994f3f2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65098b26b40decb133a6b122b6ef7ad7.bin b/HoloBot/Library/ShaderCache/6/65098b26b40decb133a6b122b6ef7ad7.bin new file mode 100644 index 0000000..440f8e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65098b26b40decb133a6b122b6ef7ad7.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65132a2b1f21a08a030da8a5acb59cb0.bin b/HoloBot/Library/ShaderCache/6/65132a2b1f21a08a030da8a5acb59cb0.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65132a2b1f21a08a030da8a5acb59cb0.bin differ diff --git a/HoloBot/Library/ShaderCache/6/651362b94db873e83d3e0902db72bb9e.bin b/HoloBot/Library/ShaderCache/6/651362b94db873e83d3e0902db72bb9e.bin new file mode 100644 index 0000000..ba288ab Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/651362b94db873e83d3e0902db72bb9e.bin differ diff --git a/HoloBot/Library/ShaderCache/6/651aa56b780e7da62fac4b9820782f2a.bin b/HoloBot/Library/ShaderCache/6/651aa56b780e7da62fac4b9820782f2a.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/651aa56b780e7da62fac4b9820782f2a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65215bda0142db9c9afb20b7426d97d5.bin b/HoloBot/Library/ShaderCache/6/65215bda0142db9c9afb20b7426d97d5.bin new file mode 100644 index 0000000..746df64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65215bda0142db9c9afb20b7426d97d5.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65303eba1093754a8937d593ffca29f2.bin b/HoloBot/Library/ShaderCache/6/65303eba1093754a8937d593ffca29f2.bin new file mode 100644 index 0000000..de1c658 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65303eba1093754a8937d593ffca29f2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6540ca6bfaa1aa130108c3abbcc7982e.bin b/HoloBot/Library/ShaderCache/6/6540ca6bfaa1aa130108c3abbcc7982e.bin new file mode 100644 index 0000000..299aa09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6540ca6bfaa1aa130108c3abbcc7982e.bin differ diff --git a/HoloBot/Library/ShaderCache/6/659e3156e8138216c0a40f05002fcd1d.bin b/HoloBot/Library/ShaderCache/6/659e3156e8138216c0a40f05002fcd1d.bin new file mode 100644 index 0000000..bfa056a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/659e3156e8138216c0a40f05002fcd1d.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65ba08a274f825d216746f1035e54c3a.bin b/HoloBot/Library/ShaderCache/6/65ba08a274f825d216746f1035e54c3a.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65ba08a274f825d216746f1035e54c3a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/65cc1763e995162928d662933c180bc0.bin b/HoloBot/Library/ShaderCache/6/65cc1763e995162928d662933c180bc0.bin new file mode 100644 index 0000000..8491ed0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/65cc1763e995162928d662933c180bc0.bin differ diff --git a/HoloBot/Library/ShaderCache/6/661f22da63393641781950cc8ca27bec.bin b/HoloBot/Library/ShaderCache/6/661f22da63393641781950cc8ca27bec.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/661f22da63393641781950cc8ca27bec.bin differ diff --git a/HoloBot/Library/ShaderCache/6/661f967f1a7671d9c15f7016dae3a92c.bin b/HoloBot/Library/ShaderCache/6/661f967f1a7671d9c15f7016dae3a92c.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/661f967f1a7671d9c15f7016dae3a92c.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66377a07cfa9a90cd6464ca30dc4f235.bin b/HoloBot/Library/ShaderCache/6/66377a07cfa9a90cd6464ca30dc4f235.bin new file mode 100644 index 0000000..2173041 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66377a07cfa9a90cd6464ca30dc4f235.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66424878f1f585c566d28f81b060a8a4.bin b/HoloBot/Library/ShaderCache/6/66424878f1f585c566d28f81b060a8a4.bin new file mode 100644 index 0000000..e44e7f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66424878f1f585c566d28f81b060a8a4.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6658e4f3cd1475fd1e75cc7acbd2f1af.bin b/HoloBot/Library/ShaderCache/6/6658e4f3cd1475fd1e75cc7acbd2f1af.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6658e4f3cd1475fd1e75cc7acbd2f1af.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66626ea302a8aa1fd7c4499cd25eed69.bin b/HoloBot/Library/ShaderCache/6/66626ea302a8aa1fd7c4499cd25eed69.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66626ea302a8aa1fd7c4499cd25eed69.bin differ diff --git a/HoloBot/Library/ShaderCache/6/666b13b390eff39d2e7e74ff464d3fbd.bin b/HoloBot/Library/ShaderCache/6/666b13b390eff39d2e7e74ff464d3fbd.bin new file mode 100644 index 0000000..cb03ee4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/666b13b390eff39d2e7e74ff464d3fbd.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66870e4c8e1885ab2934e6521eee1aed.bin b/HoloBot/Library/ShaderCache/6/66870e4c8e1885ab2934e6521eee1aed.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66870e4c8e1885ab2934e6521eee1aed.bin differ diff --git a/HoloBot/Library/ShaderCache/6/669ccc29ee1018a336e2cf88930b0088.bin b/HoloBot/Library/ShaderCache/6/669ccc29ee1018a336e2cf88930b0088.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/669ccc29ee1018a336e2cf88930b0088.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66a415d4fe4663a28c948816690183be.bin b/HoloBot/Library/ShaderCache/6/66a415d4fe4663a28c948816690183be.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66a415d4fe4663a28c948816690183be.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66c1492fa11d2de315d8bcfceecc0b3c.bin b/HoloBot/Library/ShaderCache/6/66c1492fa11d2de315d8bcfceecc0b3c.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66c1492fa11d2de315d8bcfceecc0b3c.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66d4fa2138feeafd7adec90e195bd2b0.bin b/HoloBot/Library/ShaderCache/6/66d4fa2138feeafd7adec90e195bd2b0.bin new file mode 100644 index 0000000..7b4be4b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66d4fa2138feeafd7adec90e195bd2b0.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66e117177e656d5d5bff276368aa1054.bin b/HoloBot/Library/ShaderCache/6/66e117177e656d5d5bff276368aa1054.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66e117177e656d5d5bff276368aa1054.bin differ diff --git a/HoloBot/Library/ShaderCache/6/66f12691464effc800c3200cd5825e2d.bin b/HoloBot/Library/ShaderCache/6/66f12691464effc800c3200cd5825e2d.bin new file mode 100644 index 0000000..2227bc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/66f12691464effc800c3200cd5825e2d.bin differ diff --git a/HoloBot/Library/ShaderCache/6/670155f2448cbb438ceb1f292c512c4a.bin b/HoloBot/Library/ShaderCache/6/670155f2448cbb438ceb1f292c512c4a.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/670155f2448cbb438ceb1f292c512c4a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6724725ce4e6312a61203d416bf3fb36.bin b/HoloBot/Library/ShaderCache/6/6724725ce4e6312a61203d416bf3fb36.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6724725ce4e6312a61203d416bf3fb36.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6724a99fe3974887e7aad98b63e5b183.bin b/HoloBot/Library/ShaderCache/6/6724a99fe3974887e7aad98b63e5b183.bin new file mode 100644 index 0000000..299aed8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6724a99fe3974887e7aad98b63e5b183.bin differ diff --git a/HoloBot/Library/ShaderCache/6/677571263465c984d2b5136b65197da6.bin b/HoloBot/Library/ShaderCache/6/677571263465c984d2b5136b65197da6.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/677571263465c984d2b5136b65197da6.bin differ diff --git a/HoloBot/Library/ShaderCache/6/67886f3b3e39b1d67d54f043402936ae.bin b/HoloBot/Library/ShaderCache/6/67886f3b3e39b1d67d54f043402936ae.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/67886f3b3e39b1d67d54f043402936ae.bin differ diff --git a/HoloBot/Library/ShaderCache/6/67ab86c5a84ac4bed00645e1a1de28b7.bin b/HoloBot/Library/ShaderCache/6/67ab86c5a84ac4bed00645e1a1de28b7.bin new file mode 100644 index 0000000..be5fbf6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/67ab86c5a84ac4bed00645e1a1de28b7.bin differ diff --git a/HoloBot/Library/ShaderCache/6/67f265b07aa54caf5bcb74bfd848f279.bin b/HoloBot/Library/ShaderCache/6/67f265b07aa54caf5bcb74bfd848f279.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/67f265b07aa54caf5bcb74bfd848f279.bin differ diff --git a/HoloBot/Library/ShaderCache/6/67fc6f4b54e1a858bb714b830f896a4a.bin b/HoloBot/Library/ShaderCache/6/67fc6f4b54e1a858bb714b830f896a4a.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/67fc6f4b54e1a858bb714b830f896a4a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/687b5f0a806b71c842ca3ca6cd990899.bin b/HoloBot/Library/ShaderCache/6/687b5f0a806b71c842ca3ca6cd990899.bin new file mode 100644 index 0000000..8491ed0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/687b5f0a806b71c842ca3ca6cd990899.bin differ diff --git a/HoloBot/Library/ShaderCache/6/688630c7316d206356f51ef8bb596dd3.bin b/HoloBot/Library/ShaderCache/6/688630c7316d206356f51ef8bb596dd3.bin new file mode 100644 index 0000000..8716e01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/688630c7316d206356f51ef8bb596dd3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/68c52e2877716c23955c72304d285792.bin b/HoloBot/Library/ShaderCache/6/68c52e2877716c23955c72304d285792.bin new file mode 100644 index 0000000..3009f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/68c52e2877716c23955c72304d285792.bin differ diff --git a/HoloBot/Library/ShaderCache/6/690d8b765fb14a800e0ade5325a55727.bin b/HoloBot/Library/ShaderCache/6/690d8b765fb14a800e0ade5325a55727.bin new file mode 100644 index 0000000..1d6e08f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/690d8b765fb14a800e0ade5325a55727.bin differ diff --git a/HoloBot/Library/ShaderCache/6/691e14970a6ddad4db4cbae8616fef1d.bin b/HoloBot/Library/ShaderCache/6/691e14970a6ddad4db4cbae8616fef1d.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/691e14970a6ddad4db4cbae8616fef1d.bin differ diff --git a/HoloBot/Library/ShaderCache/6/691f153ca411c2579c38bb2f3c8fe522.bin b/HoloBot/Library/ShaderCache/6/691f153ca411c2579c38bb2f3c8fe522.bin new file mode 100644 index 0000000..e6e27b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/691f153ca411c2579c38bb2f3c8fe522.bin differ diff --git a/HoloBot/Library/ShaderCache/6/691fc23442d9849f72400cc306539e94.bin b/HoloBot/Library/ShaderCache/6/691fc23442d9849f72400cc306539e94.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/691fc23442d9849f72400cc306539e94.bin differ diff --git a/HoloBot/Library/ShaderCache/6/69405b489c442545290816cdc7b39dca.bin b/HoloBot/Library/ShaderCache/6/69405b489c442545290816cdc7b39dca.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/69405b489c442545290816cdc7b39dca.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6942429cd4b961f8d82f288e7ac46d80.bin b/HoloBot/Library/ShaderCache/6/6942429cd4b961f8d82f288e7ac46d80.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6942429cd4b961f8d82f288e7ac46d80.bin differ diff --git a/HoloBot/Library/ShaderCache/6/695815cad22f1f7e64252b2c3773fefe.bin b/HoloBot/Library/ShaderCache/6/695815cad22f1f7e64252b2c3773fefe.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/695815cad22f1f7e64252b2c3773fefe.bin differ diff --git a/HoloBot/Library/ShaderCache/6/696ddacbe5b0d3c43d867cce4921f1d2.bin b/HoloBot/Library/ShaderCache/6/696ddacbe5b0d3c43d867cce4921f1d2.bin new file mode 100644 index 0000000..5898f70 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/696ddacbe5b0d3c43d867cce4921f1d2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/69715c31a0bb2beb892373fa70cf0ec8.bin b/HoloBot/Library/ShaderCache/6/69715c31a0bb2beb892373fa70cf0ec8.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/69715c31a0bb2beb892373fa70cf0ec8.bin differ diff --git a/HoloBot/Library/ShaderCache/6/69ae091dbc933f4008d572c4e9779e95.bin b/HoloBot/Library/ShaderCache/6/69ae091dbc933f4008d572c4e9779e95.bin new file mode 100644 index 0000000..e0f75c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/69ae091dbc933f4008d572c4e9779e95.bin differ diff --git a/HoloBot/Library/ShaderCache/6/69cf589828ae96d56cc30b15cd34dae2.bin b/HoloBot/Library/ShaderCache/6/69cf589828ae96d56cc30b15cd34dae2.bin new file mode 100644 index 0000000..cdc06c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/69cf589828ae96d56cc30b15cd34dae2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/69da5426eb954301fb73e5ef7a5b2c6a.bin b/HoloBot/Library/ShaderCache/6/69da5426eb954301fb73e5ef7a5b2c6a.bin new file mode 100644 index 0000000..8be8d8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/69da5426eb954301fb73e5ef7a5b2c6a.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a36539611507347b7bf904fd0131f55.bin b/HoloBot/Library/ShaderCache/6/6a36539611507347b7bf904fd0131f55.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a36539611507347b7bf904fd0131f55.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a52ffbc4012e4ad65d68a30968203a0.bin b/HoloBot/Library/ShaderCache/6/6a52ffbc4012e4ad65d68a30968203a0.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a52ffbc4012e4ad65d68a30968203a0.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a57ca7fc740b8beced6bb26203f8bdd.bin b/HoloBot/Library/ShaderCache/6/6a57ca7fc740b8beced6bb26203f8bdd.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a57ca7fc740b8beced6bb26203f8bdd.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a644f17b95e7a9cee48995bf973945b.bin b/HoloBot/Library/ShaderCache/6/6a644f17b95e7a9cee48995bf973945b.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a644f17b95e7a9cee48995bf973945b.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a70df3bed6f79060e7f760838dbf92f.bin b/HoloBot/Library/ShaderCache/6/6a70df3bed6f79060e7f760838dbf92f.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a70df3bed6f79060e7f760838dbf92f.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a8435cb7f2ac7a4221ab6061caf7c02.bin b/HoloBot/Library/ShaderCache/6/6a8435cb7f2ac7a4221ab6061caf7c02.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a8435cb7f2ac7a4221ab6061caf7c02.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6a87c665e70663d342376e55bffdd19c.bin b/HoloBot/Library/ShaderCache/6/6a87c665e70663d342376e55bffdd19c.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6a87c665e70663d342376e55bffdd19c.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6ab2ca2fad99921f6f459808486edf2f.bin b/HoloBot/Library/ShaderCache/6/6ab2ca2fad99921f6f459808486edf2f.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6ab2ca2fad99921f6f459808486edf2f.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6ab354697ab07642b0262b355d3c0c16.bin b/HoloBot/Library/ShaderCache/6/6ab354697ab07642b0262b355d3c0c16.bin new file mode 100644 index 0000000..0c92bda Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6ab354697ab07642b0262b355d3c0c16.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6b075cf30f9f52d99e03b67d35e3f1cd.bin b/HoloBot/Library/ShaderCache/6/6b075cf30f9f52d99e03b67d35e3f1cd.bin new file mode 100644 index 0000000..cf6c67e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6b075cf30f9f52d99e03b67d35e3f1cd.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6b15292aa204c83a785e471ce14fa0cb.bin b/HoloBot/Library/ShaderCache/6/6b15292aa204c83a785e471ce14fa0cb.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6b15292aa204c83a785e471ce14fa0cb.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6b2a1d6d94ca241a1795c6f3c5df4ae7.bin b/HoloBot/Library/ShaderCache/6/6b2a1d6d94ca241a1795c6f3c5df4ae7.bin new file mode 100644 index 0000000..b947028 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6b2a1d6d94ca241a1795c6f3c5df4ae7.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6b5387714fea8ff72125fee7087a8570.bin b/HoloBot/Library/ShaderCache/6/6b5387714fea8ff72125fee7087a8570.bin new file mode 100644 index 0000000..4c59858 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6b5387714fea8ff72125fee7087a8570.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6b93a442ca32740591283812559ec7a2.bin b/HoloBot/Library/ShaderCache/6/6b93a442ca32740591283812559ec7a2.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6b93a442ca32740591283812559ec7a2.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6bb4019b1be90194ca186ad854811873.bin b/HoloBot/Library/ShaderCache/6/6bb4019b1be90194ca186ad854811873.bin new file mode 100644 index 0000000..597101c Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6bb4019b1be90194ca186ad854811873.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6bd6b4878f7b7e8b64cb389fd86ba664.bin b/HoloBot/Library/ShaderCache/6/6bd6b4878f7b7e8b64cb389fd86ba664.bin new file mode 100644 index 0000000..0ce36d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6bd6b4878f7b7e8b64cb389fd86ba664.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6c35ecdfc212edd246b9b946d0c469fa.bin b/HoloBot/Library/ShaderCache/6/6c35ecdfc212edd246b9b946d0c469fa.bin new file mode 100644 index 0000000..ca3b5f1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6c35ecdfc212edd246b9b946d0c469fa.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6c375abe1fc2aad039bb61224ec72dee.bin b/HoloBot/Library/ShaderCache/6/6c375abe1fc2aad039bb61224ec72dee.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6c375abe1fc2aad039bb61224ec72dee.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6c7a4c189b95fa9d72ee47610b356bda.bin b/HoloBot/Library/ShaderCache/6/6c7a4c189b95fa9d72ee47610b356bda.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6c7a4c189b95fa9d72ee47610b356bda.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6c9f9dd25669cbf82965950f98cda71d.bin b/HoloBot/Library/ShaderCache/6/6c9f9dd25669cbf82965950f98cda71d.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6c9f9dd25669cbf82965950f98cda71d.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6ca41955676ce2391bf1f9c431eecf46.bin b/HoloBot/Library/ShaderCache/6/6ca41955676ce2391bf1f9c431eecf46.bin new file mode 100644 index 0000000..307a3e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6ca41955676ce2391bf1f9c431eecf46.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6cba0126ab2b50d7efe6bdc60cac48be.bin b/HoloBot/Library/ShaderCache/6/6cba0126ab2b50d7efe6bdc60cac48be.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6cba0126ab2b50d7efe6bdc60cac48be.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6cbd6ab41ee284e287a5d878678c334b.bin b/HoloBot/Library/ShaderCache/6/6cbd6ab41ee284e287a5d878678c334b.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6cbd6ab41ee284e287a5d878678c334b.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6cf4bfbdefbbd6b247d2ba2eb54b38a3.bin b/HoloBot/Library/ShaderCache/6/6cf4bfbdefbbd6b247d2ba2eb54b38a3.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6cf4bfbdefbbd6b247d2ba2eb54b38a3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6cff5f418dd23d46ffda0e2ab71c33f3.bin b/HoloBot/Library/ShaderCache/6/6cff5f418dd23d46ffda0e2ab71c33f3.bin new file mode 100644 index 0000000..d75132b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6cff5f418dd23d46ffda0e2ab71c33f3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d05fbb75cf4e3cfa4d57b25e3491e76.bin b/HoloBot/Library/ShaderCache/6/6d05fbb75cf4e3cfa4d57b25e3491e76.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d05fbb75cf4e3cfa4d57b25e3491e76.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d3aaf4b7e7628bf43dc312587a4de31.bin b/HoloBot/Library/ShaderCache/6/6d3aaf4b7e7628bf43dc312587a4de31.bin new file mode 100644 index 0000000..a978c3a Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d3aaf4b7e7628bf43dc312587a4de31.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d7f2585cc03878de7333d2761f7eec6.bin b/HoloBot/Library/ShaderCache/6/6d7f2585cc03878de7333d2761f7eec6.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d7f2585cc03878de7333d2761f7eec6.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d82af8812c0b2636413768bcb1fce3d.bin b/HoloBot/Library/ShaderCache/6/6d82af8812c0b2636413768bcb1fce3d.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d82af8812c0b2636413768bcb1fce3d.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d85fddb9be117546a221be43164ccab.bin b/HoloBot/Library/ShaderCache/6/6d85fddb9be117546a221be43164ccab.bin new file mode 100644 index 0000000..7ca588b Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d85fddb9be117546a221be43164ccab.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6d8e12328f1a22512f491bf7c36b5acf.bin b/HoloBot/Library/ShaderCache/6/6d8e12328f1a22512f491bf7c36b5acf.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6d8e12328f1a22512f491bf7c36b5acf.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6dc7947e2ace825231bd1e87c8d2e0ce.bin b/HoloBot/Library/ShaderCache/6/6dc7947e2ace825231bd1e87c8d2e0ce.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6dc7947e2ace825231bd1e87c8d2e0ce.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6dcc603bdec3f3de83896fbead0d0667.bin b/HoloBot/Library/ShaderCache/6/6dcc603bdec3f3de83896fbead0d0667.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6dcc603bdec3f3de83896fbead0d0667.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6dfb889c3abcc98bbe377316fee50047.bin b/HoloBot/Library/ShaderCache/6/6dfb889c3abcc98bbe377316fee50047.bin new file mode 100644 index 0000000..d0fa95e Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6dfb889c3abcc98bbe377316fee50047.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e0ecdd77259206967ecfd39c8e39621.bin b/HoloBot/Library/ShaderCache/6/6e0ecdd77259206967ecfd39c8e39621.bin new file mode 100644 index 0000000..fe0d67d Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e0ecdd77259206967ecfd39c8e39621.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e0fa592e9eb1fefa20f26d9b5306c8f.bin b/HoloBot/Library/ShaderCache/6/6e0fa592e9eb1fefa20f26d9b5306c8f.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e0fa592e9eb1fefa20f26d9b5306c8f.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e16880e5b95125c4b87305a490a88e1.bin b/HoloBot/Library/ShaderCache/6/6e16880e5b95125c4b87305a490a88e1.bin new file mode 100644 index 0000000..2295df9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e16880e5b95125c4b87305a490a88e1.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e3fe6653f23f5c06be79365cb5d1075.bin b/HoloBot/Library/ShaderCache/6/6e3fe6653f23f5c06be79365cb5d1075.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e3fe6653f23f5c06be79365cb5d1075.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e4fddad569e8711e63001afeb8c05a3.bin b/HoloBot/Library/ShaderCache/6/6e4fddad569e8711e63001afeb8c05a3.bin new file mode 100644 index 0000000..31bfefd Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e4fddad569e8711e63001afeb8c05a3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6e8c59bc73679b1fe17ffec6137ba2a3.bin b/HoloBot/Library/ShaderCache/6/6e8c59bc73679b1fe17ffec6137ba2a3.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6e8c59bc73679b1fe17ffec6137ba2a3.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6ed4aca96175f44c8c094e2d0d2f8952.bin b/HoloBot/Library/ShaderCache/6/6ed4aca96175f44c8c094e2d0d2f8952.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6ed4aca96175f44c8c094e2d0d2f8952.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6ef9d854bd36180075568155a73a8f2f.bin b/HoloBot/Library/ShaderCache/6/6ef9d854bd36180075568155a73a8f2f.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6ef9d854bd36180075568155a73a8f2f.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6f053aa941eb6f022a2e9f60df4bec65.bin b/HoloBot/Library/ShaderCache/6/6f053aa941eb6f022a2e9f60df4bec65.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6f053aa941eb6f022a2e9f60df4bec65.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6f1edfd0d06b15c17fe9f01feda106a4.bin b/HoloBot/Library/ShaderCache/6/6f1edfd0d06b15c17fe9f01feda106a4.bin new file mode 100644 index 0000000..1f4e7a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6f1edfd0d06b15c17fe9f01feda106a4.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6f5d75463a27dd3d628b8cae7ff279b9.bin b/HoloBot/Library/ShaderCache/6/6f5d75463a27dd3d628b8cae7ff279b9.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6f5d75463a27dd3d628b8cae7ff279b9.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6f84ec495214f6f0f215e4db2e65a060.bin b/HoloBot/Library/ShaderCache/6/6f84ec495214f6f0f215e4db2e65a060.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6f84ec495214f6f0f215e4db2e65a060.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6fa0884561c5e864c66d0ccf17fd1a40.bin b/HoloBot/Library/ShaderCache/6/6fa0884561c5e864c66d0ccf17fd1a40.bin new file mode 100644 index 0000000..65323c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6fa0884561c5e864c66d0ccf17fd1a40.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6fa6e716ce48a35df73be95a22dfa0ec.bin b/HoloBot/Library/ShaderCache/6/6fa6e716ce48a35df73be95a22dfa0ec.bin new file mode 100644 index 0000000..eb33410 Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6fa6e716ce48a35df73be95a22dfa0ec.bin differ diff --git a/HoloBot/Library/ShaderCache/6/6fa81fcc79680035b36dbeb38176d687.bin b/HoloBot/Library/ShaderCache/6/6fa81fcc79680035b36dbeb38176d687.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/6/6fa81fcc79680035b36dbeb38176d687.bin differ diff --git a/HoloBot/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin b/HoloBot/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin new file mode 100644 index 0000000..0d30117 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7054147ceb3bb4d181d1685e0f9d06ff.bin b/HoloBot/Library/ShaderCache/7/7054147ceb3bb4d181d1685e0f9d06ff.bin new file mode 100644 index 0000000..965ca9d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7054147ceb3bb4d181d1685e0f9d06ff.bin differ diff --git a/HoloBot/Library/ShaderCache/7/705ffff180a21450a2678037953feb44.bin b/HoloBot/Library/ShaderCache/7/705ffff180a21450a2678037953feb44.bin new file mode 100644 index 0000000..cd8a6cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/705ffff180a21450a2678037953feb44.bin differ diff --git a/HoloBot/Library/ShaderCache/7/706127a43e2f12186f338509a6bbd832.bin b/HoloBot/Library/ShaderCache/7/706127a43e2f12186f338509a6bbd832.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/706127a43e2f12186f338509a6bbd832.bin differ diff --git a/HoloBot/Library/ShaderCache/7/707132c1c1578c7a9cc4ea723f35ebf7.bin b/HoloBot/Library/ShaderCache/7/707132c1c1578c7a9cc4ea723f35ebf7.bin new file mode 100644 index 0000000..b38b583 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/707132c1c1578c7a9cc4ea723f35ebf7.bin differ diff --git a/HoloBot/Library/ShaderCache/7/70855c143a9264414704ba06b790bc09.bin b/HoloBot/Library/ShaderCache/7/70855c143a9264414704ba06b790bc09.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/70855c143a9264414704ba06b790bc09.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7094930efb67b5bbc7841503ec6a242d.bin b/HoloBot/Library/ShaderCache/7/7094930efb67b5bbc7841503ec6a242d.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7094930efb67b5bbc7841503ec6a242d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/70aee1b95cc33b543cbfb1913ecd8cb8.bin b/HoloBot/Library/ShaderCache/7/70aee1b95cc33b543cbfb1913ecd8cb8.bin new file mode 100644 index 0000000..1d825dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/70aee1b95cc33b543cbfb1913ecd8cb8.bin differ diff --git a/HoloBot/Library/ShaderCache/7/70f6d93fe08187e6bcff00957b59e06d.bin b/HoloBot/Library/ShaderCache/7/70f6d93fe08187e6bcff00957b59e06d.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/70f6d93fe08187e6bcff00957b59e06d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/70fd6684b8eaf018fca06212976e8a7b.bin b/HoloBot/Library/ShaderCache/7/70fd6684b8eaf018fca06212976e8a7b.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/70fd6684b8eaf018fca06212976e8a7b.bin differ diff --git a/HoloBot/Library/ShaderCache/7/711b6b01546b030618b922735fe7baf2.bin b/HoloBot/Library/ShaderCache/7/711b6b01546b030618b922735fe7baf2.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/711b6b01546b030618b922735fe7baf2.bin differ diff --git a/HoloBot/Library/ShaderCache/7/712fc9b1b3776e45171753d3151ba560.bin b/HoloBot/Library/ShaderCache/7/712fc9b1b3776e45171753d3151ba560.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/712fc9b1b3776e45171753d3151ba560.bin differ diff --git a/HoloBot/Library/ShaderCache/7/719fad1e8edaa512e1cd9e359ba551fb.bin b/HoloBot/Library/ShaderCache/7/719fad1e8edaa512e1cd9e359ba551fb.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/719fad1e8edaa512e1cd9e359ba551fb.bin differ diff --git a/HoloBot/Library/ShaderCache/7/71c09fdc13d28899e01c6e979b9636d5.bin b/HoloBot/Library/ShaderCache/7/71c09fdc13d28899e01c6e979b9636d5.bin new file mode 100644 index 0000000..ec4c169 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/71c09fdc13d28899e01c6e979b9636d5.bin differ diff --git a/HoloBot/Library/ShaderCache/7/71cce1ac329a3290119637de49694451.bin b/HoloBot/Library/ShaderCache/7/71cce1ac329a3290119637de49694451.bin new file mode 100644 index 0000000..3b4ee51 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/71cce1ac329a3290119637de49694451.bin differ diff --git a/HoloBot/Library/ShaderCache/7/71df8c5689454fe077eba9a283773694.bin b/HoloBot/Library/ShaderCache/7/71df8c5689454fe077eba9a283773694.bin new file mode 100644 index 0000000..2643afa Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/71df8c5689454fe077eba9a283773694.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7201c4a006c3949751a1134cc68e4129.bin b/HoloBot/Library/ShaderCache/7/7201c4a006c3949751a1134cc68e4129.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7201c4a006c3949751a1134cc68e4129.bin differ diff --git a/HoloBot/Library/ShaderCache/7/721f415e903c73f7f84bc09173d1cad3.bin b/HoloBot/Library/ShaderCache/7/721f415e903c73f7f84bc09173d1cad3.bin new file mode 100644 index 0000000..bd05db5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/721f415e903c73f7f84bc09173d1cad3.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7222cb3f5ed8ae5ab53707f3b1a4614a.bin b/HoloBot/Library/ShaderCache/7/7222cb3f5ed8ae5ab53707f3b1a4614a.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7222cb3f5ed8ae5ab53707f3b1a4614a.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72274d923681b9e0281f792e7075c984.bin b/HoloBot/Library/ShaderCache/7/72274d923681b9e0281f792e7075c984.bin new file mode 100644 index 0000000..918be03 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72274d923681b9e0281f792e7075c984.bin differ diff --git a/HoloBot/Library/ShaderCache/7/722a9167fe0638b13253d8a086b3a224.bin b/HoloBot/Library/ShaderCache/7/722a9167fe0638b13253d8a086b3a224.bin new file mode 100644 index 0000000..9f3c685 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/722a9167fe0638b13253d8a086b3a224.bin differ diff --git a/HoloBot/Library/ShaderCache/7/722ddb44d92feab292622028caba8c37.bin b/HoloBot/Library/ShaderCache/7/722ddb44d92feab292622028caba8c37.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/722ddb44d92feab292622028caba8c37.bin differ diff --git a/HoloBot/Library/ShaderCache/7/723e5dc4e1e0dfd9920d7778e8ba8532.bin b/HoloBot/Library/ShaderCache/7/723e5dc4e1e0dfd9920d7778e8ba8532.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/723e5dc4e1e0dfd9920d7778e8ba8532.bin differ diff --git a/HoloBot/Library/ShaderCache/7/724c855b0505cceabeb90c2231366fa6.bin b/HoloBot/Library/ShaderCache/7/724c855b0505cceabeb90c2231366fa6.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/724c855b0505cceabeb90c2231366fa6.bin differ diff --git a/HoloBot/Library/ShaderCache/7/724ff28d1d8f8badf827cffcd9e4a631.bin b/HoloBot/Library/ShaderCache/7/724ff28d1d8f8badf827cffcd9e4a631.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/724ff28d1d8f8badf827cffcd9e4a631.bin differ diff --git a/HoloBot/Library/ShaderCache/7/726b1464461b43d0daf65c62d0b1560a.bin b/HoloBot/Library/ShaderCache/7/726b1464461b43d0daf65c62d0b1560a.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/726b1464461b43d0daf65c62d0b1560a.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72d0cfb6cc0b4a92c5a2ea042933733c.bin b/HoloBot/Library/ShaderCache/7/72d0cfb6cc0b4a92c5a2ea042933733c.bin new file mode 100644 index 0000000..8cdd7d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72d0cfb6cc0b4a92c5a2ea042933733c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72e15f21f9cffb0a4719bd99730dbd95.bin b/HoloBot/Library/ShaderCache/7/72e15f21f9cffb0a4719bd99730dbd95.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72e15f21f9cffb0a4719bd99730dbd95.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72ea24dd85a36cb091170e9250a9d70f.bin b/HoloBot/Library/ShaderCache/7/72ea24dd85a36cb091170e9250a9d70f.bin new file mode 100644 index 0000000..299aed8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72ea24dd85a36cb091170e9250a9d70f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72f1408edecf9efccab44e8c09d5823d.bin b/HoloBot/Library/ShaderCache/7/72f1408edecf9efccab44e8c09d5823d.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72f1408edecf9efccab44e8c09d5823d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/72f4335cbe13c79603e0e57c98273b07.bin b/HoloBot/Library/ShaderCache/7/72f4335cbe13c79603e0e57c98273b07.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/72f4335cbe13c79603e0e57c98273b07.bin differ diff --git a/HoloBot/Library/ShaderCache/7/730a1f68f048a132eb6e048924e581db.bin b/HoloBot/Library/ShaderCache/7/730a1f68f048a132eb6e048924e581db.bin new file mode 100644 index 0000000..aadb74b Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/730a1f68f048a132eb6e048924e581db.bin differ diff --git a/HoloBot/Library/ShaderCache/7/73229e87feac7f806f6d04c8ee208c85.bin b/HoloBot/Library/ShaderCache/7/73229e87feac7f806f6d04c8ee208c85.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/73229e87feac7f806f6d04c8ee208c85.bin differ diff --git a/HoloBot/Library/ShaderCache/7/73561b0407c947a4bf49eaccc9e1e17f.bin b/HoloBot/Library/ShaderCache/7/73561b0407c947a4bf49eaccc9e1e17f.bin new file mode 100644 index 0000000..299aa09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/73561b0407c947a4bf49eaccc9e1e17f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/73620c496728ae59c38c22bfdd767645.bin b/HoloBot/Library/ShaderCache/7/73620c496728ae59c38c22bfdd767645.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/73620c496728ae59c38c22bfdd767645.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7368686cfb5d0fb88e12cb04ccb740f0.bin b/HoloBot/Library/ShaderCache/7/7368686cfb5d0fb88e12cb04ccb740f0.bin new file mode 100644 index 0000000..2643afa Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7368686cfb5d0fb88e12cb04ccb740f0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7379848c370b64cbc8a6d2600ca98cd2.bin b/HoloBot/Library/ShaderCache/7/7379848c370b64cbc8a6d2600ca98cd2.bin new file mode 100644 index 0000000..5898f70 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7379848c370b64cbc8a6d2600ca98cd2.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7383e7fad2520a507b742b32e6fc1c5f.bin b/HoloBot/Library/ShaderCache/7/7383e7fad2520a507b742b32e6fc1c5f.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7383e7fad2520a507b742b32e6fc1c5f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/73b10702d93c24441ab55dd9152175b1.bin b/HoloBot/Library/ShaderCache/7/73b10702d93c24441ab55dd9152175b1.bin new file mode 100644 index 0000000..da37e6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/73b10702d93c24441ab55dd9152175b1.bin differ diff --git a/HoloBot/Library/ShaderCache/7/73d7915dd95e31a6cc1c6068b1dc5896.bin b/HoloBot/Library/ShaderCache/7/73d7915dd95e31a6cc1c6068b1dc5896.bin new file mode 100644 index 0000000..249e4f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/73d7915dd95e31a6cc1c6068b1dc5896.bin differ diff --git a/HoloBot/Library/ShaderCache/7/74075e039127a9476c6a8a9183cdc15d.bin b/HoloBot/Library/ShaderCache/7/74075e039127a9476c6a8a9183cdc15d.bin new file mode 100644 index 0000000..c792d17 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/74075e039127a9476c6a8a9183cdc15d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/740a77369a9bbf531495e273b7f22243.bin b/HoloBot/Library/ShaderCache/7/740a77369a9bbf531495e273b7f22243.bin new file mode 100644 index 0000000..f37bff8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/740a77369a9bbf531495e273b7f22243.bin differ diff --git a/HoloBot/Library/ShaderCache/7/74188e506ead0af5952de8c75ee2fdbf.bin b/HoloBot/Library/ShaderCache/7/74188e506ead0af5952de8c75ee2fdbf.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/74188e506ead0af5952de8c75ee2fdbf.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7423445e33359f41a8efcc6885a145f8.bin b/HoloBot/Library/ShaderCache/7/7423445e33359f41a8efcc6885a145f8.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7423445e33359f41a8efcc6885a145f8.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7452b0b3edf7a8b4da9755d17c49fbc0.bin b/HoloBot/Library/ShaderCache/7/7452b0b3edf7a8b4da9755d17c49fbc0.bin new file mode 100644 index 0000000..569bd14 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7452b0b3edf7a8b4da9755d17c49fbc0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/745d2b0a1f8636301e08b4b562bc84ec.bin b/HoloBot/Library/ShaderCache/7/745d2b0a1f8636301e08b4b562bc84ec.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/745d2b0a1f8636301e08b4b562bc84ec.bin differ diff --git a/HoloBot/Library/ShaderCache/7/747c25c90ccb2e55df6425b37fec5f58.bin b/HoloBot/Library/ShaderCache/7/747c25c90ccb2e55df6425b37fec5f58.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/747c25c90ccb2e55df6425b37fec5f58.bin differ diff --git a/HoloBot/Library/ShaderCache/7/74b65ed9b8b72c05efb081f3ce852918.bin b/HoloBot/Library/ShaderCache/7/74b65ed9b8b72c05efb081f3ce852918.bin new file mode 100644 index 0000000..f9a3973 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/74b65ed9b8b72c05efb081f3ce852918.bin differ diff --git a/HoloBot/Library/ShaderCache/7/74e515aa475d1f2ac38297b32aa0ca30.bin b/HoloBot/Library/ShaderCache/7/74e515aa475d1f2ac38297b32aa0ca30.bin new file mode 100644 index 0000000..3acc5cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/74e515aa475d1f2ac38297b32aa0ca30.bin differ diff --git a/HoloBot/Library/ShaderCache/7/74ea98fdb38cd28de8988388bbcb4319.bin b/HoloBot/Library/ShaderCache/7/74ea98fdb38cd28de8988388bbcb4319.bin new file mode 100644 index 0000000..dd799f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/74ea98fdb38cd28de8988388bbcb4319.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7510abbd70351057390efe8e1ee692ff.bin b/HoloBot/Library/ShaderCache/7/7510abbd70351057390efe8e1ee692ff.bin new file mode 100644 index 0000000..33abf4d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7510abbd70351057390efe8e1ee692ff.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7529f850d710eb18931fa2e096e3da24.bin b/HoloBot/Library/ShaderCache/7/7529f850d710eb18931fa2e096e3da24.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7529f850d710eb18931fa2e096e3da24.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7538bfeaf276df616967cee12a3fee35.bin b/HoloBot/Library/ShaderCache/7/7538bfeaf276df616967cee12a3fee35.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7538bfeaf276df616967cee12a3fee35.bin differ diff --git a/HoloBot/Library/ShaderCache/7/753b8edf00b601992016e4ffb09d88e3.bin b/HoloBot/Library/ShaderCache/7/753b8edf00b601992016e4ffb09d88e3.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/753b8edf00b601992016e4ffb09d88e3.bin differ diff --git a/HoloBot/Library/ShaderCache/7/755d6378c5a4712d6c9731d009874440.bin b/HoloBot/Library/ShaderCache/7/755d6378c5a4712d6c9731d009874440.bin new file mode 100644 index 0000000..c36168b Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/755d6378c5a4712d6c9731d009874440.bin differ diff --git a/HoloBot/Library/ShaderCache/7/75688ac47dbdd73790f70826707f24ac.bin b/HoloBot/Library/ShaderCache/7/75688ac47dbdd73790f70826707f24ac.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/75688ac47dbdd73790f70826707f24ac.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7575091b8f493a4cdc0c152e7777e365.bin b/HoloBot/Library/ShaderCache/7/7575091b8f493a4cdc0c152e7777e365.bin new file mode 100644 index 0000000..97d13ee Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7575091b8f493a4cdc0c152e7777e365.bin differ diff --git a/HoloBot/Library/ShaderCache/7/75b383c01d027e9c892ed4c70c690282.bin b/HoloBot/Library/ShaderCache/7/75b383c01d027e9c892ed4c70c690282.bin new file mode 100644 index 0000000..df35ff0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/75b383c01d027e9c892ed4c70c690282.bin differ diff --git a/HoloBot/Library/ShaderCache/7/75eae59f48f17fc5d3e72cca5d0cad97.bin b/HoloBot/Library/ShaderCache/7/75eae59f48f17fc5d3e72cca5d0cad97.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/75eae59f48f17fc5d3e72cca5d0cad97.bin differ diff --git a/HoloBot/Library/ShaderCache/7/75fadb1bbb24abe066a2efb8a6a84b8c.bin b/HoloBot/Library/ShaderCache/7/75fadb1bbb24abe066a2efb8a6a84b8c.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/75fadb1bbb24abe066a2efb8a6a84b8c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/76511a6b2269f88d8ee38b0466ac9dde.bin b/HoloBot/Library/ShaderCache/7/76511a6b2269f88d8ee38b0466ac9dde.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/76511a6b2269f88d8ee38b0466ac9dde.bin differ diff --git a/HoloBot/Library/ShaderCache/7/76a518ef8f2150bbc458050f8950e384.bin b/HoloBot/Library/ShaderCache/7/76a518ef8f2150bbc458050f8950e384.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/76a518ef8f2150bbc458050f8950e384.bin differ diff --git a/HoloBot/Library/ShaderCache/7/76d0b36c381e59740f4ad34904da355f.bin b/HoloBot/Library/ShaderCache/7/76d0b36c381e59740f4ad34904da355f.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/76d0b36c381e59740f4ad34904da355f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/76ede5548da2615df7698af0ef49d00a.bin b/HoloBot/Library/ShaderCache/7/76ede5548da2615df7698af0ef49d00a.bin new file mode 100644 index 0000000..e889a90 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/76ede5548da2615df7698af0ef49d00a.bin differ diff --git a/HoloBot/Library/ShaderCache/7/772c7a1d5973efaab96c60d7f5428ab5.bin b/HoloBot/Library/ShaderCache/7/772c7a1d5973efaab96c60d7f5428ab5.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/772c7a1d5973efaab96c60d7f5428ab5.bin differ diff --git a/HoloBot/Library/ShaderCache/7/773de4cb4ceda172521a99195d3a1fe5.bin b/HoloBot/Library/ShaderCache/7/773de4cb4ceda172521a99195d3a1fe5.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/773de4cb4ceda172521a99195d3a1fe5.bin differ diff --git a/HoloBot/Library/ShaderCache/7/774828287c4694fec1c5eece7b934eb8.bin b/HoloBot/Library/ShaderCache/7/774828287c4694fec1c5eece7b934eb8.bin new file mode 100644 index 0000000..e9056a8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/774828287c4694fec1c5eece7b934eb8.bin differ diff --git a/HoloBot/Library/ShaderCache/7/774e4580f58c0d08bb2b6665080966b0.bin b/HoloBot/Library/ShaderCache/7/774e4580f58c0d08bb2b6665080966b0.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/774e4580f58c0d08bb2b6665080966b0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/77641efe65653ced539fe1232ab3109c.bin b/HoloBot/Library/ShaderCache/7/77641efe65653ced539fe1232ab3109c.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/77641efe65653ced539fe1232ab3109c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/778eda3c88eb209740e9ae0fc5e5e9be.bin b/HoloBot/Library/ShaderCache/7/778eda3c88eb209740e9ae0fc5e5e9be.bin new file mode 100644 index 0000000..2643afa Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/778eda3c88eb209740e9ae0fc5e5e9be.bin differ diff --git a/HoloBot/Library/ShaderCache/7/77c56b0f603f91e81c3b13efac205f19.bin b/HoloBot/Library/ShaderCache/7/77c56b0f603f91e81c3b13efac205f19.bin new file mode 100644 index 0000000..784139c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/77c56b0f603f91e81c3b13efac205f19.bin differ diff --git a/HoloBot/Library/ShaderCache/7/77e1b9fb3acf07d3a41e6e0410b4e84b.bin b/HoloBot/Library/ShaderCache/7/77e1b9fb3acf07d3a41e6e0410b4e84b.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/77e1b9fb3acf07d3a41e6e0410b4e84b.bin differ diff --git a/HoloBot/Library/ShaderCache/7/78025384cc7bdc00e24debc42e76da1b.bin b/HoloBot/Library/ShaderCache/7/78025384cc7bdc00e24debc42e76da1b.bin new file mode 100644 index 0000000..fe0d67d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/78025384cc7bdc00e24debc42e76da1b.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7813c9cce08b57f4bf2875c5af73e7a2.bin b/HoloBot/Library/ShaderCache/7/7813c9cce08b57f4bf2875c5af73e7a2.bin new file mode 100644 index 0000000..2245eaa Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7813c9cce08b57f4bf2875c5af73e7a2.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7824a32c9c0dd25d4dcb3437c1a9eb8e.bin b/HoloBot/Library/ShaderCache/7/7824a32c9c0dd25d4dcb3437c1a9eb8e.bin new file mode 100644 index 0000000..bd118f1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7824a32c9c0dd25d4dcb3437c1a9eb8e.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7836a2ad1d8ec0df0a694af078b5ed94.bin b/HoloBot/Library/ShaderCache/7/7836a2ad1d8ec0df0a694af078b5ed94.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7836a2ad1d8ec0df0a694af078b5ed94.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7867110da289a494c637a0981934be48.bin b/HoloBot/Library/ShaderCache/7/7867110da289a494c637a0981934be48.bin new file mode 100644 index 0000000..d4cc89f Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7867110da289a494c637a0981934be48.bin differ diff --git a/HoloBot/Library/ShaderCache/7/78743ecd1cf8169939421080973a806c.bin b/HoloBot/Library/ShaderCache/7/78743ecd1cf8169939421080973a806c.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/78743ecd1cf8169939421080973a806c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7883b2aa9a434537ce50b64251bafc2f.bin b/HoloBot/Library/ShaderCache/7/7883b2aa9a434537ce50b64251bafc2f.bin new file mode 100644 index 0000000..1e20f01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7883b2aa9a434537ce50b64251bafc2f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/788bd96332dfe3b4e1416ac1e9aeeb5a.bin b/HoloBot/Library/ShaderCache/7/788bd96332dfe3b4e1416ac1e9aeeb5a.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/788bd96332dfe3b4e1416ac1e9aeeb5a.bin differ diff --git a/HoloBot/Library/ShaderCache/7/791d00ba1378e1062196810d1c69e2bb.bin b/HoloBot/Library/ShaderCache/7/791d00ba1378e1062196810d1c69e2bb.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/791d00ba1378e1062196810d1c69e2bb.bin differ diff --git a/HoloBot/Library/ShaderCache/7/792e2942baba64e8f9f0af70ce0c9eab.bin b/HoloBot/Library/ShaderCache/7/792e2942baba64e8f9f0af70ce0c9eab.bin new file mode 100644 index 0000000..a3d9540 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/792e2942baba64e8f9f0af70ce0c9eab.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7931b8de2b85f9ac9edc7518d3747815.bin b/HoloBot/Library/ShaderCache/7/7931b8de2b85f9ac9edc7518d3747815.bin new file mode 100644 index 0000000..99931a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7931b8de2b85f9ac9edc7518d3747815.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7947dd9de2ddd8bc41bc5568defdaf22.bin b/HoloBot/Library/ShaderCache/7/7947dd9de2ddd8bc41bc5568defdaf22.bin new file mode 100644 index 0000000..ba9b2f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7947dd9de2ddd8bc41bc5568defdaf22.bin differ diff --git a/HoloBot/Library/ShaderCache/7/79615a3043bfe1d63bb7c876ba739a50.bin b/HoloBot/Library/ShaderCache/7/79615a3043bfe1d63bb7c876ba739a50.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/79615a3043bfe1d63bb7c876ba739a50.bin differ diff --git a/HoloBot/Library/ShaderCache/7/79741b2c4b9c08877c3d19b769c7181c.bin b/HoloBot/Library/ShaderCache/7/79741b2c4b9c08877c3d19b769c7181c.bin new file mode 100644 index 0000000..e596307 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/79741b2c4b9c08877c3d19b769c7181c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/797e4a83bd6ac33e2149205b4cc14bdf.bin b/HoloBot/Library/ShaderCache/7/797e4a83bd6ac33e2149205b4cc14bdf.bin new file mode 100644 index 0000000..311fa85 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/797e4a83bd6ac33e2149205b4cc14bdf.bin differ diff --git a/HoloBot/Library/ShaderCache/7/79d78de197d4af53cfc4c7d96590e8b1.bin b/HoloBot/Library/ShaderCache/7/79d78de197d4af53cfc4c7d96590e8b1.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/79d78de197d4af53cfc4c7d96590e8b1.bin differ diff --git a/HoloBot/Library/ShaderCache/7/79fd22130cb029515908c5d23e40bbd0.bin b/HoloBot/Library/ShaderCache/7/79fd22130cb029515908c5d23e40bbd0.bin new file mode 100644 index 0000000..a536e20 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/79fd22130cb029515908c5d23e40bbd0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a3cc68d66895d3cd9a6d020d08f2dba.bin b/HoloBot/Library/ShaderCache/7/7a3cc68d66895d3cd9a6d020d08f2dba.bin new file mode 100644 index 0000000..3b842f7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a3cc68d66895d3cd9a6d020d08f2dba.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a5d1f04b4f76ab20d1629bdf0c016f0.bin b/HoloBot/Library/ShaderCache/7/7a5d1f04b4f76ab20d1629bdf0c016f0.bin new file mode 100644 index 0000000..762968f Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a5d1f04b4f76ab20d1629bdf0c016f0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a5ee44c6c911080485f37bcfe6ea726.bin b/HoloBot/Library/ShaderCache/7/7a5ee44c6c911080485f37bcfe6ea726.bin new file mode 100644 index 0000000..cdd44bc Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a5ee44c6c911080485f37bcfe6ea726.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a62ecfe635e33a8036059ab1c0b1b4b.bin b/HoloBot/Library/ShaderCache/7/7a62ecfe635e33a8036059ab1c0b1b4b.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a62ecfe635e33a8036059ab1c0b1b4b.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a67c9fde790a9c4707219246a12eb1b.bin b/HoloBot/Library/ShaderCache/7/7a67c9fde790a9c4707219246a12eb1b.bin new file mode 100644 index 0000000..1c4b04c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a67c9fde790a9c4707219246a12eb1b.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a72002c5c479bb0dd297eadc74a1a31.bin b/HoloBot/Library/ShaderCache/7/7a72002c5c479bb0dd297eadc74a1a31.bin new file mode 100644 index 0000000..f44b484 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a72002c5c479bb0dd297eadc74a1a31.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a7554d27c228cd454e44c0802b41b99.bin b/HoloBot/Library/ShaderCache/7/7a7554d27c228cd454e44c0802b41b99.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a7554d27c228cd454e44c0802b41b99.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a898e2a765535076bc4c595b46522d2.bin b/HoloBot/Library/ShaderCache/7/7a898e2a765535076bc4c595b46522d2.bin new file mode 100644 index 0000000..a909f14 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a898e2a765535076bc4c595b46522d2.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a8fbbc688b24e66d2c2a7b04221c81e.bin b/HoloBot/Library/ShaderCache/7/7a8fbbc688b24e66d2c2a7b04221c81e.bin new file mode 100644 index 0000000..278eb5e Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a8fbbc688b24e66d2c2a7b04221c81e.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7a9ae76149de54c5c525349a646643fa.bin b/HoloBot/Library/ShaderCache/7/7a9ae76149de54c5c525349a646643fa.bin new file mode 100644 index 0000000..d959520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7a9ae76149de54c5c525349a646643fa.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ab4a957558157acbc91878521b33826.bin b/HoloBot/Library/ShaderCache/7/7ab4a957558157acbc91878521b33826.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ab4a957558157acbc91878521b33826.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ab6a8e87588969cbce9d1aab2c71cb0.bin b/HoloBot/Library/ShaderCache/7/7ab6a8e87588969cbce9d1aab2c71cb0.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ab6a8e87588969cbce9d1aab2c71cb0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7aba42dba353fca4b8b08d0c889ea172.bin b/HoloBot/Library/ShaderCache/7/7aba42dba353fca4b8b08d0c889ea172.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7aba42dba353fca4b8b08d0c889ea172.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ad769297b409f04e2012897d17a07ea.bin b/HoloBot/Library/ShaderCache/7/7ad769297b409f04e2012897d17a07ea.bin new file mode 100644 index 0000000..92fab16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ad769297b409f04e2012897d17a07ea.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ae4754c0669920f756e6d69624dd0cb.bin b/HoloBot/Library/ShaderCache/7/7ae4754c0669920f756e6d69624dd0cb.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ae4754c0669920f756e6d69624dd0cb.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7b1254e1436327d0a42d8c1fa407c945.bin b/HoloBot/Library/ShaderCache/7/7b1254e1436327d0a42d8c1fa407c945.bin new file mode 100644 index 0000000..7c4d601 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7b1254e1436327d0a42d8c1fa407c945.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7b419a2ea75ede20dcc6fc7647beb911.bin b/HoloBot/Library/ShaderCache/7/7b419a2ea75ede20dcc6fc7647beb911.bin new file mode 100644 index 0000000..642a3ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7b419a2ea75ede20dcc6fc7647beb911.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7b698186b25bc51f9893990d275e7936.bin b/HoloBot/Library/ShaderCache/7/7b698186b25bc51f9893990d275e7936.bin new file mode 100644 index 0000000..0e9c8b5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7b698186b25bc51f9893990d275e7936.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7b77419102b2786b27faf9dc0f3849b0.bin b/HoloBot/Library/ShaderCache/7/7b77419102b2786b27faf9dc0f3849b0.bin new file mode 100644 index 0000000..da37e6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7b77419102b2786b27faf9dc0f3849b0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ba9485319cd073ef50c971104acfa88.bin b/HoloBot/Library/ShaderCache/7/7ba9485319cd073ef50c971104acfa88.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ba9485319cd073ef50c971104acfa88.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7bdede97bb629acba6c2c0743a27c6ad.bin b/HoloBot/Library/ShaderCache/7/7bdede97bb629acba6c2c0743a27c6ad.bin new file mode 100644 index 0000000..9da6ede Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7bdede97bb629acba6c2c0743a27c6ad.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7beb1d1d0a3b46be88730f9858228197.bin b/HoloBot/Library/ShaderCache/7/7beb1d1d0a3b46be88730f9858228197.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7beb1d1d0a3b46be88730f9858228197.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7bef4a8866cf77301143c984b1bb7cac.bin b/HoloBot/Library/ShaderCache/7/7bef4a8866cf77301143c984b1bb7cac.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7bef4a8866cf77301143c984b1bb7cac.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7bf94a5de2c7d064992979703c02a5c6.bin b/HoloBot/Library/ShaderCache/7/7bf94a5de2c7d064992979703c02a5c6.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7bf94a5de2c7d064992979703c02a5c6.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c005ded18c11a76206d29f0b9100fbd.bin b/HoloBot/Library/ShaderCache/7/7c005ded18c11a76206d29f0b9100fbd.bin new file mode 100644 index 0000000..2641235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c005ded18c11a76206d29f0b9100fbd.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c15ce46139f81c05c26b24b7778ce57.bin b/HoloBot/Library/ShaderCache/7/7c15ce46139f81c05c26b24b7778ce57.bin new file mode 100644 index 0000000..4391efc Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c15ce46139f81c05c26b24b7778ce57.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c20a147faa6824a02c3751188e78e34.bin b/HoloBot/Library/ShaderCache/7/7c20a147faa6824a02c3751188e78e34.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c20a147faa6824a02c3751188e78e34.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c21344fa7691ccd7ee8d07fe3f10deb.bin b/HoloBot/Library/ShaderCache/7/7c21344fa7691ccd7ee8d07fe3f10deb.bin new file mode 100644 index 0000000..aadb74b Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c21344fa7691ccd7ee8d07fe3f10deb.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c353c84f6d263db0b987ce55571e811.bin b/HoloBot/Library/ShaderCache/7/7c353c84f6d263db0b987ce55571e811.bin new file mode 100644 index 0000000..072d630 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c353c84f6d263db0b987ce55571e811.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c4646106b2efaeda4fc90c27f39237d.bin b/HoloBot/Library/ShaderCache/7/7c4646106b2efaeda4fc90c27f39237d.bin new file mode 100644 index 0000000..14df558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c4646106b2efaeda4fc90c27f39237d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c560fdee3821bfdc55e52136cef1949.bin b/HoloBot/Library/ShaderCache/7/7c560fdee3821bfdc55e52136cef1949.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c560fdee3821bfdc55e52136cef1949.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c696cc2995136c3b1ab2f047f5554f7.bin b/HoloBot/Library/ShaderCache/7/7c696cc2995136c3b1ab2f047f5554f7.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c696cc2995136c3b1ab2f047f5554f7.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c7033da8e9906ac35498fe10b07c37f.bin b/HoloBot/Library/ShaderCache/7/7c7033da8e9906ac35498fe10b07c37f.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c7033da8e9906ac35498fe10b07c37f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7c9b6c4e297a4899d9acc52fcd290d0f.bin b/HoloBot/Library/ShaderCache/7/7c9b6c4e297a4899d9acc52fcd290d0f.bin new file mode 100644 index 0000000..03fd995 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7c9b6c4e297a4899d9acc52fcd290d0f.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7cfadc1d99f895b291c5188800993ae2.bin b/HoloBot/Library/ShaderCache/7/7cfadc1d99f895b291c5188800993ae2.bin new file mode 100644 index 0000000..d7da91c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7cfadc1d99f895b291c5188800993ae2.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7d04ada3c018404747669cd8abc03207.bin b/HoloBot/Library/ShaderCache/7/7d04ada3c018404747669cd8abc03207.bin new file mode 100644 index 0000000..33abf4d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7d04ada3c018404747669cd8abc03207.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7d20fd394f3ee067816aeadfeb20adaf.bin b/HoloBot/Library/ShaderCache/7/7d20fd394f3ee067816aeadfeb20adaf.bin new file mode 100644 index 0000000..47adc6f Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7d20fd394f3ee067816aeadfeb20adaf.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7d4a4adaec4b8cecd939217fa83aa5d0.bin b/HoloBot/Library/ShaderCache/7/7d4a4adaec4b8cecd939217fa83aa5d0.bin new file mode 100644 index 0000000..1243b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7d4a4adaec4b8cecd939217fa83aa5d0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7d4bcf62a5a3542c83f96079cee8ee30.bin b/HoloBot/Library/ShaderCache/7/7d4bcf62a5a3542c83f96079cee8ee30.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7d4bcf62a5a3542c83f96079cee8ee30.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7deb0229973b043ffc60df1c2b163c9d.bin b/HoloBot/Library/ShaderCache/7/7deb0229973b043ffc60df1c2b163c9d.bin new file mode 100644 index 0000000..732eefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7deb0229973b043ffc60df1c2b163c9d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e02468008eb8061a245ad676a3434b5.bin b/HoloBot/Library/ShaderCache/7/7e02468008eb8061a245ad676a3434b5.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e02468008eb8061a245ad676a3434b5.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e093b876372936466286b0aabf9323d.bin b/HoloBot/Library/ShaderCache/7/7e093b876372936466286b0aabf9323d.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e093b876372936466286b0aabf9323d.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e29a4de16b82e70a5647b53bf8f0ed0.bin b/HoloBot/Library/ShaderCache/7/7e29a4de16b82e70a5647b53bf8f0ed0.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e29a4de16b82e70a5647b53bf8f0ed0.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e3c1d2efcce68d99c6204e575ed2964.bin b/HoloBot/Library/ShaderCache/7/7e3c1d2efcce68d99c6204e575ed2964.bin new file mode 100644 index 0000000..06ccd71 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e3c1d2efcce68d99c6204e575ed2964.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e609f77e40edf136ae5a7cc26155f41.bin b/HoloBot/Library/ShaderCache/7/7e609f77e40edf136ae5a7cc26155f41.bin new file mode 100644 index 0000000..147b6d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e609f77e40edf136ae5a7cc26155f41.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e67ccc977e42170dca14970aa037ab8.bin b/HoloBot/Library/ShaderCache/7/7e67ccc977e42170dca14970aa037ab8.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e67ccc977e42170dca14970aa037ab8.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e8cc7d18981ad3a50581c7cb3d2b21c.bin b/HoloBot/Library/ShaderCache/7/7e8cc7d18981ad3a50581c7cb3d2b21c.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e8cc7d18981ad3a50581c7cb3d2b21c.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e8da9babf1f25a8e0367217fbabfff3.bin b/HoloBot/Library/ShaderCache/7/7e8da9babf1f25a8e0367217fbabfff3.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e8da9babf1f25a8e0367217fbabfff3.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7e908416c8a7f794cf687a4d88d33210.bin b/HoloBot/Library/ShaderCache/7/7e908416c8a7f794cf687a4d88d33210.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7e908416c8a7f794cf687a4d88d33210.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ec265cf9d1c003659e1f8b34cf7dfae.bin b/HoloBot/Library/ShaderCache/7/7ec265cf9d1c003659e1f8b34cf7dfae.bin new file mode 100644 index 0000000..3730d1f Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ec265cf9d1c003659e1f8b34cf7dfae.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ec671c75d6ccf2c04145d6ef321d968.bin b/HoloBot/Library/ShaderCache/7/7ec671c75d6ccf2c04145d6ef321d968.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ec671c75d6ccf2c04145d6ef321d968.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ee5049a2e3f8f810ac65470249a9588.bin b/HoloBot/Library/ShaderCache/7/7ee5049a2e3f8f810ac65470249a9588.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ee5049a2e3f8f810ac65470249a9588.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ef1789b3923257d7e37d478215fe8fc.bin b/HoloBot/Library/ShaderCache/7/7ef1789b3923257d7e37d478215fe8fc.bin new file mode 100644 index 0000000..a228c77 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ef1789b3923257d7e37d478215fe8fc.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7efb1ae69372a6ee5cbb326156e84dda.bin b/HoloBot/Library/ShaderCache/7/7efb1ae69372a6ee5cbb326156e84dda.bin new file mode 100644 index 0000000..ae00f07 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7efb1ae69372a6ee5cbb326156e84dda.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7f2a63817c7d0e272be9c6a1cf2d7a28.bin b/HoloBot/Library/ShaderCache/7/7f2a63817c7d0e272be9c6a1cf2d7a28.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7f2a63817c7d0e272be9c6a1cf2d7a28.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7f3854281bba8e5303b5264803223e2a.bin b/HoloBot/Library/ShaderCache/7/7f3854281bba8e5303b5264803223e2a.bin new file mode 100644 index 0000000..5acc2ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7f3854281bba8e5303b5264803223e2a.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7f8b2e19366d6727c26ff8c43c196abf.bin b/HoloBot/Library/ShaderCache/7/7f8b2e19366d6727c26ff8c43c196abf.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7f8b2e19366d6727c26ff8c43c196abf.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7fc7825faf9275aa41414cfad0402107.bin b/HoloBot/Library/ShaderCache/7/7fc7825faf9275aa41414cfad0402107.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7fc7825faf9275aa41414cfad0402107.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ff31e019cbd44c617c48b88dbfbe4eb.bin b/HoloBot/Library/ShaderCache/7/7ff31e019cbd44c617c48b88dbfbe4eb.bin new file mode 100644 index 0000000..055a41c Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ff31e019cbd44c617c48b88dbfbe4eb.bin differ diff --git a/HoloBot/Library/ShaderCache/7/7ff5f9d6adcca7c6570bf92cf4f3a405.bin b/HoloBot/Library/ShaderCache/7/7ff5f9d6adcca7c6570bf92cf4f3a405.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/7/7ff5f9d6adcca7c6570bf92cf4f3a405.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8004ccb06692a08a0f80c2389a72b00e.bin b/HoloBot/Library/ShaderCache/8/8004ccb06692a08a0f80c2389a72b00e.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8004ccb06692a08a0f80c2389a72b00e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/80347f0d941f646a464f816cdd39ac68.bin b/HoloBot/Library/ShaderCache/8/80347f0d941f646a464f816cdd39ac68.bin new file mode 100644 index 0000000..d8489eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/80347f0d941f646a464f816cdd39ac68.bin differ diff --git a/HoloBot/Library/ShaderCache/8/80486e8b8a6cbc0780786e5d5b2d949e.bin b/HoloBot/Library/ShaderCache/8/80486e8b8a6cbc0780786e5d5b2d949e.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/80486e8b8a6cbc0780786e5d5b2d949e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/80586d0246215882c098badd27f5c28d.bin b/HoloBot/Library/ShaderCache/8/80586d0246215882c098badd27f5c28d.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/80586d0246215882c098badd27f5c28d.bin differ diff --git a/HoloBot/Library/ShaderCache/8/806e34dc5ce3d65b7cb9bc2b6ab723c7.bin b/HoloBot/Library/ShaderCache/8/806e34dc5ce3d65b7cb9bc2b6ab723c7.bin new file mode 100644 index 0000000..d0fa95e Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/806e34dc5ce3d65b7cb9bc2b6ab723c7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/806ec0c0c654b3e9798437a487819095.bin b/HoloBot/Library/ShaderCache/8/806ec0c0c654b3e9798437a487819095.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/806ec0c0c654b3e9798437a487819095.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8082e0a1e07106b0dedfb9072eb8ffd7.bin b/HoloBot/Library/ShaderCache/8/8082e0a1e07106b0dedfb9072eb8ffd7.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8082e0a1e07106b0dedfb9072eb8ffd7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8083cd9dfa8ef4347a80881c89ed508b.bin b/HoloBot/Library/ShaderCache/8/8083cd9dfa8ef4347a80881c89ed508b.bin new file mode 100644 index 0000000..1243b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8083cd9dfa8ef4347a80881c89ed508b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/80baf4800f3f689cd67df63cf4fe2662.bin b/HoloBot/Library/ShaderCache/8/80baf4800f3f689cd67df63cf4fe2662.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/80baf4800f3f689cd67df63cf4fe2662.bin differ diff --git a/HoloBot/Library/ShaderCache/8/80c3965cd9b52ba610d8175000316fdc.bin b/HoloBot/Library/ShaderCache/8/80c3965cd9b52ba610d8175000316fdc.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/80c3965cd9b52ba610d8175000316fdc.bin differ diff --git a/HoloBot/Library/ShaderCache/8/81d733f28ad0c51356bb9b23a729e3b1.bin b/HoloBot/Library/ShaderCache/8/81d733f28ad0c51356bb9b23a729e3b1.bin new file mode 100644 index 0000000..09e43de Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/81d733f28ad0c51356bb9b23a729e3b1.bin differ diff --git a/HoloBot/Library/ShaderCache/8/81fe43cf026b189c82e6fa23d454bd32.bin b/HoloBot/Library/ShaderCache/8/81fe43cf026b189c82e6fa23d454bd32.bin new file mode 100644 index 0000000..01060b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/81fe43cf026b189c82e6fa23d454bd32.bin differ diff --git a/HoloBot/Library/ShaderCache/8/823656125924ca8cb940558924e02561.bin b/HoloBot/Library/ShaderCache/8/823656125924ca8cb940558924e02561.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/823656125924ca8cb940558924e02561.bin differ diff --git a/HoloBot/Library/ShaderCache/8/824ccf1a5f66a2d19c48446d4ea40edc.bin b/HoloBot/Library/ShaderCache/8/824ccf1a5f66a2d19c48446d4ea40edc.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/824ccf1a5f66a2d19c48446d4ea40edc.bin differ diff --git a/HoloBot/Library/ShaderCache/8/82864dccbc7f7d18dc229cb10545a158.bin b/HoloBot/Library/ShaderCache/8/82864dccbc7f7d18dc229cb10545a158.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/82864dccbc7f7d18dc229cb10545a158.bin differ diff --git a/HoloBot/Library/ShaderCache/8/828f9bf72700224b1c2c04ee506434cb.bin b/HoloBot/Library/ShaderCache/8/828f9bf72700224b1c2c04ee506434cb.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/828f9bf72700224b1c2c04ee506434cb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/82ad79dfbe8fb3cccbb08d4b2a3feb36.bin b/HoloBot/Library/ShaderCache/8/82ad79dfbe8fb3cccbb08d4b2a3feb36.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/82ad79dfbe8fb3cccbb08d4b2a3feb36.bin differ diff --git a/HoloBot/Library/ShaderCache/8/82cd14473318c908f94d4f9a00a5ce67.bin b/HoloBot/Library/ShaderCache/8/82cd14473318c908f94d4f9a00a5ce67.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/82cd14473318c908f94d4f9a00a5ce67.bin differ diff --git a/HoloBot/Library/ShaderCache/8/82efb90ce731a203d1d238470cd67b80.bin b/HoloBot/Library/ShaderCache/8/82efb90ce731a203d1d238470cd67b80.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/82efb90ce731a203d1d238470cd67b80.bin differ diff --git a/HoloBot/Library/ShaderCache/8/82ffb2795dff7fbc70c5ea17de8a66ee.bin b/HoloBot/Library/ShaderCache/8/82ffb2795dff7fbc70c5ea17de8a66ee.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/82ffb2795dff7fbc70c5ea17de8a66ee.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83007aecbc383816ccb9ee5075f3cec3.bin b/HoloBot/Library/ShaderCache/8/83007aecbc383816ccb9ee5075f3cec3.bin new file mode 100644 index 0000000..d832abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83007aecbc383816ccb9ee5075f3cec3.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83037e6a6eb4a4b97eff8549032ca1c0.bin b/HoloBot/Library/ShaderCache/8/83037e6a6eb4a4b97eff8549032ca1c0.bin new file mode 100644 index 0000000..36c6de6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83037e6a6eb4a4b97eff8549032ca1c0.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8310f7bc528f528b80ad06090128b0e6.bin b/HoloBot/Library/ShaderCache/8/8310f7bc528f528b80ad06090128b0e6.bin new file mode 100644 index 0000000..8d73d0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8310f7bc528f528b80ad06090128b0e6.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8331e589a3c042c6ccb5205e2303cb73.bin b/HoloBot/Library/ShaderCache/8/8331e589a3c042c6ccb5205e2303cb73.bin new file mode 100644 index 0000000..03fd995 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8331e589a3c042c6ccb5205e2303cb73.bin differ diff --git a/HoloBot/Library/ShaderCache/8/834797ef25bae4fb6b7af0430bc09bf5.bin b/HoloBot/Library/ShaderCache/8/834797ef25bae4fb6b7af0430bc09bf5.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/834797ef25bae4fb6b7af0430bc09bf5.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83595a26a877278fc424786ca55c0f2e.bin b/HoloBot/Library/ShaderCache/8/83595a26a877278fc424786ca55c0f2e.bin new file mode 100644 index 0000000..f203ee7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83595a26a877278fc424786ca55c0f2e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/836f39e3fe53d22679285c7cbe8abd67.bin b/HoloBot/Library/ShaderCache/8/836f39e3fe53d22679285c7cbe8abd67.bin new file mode 100644 index 0000000..bed4552 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/836f39e3fe53d22679285c7cbe8abd67.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8385f23e9ff5b7a1eb51b3eb9b4ff4ec.bin b/HoloBot/Library/ShaderCache/8/8385f23e9ff5b7a1eb51b3eb9b4ff4ec.bin new file mode 100644 index 0000000..c01c457 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8385f23e9ff5b7a1eb51b3eb9b4ff4ec.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83a23ca01d97ec3b7679936705c87cd6.bin b/HoloBot/Library/ShaderCache/8/83a23ca01d97ec3b7679936705c87cd6.bin new file mode 100644 index 0000000..5949a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83a23ca01d97ec3b7679936705c87cd6.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83a70a5527377b09d8461e8f02ec476d.bin b/HoloBot/Library/ShaderCache/8/83a70a5527377b09d8461e8f02ec476d.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83a70a5527377b09d8461e8f02ec476d.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83b04c3316d33deed0a2c852893cebd6.bin b/HoloBot/Library/ShaderCache/8/83b04c3316d33deed0a2c852893cebd6.bin new file mode 100644 index 0000000..ede179d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83b04c3316d33deed0a2c852893cebd6.bin differ diff --git a/HoloBot/Library/ShaderCache/8/83dead1fe18a1a9f6bd4db38384e2ce4.bin b/HoloBot/Library/ShaderCache/8/83dead1fe18a1a9f6bd4db38384e2ce4.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/83dead1fe18a1a9f6bd4db38384e2ce4.bin differ diff --git a/HoloBot/Library/ShaderCache/8/847b39f07473be28774f497bf8ef5315.bin b/HoloBot/Library/ShaderCache/8/847b39f07473be28774f497bf8ef5315.bin new file mode 100644 index 0000000..8af7afc Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/847b39f07473be28774f497bf8ef5315.bin differ diff --git a/HoloBot/Library/ShaderCache/8/84b668c59f0885f8552d70615be8dca6.bin b/HoloBot/Library/ShaderCache/8/84b668c59f0885f8552d70615be8dca6.bin new file mode 100644 index 0000000..073c154 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/84b668c59f0885f8552d70615be8dca6.bin differ diff --git a/HoloBot/Library/ShaderCache/8/84b7fccd5e241218b4584c54c47906bb.bin b/HoloBot/Library/ShaderCache/8/84b7fccd5e241218b4584c54c47906bb.bin new file mode 100644 index 0000000..be5fbf6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/84b7fccd5e241218b4584c54c47906bb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/84c171a120d5ea8e77c27d72a5bc4a24.bin b/HoloBot/Library/ShaderCache/8/84c171a120d5ea8e77c27d72a5bc4a24.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/84c171a120d5ea8e77c27d72a5bc4a24.bin differ diff --git a/HoloBot/Library/ShaderCache/8/84e2df24b641a6e3f46204777ab0f87f.bin b/HoloBot/Library/ShaderCache/8/84e2df24b641a6e3f46204777ab0f87f.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/84e2df24b641a6e3f46204777ab0f87f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8517e7dbc9c5a991f9e1cb85e6dccb8b.bin b/HoloBot/Library/ShaderCache/8/8517e7dbc9c5a991f9e1cb85e6dccb8b.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8517e7dbc9c5a991f9e1cb85e6dccb8b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/854b6e5d0f6274785842d51202db25a2.bin b/HoloBot/Library/ShaderCache/8/854b6e5d0f6274785842d51202db25a2.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/854b6e5d0f6274785842d51202db25a2.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8567793ffb02d9da81e469e3237d9c9f.bin b/HoloBot/Library/ShaderCache/8/8567793ffb02d9da81e469e3237d9c9f.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8567793ffb02d9da81e469e3237d9c9f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8587a278dff8be1212ebcadb21406fee.bin b/HoloBot/Library/ShaderCache/8/8587a278dff8be1212ebcadb21406fee.bin new file mode 100644 index 0000000..81ee184 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8587a278dff8be1212ebcadb21406fee.bin differ diff --git a/HoloBot/Library/ShaderCache/8/85aa5ca79211618c9debad71d0802a6f.bin b/HoloBot/Library/ShaderCache/8/85aa5ca79211618c9debad71d0802a6f.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/85aa5ca79211618c9debad71d0802a6f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/85b2c18986f62fe9356b44f3b46ce51b.bin b/HoloBot/Library/ShaderCache/8/85b2c18986f62fe9356b44f3b46ce51b.bin new file mode 100644 index 0000000..e0f75c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/85b2c18986f62fe9356b44f3b46ce51b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86270a5a4483ef36dd7b6ee853f19d91.bin b/HoloBot/Library/ShaderCache/8/86270a5a4483ef36dd7b6ee853f19d91.bin new file mode 100644 index 0000000..725d24c Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86270a5a4483ef36dd7b6ee853f19d91.bin differ diff --git a/HoloBot/Library/ShaderCache/8/864d7482f6baf827fe5cbe3341e8a8d1.bin b/HoloBot/Library/ShaderCache/8/864d7482f6baf827fe5cbe3341e8a8d1.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/864d7482f6baf827fe5cbe3341e8a8d1.bin differ diff --git a/HoloBot/Library/ShaderCache/8/866eb1be702947101999393c832aa20f.bin b/HoloBot/Library/ShaderCache/8/866eb1be702947101999393c832aa20f.bin new file mode 100644 index 0000000..5ab7acb Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/866eb1be702947101999393c832aa20f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/868619122db2322850f77a541a4bf112.bin b/HoloBot/Library/ShaderCache/8/868619122db2322850f77a541a4bf112.bin new file mode 100644 index 0000000..86a049a Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/868619122db2322850f77a541a4bf112.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86a54b581c8cc3793b2447fb0c53158b.bin b/HoloBot/Library/ShaderCache/8/86a54b581c8cc3793b2447fb0c53158b.bin new file mode 100644 index 0000000..d554e75 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86a54b581c8cc3793b2447fb0c53158b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86b938f307c31cb9a899a86746557acd.bin b/HoloBot/Library/ShaderCache/8/86b938f307c31cb9a899a86746557acd.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86b938f307c31cb9a899a86746557acd.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86c913548be9d8770e3d89ae0be72d27.bin b/HoloBot/Library/ShaderCache/8/86c913548be9d8770e3d89ae0be72d27.bin new file mode 100644 index 0000000..62a3b40 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86c913548be9d8770e3d89ae0be72d27.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86d6f2c2270d34b8464ff1d4b078ebcc.bin b/HoloBot/Library/ShaderCache/8/86d6f2c2270d34b8464ff1d4b078ebcc.bin new file mode 100644 index 0000000..110d6cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86d6f2c2270d34b8464ff1d4b078ebcc.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86e143c733b4aa03db76357311903cbd.bin b/HoloBot/Library/ShaderCache/8/86e143c733b4aa03db76357311903cbd.bin new file mode 100644 index 0000000..746df64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86e143c733b4aa03db76357311903cbd.bin differ diff --git a/HoloBot/Library/ShaderCache/8/86fb4ba4348c8828d7bc4a94017f18b2.bin b/HoloBot/Library/ShaderCache/8/86fb4ba4348c8828d7bc4a94017f18b2.bin new file mode 100644 index 0000000..0485742 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/86fb4ba4348c8828d7bc4a94017f18b2.bin differ diff --git a/HoloBot/Library/ShaderCache/8/872942a98ddade6238fb900cd4c4681c.bin b/HoloBot/Library/ShaderCache/8/872942a98ddade6238fb900cd4c4681c.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/872942a98ddade6238fb900cd4c4681c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/873ab93cc3714790b15dc569cb2c69b9.bin b/HoloBot/Library/ShaderCache/8/873ab93cc3714790b15dc569cb2c69b9.bin new file mode 100644 index 0000000..e9056a8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/873ab93cc3714790b15dc569cb2c69b9.bin differ diff --git a/HoloBot/Library/ShaderCache/8/873ee8bbfc524b7f851212473b645845.bin b/HoloBot/Library/ShaderCache/8/873ee8bbfc524b7f851212473b645845.bin new file mode 100644 index 0000000..e73c01e Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/873ee8bbfc524b7f851212473b645845.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8795d43f06eb85ddc99de8c2082beb49.bin b/HoloBot/Library/ShaderCache/8/8795d43f06eb85ddc99de8c2082beb49.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8795d43f06eb85ddc99de8c2082beb49.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8796914fd3e5f23ca9424daa3bf0d4d4.bin b/HoloBot/Library/ShaderCache/8/8796914fd3e5f23ca9424daa3bf0d4d4.bin new file mode 100644 index 0000000..bfec024 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8796914fd3e5f23ca9424daa3bf0d4d4.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87a6791fb1ffedd00c694086e521c89e.bin b/HoloBot/Library/ShaderCache/8/87a6791fb1ffedd00c694086e521c89e.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87a6791fb1ffedd00c694086e521c89e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87d93f3a8932ab82cb10f0386194394b.bin b/HoloBot/Library/ShaderCache/8/87d93f3a8932ab82cb10f0386194394b.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87d93f3a8932ab82cb10f0386194394b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87da41a2e358978ae78935ec23445a5e.bin b/HoloBot/Library/ShaderCache/8/87da41a2e358978ae78935ec23445a5e.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87da41a2e358978ae78935ec23445a5e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87db5fd1f8c9658b9fe7a36a682bf06c.bin b/HoloBot/Library/ShaderCache/8/87db5fd1f8c9658b9fe7a36a682bf06c.bin new file mode 100644 index 0000000..519dd42 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87db5fd1f8c9658b9fe7a36a682bf06c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87dce777787bbb3c0ef4e4f76af3cbc7.bin b/HoloBot/Library/ShaderCache/8/87dce777787bbb3c0ef4e4f76af3cbc7.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87dce777787bbb3c0ef4e4f76af3cbc7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/87eb48d2033a14d42aa4787538a09b92.bin b/HoloBot/Library/ShaderCache/8/87eb48d2033a14d42aa4787538a09b92.bin new file mode 100644 index 0000000..8336fda Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/87eb48d2033a14d42aa4787538a09b92.bin differ diff --git a/HoloBot/Library/ShaderCache/8/880fac5c13164232fbdb43052e86a04f.bin b/HoloBot/Library/ShaderCache/8/880fac5c13164232fbdb43052e86a04f.bin new file mode 100644 index 0000000..07a4f81 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/880fac5c13164232fbdb43052e86a04f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/88192a0be013d03900eee26bb740e752.bin b/HoloBot/Library/ShaderCache/8/88192a0be013d03900eee26bb740e752.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/88192a0be013d03900eee26bb740e752.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8819c3c711b5abf00f97c802d7054e5f.bin b/HoloBot/Library/ShaderCache/8/8819c3c711b5abf00f97c802d7054e5f.bin new file mode 100644 index 0000000..b42c6b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8819c3c711b5abf00f97c802d7054e5f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/882b32663bb9d122dc922292258a2454.bin b/HoloBot/Library/ShaderCache/8/882b32663bb9d122dc922292258a2454.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/882b32663bb9d122dc922292258a2454.bin differ diff --git a/HoloBot/Library/ShaderCache/8/884e5e341d1cd887c53b39b4ec14827b.bin b/HoloBot/Library/ShaderCache/8/884e5e341d1cd887c53b39b4ec14827b.bin new file mode 100644 index 0000000..99931a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/884e5e341d1cd887c53b39b4ec14827b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/885e20b14a94c542367f8c0bccd2bfcb.bin b/HoloBot/Library/ShaderCache/8/885e20b14a94c542367f8c0bccd2bfcb.bin new file mode 100644 index 0000000..14df558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/885e20b14a94c542367f8c0bccd2bfcb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/886875165504107c106b560f042b8c9b.bin b/HoloBot/Library/ShaderCache/8/886875165504107c106b560f042b8c9b.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/886875165504107c106b560f042b8c9b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/886f0c87ce69c8325ed670de7c6ca9e7.bin b/HoloBot/Library/ShaderCache/8/886f0c87ce69c8325ed670de7c6ca9e7.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/886f0c87ce69c8325ed670de7c6ca9e7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/88717fdfb24eb2a8f0317af68fb2cb9e.bin b/HoloBot/Library/ShaderCache/8/88717fdfb24eb2a8f0317af68fb2cb9e.bin new file mode 100644 index 0000000..2bf06d3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/88717fdfb24eb2a8f0317af68fb2cb9e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8877a99d04fca0a21be4a69520118239.bin b/HoloBot/Library/ShaderCache/8/8877a99d04fca0a21be4a69520118239.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8877a99d04fca0a21be4a69520118239.bin differ diff --git a/HoloBot/Library/ShaderCache/8/887ea74b4cd87faa7625131f0e36ffb0.bin b/HoloBot/Library/ShaderCache/8/887ea74b4cd87faa7625131f0e36ffb0.bin new file mode 100644 index 0000000..4e1940b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/887ea74b4cd87faa7625131f0e36ffb0.bin differ diff --git a/HoloBot/Library/ShaderCache/8/888774916c0d3ebc6d53b80749900db1.bin b/HoloBot/Library/ShaderCache/8/888774916c0d3ebc6d53b80749900db1.bin new file mode 100644 index 0000000..ae00f07 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/888774916c0d3ebc6d53b80749900db1.bin differ diff --git a/HoloBot/Library/ShaderCache/8/889b7b65210cf8c36324e5594489d66c.bin b/HoloBot/Library/ShaderCache/8/889b7b65210cf8c36324e5594489d66c.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/889b7b65210cf8c36324e5594489d66c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/88af15fc7713f60f9a25b97fcc2ba3cb.bin b/HoloBot/Library/ShaderCache/8/88af15fc7713f60f9a25b97fcc2ba3cb.bin new file mode 100644 index 0000000..c36168b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/88af15fc7713f60f9a25b97fcc2ba3cb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/892e72fcce80d8fc5d419a7106ba88f7.bin b/HoloBot/Library/ShaderCache/8/892e72fcce80d8fc5d419a7106ba88f7.bin new file mode 100644 index 0000000..103fcb7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/892e72fcce80d8fc5d419a7106ba88f7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8939548e9c85c768ef485d0452274d1f.bin b/HoloBot/Library/ShaderCache/8/8939548e9c85c768ef485d0452274d1f.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8939548e9c85c768ef485d0452274d1f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89472468db7441dfaea66350c7939b0e.bin b/HoloBot/Library/ShaderCache/8/89472468db7441dfaea66350c7939b0e.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89472468db7441dfaea66350c7939b0e.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89ac5ca30e01a52a28001341979bdce5.bin b/HoloBot/Library/ShaderCache/8/89ac5ca30e01a52a28001341979bdce5.bin new file mode 100644 index 0000000..06d5709 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89ac5ca30e01a52a28001341979bdce5.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89be62697528775e0c410cfaf139ab05.bin b/HoloBot/Library/ShaderCache/8/89be62697528775e0c410cfaf139ab05.bin new file mode 100644 index 0000000..65323c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89be62697528775e0c410cfaf139ab05.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89ceb4881a4b69b9bfe02cd18b524a70.bin b/HoloBot/Library/ShaderCache/8/89ceb4881a4b69b9bfe02cd18b524a70.bin new file mode 100644 index 0000000..98ace35 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89ceb4881a4b69b9bfe02cd18b524a70.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89e0e1ee3fa0aaab27e2e35fcbfc949d.bin b/HoloBot/Library/ShaderCache/8/89e0e1ee3fa0aaab27e2e35fcbfc949d.bin new file mode 100644 index 0000000..249e4f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89e0e1ee3fa0aaab27e2e35fcbfc949d.bin differ diff --git a/HoloBot/Library/ShaderCache/8/89f81d353a5baacdff1403b8349e8c75.bin b/HoloBot/Library/ShaderCache/8/89f81d353a5baacdff1403b8349e8c75.bin new file mode 100644 index 0000000..06d5709 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/89f81d353a5baacdff1403b8349e8c75.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8a3db5b5426c0df662eb4132a25515fa.bin b/HoloBot/Library/ShaderCache/8/8a3db5b5426c0df662eb4132a25515fa.bin new file mode 100644 index 0000000..233aec7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8a3db5b5426c0df662eb4132a25515fa.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8a4bf5d30d8f68ffbfe8ad6508328886.bin b/HoloBot/Library/ShaderCache/8/8a4bf5d30d8f68ffbfe8ad6508328886.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8a4bf5d30d8f68ffbfe8ad6508328886.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8a4dea6483c18272635c7013b6e147a2.bin b/HoloBot/Library/ShaderCache/8/8a4dea6483c18272635c7013b6e147a2.bin new file mode 100644 index 0000000..f62f192 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8a4dea6483c18272635c7013b6e147a2.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8a60d14839ab6eaa5bdc75101d9f3429.bin b/HoloBot/Library/ShaderCache/8/8a60d14839ab6eaa5bdc75101d9f3429.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8a60d14839ab6eaa5bdc75101d9f3429.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8a7f5d3a9366a6e238345a4429c1a864.bin b/HoloBot/Library/ShaderCache/8/8a7f5d3a9366a6e238345a4429c1a864.bin new file mode 100644 index 0000000..dbd59a2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8a7f5d3a9366a6e238345a4429c1a864.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8af3321e3dad333848f417d353d26905.bin b/HoloBot/Library/ShaderCache/8/8af3321e3dad333848f417d353d26905.bin new file mode 100644 index 0000000..76c5018 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8af3321e3dad333848f417d353d26905.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8b25c2a5a0efc3f9a356f26e6b814204.bin b/HoloBot/Library/ShaderCache/8/8b25c2a5a0efc3f9a356f26e6b814204.bin new file mode 100644 index 0000000..0d4b39d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8b25c2a5a0efc3f9a356f26e6b814204.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8b8950ecccafa09e6f8096a9db3e1fc8.bin b/HoloBot/Library/ShaderCache/8/8b8950ecccafa09e6f8096a9db3e1fc8.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8b8950ecccafa09e6f8096a9db3e1fc8.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8b8bf30e774b739f527db4edd55d8bec.bin b/HoloBot/Library/ShaderCache/8/8b8bf30e774b739f527db4edd55d8bec.bin new file mode 100644 index 0000000..f419d3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8b8bf30e774b739f527db4edd55d8bec.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8b8d1baacaf877899af8d9f6dec12925.bin b/HoloBot/Library/ShaderCache/8/8b8d1baacaf877899af8d9f6dec12925.bin new file mode 100644 index 0000000..be5fbf6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8b8d1baacaf877899af8d9f6dec12925.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8b9aa8104c644d47c7359cdd06b8794c.bin b/HoloBot/Library/ShaderCache/8/8b9aa8104c644d47c7359cdd06b8794c.bin new file mode 100644 index 0000000..7a0040a Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8b9aa8104c644d47c7359cdd06b8794c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ba723f19cbb3eb15ddc621b143898a3.bin b/HoloBot/Library/ShaderCache/8/8ba723f19cbb3eb15ddc621b143898a3.bin new file mode 100644 index 0000000..ede179d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ba723f19cbb3eb15ddc621b143898a3.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8bc465f462168806ac4a368786726747.bin b/HoloBot/Library/ShaderCache/8/8bc465f462168806ac4a368786726747.bin new file mode 100644 index 0000000..6c1e674 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8bc465f462168806ac4a368786726747.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8bca1f0758ae3e493ac3db72c83c047a.bin b/HoloBot/Library/ShaderCache/8/8bca1f0758ae3e493ac3db72c83c047a.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8bca1f0758ae3e493ac3db72c83c047a.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8bcb47b306df87c17675eeaca825442c.bin b/HoloBot/Library/ShaderCache/8/8bcb47b306df87c17675eeaca825442c.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8bcb47b306df87c17675eeaca825442c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8bd41c9d59634614e0c5ef067fc38496.bin b/HoloBot/Library/ShaderCache/8/8bd41c9d59634614e0c5ef067fc38496.bin new file mode 100644 index 0000000..b97bfd9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8bd41c9d59634614e0c5ef067fc38496.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8be4fcf700b3f413943f00c9ed2f762f.bin b/HoloBot/Library/ShaderCache/8/8be4fcf700b3f413943f00c9ed2f762f.bin new file mode 100644 index 0000000..697d1c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8be4fcf700b3f413943f00c9ed2f762f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8beb4b3b2f34ba4284b0e74808d7d8cd.bin b/HoloBot/Library/ShaderCache/8/8beb4b3b2f34ba4284b0e74808d7d8cd.bin new file mode 100644 index 0000000..5ba60e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8beb4b3b2f34ba4284b0e74808d7d8cd.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8bfa95ff7d796d9008161be17edda6f7.bin b/HoloBot/Library/ShaderCache/8/8bfa95ff7d796d9008161be17edda6f7.bin new file mode 100644 index 0000000..2451063 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8bfa95ff7d796d9008161be17edda6f7.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c1ac6fc3bfb5fa6d0486fdd552aba65.bin b/HoloBot/Library/ShaderCache/8/8c1ac6fc3bfb5fa6d0486fdd552aba65.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c1ac6fc3bfb5fa6d0486fdd552aba65.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c3ca5979cc31e1185a20a3f36822706.bin b/HoloBot/Library/ShaderCache/8/8c3ca5979cc31e1185a20a3f36822706.bin new file mode 100644 index 0000000..6759386 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c3ca5979cc31e1185a20a3f36822706.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c4247f45def23f571d32be65a2a2765.bin b/HoloBot/Library/ShaderCache/8/8c4247f45def23f571d32be65a2a2765.bin new file mode 100644 index 0000000..e2d08ef Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c4247f45def23f571d32be65a2a2765.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c4e72535f6a6ffd2a37733798afa5fa.bin b/HoloBot/Library/ShaderCache/8/8c4e72535f6a6ffd2a37733798afa5fa.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c4e72535f6a6ffd2a37733798afa5fa.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c8110c325490fed8bc575d774a90063.bin b/HoloBot/Library/ShaderCache/8/8c8110c325490fed8bc575d774a90063.bin new file mode 100644 index 0000000..5493f0d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c8110c325490fed8bc575d774a90063.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c941967513517621b84a7b817e83c0a.bin b/HoloBot/Library/ShaderCache/8/8c941967513517621b84a7b817e83c0a.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c941967513517621b84a7b817e83c0a.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8c98720c7442b0804c968dc9681e46c6.bin b/HoloBot/Library/ShaderCache/8/8c98720c7442b0804c968dc9681e46c6.bin new file mode 100644 index 0000000..d4c4d55 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8c98720c7442b0804c968dc9681e46c6.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ca633c2ed11765303f2261ac3a5e8c4.bin b/HoloBot/Library/ShaderCache/8/8ca633c2ed11765303f2261ac3a5e8c4.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ca633c2ed11765303f2261ac3a5e8c4.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8cb55209789e3f5d3a872269d619f221.bin b/HoloBot/Library/ShaderCache/8/8cb55209789e3f5d3a872269d619f221.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8cb55209789e3f5d3a872269d619f221.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ccde81031973ac41ade04d107dc47b0.bin b/HoloBot/Library/ShaderCache/8/8ccde81031973ac41ade04d107dc47b0.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ccde81031973ac41ade04d107dc47b0.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8d7441bc6418ba6dfa162804d4a4f95c.bin b/HoloBot/Library/ShaderCache/8/8d7441bc6418ba6dfa162804d4a4f95c.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8d7441bc6418ba6dfa162804d4a4f95c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8da3080c41152059807cc4b56c211d27.bin b/HoloBot/Library/ShaderCache/8/8da3080c41152059807cc4b56c211d27.bin new file mode 100644 index 0000000..e2d08ef Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8da3080c41152059807cc4b56c211d27.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8dac6e107b66fd8516c3ee121e476f9c.bin b/HoloBot/Library/ShaderCache/8/8dac6e107b66fd8516c3ee121e476f9c.bin new file mode 100644 index 0000000..55b908b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8dac6e107b66fd8516c3ee121e476f9c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8dcc14d545ef218db9540281a4c73552.bin b/HoloBot/Library/ShaderCache/8/8dcc14d545ef218db9540281a4c73552.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8dcc14d545ef218db9540281a4c73552.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8dee1c11a24efbc5def862970c88786c.bin b/HoloBot/Library/ShaderCache/8/8dee1c11a24efbc5def862970c88786c.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8dee1c11a24efbc5def862970c88786c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e22666ca54c1a0c8d6d3c864f1dca58.bin b/HoloBot/Library/ShaderCache/8/8e22666ca54c1a0c8d6d3c864f1dca58.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e22666ca54c1a0c8d6d3c864f1dca58.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e615d4353787cf712b29f242338c37b.bin b/HoloBot/Library/ShaderCache/8/8e615d4353787cf712b29f242338c37b.bin new file mode 100644 index 0000000..b576065 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e615d4353787cf712b29f242338c37b.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e62c92c56420dd86d974d074cd28f56.bin b/HoloBot/Library/ShaderCache/8/8e62c92c56420dd86d974d074cd28f56.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e62c92c56420dd86d974d074cd28f56.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e6d6e516cf5386f1965ddbefee58295.bin b/HoloBot/Library/ShaderCache/8/8e6d6e516cf5386f1965ddbefee58295.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e6d6e516cf5386f1965ddbefee58295.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e710405591ecb4ebce9b5c78a2608fb.bin b/HoloBot/Library/ShaderCache/8/8e710405591ecb4ebce9b5c78a2608fb.bin new file mode 100644 index 0000000..07a4f81 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e710405591ecb4ebce9b5c78a2608fb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8e9cf389f2bfde006770b0e1a7d9f5bb.bin b/HoloBot/Library/ShaderCache/8/8e9cf389f2bfde006770b0e1a7d9f5bb.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8e9cf389f2bfde006770b0e1a7d9f5bb.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8eb98032ae86a027b8009d8ce5745059.bin b/HoloBot/Library/ShaderCache/8/8eb98032ae86a027b8009d8ce5745059.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8eb98032ae86a027b8009d8ce5745059.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ec2e87c45321bfee61f75509ff11680.bin b/HoloBot/Library/ShaderCache/8/8ec2e87c45321bfee61f75509ff11680.bin new file mode 100644 index 0000000..9d7f256 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ec2e87c45321bfee61f75509ff11680.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ecfad9bdd9df46de2e41bc8e7a42e27.bin b/HoloBot/Library/ShaderCache/8/8ecfad9bdd9df46de2e41bc8e7a42e27.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ecfad9bdd9df46de2e41bc8e7a42e27.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f18eda3b6b31fd765c8a0aec0baa825.bin b/HoloBot/Library/ShaderCache/8/8f18eda3b6b31fd765c8a0aec0baa825.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f18eda3b6b31fd765c8a0aec0baa825.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f1ccd6a6541341b2bb05a3e63b0f7cf.bin b/HoloBot/Library/ShaderCache/8/8f1ccd6a6541341b2bb05a3e63b0f7cf.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f1ccd6a6541341b2bb05a3e63b0f7cf.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f43a3a34b42368781b9a160f74609e3.bin b/HoloBot/Library/ShaderCache/8/8f43a3a34b42368781b9a160f74609e3.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f43a3a34b42368781b9a160f74609e3.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f73b20d6898cb3fbbbc5f049906875c.bin b/HoloBot/Library/ShaderCache/8/8f73b20d6898cb3fbbbc5f049906875c.bin new file mode 100644 index 0000000..ede179d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f73b20d6898cb3fbbbc5f049906875c.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f7be5674f9820562ce28037ab200560.bin b/HoloBot/Library/ShaderCache/8/8f7be5674f9820562ce28037ab200560.bin new file mode 100644 index 0000000..d554e75 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f7be5674f9820562ce28037ab200560.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f82afe91ed910ccf49d2a19a78f4770.bin b/HoloBot/Library/ShaderCache/8/8f82afe91ed910ccf49d2a19a78f4770.bin new file mode 100644 index 0000000..4b3011d Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f82afe91ed910ccf49d2a19a78f4770.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f859164d664415641e035a1f70c1850.bin b/HoloBot/Library/ShaderCache/8/8f859164d664415641e035a1f70c1850.bin new file mode 100644 index 0000000..d2dcdd6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f859164d664415641e035a1f70c1850.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f8d5626c1421f592bcc6d571fb6112a.bin b/HoloBot/Library/ShaderCache/8/8f8d5626c1421f592bcc6d571fb6112a.bin new file mode 100644 index 0000000..6493b60 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f8d5626c1421f592bcc6d571fb6112a.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8f961204157d5ddf3788d9640b5a03d3.bin b/HoloBot/Library/ShaderCache/8/8f961204157d5ddf3788d9640b5a03d3.bin new file mode 100644 index 0000000..3e9c9cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8f961204157d5ddf3788d9640b5a03d3.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8fdae3ed3ff6fbc99ecc61c900d2d00f.bin b/HoloBot/Library/ShaderCache/8/8fdae3ed3ff6fbc99ecc61c900d2d00f.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8fdae3ed3ff6fbc99ecc61c900d2d00f.bin differ diff --git a/HoloBot/Library/ShaderCache/8/8ff71a634c905701c978331dfa45b7f1.bin b/HoloBot/Library/ShaderCache/8/8ff71a634c905701c978331dfa45b7f1.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/8/8ff71a634c905701c978331dfa45b7f1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/90206b6854ca22f11538c1838fd01537.bin b/HoloBot/Library/ShaderCache/9/90206b6854ca22f11538c1838fd01537.bin new file mode 100644 index 0000000..55bca4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/90206b6854ca22f11538c1838fd01537.bin differ diff --git a/HoloBot/Library/ShaderCache/9/905144d25aa8e8fb925d6bf03573e004.bin b/HoloBot/Library/ShaderCache/9/905144d25aa8e8fb925d6bf03573e004.bin new file mode 100644 index 0000000..8aab65b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/905144d25aa8e8fb925d6bf03573e004.bin differ diff --git a/HoloBot/Library/ShaderCache/9/905b74f82c54e371dbfa45d149c66538.bin b/HoloBot/Library/ShaderCache/9/905b74f82c54e371dbfa45d149c66538.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/905b74f82c54e371dbfa45d149c66538.bin differ diff --git a/HoloBot/Library/ShaderCache/9/908190e720f56ce8e76caf3f6a21d77b.bin b/HoloBot/Library/ShaderCache/9/908190e720f56ce8e76caf3f6a21d77b.bin new file mode 100644 index 0000000..e0f75c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/908190e720f56ce8e76caf3f6a21d77b.bin differ diff --git a/HoloBot/Library/ShaderCache/9/909b167e24df2fed4fc484e3892d135a.bin b/HoloBot/Library/ShaderCache/9/909b167e24df2fed4fc484e3892d135a.bin new file mode 100644 index 0000000..fe971be Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/909b167e24df2fed4fc484e3892d135a.bin differ diff --git a/HoloBot/Library/ShaderCache/9/90a039d7bf756fe929f6f6dc2cf7bc0d.bin b/HoloBot/Library/ShaderCache/9/90a039d7bf756fe929f6f6dc2cf7bc0d.bin new file mode 100644 index 0000000..6d43c7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/90a039d7bf756fe929f6f6dc2cf7bc0d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/90d61e2fdd6ba273e120400a9ef866c6.bin b/HoloBot/Library/ShaderCache/9/90d61e2fdd6ba273e120400a9ef866c6.bin new file mode 100644 index 0000000..de1c658 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/90d61e2fdd6ba273e120400a9ef866c6.bin differ diff --git a/HoloBot/Library/ShaderCache/9/90f2318f572f177c3261532a8ee7fe81.bin b/HoloBot/Library/ShaderCache/9/90f2318f572f177c3261532a8ee7fe81.bin new file mode 100644 index 0000000..c211b44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/90f2318f572f177c3261532a8ee7fe81.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9123f43135611fbb28f0d643d243de66.bin b/HoloBot/Library/ShaderCache/9/9123f43135611fbb28f0d643d243de66.bin new file mode 100644 index 0000000..a228c77 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9123f43135611fbb28f0d643d243de66.bin differ diff --git a/HoloBot/Library/ShaderCache/9/915118726f8f41c8dd4c0463b38c43fe.bin b/HoloBot/Library/ShaderCache/9/915118726f8f41c8dd4c0463b38c43fe.bin new file mode 100644 index 0000000..19bea58 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/915118726f8f41c8dd4c0463b38c43fe.bin differ diff --git a/HoloBot/Library/ShaderCache/9/916744e532e95ddc3904cc8e2b3aa40d.bin b/HoloBot/Library/ShaderCache/9/916744e532e95ddc3904cc8e2b3aa40d.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/916744e532e95ddc3904cc8e2b3aa40d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/916a88273d50ad46573a03e9ac4b5ea3.bin b/HoloBot/Library/ShaderCache/9/916a88273d50ad46573a03e9ac4b5ea3.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/916a88273d50ad46573a03e9ac4b5ea3.bin differ diff --git a/HoloBot/Library/ShaderCache/9/91917fca5b6c0149a46fd71fe49af0db.bin b/HoloBot/Library/ShaderCache/9/91917fca5b6c0149a46fd71fe49af0db.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/91917fca5b6c0149a46fd71fe49af0db.bin differ diff --git a/HoloBot/Library/ShaderCache/9/91a276ece622723a440012d028c0e566.bin b/HoloBot/Library/ShaderCache/9/91a276ece622723a440012d028c0e566.bin new file mode 100644 index 0000000..6db9dfe Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/91a276ece622723a440012d028c0e566.bin differ diff --git a/HoloBot/Library/ShaderCache/9/91c1adba65df0c18ec4805b086c3e6b1.bin b/HoloBot/Library/ShaderCache/9/91c1adba65df0c18ec4805b086c3e6b1.bin new file mode 100644 index 0000000..b54dcee Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/91c1adba65df0c18ec4805b086c3e6b1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92078d796c47af724cd522c1d0be6400.bin b/HoloBot/Library/ShaderCache/9/92078d796c47af724cd522c1d0be6400.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92078d796c47af724cd522c1d0be6400.bin differ diff --git a/HoloBot/Library/ShaderCache/9/925242eacc3bc058a95806d055884063.bin b/HoloBot/Library/ShaderCache/9/925242eacc3bc058a95806d055884063.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/925242eacc3bc058a95806d055884063.bin differ diff --git a/HoloBot/Library/ShaderCache/9/925ce201b940f236a145bc2ad5659669.bin b/HoloBot/Library/ShaderCache/9/925ce201b940f236a145bc2ad5659669.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/925ce201b940f236a145bc2ad5659669.bin differ diff --git a/HoloBot/Library/ShaderCache/9/929ebebc53c283a26a39a9121a144deb.bin b/HoloBot/Library/ShaderCache/9/929ebebc53c283a26a39a9121a144deb.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/929ebebc53c283a26a39a9121a144deb.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92b31d81a4e237734fbada78e39189a8.bin b/HoloBot/Library/ShaderCache/9/92b31d81a4e237734fbada78e39189a8.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92b31d81a4e237734fbada78e39189a8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92bd17bc69bf5e33c38f91ad3ec06913.bin b/HoloBot/Library/ShaderCache/9/92bd17bc69bf5e33c38f91ad3ec06913.bin new file mode 100644 index 0000000..14df558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92bd17bc69bf5e33c38f91ad3ec06913.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92c00da79ee8ce9f3609ce0d2435634d.bin b/HoloBot/Library/ShaderCache/9/92c00da79ee8ce9f3609ce0d2435634d.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92c00da79ee8ce9f3609ce0d2435634d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92c2f7165b690efdf9ee126d72ace14d.bin b/HoloBot/Library/ShaderCache/9/92c2f7165b690efdf9ee126d72ace14d.bin new file mode 100644 index 0000000..c945ed4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92c2f7165b690efdf9ee126d72ace14d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92ce3b6ae37a0e2365e79a32e0b77b78.bin b/HoloBot/Library/ShaderCache/9/92ce3b6ae37a0e2365e79a32e0b77b78.bin new file mode 100644 index 0000000..7874adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92ce3b6ae37a0e2365e79a32e0b77b78.bin differ diff --git a/HoloBot/Library/ShaderCache/9/92cf125ee78702e763e2dbd8d0d53d26.bin b/HoloBot/Library/ShaderCache/9/92cf125ee78702e763e2dbd8d0d53d26.bin new file mode 100644 index 0000000..3e4edff Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/92cf125ee78702e763e2dbd8d0d53d26.bin differ diff --git a/HoloBot/Library/ShaderCache/9/93054f9186c7c12343fef9f9a90e6cc7.bin b/HoloBot/Library/ShaderCache/9/93054f9186c7c12343fef9f9a90e6cc7.bin new file mode 100644 index 0000000..055a41c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/93054f9186c7c12343fef9f9a90e6cc7.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9349ebb5ccce75f16aa36b7a50d16995.bin b/HoloBot/Library/ShaderCache/9/9349ebb5ccce75f16aa36b7a50d16995.bin new file mode 100644 index 0000000..d528d8b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9349ebb5ccce75f16aa36b7a50d16995.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9352eb1333bdec959faf4c9dc3aad6ac.bin b/HoloBot/Library/ShaderCache/9/9352eb1333bdec959faf4c9dc3aad6ac.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9352eb1333bdec959faf4c9dc3aad6ac.bin differ diff --git a/HoloBot/Library/ShaderCache/9/936b85f8b32878628285b4d7b26eced9.bin b/HoloBot/Library/ShaderCache/9/936b85f8b32878628285b4d7b26eced9.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/936b85f8b32878628285b4d7b26eced9.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9388a1e234fa0834bdd1f4e1b45bf92c.bin b/HoloBot/Library/ShaderCache/9/9388a1e234fa0834bdd1f4e1b45bf92c.bin new file mode 100644 index 0000000..02e6594 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9388a1e234fa0834bdd1f4e1b45bf92c.bin differ diff --git a/HoloBot/Library/ShaderCache/9/93eb680e5e4ba8023316f4fec23eb216.bin b/HoloBot/Library/ShaderCache/9/93eb680e5e4ba8023316f4fec23eb216.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/93eb680e5e4ba8023316f4fec23eb216.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9444e890d995a082728b84b28bd248a6.bin b/HoloBot/Library/ShaderCache/9/9444e890d995a082728b84b28bd248a6.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9444e890d995a082728b84b28bd248a6.bin differ diff --git a/HoloBot/Library/ShaderCache/9/945447e3f9bea69ae39d08b536c58a7a.bin b/HoloBot/Library/ShaderCache/9/945447e3f9bea69ae39d08b536c58a7a.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/945447e3f9bea69ae39d08b536c58a7a.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9467557c28ea42b4a26a6835d3046c34.bin b/HoloBot/Library/ShaderCache/9/9467557c28ea42b4a26a6835d3046c34.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9467557c28ea42b4a26a6835d3046c34.bin differ diff --git a/HoloBot/Library/ShaderCache/9/946e7a340664951dbcc78c07096604e6.bin b/HoloBot/Library/ShaderCache/9/946e7a340664951dbcc78c07096604e6.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/946e7a340664951dbcc78c07096604e6.bin differ diff --git a/HoloBot/Library/ShaderCache/9/94ad907de540db2176368c785a2931cb.bin b/HoloBot/Library/ShaderCache/9/94ad907de540db2176368c785a2931cb.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/94ad907de540db2176368c785a2931cb.bin differ diff --git a/HoloBot/Library/ShaderCache/9/94d682d0b9f674a650af071c06a8a7cc.bin b/HoloBot/Library/ShaderCache/9/94d682d0b9f674a650af071c06a8a7cc.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/94d682d0b9f674a650af071c06a8a7cc.bin differ diff --git a/HoloBot/Library/ShaderCache/9/94e5a30ac32c3c072f7e5e5b423d6261.bin b/HoloBot/Library/ShaderCache/9/94e5a30ac32c3c072f7e5e5b423d6261.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/94e5a30ac32c3c072f7e5e5b423d6261.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9527dddf24b849ace4e6847f0a67b226.bin b/HoloBot/Library/ShaderCache/9/9527dddf24b849ace4e6847f0a67b226.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9527dddf24b849ace4e6847f0a67b226.bin differ diff --git a/HoloBot/Library/ShaderCache/9/955878e300885f0d1f5f38d4b6893e26.bin b/HoloBot/Library/ShaderCache/9/955878e300885f0d1f5f38d4b6893e26.bin new file mode 100644 index 0000000..42114b6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/955878e300885f0d1f5f38d4b6893e26.bin differ diff --git a/HoloBot/Library/ShaderCache/9/957951b338b98006eba785873d42075e.bin b/HoloBot/Library/ShaderCache/9/957951b338b98006eba785873d42075e.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/957951b338b98006eba785873d42075e.bin differ diff --git a/HoloBot/Library/ShaderCache/9/958aff13d2c55506e4725b28aa5157cb.bin b/HoloBot/Library/ShaderCache/9/958aff13d2c55506e4725b28aa5157cb.bin new file mode 100644 index 0000000..2c63f64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/958aff13d2c55506e4725b28aa5157cb.bin differ diff --git a/HoloBot/Library/ShaderCache/9/95ae5914afa1ecce823489d857d9abae.bin b/HoloBot/Library/ShaderCache/9/95ae5914afa1ecce823489d857d9abae.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/95ae5914afa1ecce823489d857d9abae.bin differ diff --git a/HoloBot/Library/ShaderCache/9/95b0671c547990bf939519099eae0dc8.bin b/HoloBot/Library/ShaderCache/9/95b0671c547990bf939519099eae0dc8.bin new file mode 100644 index 0000000..589d3b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/95b0671c547990bf939519099eae0dc8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/95c2150d3a1941d8981be83b08bc2fe1.bin b/HoloBot/Library/ShaderCache/9/95c2150d3a1941d8981be83b08bc2fe1.bin new file mode 100644 index 0000000..882f3f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/95c2150d3a1941d8981be83b08bc2fe1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/95cfca6ba321d76ba95f96fc55f073c5.bin b/HoloBot/Library/ShaderCache/9/95cfca6ba321d76ba95f96fc55f073c5.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/95cfca6ba321d76ba95f96fc55f073c5.bin differ diff --git a/HoloBot/Library/ShaderCache/9/961ac04a5ce42b9822f08391a4a721dc.bin b/HoloBot/Library/ShaderCache/9/961ac04a5ce42b9822f08391a4a721dc.bin new file mode 100644 index 0000000..df35ff0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/961ac04a5ce42b9822f08391a4a721dc.bin differ diff --git a/HoloBot/Library/ShaderCache/9/962ce72356397dcff75a7ee3249b06cb.bin b/HoloBot/Library/ShaderCache/9/962ce72356397dcff75a7ee3249b06cb.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/962ce72356397dcff75a7ee3249b06cb.bin differ diff --git a/HoloBot/Library/ShaderCache/9/963a58652fdbcf38478c5d149bea2728.bin b/HoloBot/Library/ShaderCache/9/963a58652fdbcf38478c5d149bea2728.bin new file mode 100644 index 0000000..4096f1c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/963a58652fdbcf38478c5d149bea2728.bin differ diff --git a/HoloBot/Library/ShaderCache/9/967d39ec93cc98ae51054533f86698b2.bin b/HoloBot/Library/ShaderCache/9/967d39ec93cc98ae51054533f86698b2.bin new file mode 100644 index 0000000..02e6594 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/967d39ec93cc98ae51054533f86698b2.bin differ diff --git a/HoloBot/Library/ShaderCache/9/96cd98f59ef454beafc6ed29effda432.bin b/HoloBot/Library/ShaderCache/9/96cd98f59ef454beafc6ed29effda432.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/96cd98f59ef454beafc6ed29effda432.bin differ diff --git a/HoloBot/Library/ShaderCache/9/96cde5c30e8de184cefd90737e6dc325.bin b/HoloBot/Library/ShaderCache/9/96cde5c30e8de184cefd90737e6dc325.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/96cde5c30e8de184cefd90737e6dc325.bin differ diff --git a/HoloBot/Library/ShaderCache/9/96e845b9c416bb5c474e77832e569c28.bin b/HoloBot/Library/ShaderCache/9/96e845b9c416bb5c474e77832e569c28.bin new file mode 100644 index 0000000..3e4edff Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/96e845b9c416bb5c474e77832e569c28.bin differ diff --git a/HoloBot/Library/ShaderCache/9/96fbb0cd3031aca51553024266f9a52d.bin b/HoloBot/Library/ShaderCache/9/96fbb0cd3031aca51553024266f9a52d.bin new file mode 100644 index 0000000..954c235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/96fbb0cd3031aca51553024266f9a52d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/96fbfa94cb2ce970dca4c28936372025.bin b/HoloBot/Library/ShaderCache/9/96fbfa94cb2ce970dca4c28936372025.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/96fbfa94cb2ce970dca4c28936372025.bin differ diff --git a/HoloBot/Library/ShaderCache/9/972d117000c4824ceeda26e08c7f2768.bin b/HoloBot/Library/ShaderCache/9/972d117000c4824ceeda26e08c7f2768.bin new file mode 100644 index 0000000..3532977 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/972d117000c4824ceeda26e08c7f2768.bin differ diff --git a/HoloBot/Library/ShaderCache/9/975b897eaa8c714188393fdfa7196835.bin b/HoloBot/Library/ShaderCache/9/975b897eaa8c714188393fdfa7196835.bin new file mode 100644 index 0000000..8ce4cef Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/975b897eaa8c714188393fdfa7196835.bin differ diff --git a/HoloBot/Library/ShaderCache/9/976753cb1d393d75e28cf9f21b2bc71f.bin b/HoloBot/Library/ShaderCache/9/976753cb1d393d75e28cf9f21b2bc71f.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/976753cb1d393d75e28cf9f21b2bc71f.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9780d65781b8d7d06ff9c569958cf35c.bin b/HoloBot/Library/ShaderCache/9/9780d65781b8d7d06ff9c569958cf35c.bin new file mode 100644 index 0000000..f6fe3d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9780d65781b8d7d06ff9c569958cf35c.bin differ diff --git a/HoloBot/Library/ShaderCache/9/979aa3447dcb48e669fef2d55fa84709.bin b/HoloBot/Library/ShaderCache/9/979aa3447dcb48e669fef2d55fa84709.bin new file mode 100644 index 0000000..6b5e2ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/979aa3447dcb48e669fef2d55fa84709.bin differ diff --git a/HoloBot/Library/ShaderCache/9/979c4bc049fbe3da77e610710d4c9f13.bin b/HoloBot/Library/ShaderCache/9/979c4bc049fbe3da77e610710d4c9f13.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/979c4bc049fbe3da77e610710d4c9f13.bin differ diff --git a/HoloBot/Library/ShaderCache/9/97e63591b8018516144b8d1a6c5dd921.bin b/HoloBot/Library/ShaderCache/9/97e63591b8018516144b8d1a6c5dd921.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/97e63591b8018516144b8d1a6c5dd921.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9856db05cf63389a44a493b8a8eb190d.bin b/HoloBot/Library/ShaderCache/9/9856db05cf63389a44a493b8a8eb190d.bin new file mode 100644 index 0000000..634c445 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9856db05cf63389a44a493b8a8eb190d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9871e633c36bf9977366e083503b1ee7.bin b/HoloBot/Library/ShaderCache/9/9871e633c36bf9977366e083503b1ee7.bin new file mode 100644 index 0000000..fc0f8c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9871e633c36bf9977366e083503b1ee7.bin differ diff --git a/HoloBot/Library/ShaderCache/9/987eda63b11b6e1aba3458b924b6e65f.bin b/HoloBot/Library/ShaderCache/9/987eda63b11b6e1aba3458b924b6e65f.bin new file mode 100644 index 0000000..50f60de Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/987eda63b11b6e1aba3458b924b6e65f.bin differ diff --git a/HoloBot/Library/ShaderCache/9/98bec31b22d46445828d211a7f497085.bin b/HoloBot/Library/ShaderCache/9/98bec31b22d46445828d211a7f497085.bin new file mode 100644 index 0000000..558df4a Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/98bec31b22d46445828d211a7f497085.bin differ diff --git a/HoloBot/Library/ShaderCache/9/98ebc66a773b7a2ac6f693ddbafc8fee.bin b/HoloBot/Library/ShaderCache/9/98ebc66a773b7a2ac6f693ddbafc8fee.bin new file mode 100644 index 0000000..df35ff0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/98ebc66a773b7a2ac6f693ddbafc8fee.bin differ diff --git a/HoloBot/Library/ShaderCache/9/990b675bce4308aec03e676fadac24c8.bin b/HoloBot/Library/ShaderCache/9/990b675bce4308aec03e676fadac24c8.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/990b675bce4308aec03e676fadac24c8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9915ec446963d8f2d9d2730900aaeb02.bin b/HoloBot/Library/ShaderCache/9/9915ec446963d8f2d9d2730900aaeb02.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9915ec446963d8f2d9d2730900aaeb02.bin differ diff --git a/HoloBot/Library/ShaderCache/9/99382c2b5163846258a0af2a0d95c2ab.bin b/HoloBot/Library/ShaderCache/9/99382c2b5163846258a0af2a0d95c2ab.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/99382c2b5163846258a0af2a0d95c2ab.bin differ diff --git a/HoloBot/Library/ShaderCache/9/996e1c664a5ae4a48c0cb8ee56096e48.bin b/HoloBot/Library/ShaderCache/9/996e1c664a5ae4a48c0cb8ee56096e48.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/996e1c664a5ae4a48c0cb8ee56096e48.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9978059717d5747f11f3a9e061f06947.bin b/HoloBot/Library/ShaderCache/9/9978059717d5747f11f3a9e061f06947.bin new file mode 100644 index 0000000..b780102 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9978059717d5747f11f3a9e061f06947.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9989490ede3855d184e2fd83f01490e9.bin b/HoloBot/Library/ShaderCache/9/9989490ede3855d184e2fd83f01490e9.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9989490ede3855d184e2fd83f01490e9.bin differ diff --git a/HoloBot/Library/ShaderCache/9/99e50c4124a60488586eeeb4a8282dd6.bin b/HoloBot/Library/ShaderCache/9/99e50c4124a60488586eeeb4a8282dd6.bin new file mode 100644 index 0000000..a554a39 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/99e50c4124a60488586eeeb4a8282dd6.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a1278e3b45b56ebc77f3e649d5ae1c2.bin b/HoloBot/Library/ShaderCache/9/9a1278e3b45b56ebc77f3e649d5ae1c2.bin new file mode 100644 index 0000000..559e664 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a1278e3b45b56ebc77f3e649d5ae1c2.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a52f80eebb2ed67c4a8ffdc852e8871.bin b/HoloBot/Library/ShaderCache/9/9a52f80eebb2ed67c4a8ffdc852e8871.bin new file mode 100644 index 0000000..6329d50 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a52f80eebb2ed67c4a8ffdc852e8871.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a5eb6e519a894d16100be5240f28649.bin b/HoloBot/Library/ShaderCache/9/9a5eb6e519a894d16100be5240f28649.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a5eb6e519a894d16100be5240f28649.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a7654deef44a5bd60a49b7027016c77.bin b/HoloBot/Library/ShaderCache/9/9a7654deef44a5bd60a49b7027016c77.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a7654deef44a5bd60a49b7027016c77.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a8660bec4c95ed83f5dd00a3b6a9543.bin b/HoloBot/Library/ShaderCache/9/9a8660bec4c95ed83f5dd00a3b6a9543.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a8660bec4c95ed83f5dd00a3b6a9543.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9a9f6318d5e4eddbd7d808e69ae10bb5.bin b/HoloBot/Library/ShaderCache/9/9a9f6318d5e4eddbd7d808e69ae10bb5.bin new file mode 100644 index 0000000..642a3ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9a9f6318d5e4eddbd7d808e69ae10bb5.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b203d56476d461aed956d42076fd87a.bin b/HoloBot/Library/ShaderCache/9/9b203d56476d461aed956d42076fd87a.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b203d56476d461aed956d42076fd87a.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b2245a0d578414cab17204a8affbdbf.bin b/HoloBot/Library/ShaderCache/9/9b2245a0d578414cab17204a8affbdbf.bin new file mode 100644 index 0000000..892bb23 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b2245a0d578414cab17204a8affbdbf.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b52cfa765d08df4f7d2aac27fb2ab51.bin b/HoloBot/Library/ShaderCache/9/9b52cfa765d08df4f7d2aac27fb2ab51.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b52cfa765d08df4f7d2aac27fb2ab51.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b5d7e640a1dd613830c974d46c08128.bin b/HoloBot/Library/ShaderCache/9/9b5d7e640a1dd613830c974d46c08128.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b5d7e640a1dd613830c974d46c08128.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b5f7d5c80dd0782c13887ae51dc0f9f.bin b/HoloBot/Library/ShaderCache/9/9b5f7d5c80dd0782c13887ae51dc0f9f.bin new file mode 100644 index 0000000..b591b0e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b5f7d5c80dd0782c13887ae51dc0f9f.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b792a041b7471fd3fb49cc9e3f54188.bin b/HoloBot/Library/ShaderCache/9/9b792a041b7471fd3fb49cc9e3f54188.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b792a041b7471fd3fb49cc9e3f54188.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9b98ebaf83123183c9ad2eed73799fd5.bin b/HoloBot/Library/ShaderCache/9/9b98ebaf83123183c9ad2eed73799fd5.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9b98ebaf83123183c9ad2eed73799fd5.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9bd136501159de88ae959c6411807359.bin b/HoloBot/Library/ShaderCache/9/9bd136501159de88ae959c6411807359.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9bd136501159de88ae959c6411807359.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9be788bc4d1865cb7a5a2b1a9bb85a9b.bin b/HoloBot/Library/ShaderCache/9/9be788bc4d1865cb7a5a2b1a9bb85a9b.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9be788bc4d1865cb7a5a2b1a9bb85a9b.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9be9e53b16ff8617ce520670b2cac80b.bin b/HoloBot/Library/ShaderCache/9/9be9e53b16ff8617ce520670b2cac80b.bin new file mode 100644 index 0000000..87f8dec Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9be9e53b16ff8617ce520670b2cac80b.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9bf979f9a2efcf975653c1067ee3a79d.bin b/HoloBot/Library/ShaderCache/9/9bf979f9a2efcf975653c1067ee3a79d.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9bf979f9a2efcf975653c1067ee3a79d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c4aa155c069d4e0c7490fb9c6c10a6e.bin b/HoloBot/Library/ShaderCache/9/9c4aa155c069d4e0c7490fb9c6c10a6e.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c4aa155c069d4e0c7490fb9c6c10a6e.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c4ddaa5fdb04682f199d9447025b73c.bin b/HoloBot/Library/ShaderCache/9/9c4ddaa5fdb04682f199d9447025b73c.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c4ddaa5fdb04682f199d9447025b73c.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c4faa7f394d0e1b53b7d11343842dab.bin b/HoloBot/Library/ShaderCache/9/9c4faa7f394d0e1b53b7d11343842dab.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c4faa7f394d0e1b53b7d11343842dab.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c737c6f97590366ec7e4b96abf6f19c.bin b/HoloBot/Library/ShaderCache/9/9c737c6f97590366ec7e4b96abf6f19c.bin new file mode 100644 index 0000000..c33cfe2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c737c6f97590366ec7e4b96abf6f19c.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c79acabcc1bfa254b340f3ac991baf9.bin b/HoloBot/Library/ShaderCache/9/9c79acabcc1bfa254b340f3ac991baf9.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c79acabcc1bfa254b340f3ac991baf9.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9c80f27e2b8c6b0b78ced1ee03a92eb2.bin b/HoloBot/Library/ShaderCache/9/9c80f27e2b8c6b0b78ced1ee03a92eb2.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9c80f27e2b8c6b0b78ced1ee03a92eb2.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9ca46e8d55f77d580c992896b71c6cdb.bin b/HoloBot/Library/ShaderCache/9/9ca46e8d55f77d580c992896b71c6cdb.bin new file mode 100644 index 0000000..47adc6f Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9ca46e8d55f77d580c992896b71c6cdb.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9caf91ff5170786cbffcc7bcc443eac8.bin b/HoloBot/Library/ShaderCache/9/9caf91ff5170786cbffcc7bcc443eac8.bin new file mode 100644 index 0000000..3108318 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9caf91ff5170786cbffcc7bcc443eac8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9cbf46cd8916ee2ce09a01144e317fc6.bin b/HoloBot/Library/ShaderCache/9/9cbf46cd8916ee2ce09a01144e317fc6.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9cbf46cd8916ee2ce09a01144e317fc6.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9ce9140fbacf6884a2ac6c7a2bf1c416.bin b/HoloBot/Library/ShaderCache/9/9ce9140fbacf6884a2ac6c7a2bf1c416.bin new file mode 100644 index 0000000..b780102 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9ce9140fbacf6884a2ac6c7a2bf1c416.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9cf39b1a2bcde27032b178b990fd2b2b.bin b/HoloBot/Library/ShaderCache/9/9cf39b1a2bcde27032b178b990fd2b2b.bin new file mode 100644 index 0000000..45f4d28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9cf39b1a2bcde27032b178b990fd2b2b.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9cf563d33e85ff3067c1c423a8226a7e.bin b/HoloBot/Library/ShaderCache/9/9cf563d33e85ff3067c1c423a8226a7e.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9cf563d33e85ff3067c1c423a8226a7e.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d0f481c6257c336798f74b451007823.bin b/HoloBot/Library/ShaderCache/9/9d0f481c6257c336798f74b451007823.bin new file mode 100644 index 0000000..1643417 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d0f481c6257c336798f74b451007823.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d0fddf610331ee664cb315e96b7a4b4.bin b/HoloBot/Library/ShaderCache/9/9d0fddf610331ee664cb315e96b7a4b4.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d0fddf610331ee664cb315e96b7a4b4.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d2688782211f55e5ef7d10d302f2d17.bin b/HoloBot/Library/ShaderCache/9/9d2688782211f55e5ef7d10d302f2d17.bin new file mode 100644 index 0000000..7e3b4de Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d2688782211f55e5ef7d10d302f2d17.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d49d3faa183b42334f6fa6bb7835e1c.bin b/HoloBot/Library/ShaderCache/9/9d49d3faa183b42334f6fa6bb7835e1c.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d49d3faa183b42334f6fa6bb7835e1c.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d753180679d05d296b29912ccb7f1a0.bin b/HoloBot/Library/ShaderCache/9/9d753180679d05d296b29912ccb7f1a0.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d753180679d05d296b29912ccb7f1a0.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9d8d0f8d4f579a8860ae6416f193499b.bin b/HoloBot/Library/ShaderCache/9/9d8d0f8d4f579a8860ae6416f193499b.bin new file mode 100644 index 0000000..9936adf Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9d8d0f8d4f579a8860ae6416f193499b.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9db3564da1eb5c05932a6546c3324cd4.bin b/HoloBot/Library/ShaderCache/9/9db3564da1eb5c05932a6546c3324cd4.bin new file mode 100644 index 0000000..0bf8fc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9db3564da1eb5c05932a6546c3324cd4.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9db6fb979e7ece8e566aa1363a33efd2.bin b/HoloBot/Library/ShaderCache/9/9db6fb979e7ece8e566aa1363a33efd2.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9db6fb979e7ece8e566aa1363a33efd2.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9dd594604d5961f03b34e7160bbbe7ac.bin b/HoloBot/Library/ShaderCache/9/9dd594604d5961f03b34e7160bbbe7ac.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9dd594604d5961f03b34e7160bbbe7ac.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9dd5fe8b95a1d845e1edb48bbeb886c1.bin b/HoloBot/Library/ShaderCache/9/9dd5fe8b95a1d845e1edb48bbeb886c1.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9dd5fe8b95a1d845e1edb48bbeb886c1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9dd952db2ac8745bd2911d83ad79eca8.bin b/HoloBot/Library/ShaderCache/9/9dd952db2ac8745bd2911d83ad79eca8.bin new file mode 100644 index 0000000..f4c6f61 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9dd952db2ac8745bd2911d83ad79eca8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9de84a34855f91484b0e2864bbeb50a7.bin b/HoloBot/Library/ShaderCache/9/9de84a34855f91484b0e2864bbeb50a7.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9de84a34855f91484b0e2864bbeb50a7.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9df3859c4eee08bf983416b42371e20d.bin b/HoloBot/Library/ShaderCache/9/9df3859c4eee08bf983416b42371e20d.bin new file mode 100644 index 0000000..d4c8cf8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9df3859c4eee08bf983416b42371e20d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9df8b0fc76bb7f850069d840a675790d.bin b/HoloBot/Library/ShaderCache/9/9df8b0fc76bb7f850069d840a675790d.bin new file mode 100644 index 0000000..965ca9d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9df8b0fc76bb7f850069d840a675790d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e168ed5940739449611738e4ab10527.bin b/HoloBot/Library/ShaderCache/9/9e168ed5940739449611738e4ab10527.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e168ed5940739449611738e4ab10527.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e20fde039dba826d04494c883928108.bin b/HoloBot/Library/ShaderCache/9/9e20fde039dba826d04494c883928108.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e20fde039dba826d04494c883928108.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e268f8e288eb37b04610e769342d5d1.bin b/HoloBot/Library/ShaderCache/9/9e268f8e288eb37b04610e769342d5d1.bin new file mode 100644 index 0000000..76aa9d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e268f8e288eb37b04610e769342d5d1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e2ade3136a1fba325af8a9ac5427eaa.bin b/HoloBot/Library/ShaderCache/9/9e2ade3136a1fba325af8a9ac5427eaa.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e2ade3136a1fba325af8a9ac5427eaa.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e37bdde4321fd5c8f92286e8e283e8f.bin b/HoloBot/Library/ShaderCache/9/9e37bdde4321fd5c8f92286e8e283e8f.bin new file mode 100644 index 0000000..48e3f15 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e37bdde4321fd5c8f92286e8e283e8f.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e49292d01cc724e392169bd1f92ff03.bin b/HoloBot/Library/ShaderCache/9/9e49292d01cc724e392169bd1f92ff03.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e49292d01cc724e392169bd1f92ff03.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e6b5981297728cacd94b77482cf8f5f.bin b/HoloBot/Library/ShaderCache/9/9e6b5981297728cacd94b77482cf8f5f.bin new file mode 100644 index 0000000..f39f2ba Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e6b5981297728cacd94b77482cf8f5f.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9e7ab56e2c5546d42ad2e8c87ba4987d.bin b/HoloBot/Library/ShaderCache/9/9e7ab56e2c5546d42ad2e8c87ba4987d.bin new file mode 100644 index 0000000..aadb74b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9e7ab56e2c5546d42ad2e8c87ba4987d.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9ea43a0b54e54b693582043ce9e18120.bin b/HoloBot/Library/ShaderCache/9/9ea43a0b54e54b693582043ce9e18120.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9ea43a0b54e54b693582043ce9e18120.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9eab9bd8f3556d393b6a69f885d9b262.bin b/HoloBot/Library/ShaderCache/9/9eab9bd8f3556d393b6a69f885d9b262.bin new file mode 100644 index 0000000..3b842f7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9eab9bd8f3556d393b6a69f885d9b262.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9eb3f388a9bdbaaebacd424b8d1ae37a.bin b/HoloBot/Library/ShaderCache/9/9eb3f388a9bdbaaebacd424b8d1ae37a.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9eb3f388a9bdbaaebacd424b8d1ae37a.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9eca421c4786514faca448329f694f43.bin b/HoloBot/Library/ShaderCache/9/9eca421c4786514faca448329f694f43.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9eca421c4786514faca448329f694f43.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9eea5e5ffbff35a9f542aa97d40e7d1e.bin b/HoloBot/Library/ShaderCache/9/9eea5e5ffbff35a9f542aa97d40e7d1e.bin new file mode 100644 index 0000000..278421e Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9eea5e5ffbff35a9f542aa97d40e7d1e.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9ef81b95171776e9051dba80bdb99380.bin b/HoloBot/Library/ShaderCache/9/9ef81b95171776e9051dba80bdb99380.bin new file mode 100644 index 0000000..cdc06c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9ef81b95171776e9051dba80bdb99380.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f1175ad416913ef016a0daa5e17d4ce.bin b/HoloBot/Library/ShaderCache/9/9f1175ad416913ef016a0daa5e17d4ce.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f1175ad416913ef016a0daa5e17d4ce.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f2ae2ad794bff7f001526aa2e17ada8.bin b/HoloBot/Library/ShaderCache/9/9f2ae2ad794bff7f001526aa2e17ada8.bin new file mode 100644 index 0000000..8a2794b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f2ae2ad794bff7f001526aa2e17ada8.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f41362522dbf833bf750303566f8409.bin b/HoloBot/Library/ShaderCache/9/9f41362522dbf833bf750303566f8409.bin new file mode 100644 index 0000000..8a2794b Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f41362522dbf833bf750303566f8409.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f64af24b2909cf2831a5ff0b71a9422.bin b/HoloBot/Library/ShaderCache/9/9f64af24b2909cf2831a5ff0b71a9422.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f64af24b2909cf2831a5ff0b71a9422.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f88b8ec24b2049a8ffaea9ec165fa86.bin b/HoloBot/Library/ShaderCache/9/9f88b8ec24b2049a8ffaea9ec165fa86.bin new file mode 100644 index 0000000..bd0ecc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f88b8ec24b2049a8ffaea9ec165fa86.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f8e365b971577117a20228979b8eed7.bin b/HoloBot/Library/ShaderCache/9/9f8e365b971577117a20228979b8eed7.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f8e365b971577117a20228979b8eed7.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9f9f3af7df6feda4446ed7e3b7dcf8c1.bin b/HoloBot/Library/ShaderCache/9/9f9f3af7df6feda4446ed7e3b7dcf8c1.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9f9f3af7df6feda4446ed7e3b7dcf8c1.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9fcba36e037fadaba354d6c2db81d3d0.bin b/HoloBot/Library/ShaderCache/9/9fcba36e037fadaba354d6c2db81d3d0.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9fcba36e037fadaba354d6c2db81d3d0.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9fcc6dc07f0bc01ddb13b181d451e181.bin b/HoloBot/Library/ShaderCache/9/9fcc6dc07f0bc01ddb13b181d451e181.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9fcc6dc07f0bc01ddb13b181d451e181.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9fdcda1b636afe79640b18ac2b3c1571.bin b/HoloBot/Library/ShaderCache/9/9fdcda1b636afe79640b18ac2b3c1571.bin new file mode 100644 index 0000000..48d7db1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9fdcda1b636afe79640b18ac2b3c1571.bin differ diff --git a/HoloBot/Library/ShaderCache/9/9ffad89f9d36371ef5078c40939de4ac.bin b/HoloBot/Library/ShaderCache/9/9ffad89f9d36371ef5078c40939de4ac.bin new file mode 100644 index 0000000..b42c6b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/9/9ffad89f9d36371ef5078c40939de4ac.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a038c30bb772457f3c4a8f5d3fe88b64.bin b/HoloBot/Library/ShaderCache/a/a038c30bb772457f3c4a8f5d3fe88b64.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a038c30bb772457f3c4a8f5d3fe88b64.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a038f05423405f1de7339733bbecb8c9.bin b/HoloBot/Library/ShaderCache/a/a038f05423405f1de7339733bbecb8c9.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a038f05423405f1de7339733bbecb8c9.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a057e9419f9322e81be32ee84db5dd02.bin b/HoloBot/Library/ShaderCache/a/a057e9419f9322e81be32ee84db5dd02.bin new file mode 100644 index 0000000..ed89dae Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a057e9419f9322e81be32ee84db5dd02.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a07d726bffeb8d30a7b4748994d15ade.bin b/HoloBot/Library/ShaderCache/a/a07d726bffeb8d30a7b4748994d15ade.bin new file mode 100644 index 0000000..e2d38eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a07d726bffeb8d30a7b4748994d15ade.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a08088c4bb71e6698d4dc3ea8b0b68e3.bin b/HoloBot/Library/ShaderCache/a/a08088c4bb71e6698d4dc3ea8b0b68e3.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a08088c4bb71e6698d4dc3ea8b0b68e3.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a086590d304885e605565f56c5317136.bin b/HoloBot/Library/ShaderCache/a/a086590d304885e605565f56c5317136.bin new file mode 100644 index 0000000..869ee0b Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a086590d304885e605565f56c5317136.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0adad8e629e8a7af5d9aae172bdb9db.bin b/HoloBot/Library/ShaderCache/a/a0adad8e629e8a7af5d9aae172bdb9db.bin new file mode 100644 index 0000000..63123de Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0adad8e629e8a7af5d9aae172bdb9db.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0b948139d1f4b4506cc92d0e6865541.bin b/HoloBot/Library/ShaderCache/a/a0b948139d1f4b4506cc92d0e6865541.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0b948139d1f4b4506cc92d0e6865541.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0bd4d05e3afb737628a2ea046864543.bin b/HoloBot/Library/ShaderCache/a/a0bd4d05e3afb737628a2ea046864543.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0bd4d05e3afb737628a2ea046864543.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0c0859be14d2e25b9106cc787330258.bin b/HoloBot/Library/ShaderCache/a/a0c0859be14d2e25b9106cc787330258.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0c0859be14d2e25b9106cc787330258.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0d298311592d4eea2374517ab0a3223.bin b/HoloBot/Library/ShaderCache/a/a0d298311592d4eea2374517ab0a3223.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0d298311592d4eea2374517ab0a3223.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a0f1d30a770b2218a6e286c584e43ca7.bin b/HoloBot/Library/ShaderCache/a/a0f1d30a770b2218a6e286c584e43ca7.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a0f1d30a770b2218a6e286c584e43ca7.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a10758b65ed4560a29b355972ae60ea1.bin b/HoloBot/Library/ShaderCache/a/a10758b65ed4560a29b355972ae60ea1.bin new file mode 100644 index 0000000..50f1172 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a10758b65ed4560a29b355972ae60ea1.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a1222390cb15029069ee99b94cebf415.bin b/HoloBot/Library/ShaderCache/a/a1222390cb15029069ee99b94cebf415.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a1222390cb15029069ee99b94cebf415.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a14e2d64cce9a52140435ab2a150c8d4.bin b/HoloBot/Library/ShaderCache/a/a14e2d64cce9a52140435ab2a150c8d4.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a14e2d64cce9a52140435ab2a150c8d4.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a150f223906bda25a8f6b6693ded3d43.bin b/HoloBot/Library/ShaderCache/a/a150f223906bda25a8f6b6693ded3d43.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a150f223906bda25a8f6b6693ded3d43.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a1549753130de814f7b4cc91274c446b.bin b/HoloBot/Library/ShaderCache/a/a1549753130de814f7b4cc91274c446b.bin new file mode 100644 index 0000000..fbeb8b1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a1549753130de814f7b4cc91274c446b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a16ab2dff547fe0f9fcd9e5091ab5d96.bin b/HoloBot/Library/ShaderCache/a/a16ab2dff547fe0f9fcd9e5091ab5d96.bin new file mode 100644 index 0000000..dc2cc67 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a16ab2dff547fe0f9fcd9e5091ab5d96.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a16be78687747b85471c4be233b72bb6.bin b/HoloBot/Library/ShaderCache/a/a16be78687747b85471c4be233b72bb6.bin new file mode 100644 index 0000000..8335076 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a16be78687747b85471c4be233b72bb6.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a1863fd26fb955f13e1d68d9d761f656.bin b/HoloBot/Library/ShaderCache/a/a1863fd26fb955f13e1d68d9d761f656.bin new file mode 100644 index 0000000..7a5a30c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a1863fd26fb955f13e1d68d9d761f656.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a1982c1f0280c37edacdeb7371abc62a.bin b/HoloBot/Library/ShaderCache/a/a1982c1f0280c37edacdeb7371abc62a.bin new file mode 100644 index 0000000..0f4d082 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a1982c1f0280c37edacdeb7371abc62a.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a1f17984badbec353991128b2ecf9088.bin b/HoloBot/Library/ShaderCache/a/a1f17984badbec353991128b2ecf9088.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a1f17984badbec353991128b2ecf9088.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a20046bcc33cdebd50fee2d9dc5de47b.bin b/HoloBot/Library/ShaderCache/a/a20046bcc33cdebd50fee2d9dc5de47b.bin new file mode 100644 index 0000000..ed2c780 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a20046bcc33cdebd50fee2d9dc5de47b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a20c70764a80e24e7c0add2fa5593fb3.bin b/HoloBot/Library/ShaderCache/a/a20c70764a80e24e7c0add2fa5593fb3.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a20c70764a80e24e7c0add2fa5593fb3.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a22bc32950ec8b62c6a9db7f630797aa.bin b/HoloBot/Library/ShaderCache/a/a22bc32950ec8b62c6a9db7f630797aa.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a22bc32950ec8b62c6a9db7f630797aa.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a2335e87cc0ed376e048214b4076ae32.bin b/HoloBot/Library/ShaderCache/a/a2335e87cc0ed376e048214b4076ae32.bin new file mode 100644 index 0000000..53a286b Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a2335e87cc0ed376e048214b4076ae32.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a24e045d5432ee362026b134fc04bd69.bin b/HoloBot/Library/ShaderCache/a/a24e045d5432ee362026b134fc04bd69.bin new file mode 100644 index 0000000..2e85312 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a24e045d5432ee362026b134fc04bd69.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a25270ae650c6157ccf1ffd212853c2d.bin b/HoloBot/Library/ShaderCache/a/a25270ae650c6157ccf1ffd212853c2d.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a25270ae650c6157ccf1ffd212853c2d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a253bfd84246d9d35244822d95503881.bin b/HoloBot/Library/ShaderCache/a/a253bfd84246d9d35244822d95503881.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a253bfd84246d9d35244822d95503881.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a25a63362b2d493921b245e78b9b9df7.bin b/HoloBot/Library/ShaderCache/a/a25a63362b2d493921b245e78b9b9df7.bin new file mode 100644 index 0000000..233aec7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a25a63362b2d493921b245e78b9b9df7.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a2684d79c7370179ab8682bd7211a280.bin b/HoloBot/Library/ShaderCache/a/a2684d79c7370179ab8682bd7211a280.bin new file mode 100644 index 0000000..0619302 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a2684d79c7370179ab8682bd7211a280.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a2767266ae9096cf8b34f7cad28d0b29.bin b/HoloBot/Library/ShaderCache/a/a2767266ae9096cf8b34f7cad28d0b29.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a2767266ae9096cf8b34f7cad28d0b29.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a2b619087623949b946eb4c6305575bb.bin b/HoloBot/Library/ShaderCache/a/a2b619087623949b946eb4c6305575bb.bin new file mode 100644 index 0000000..8335076 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a2b619087623949b946eb4c6305575bb.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a2e471ec2a4bbfac9926e385f67997a2.bin b/HoloBot/Library/ShaderCache/a/a2e471ec2a4bbfac9926e385f67997a2.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a2e471ec2a4bbfac9926e385f67997a2.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a30f57707a3d876ee021b6d7ad92bc3e.bin b/HoloBot/Library/ShaderCache/a/a30f57707a3d876ee021b6d7ad92bc3e.bin new file mode 100644 index 0000000..3532977 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a30f57707a3d876ee021b6d7ad92bc3e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a32a98fbcf5f6f1100da7e4789ab050f.bin b/HoloBot/Library/ShaderCache/a/a32a98fbcf5f6f1100da7e4789ab050f.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a32a98fbcf5f6f1100da7e4789ab050f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a33091f6abce05e0f4958745d94418eb.bin b/HoloBot/Library/ShaderCache/a/a33091f6abce05e0f4958745d94418eb.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a33091f6abce05e0f4958745d94418eb.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a33c9513403c92c84f8690dcc3dfce50.bin b/HoloBot/Library/ShaderCache/a/a33c9513403c92c84f8690dcc3dfce50.bin new file mode 100644 index 0000000..02773e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a33c9513403c92c84f8690dcc3dfce50.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a364f1b512168d68583f5d2d335a2092.bin b/HoloBot/Library/ShaderCache/a/a364f1b512168d68583f5d2d335a2092.bin new file mode 100644 index 0000000..cc261a6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a364f1b512168d68583f5d2d335a2092.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a36f1b94899234e4cadc9a4e5ec09d8d.bin b/HoloBot/Library/ShaderCache/a/a36f1b94899234e4cadc9a4e5ec09d8d.bin new file mode 100644 index 0000000..23ed3f4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a36f1b94899234e4cadc9a4e5ec09d8d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a3f90bf9c5fe7f108b7ca4699c5263f0.bin b/HoloBot/Library/ShaderCache/a/a3f90bf9c5fe7f108b7ca4699c5263f0.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a3f90bf9c5fe7f108b7ca4699c5263f0.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a4056bbf709c3b76c2d246686c15a6f3.bin b/HoloBot/Library/ShaderCache/a/a4056bbf709c3b76c2d246686c15a6f3.bin new file mode 100644 index 0000000..181f0af Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a4056bbf709c3b76c2d246686c15a6f3.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin b/HoloBot/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin new file mode 100644 index 0000000..a978c3a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a45b366fe91a40b9255f79588e3bd01d.bin b/HoloBot/Library/ShaderCache/a/a45b366fe91a40b9255f79588e3bd01d.bin new file mode 100644 index 0000000..097232a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a45b366fe91a40b9255f79588e3bd01d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a45f9cdd483e7296f7c9cf3b6afdde32.bin b/HoloBot/Library/ShaderCache/a/a45f9cdd483e7296f7c9cf3b6afdde32.bin new file mode 100644 index 0000000..4202766 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a45f9cdd483e7296f7c9cf3b6afdde32.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a495f847040d4476effa7fb425274f1e.bin b/HoloBot/Library/ShaderCache/a/a495f847040d4476effa7fb425274f1e.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a495f847040d4476effa7fb425274f1e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a4ac59e39241cfd37f587296941c8f6d.bin b/HoloBot/Library/ShaderCache/a/a4ac59e39241cfd37f587296941c8f6d.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a4ac59e39241cfd37f587296941c8f6d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a4bc25f738f63818f67e5c1d3c99fe43.bin b/HoloBot/Library/ShaderCache/a/a4bc25f738f63818f67e5c1d3c99fe43.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a4bc25f738f63818f67e5c1d3c99fe43.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a4ecf214e9e046299c7eb7779e1e3a41.bin b/HoloBot/Library/ShaderCache/a/a4ecf214e9e046299c7eb7779e1e3a41.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a4ecf214e9e046299c7eb7779e1e3a41.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a50ec0c55cdbb66ab6b743a6cf770b6e.bin b/HoloBot/Library/ShaderCache/a/a50ec0c55cdbb66ab6b743a6cf770b6e.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a50ec0c55cdbb66ab6b743a6cf770b6e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a51fdfa007b1954c30d37585efcb4353.bin b/HoloBot/Library/ShaderCache/a/a51fdfa007b1954c30d37585efcb4353.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a51fdfa007b1954c30d37585efcb4353.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a52b648290298d887b3b006fb1cee216.bin b/HoloBot/Library/ShaderCache/a/a52b648290298d887b3b006fb1cee216.bin new file mode 100644 index 0000000..61ecbee Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a52b648290298d887b3b006fb1cee216.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a5401d62719b20ee26ed8402e6ad2401.bin b/HoloBot/Library/ShaderCache/a/a5401d62719b20ee26ed8402e6ad2401.bin new file mode 100644 index 0000000..fe971be Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a5401d62719b20ee26ed8402e6ad2401.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a544763ff3171d4e94fd2b5c6f74e40e.bin b/HoloBot/Library/ShaderCache/a/a544763ff3171d4e94fd2b5c6f74e40e.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a544763ff3171d4e94fd2b5c6f74e40e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a5486adc154471f8250a5c42a82ab002.bin b/HoloBot/Library/ShaderCache/a/a5486adc154471f8250a5c42a82ab002.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a5486adc154471f8250a5c42a82ab002.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a54af5683a3c679f96b4893dc3ec8038.bin b/HoloBot/Library/ShaderCache/a/a54af5683a3c679f96b4893dc3ec8038.bin new file mode 100644 index 0000000..f221897 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a54af5683a3c679f96b4893dc3ec8038.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a5827bf590dc3a5f6e362220caca1412.bin b/HoloBot/Library/ShaderCache/a/a5827bf590dc3a5f6e362220caca1412.bin new file mode 100644 index 0000000..5af50e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a5827bf590dc3a5f6e362220caca1412.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a5ca88f4fc08a27ccd44018a4815807b.bin b/HoloBot/Library/ShaderCache/a/a5ca88f4fc08a27ccd44018a4815807b.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a5ca88f4fc08a27ccd44018a4815807b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a60126c93dfdcdf7e4d354a7ac5f43cf.bin b/HoloBot/Library/ShaderCache/a/a60126c93dfdcdf7e4d354a7ac5f43cf.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a60126c93dfdcdf7e4d354a7ac5f43cf.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a61f6af632ce831da84c60d208db9873.bin b/HoloBot/Library/ShaderCache/a/a61f6af632ce831da84c60d208db9873.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a61f6af632ce831da84c60d208db9873.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a634e1f12707a4120427867b10dfa0f8.bin b/HoloBot/Library/ShaderCache/a/a634e1f12707a4120427867b10dfa0f8.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a634e1f12707a4120427867b10dfa0f8.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a6445b918dfe9367ea9d4aea795269a5.bin b/HoloBot/Library/ShaderCache/a/a6445b918dfe9367ea9d4aea795269a5.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a6445b918dfe9367ea9d4aea795269a5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a6507dcf9d22ca7f7b9c4b6d218be18b.bin b/HoloBot/Library/ShaderCache/a/a6507dcf9d22ca7f7b9c4b6d218be18b.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a6507dcf9d22ca7f7b9c4b6d218be18b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a67adefa28d2688be53c424f2abad59c.bin b/HoloBot/Library/ShaderCache/a/a67adefa28d2688be53c424f2abad59c.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a67adefa28d2688be53c424f2abad59c.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a690d001848f21e35db2efa814025e71.bin b/HoloBot/Library/ShaderCache/a/a690d001848f21e35db2efa814025e71.bin new file mode 100644 index 0000000..f9a3973 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a690d001848f21e35db2efa814025e71.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a697d799593440faca5d4d3722946623.bin b/HoloBot/Library/ShaderCache/a/a697d799593440faca5d4d3722946623.bin new file mode 100644 index 0000000..8af7afc Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a697d799593440faca5d4d3722946623.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a6fb62b9eb0047149fd88bbd4cf0689c.bin b/HoloBot/Library/ShaderCache/a/a6fb62b9eb0047149fd88bbd4cf0689c.bin new file mode 100644 index 0000000..463ccd7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a6fb62b9eb0047149fd88bbd4cf0689c.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a715c6aa461df52c5d14a107a79adb80.bin b/HoloBot/Library/ShaderCache/a/a715c6aa461df52c5d14a107a79adb80.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a715c6aa461df52c5d14a107a79adb80.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a71612b377f7511eeb780e1c9e398c9c.bin b/HoloBot/Library/ShaderCache/a/a71612b377f7511eeb780e1c9e398c9c.bin new file mode 100644 index 0000000..bf43d6e Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a71612b377f7511eeb780e1c9e398c9c.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a71e223f62467feff3e08fb2a3faa768.bin b/HoloBot/Library/ShaderCache/a/a71e223f62467feff3e08fb2a3faa768.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a71e223f62467feff3e08fb2a3faa768.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a72be0b4759ce3112d8613260895ba5b.bin b/HoloBot/Library/ShaderCache/a/a72be0b4759ce3112d8613260895ba5b.bin new file mode 100644 index 0000000..f6fe3d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a72be0b4759ce3112d8613260895ba5b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a757e4bfc824b12979e9bc79f52b048f.bin b/HoloBot/Library/ShaderCache/a/a757e4bfc824b12979e9bc79f52b048f.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a757e4bfc824b12979e9bc79f52b048f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a764cbd2f77258b5ed0563f114da6406.bin b/HoloBot/Library/ShaderCache/a/a764cbd2f77258b5ed0563f114da6406.bin new file mode 100644 index 0000000..cac5f63 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a764cbd2f77258b5ed0563f114da6406.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a76b637657618b2168f079ae3e29e265.bin b/HoloBot/Library/ShaderCache/a/a76b637657618b2168f079ae3e29e265.bin new file mode 100644 index 0000000..0d4b39d Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a76b637657618b2168f079ae3e29e265.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a76df001045dc893cdcd9f69023d7e44.bin b/HoloBot/Library/ShaderCache/a/a76df001045dc893cdcd9f69023d7e44.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a76df001045dc893cdcd9f69023d7e44.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a78295c4552d6c8ca9b9de9e5f9d90a6.bin b/HoloBot/Library/ShaderCache/a/a78295c4552d6c8ca9b9de9e5f9d90a6.bin new file mode 100644 index 0000000..f37bff8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a78295c4552d6c8ca9b9de9e5f9d90a6.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a79dbafe81ce1e6205968eaac54c15bd.bin b/HoloBot/Library/ShaderCache/a/a79dbafe81ce1e6205968eaac54c15bd.bin new file mode 100644 index 0000000..b7efd06 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a79dbafe81ce1e6205968eaac54c15bd.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a79e58c36907e85e35fa7fb4064966bf.bin b/HoloBot/Library/ShaderCache/a/a79e58c36907e85e35fa7fb4064966bf.bin new file mode 100644 index 0000000..a6e4112 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a79e58c36907e85e35fa7fb4064966bf.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a7a6cf9dc0de85fedb3698c271720fee.bin b/HoloBot/Library/ShaderCache/a/a7a6cf9dc0de85fedb3698c271720fee.bin new file mode 100644 index 0000000..1643417 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a7a6cf9dc0de85fedb3698c271720fee.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin b/HoloBot/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a7dea9227189b64b6e043adcf7c8c219.bin b/HoloBot/Library/ShaderCache/a/a7dea9227189b64b6e043adcf7c8c219.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a7dea9227189b64b6e043adcf7c8c219.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a843d2817177120c04fb23ac955b7687.bin b/HoloBot/Library/ShaderCache/a/a843d2817177120c04fb23ac955b7687.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a843d2817177120c04fb23ac955b7687.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a8614fda684a621f000365ac873129ae.bin b/HoloBot/Library/ShaderCache/a/a8614fda684a621f000365ac873129ae.bin new file mode 100644 index 0000000..e6f00ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a8614fda684a621f000365ac873129ae.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a86e244028f09e2ad6c3514ae0dbfdf5.bin b/HoloBot/Library/ShaderCache/a/a86e244028f09e2ad6c3514ae0dbfdf5.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a86e244028f09e2ad6c3514ae0dbfdf5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a92c8ca234ad3851c4cf26f6ce03b4e0.bin b/HoloBot/Library/ShaderCache/a/a92c8ca234ad3851c4cf26f6ce03b4e0.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a92c8ca234ad3851c4cf26f6ce03b4e0.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a93360b320c2cd5b203f9564f085a38b.bin b/HoloBot/Library/ShaderCache/a/a93360b320c2cd5b203f9564f085a38b.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a93360b320c2cd5b203f9564f085a38b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a94d808e3f479e2867b15b29081db3ab.bin b/HoloBot/Library/ShaderCache/a/a94d808e3f479e2867b15b29081db3ab.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a94d808e3f479e2867b15b29081db3ab.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a94df1616fa50d50aaae743900f3f87e.bin b/HoloBot/Library/ShaderCache/a/a94df1616fa50d50aaae743900f3f87e.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a94df1616fa50d50aaae743900f3f87e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a94eb124a06b1d659d7935d33fe20ac2.bin b/HoloBot/Library/ShaderCache/a/a94eb124a06b1d659d7935d33fe20ac2.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a94eb124a06b1d659d7935d33fe20ac2.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a95033df7ac4eca6380a22ac7a2bea81.bin b/HoloBot/Library/ShaderCache/a/a95033df7ac4eca6380a22ac7a2bea81.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a95033df7ac4eca6380a22ac7a2bea81.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a96ed2692c180325ef19cfb07bdcb2e5.bin b/HoloBot/Library/ShaderCache/a/a96ed2692c180325ef19cfb07bdcb2e5.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a96ed2692c180325ef19cfb07bdcb2e5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a972573d284a3da2e134bcc2866dfa7a.bin b/HoloBot/Library/ShaderCache/a/a972573d284a3da2e134bcc2866dfa7a.bin new file mode 100644 index 0000000..746df64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a972573d284a3da2e134bcc2866dfa7a.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a979528740590599649ba6d7cd0b711d.bin b/HoloBot/Library/ShaderCache/a/a979528740590599649ba6d7cd0b711d.bin new file mode 100644 index 0000000..d8cd855 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a979528740590599649ba6d7cd0b711d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a97b82cb1c4fabfa0f55ef9bd43a6469.bin b/HoloBot/Library/ShaderCache/a/a97b82cb1c4fabfa0f55ef9bd43a6469.bin new file mode 100644 index 0000000..6ed75c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a97b82cb1c4fabfa0f55ef9bd43a6469.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9850668b08ca73f6aee2f6c8076961f.bin b/HoloBot/Library/ShaderCache/a/a9850668b08ca73f6aee2f6c8076961f.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9850668b08ca73f6aee2f6c8076961f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a99aab6104460f63152a2afe7c592a87.bin b/HoloBot/Library/ShaderCache/a/a99aab6104460f63152a2afe7c592a87.bin new file mode 100644 index 0000000..6adc47a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a99aab6104460f63152a2afe7c592a87.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9abbb1a8bfbb399ffd5fc28b5de2e43.bin b/HoloBot/Library/ShaderCache/a/a9abbb1a8bfbb399ffd5fc28b5de2e43.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9abbb1a8bfbb399ffd5fc28b5de2e43.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9b9cb16208df1d3c010a4b831305b14.bin b/HoloBot/Library/ShaderCache/a/a9b9cb16208df1d3c010a4b831305b14.bin new file mode 100644 index 0000000..b421d33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9b9cb16208df1d3c010a4b831305b14.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9c63e79126048dc226120678be9a1ea.bin b/HoloBot/Library/ShaderCache/a/a9c63e79126048dc226120678be9a1ea.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9c63e79126048dc226120678be9a1ea.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9d373b22765218db51a407d042f3bde.bin b/HoloBot/Library/ShaderCache/a/a9d373b22765218db51a407d042f3bde.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9d373b22765218db51a407d042f3bde.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9dea1c3b39824f789e82b269bf04cd3.bin b/HoloBot/Library/ShaderCache/a/a9dea1c3b39824f789e82b269bf04cd3.bin new file mode 100644 index 0000000..5acc2ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9dea1c3b39824f789e82b269bf04cd3.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9e7fba181f9fa476a0d311d8f921ca4.bin b/HoloBot/Library/ShaderCache/a/a9e7fba181f9fa476a0d311d8f921ca4.bin new file mode 100644 index 0000000..bd05db5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9e7fba181f9fa476a0d311d8f921ca4.bin differ diff --git a/HoloBot/Library/ShaderCache/a/a9e8f9dbda4ae375c1259c1ace4f718f.bin b/HoloBot/Library/ShaderCache/a/a9e8f9dbda4ae375c1259c1ace4f718f.bin new file mode 100644 index 0000000..5799e13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/a9e8f9dbda4ae375c1259c1ace4f718f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa0c7385f8d2234fe47c2614709a0ba9.bin b/HoloBot/Library/ShaderCache/a/aa0c7385f8d2234fe47c2614709a0ba9.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa0c7385f8d2234fe47c2614709a0ba9.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa1ba0eced8f20c2ca3981360e742758.bin b/HoloBot/Library/ShaderCache/a/aa1ba0eced8f20c2ca3981360e742758.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa1ba0eced8f20c2ca3981360e742758.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa33c5ff012f6a371fdc35b74b6066a5.bin b/HoloBot/Library/ShaderCache/a/aa33c5ff012f6a371fdc35b74b6066a5.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa33c5ff012f6a371fdc35b74b6066a5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa5d35cbb85f96f7891911dc5135fa48.bin b/HoloBot/Library/ShaderCache/a/aa5d35cbb85f96f7891911dc5135fa48.bin new file mode 100644 index 0000000..8aab65b Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa5d35cbb85f96f7891911dc5135fa48.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa6f443bb99ca3f69aeaae410daf425d.bin b/HoloBot/Library/ShaderCache/a/aa6f443bb99ca3f69aeaae410daf425d.bin new file mode 100644 index 0000000..f39f2ba Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa6f443bb99ca3f69aeaae410daf425d.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa841f1df295bec7e5355d77e58f5797.bin b/HoloBot/Library/ShaderCache/a/aa841f1df295bec7e5355d77e58f5797.bin new file mode 100644 index 0000000..878f327 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa841f1df295bec7e5355d77e58f5797.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aa8bf4fa9bb1d22ad705014ae6231b32.bin b/HoloBot/Library/ShaderCache/a/aa8bf4fa9bb1d22ad705014ae6231b32.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aa8bf4fa9bb1d22ad705014ae6231b32.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aaa345ed65c1f018f34bbece59e2c5e3.bin b/HoloBot/Library/ShaderCache/a/aaa345ed65c1f018f34bbece59e2c5e3.bin new file mode 100644 index 0000000..afd24cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aaa345ed65c1f018f34bbece59e2c5e3.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aaa4fc102e965ef4db0dbd71c14d6c91.bin b/HoloBot/Library/ShaderCache/a/aaa4fc102e965ef4db0dbd71c14d6c91.bin new file mode 100644 index 0000000..af5683e Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aaa4fc102e965ef4db0dbd71c14d6c91.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aaa6176cc79b34a6169e23164828cc8b.bin b/HoloBot/Library/ShaderCache/a/aaa6176cc79b34a6169e23164828cc8b.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aaa6176cc79b34a6169e23164828cc8b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aac946b5b46685093f48418bf8ae06f2.bin b/HoloBot/Library/ShaderCache/a/aac946b5b46685093f48418bf8ae06f2.bin new file mode 100644 index 0000000..b576065 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aac946b5b46685093f48418bf8ae06f2.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aaf68ec0dca0cec7b5d7849250621fb5.bin b/HoloBot/Library/ShaderCache/a/aaf68ec0dca0cec7b5d7849250621fb5.bin new file mode 100644 index 0000000..567a9dd Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aaf68ec0dca0cec7b5d7849250621fb5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab079a823b7d6c4233fa53b2a37dcc2a.bin b/HoloBot/Library/ShaderCache/a/ab079a823b7d6c4233fa53b2a37dcc2a.bin new file mode 100644 index 0000000..c792d17 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab079a823b7d6c4233fa53b2a37dcc2a.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab469ef874fad2b5c828295400171eb8.bin b/HoloBot/Library/ShaderCache/a/ab469ef874fad2b5c828295400171eb8.bin new file mode 100644 index 0000000..3009f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab469ef874fad2b5c828295400171eb8.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab4c8b5ad9f8df973c940fd175e94f30.bin b/HoloBot/Library/ShaderCache/a/ab4c8b5ad9f8df973c940fd175e94f30.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab4c8b5ad9f8df973c940fd175e94f30.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab76bd6d8fd785eede82adff1837b5ef.bin b/HoloBot/Library/ShaderCache/a/ab76bd6d8fd785eede82adff1837b5ef.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab76bd6d8fd785eede82adff1837b5ef.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab98d7929463bde75a988baa95554178.bin b/HoloBot/Library/ShaderCache/a/ab98d7929463bde75a988baa95554178.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab98d7929463bde75a988baa95554178.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ab9dd402acf57c3f2dc7c166395371e1.bin b/HoloBot/Library/ShaderCache/a/ab9dd402acf57c3f2dc7c166395371e1.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ab9dd402acf57c3f2dc7c166395371e1.bin differ diff --git a/HoloBot/Library/ShaderCache/a/abc08b538725b7e19cab8c93235a851c.bin b/HoloBot/Library/ShaderCache/a/abc08b538725b7e19cab8c93235a851c.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/abc08b538725b7e19cab8c93235a851c.bin differ diff --git a/HoloBot/Library/ShaderCache/a/abe7a47382e07d04a852da496b87e8d9.bin b/HoloBot/Library/ShaderCache/a/abe7a47382e07d04a852da496b87e8d9.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/abe7a47382e07d04a852da496b87e8d9.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac013304626bb01c4ee85ea07c74c6cc.bin b/HoloBot/Library/ShaderCache/a/ac013304626bb01c4ee85ea07c74c6cc.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac013304626bb01c4ee85ea07c74c6cc.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac33d1f154c6108555d51b16d9722054.bin b/HoloBot/Library/ShaderCache/a/ac33d1f154c6108555d51b16d9722054.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac33d1f154c6108555d51b16d9722054.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac49fe1ead10b9d782da38b0f33e20a5.bin b/HoloBot/Library/ShaderCache/a/ac49fe1ead10b9d782da38b0f33e20a5.bin new file mode 100644 index 0000000..bd0ecc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac49fe1ead10b9d782da38b0f33e20a5.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac4df8f446d260c5552fb292d7a8f977.bin b/HoloBot/Library/ShaderCache/a/ac4df8f446d260c5552fb292d7a8f977.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac4df8f446d260c5552fb292d7a8f977.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac6a075cfb13d3ceacde483c34314214.bin b/HoloBot/Library/ShaderCache/a/ac6a075cfb13d3ceacde483c34314214.bin new file mode 100644 index 0000000..0bf8fc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac6a075cfb13d3ceacde483c34314214.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac7af187b5cb64ee7621963c38f65ff1.bin b/HoloBot/Library/ShaderCache/a/ac7af187b5cb64ee7621963c38f65ff1.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac7af187b5cb64ee7621963c38f65ff1.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ac970e3ee1a61f80b165441c5fa0fd5f.bin b/HoloBot/Library/ShaderCache/a/ac970e3ee1a61f80b165441c5fa0fd5f.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ac970e3ee1a61f80b165441c5fa0fd5f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aca0e08d23f83049045895db6a9de483.bin b/HoloBot/Library/ShaderCache/a/aca0e08d23f83049045895db6a9de483.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aca0e08d23f83049045895db6a9de483.bin differ diff --git a/HoloBot/Library/ShaderCache/a/acaa4f9b183792eadf62d5a2a618cc89.bin b/HoloBot/Library/ShaderCache/a/acaa4f9b183792eadf62d5a2a618cc89.bin new file mode 100644 index 0000000..2ff57b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/acaa4f9b183792eadf62d5a2a618cc89.bin differ diff --git a/HoloBot/Library/ShaderCache/a/acaf5a365f6661d31259c262482f8f5f.bin b/HoloBot/Library/ShaderCache/a/acaf5a365f6661d31259c262482f8f5f.bin new file mode 100644 index 0000000..5dd33ba Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/acaf5a365f6661d31259c262482f8f5f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ad5214209854ea8dd228810e6a75256f.bin b/HoloBot/Library/ShaderCache/a/ad5214209854ea8dd228810e6a75256f.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ad5214209854ea8dd228810e6a75256f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ad8c14391f793606ad975fbd8be8b8cf.bin b/HoloBot/Library/ShaderCache/a/ad8c14391f793606ad975fbd8be8b8cf.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ad8c14391f793606ad975fbd8be8b8cf.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ad8e346db4761994604584260ab32c3a.bin b/HoloBot/Library/ShaderCache/a/ad8e346db4761994604584260ab32c3a.bin new file mode 100644 index 0000000..d913520 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ad8e346db4761994604584260ab32c3a.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ada338fa70a9f925a43454a9132851e1.bin b/HoloBot/Library/ShaderCache/a/ada338fa70a9f925a43454a9132851e1.bin new file mode 100644 index 0000000..c01c457 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ada338fa70a9f925a43454a9132851e1.bin differ diff --git a/HoloBot/Library/ShaderCache/a/adad60dedf22450301bdd3b1cc7a2a5b.bin b/HoloBot/Library/ShaderCache/a/adad60dedf22450301bdd3b1cc7a2a5b.bin new file mode 100644 index 0000000..2cf9a6c Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/adad60dedf22450301bdd3b1cc7a2a5b.bin differ diff --git a/HoloBot/Library/ShaderCache/a/add3e314b47f92f94eed255c7c5fa3aa.bin b/HoloBot/Library/ShaderCache/a/add3e314b47f92f94eed255c7c5fa3aa.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/add3e314b47f92f94eed255c7c5fa3aa.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ae0d231f882202c548d3aa9817a918f8.bin b/HoloBot/Library/ShaderCache/a/ae0d231f882202c548d3aa9817a918f8.bin new file mode 100644 index 0000000..6e46021 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ae0d231f882202c548d3aa9817a918f8.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ae1061ebd0afa650c7813df03bd44aea.bin b/HoloBot/Library/ShaderCache/a/ae1061ebd0afa650c7813df03bd44aea.bin new file mode 100644 index 0000000..0ce36d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ae1061ebd0afa650c7813df03bd44aea.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ae18c2075026f0fa6d67c1875ad007d6.bin b/HoloBot/Library/ShaderCache/a/ae18c2075026f0fa6d67c1875ad007d6.bin new file mode 100644 index 0000000..86a19cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ae18c2075026f0fa6d67c1875ad007d6.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ae69b9de981e9eab52cb662fbfd13f4e.bin b/HoloBot/Library/ShaderCache/a/ae69b9de981e9eab52cb662fbfd13f4e.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ae69b9de981e9eab52cb662fbfd13f4e.bin differ diff --git a/HoloBot/Library/ShaderCache/a/ae89057137236a09d6b9771897bb1de0.bin b/HoloBot/Library/ShaderCache/a/ae89057137236a09d6b9771897bb1de0.bin new file mode 100644 index 0000000..fe70c9f Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/ae89057137236a09d6b9771897bb1de0.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aeaa7ab8a6724fc103a430bc6a392459.bin b/HoloBot/Library/ShaderCache/a/aeaa7ab8a6724fc103a430bc6a392459.bin new file mode 100644 index 0000000..54add9a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aeaa7ab8a6724fc103a430bc6a392459.bin differ diff --git a/HoloBot/Library/ShaderCache/a/aeffee0689771a8e94a42b6c34a4447f.bin b/HoloBot/Library/ShaderCache/a/aeffee0689771a8e94a42b6c34a4447f.bin new file mode 100644 index 0000000..1e94ace Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/aeffee0689771a8e94a42b6c34a4447f.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af076cf5748cc2efff3c93f274f02fab.bin b/HoloBot/Library/ShaderCache/a/af076cf5748cc2efff3c93f274f02fab.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af076cf5748cc2efff3c93f274f02fab.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af37a1ee660a435ba39bfba333ade0e8.bin b/HoloBot/Library/ShaderCache/a/af37a1ee660a435ba39bfba333ade0e8.bin new file mode 100644 index 0000000..5f2255a Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af37a1ee660a435ba39bfba333ade0e8.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af4b19d2c564bb48240e06157836d214.bin b/HoloBot/Library/ShaderCache/a/af4b19d2c564bb48240e06157836d214.bin new file mode 100644 index 0000000..869ee0b Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af4b19d2c564bb48240e06157836d214.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af5ea6797a57d4fd4cf8f59d09b23696.bin b/HoloBot/Library/ShaderCache/a/af5ea6797a57d4fd4cf8f59d09b23696.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af5ea6797a57d4fd4cf8f59d09b23696.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af6a65faf168f44a5cd27747bdeec609.bin b/HoloBot/Library/ShaderCache/a/af6a65faf168f44a5cd27747bdeec609.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af6a65faf168f44a5cd27747bdeec609.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af732bfea66fc46cd8a1f8fd22ef8306.bin b/HoloBot/Library/ShaderCache/a/af732bfea66fc46cd8a1f8fd22ef8306.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af732bfea66fc46cd8a1f8fd22ef8306.bin differ diff --git a/HoloBot/Library/ShaderCache/a/af742e613a58341c3d6383e2f7eb39f5.bin b/HoloBot/Library/ShaderCache/a/af742e613a58341c3d6383e2f7eb39f5.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/a/af742e613a58341c3d6383e2f7eb39f5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b006fc7021dbd2ecb93d916634bb4e02.bin b/HoloBot/Library/ShaderCache/b/b006fc7021dbd2ecb93d916634bb4e02.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b006fc7021dbd2ecb93d916634bb4e02.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b030656dfa191a105bfb5a3a6d6d53a3.bin b/HoloBot/Library/ShaderCache/b/b030656dfa191a105bfb5a3a6d6d53a3.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b030656dfa191a105bfb5a3a6d6d53a3.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b046a58feb10b79473ff41bf8233b20d.bin b/HoloBot/Library/ShaderCache/b/b046a58feb10b79473ff41bf8233b20d.bin new file mode 100644 index 0000000..39d4535 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b046a58feb10b79473ff41bf8233b20d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b06a0b6ac903c75fc6cc56f11b20edcb.bin b/HoloBot/Library/ShaderCache/b/b06a0b6ac903c75fc6cc56f11b20edcb.bin new file mode 100644 index 0000000..f203ee7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b06a0b6ac903c75fc6cc56f11b20edcb.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b0730d15fd96ab5157b89d88ef0350ad.bin b/HoloBot/Library/ShaderCache/b/b0730d15fd96ab5157b89d88ef0350ad.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b0730d15fd96ab5157b89d88ef0350ad.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b085f2b462889583fdbdc79b8f81ac4c.bin b/HoloBot/Library/ShaderCache/b/b085f2b462889583fdbdc79b8f81ac4c.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b085f2b462889583fdbdc79b8f81ac4c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b0d90cebcb8246efb2bd5873d655f9e0.bin b/HoloBot/Library/ShaderCache/b/b0d90cebcb8246efb2bd5873d655f9e0.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b0d90cebcb8246efb2bd5873d655f9e0.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b0f500c1df1312fa45a17d6e682e3768.bin b/HoloBot/Library/ShaderCache/b/b0f500c1df1312fa45a17d6e682e3768.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b0f500c1df1312fa45a17d6e682e3768.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1365f35b004c88173c2ecab501e42f7.bin b/HoloBot/Library/ShaderCache/b/b1365f35b004c88173c2ecab501e42f7.bin new file mode 100644 index 0000000..e8fa1cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1365f35b004c88173c2ecab501e42f7.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b15997cf78ea6b2f919a75c17790641c.bin b/HoloBot/Library/ShaderCache/b/b15997cf78ea6b2f919a75c17790641c.bin new file mode 100644 index 0000000..642a3ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b15997cf78ea6b2f919a75c17790641c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1990a9bc59756a69e0ab8b6d92a9155.bin b/HoloBot/Library/ShaderCache/b/b1990a9bc59756a69e0ab8b6d92a9155.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1990a9bc59756a69e0ab8b6d92a9155.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1a2de93d873739c8f7ccef5015a2bb9.bin b/HoloBot/Library/ShaderCache/b/b1a2de93d873739c8f7ccef5015a2bb9.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1a2de93d873739c8f7ccef5015a2bb9.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1a8a9e887044164a9e70f66613aca56.bin b/HoloBot/Library/ShaderCache/b/b1a8a9e887044164a9e70f66613aca56.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1a8a9e887044164a9e70f66613aca56.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1e6b09f3b550ea396a1a3dd7df6dd41.bin b/HoloBot/Library/ShaderCache/b/b1e6b09f3b550ea396a1a3dd7df6dd41.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1e6b09f3b550ea396a1a3dd7df6dd41.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b1e8599838d489af10ae5276f4a2ac2b.bin b/HoloBot/Library/ShaderCache/b/b1e8599838d489af10ae5276f4a2ac2b.bin new file mode 100644 index 0000000..724bbc1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b1e8599838d489af10ae5276f4a2ac2b.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b202d3adb4df9e0ddce8f5950d18fd98.bin b/HoloBot/Library/ShaderCache/b/b202d3adb4df9e0ddce8f5950d18fd98.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b202d3adb4df9e0ddce8f5950d18fd98.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b20502e09bc69a954d26b17356c846e5.bin b/HoloBot/Library/ShaderCache/b/b20502e09bc69a954d26b17356c846e5.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b20502e09bc69a954d26b17356c846e5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b229a982c0b84c876147fa3214442a25.bin b/HoloBot/Library/ShaderCache/b/b229a982c0b84c876147fa3214442a25.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b229a982c0b84c876147fa3214442a25.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b22cd887acc72875b6fd01e495208db7.bin b/HoloBot/Library/ShaderCache/b/b22cd887acc72875b6fd01e495208db7.bin new file mode 100644 index 0000000..53a286b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b22cd887acc72875b6fd01e495208db7.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b23268d6ed3575a22fca396ba17a5f77.bin b/HoloBot/Library/ShaderCache/b/b23268d6ed3575a22fca396ba17a5f77.bin new file mode 100644 index 0000000..b77195e Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b23268d6ed3575a22fca396ba17a5f77.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b271c70ca01e7ef2d3158bdd5d109a54.bin b/HoloBot/Library/ShaderCache/b/b271c70ca01e7ef2d3158bdd5d109a54.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b271c70ca01e7ef2d3158bdd5d109a54.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b2761533632cc116e209abac3d6fd586.bin b/HoloBot/Library/ShaderCache/b/b2761533632cc116e209abac3d6fd586.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b2761533632cc116e209abac3d6fd586.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b276afcc9efb0a379ee02a99d8840580.bin b/HoloBot/Library/ShaderCache/b/b276afcc9efb0a379ee02a99d8840580.bin new file mode 100644 index 0000000..af8c8fa Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b276afcc9efb0a379ee02a99d8840580.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b29ea2e21a5d939180b6b74489afcebe.bin b/HoloBot/Library/ShaderCache/b/b29ea2e21a5d939180b6b74489afcebe.bin new file mode 100644 index 0000000..45f4d28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b29ea2e21a5d939180b6b74489afcebe.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b2b339e570cfd224ff79362569bb6fa5.bin b/HoloBot/Library/ShaderCache/b/b2b339e570cfd224ff79362569bb6fa5.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b2b339e570cfd224ff79362569bb6fa5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b2c65b4f20d89722c081e692498c82d5.bin b/HoloBot/Library/ShaderCache/b/b2c65b4f20d89722c081e692498c82d5.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b2c65b4f20d89722c081e692498c82d5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b2f40d74998a8e600454f1a47612e4fc.bin b/HoloBot/Library/ShaderCache/b/b2f40d74998a8e600454f1a47612e4fc.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b2f40d74998a8e600454f1a47612e4fc.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b3078fab9b3b20ba07e2f5ca2a9133af.bin b/HoloBot/Library/ShaderCache/b/b3078fab9b3b20ba07e2f5ca2a9133af.bin new file mode 100644 index 0000000..b7efd06 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b3078fab9b3b20ba07e2f5ca2a9133af.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b33ba7de49533762e8b7019334b7e9cb.bin b/HoloBot/Library/ShaderCache/b/b33ba7de49533762e8b7019334b7e9cb.bin new file mode 100644 index 0000000..ba288ab Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b33ba7de49533762e8b7019334b7e9cb.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b359fd43d071419d3c199c1f49a01c1c.bin b/HoloBot/Library/ShaderCache/b/b359fd43d071419d3c199c1f49a01c1c.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b359fd43d071419d3c199c1f49a01c1c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b39f5c228cf4fa8704a71286bc43d3ee.bin b/HoloBot/Library/ShaderCache/b/b39f5c228cf4fa8704a71286bc43d3ee.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b39f5c228cf4fa8704a71286bc43d3ee.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b3a23ceb13241ad869d61cfa241ba9a4.bin b/HoloBot/Library/ShaderCache/b/b3a23ceb13241ad869d61cfa241ba9a4.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b3a23ceb13241ad869d61cfa241ba9a4.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b3a27a647b138582ef280ac0196ace36.bin b/HoloBot/Library/ShaderCache/b/b3a27a647b138582ef280ac0196ace36.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b3a27a647b138582ef280ac0196ace36.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b3aaa05d94ff5864dd96852f5c9ad70c.bin b/HoloBot/Library/ShaderCache/b/b3aaa05d94ff5864dd96852f5c9ad70c.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b3aaa05d94ff5864dd96852f5c9ad70c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b3fbc3f2bb11eb01601562696f71ee18.bin b/HoloBot/Library/ShaderCache/b/b3fbc3f2bb11eb01601562696f71ee18.bin new file mode 100644 index 0000000..bfec024 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b3fbc3f2bb11eb01601562696f71ee18.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b402887db68567a00fc3328d06fd7f2d.bin b/HoloBot/Library/ShaderCache/b/b402887db68567a00fc3328d06fd7f2d.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b402887db68567a00fc3328d06fd7f2d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b407f59be83d7f924491323222784b8e.bin b/HoloBot/Library/ShaderCache/b/b407f59be83d7f924491323222784b8e.bin new file mode 100644 index 0000000..4377945 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b407f59be83d7f924491323222784b8e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b42a6b63c7f2f37764b6c14137921679.bin b/HoloBot/Library/ShaderCache/b/b42a6b63c7f2f37764b6c14137921679.bin new file mode 100644 index 0000000..d99825f Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b42a6b63c7f2f37764b6c14137921679.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b438d70a2485ffc8dc30b002f74ff9c2.bin b/HoloBot/Library/ShaderCache/b/b438d70a2485ffc8dc30b002f74ff9c2.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b438d70a2485ffc8dc30b002f74ff9c2.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b481e26933552cf1b5be71b686d0ca27.bin b/HoloBot/Library/ShaderCache/b/b481e26933552cf1b5be71b686d0ca27.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b481e26933552cf1b5be71b686d0ca27.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b48a493a3478c540a39b7cbd2ff69de3.bin b/HoloBot/Library/ShaderCache/b/b48a493a3478c540a39b7cbd2ff69de3.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b48a493a3478c540a39b7cbd2ff69de3.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b4be5b544e7494aec923c906b9647881.bin b/HoloBot/Library/ShaderCache/b/b4be5b544e7494aec923c906b9647881.bin new file mode 100644 index 0000000..bf33f17 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b4be5b544e7494aec923c906b9647881.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b4cde9e5cf31760999f6305f9183cea9.bin b/HoloBot/Library/ShaderCache/b/b4cde9e5cf31760999f6305f9183cea9.bin new file mode 100644 index 0000000..339116e Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b4cde9e5cf31760999f6305f9183cea9.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b4cec69f58039a96d32606508b8383d7.bin b/HoloBot/Library/ShaderCache/b/b4cec69f58039a96d32606508b8383d7.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b4cec69f58039a96d32606508b8383d7.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b52b92befe78d75d0b5c732a28af0937.bin b/HoloBot/Library/ShaderCache/b/b52b92befe78d75d0b5c732a28af0937.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b52b92befe78d75d0b5c732a28af0937.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b53b9e6f727b2029619b109b79bf47cb.bin b/HoloBot/Library/ShaderCache/b/b53b9e6f727b2029619b109b79bf47cb.bin new file mode 100644 index 0000000..634c445 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b53b9e6f727b2029619b109b79bf47cb.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5455b427bc7efc5fb9a19d72aa822a5.bin b/HoloBot/Library/ShaderCache/b/b5455b427bc7efc5fb9a19d72aa822a5.bin new file mode 100644 index 0000000..e2346e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5455b427bc7efc5fb9a19d72aa822a5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b54634a0c1ede2518b98c611f53348d8.bin b/HoloBot/Library/ShaderCache/b/b54634a0c1ede2518b98c611f53348d8.bin new file mode 100644 index 0000000..e15c802 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b54634a0c1ede2518b98c611f53348d8.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b54976c619c77b18e37762a9081d80f8.bin b/HoloBot/Library/ShaderCache/b/b54976c619c77b18e37762a9081d80f8.bin new file mode 100644 index 0000000..fde5743 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b54976c619c77b18e37762a9081d80f8.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b557859306ac7224e080a5f09baf7921.bin b/HoloBot/Library/ShaderCache/b/b557859306ac7224e080a5f09baf7921.bin new file mode 100644 index 0000000..e0f75c6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b557859306ac7224e080a5f09baf7921.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b562a3d9143a548498098b6cef23ef72.bin b/HoloBot/Library/ShaderCache/b/b562a3d9143a548498098b6cef23ef72.bin new file mode 100644 index 0000000..6493b60 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b562a3d9143a548498098b6cef23ef72.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5690c5e8e9ddd304d97b01183fda5ed.bin b/HoloBot/Library/ShaderCache/b/b5690c5e8e9ddd304d97b01183fda5ed.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5690c5e8e9ddd304d97b01183fda5ed.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b56daf32f2020988f8e8af899b4c7a3e.bin b/HoloBot/Library/ShaderCache/b/b56daf32f2020988f8e8af899b4c7a3e.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b56daf32f2020988f8e8af899b4c7a3e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b57bea633664ba638db80cfd64e00635.bin b/HoloBot/Library/ShaderCache/b/b57bea633664ba638db80cfd64e00635.bin new file mode 100644 index 0000000..072d630 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b57bea633664ba638db80cfd64e00635.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b58f06f85c3f4e535c40302599b88b6c.bin b/HoloBot/Library/ShaderCache/b/b58f06f85c3f4e535c40302599b88b6c.bin new file mode 100644 index 0000000..d8cd855 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b58f06f85c3f4e535c40302599b88b6c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b597fabc91e4bad447db8e14b25b267d.bin b/HoloBot/Library/ShaderCache/b/b597fabc91e4bad447db8e14b25b267d.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b597fabc91e4bad447db8e14b25b267d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5c238d58843186bdf72203cbbdf7764.bin b/HoloBot/Library/ShaderCache/b/b5c238d58843186bdf72203cbbdf7764.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5c238d58843186bdf72203cbbdf7764.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5daee2d94b897c0148f66eb39f6a051.bin b/HoloBot/Library/ShaderCache/b/b5daee2d94b897c0148f66eb39f6a051.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5daee2d94b897c0148f66eb39f6a051.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5e3cc3b1957c7d4486b32b5c0a1ec06.bin b/HoloBot/Library/ShaderCache/b/b5e3cc3b1957c7d4486b32b5c0a1ec06.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5e3cc3b1957c7d4486b32b5c0a1ec06.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b5ec99a71608fe1cb2d0cad102149d2d.bin b/HoloBot/Library/ShaderCache/b/b5ec99a71608fe1cb2d0cad102149d2d.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b5ec99a71608fe1cb2d0cad102149d2d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b607fa5ca6c514925ffd1811181af4ba.bin b/HoloBot/Library/ShaderCache/b/b607fa5ca6c514925ffd1811181af4ba.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b607fa5ca6c514925ffd1811181af4ba.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b650681fc15a0d30a56d33713bf0131e.bin b/HoloBot/Library/ShaderCache/b/b650681fc15a0d30a56d33713bf0131e.bin new file mode 100644 index 0000000..e2d38eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b650681fc15a0d30a56d33713bf0131e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b656a0d9500833e95ab9b53dc44e7b56.bin b/HoloBot/Library/ShaderCache/b/b656a0d9500833e95ab9b53dc44e7b56.bin new file mode 100644 index 0000000..f53a830 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b656a0d9500833e95ab9b53dc44e7b56.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b657b5eab86d0ee3c5c57828a98c7c5f.bin b/HoloBot/Library/ShaderCache/b/b657b5eab86d0ee3c5c57828a98c7c5f.bin new file mode 100644 index 0000000..54d7c7c Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b657b5eab86d0ee3c5c57828a98c7c5f.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b660ce4813abc303214bec8798718461.bin b/HoloBot/Library/ShaderCache/b/b660ce4813abc303214bec8798718461.bin new file mode 100644 index 0000000..5af50e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b660ce4813abc303214bec8798718461.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b69573b82f86b2613be95dadf1534b4b.bin b/HoloBot/Library/ShaderCache/b/b69573b82f86b2613be95dadf1534b4b.bin new file mode 100644 index 0000000..0485742 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b69573b82f86b2613be95dadf1534b4b.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b6a2e4fa4c5439d960eaf756caac07ac.bin b/HoloBot/Library/ShaderCache/b/b6a2e4fa4c5439d960eaf756caac07ac.bin new file mode 100644 index 0000000..a72c279 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b6a2e4fa4c5439d960eaf756caac07ac.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b739c9c8caded2e2dd2bac0cd3fe8de3.bin b/HoloBot/Library/ShaderCache/b/b739c9c8caded2e2dd2bac0cd3fe8de3.bin new file mode 100644 index 0000000..b4446cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b739c9c8caded2e2dd2bac0cd3fe8de3.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b74e6dadb773ed7fb3143ed6b7fefd24.bin b/HoloBot/Library/ShaderCache/b/b74e6dadb773ed7fb3143ed6b7fefd24.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b74e6dadb773ed7fb3143ed6b7fefd24.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b76aedf7909c4cd364909a6169829a17.bin b/HoloBot/Library/ShaderCache/b/b76aedf7909c4cd364909a6169829a17.bin new file mode 100644 index 0000000..1c32653 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b76aedf7909c4cd364909a6169829a17.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b77a4caced32f21fc05acc6bbec7156c.bin b/HoloBot/Library/ShaderCache/b/b77a4caced32f21fc05acc6bbec7156c.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b77a4caced32f21fc05acc6bbec7156c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b83d3291f1a165f9be4c4d88fa3b4cd2.bin b/HoloBot/Library/ShaderCache/b/b83d3291f1a165f9be4c4d88fa3b4cd2.bin new file mode 100644 index 0000000..47adc6f Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b83d3291f1a165f9be4c4d88fa3b4cd2.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b876c00769d049cb172eddb59140fbb4.bin b/HoloBot/Library/ShaderCache/b/b876c00769d049cb172eddb59140fbb4.bin new file mode 100644 index 0000000..efdfa6b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b876c00769d049cb172eddb59140fbb4.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b884253924f3b2e5f2210b84c8f2d5ac.bin b/HoloBot/Library/ShaderCache/b/b884253924f3b2e5f2210b84c8f2d5ac.bin new file mode 100644 index 0000000..1e20f01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b884253924f3b2e5f2210b84c8f2d5ac.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b90aacefba3b9c4bc8e312c976300183.bin b/HoloBot/Library/ShaderCache/b/b90aacefba3b9c4bc8e312c976300183.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b90aacefba3b9c4bc8e312c976300183.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b917eebd4f0cc4802d024082be367cc2.bin b/HoloBot/Library/ShaderCache/b/b917eebd4f0cc4802d024082be367cc2.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b917eebd4f0cc4802d024082be367cc2.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b91bc8dc9633ca62b804e4600dd75174.bin b/HoloBot/Library/ShaderCache/b/b91bc8dc9633ca62b804e4600dd75174.bin new file mode 100644 index 0000000..a909f14 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b91bc8dc9633ca62b804e4600dd75174.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b9263e3e3d519524f5a23867ca3ba586.bin b/HoloBot/Library/ShaderCache/b/b9263e3e3d519524f5a23867ca3ba586.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b9263e3e3d519524f5a23867ca3ba586.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b93383251707e8343beb1c3dc29f5ccf.bin b/HoloBot/Library/ShaderCache/b/b93383251707e8343beb1c3dc29f5ccf.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b93383251707e8343beb1c3dc29f5ccf.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b9519a4d070924552d6679c638c7d21d.bin b/HoloBot/Library/ShaderCache/b/b9519a4d070924552d6679c638c7d21d.bin new file mode 100644 index 0000000..d528d8b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b9519a4d070924552d6679c638c7d21d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b990b683a739645323475b61d1fc950d.bin b/HoloBot/Library/ShaderCache/b/b990b683a739645323475b61d1fc950d.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b990b683a739645323475b61d1fc950d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b9a665a5c1012a9f6091d0ffafaa9127.bin b/HoloBot/Library/ShaderCache/b/b9a665a5c1012a9f6091d0ffafaa9127.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b9a665a5c1012a9f6091d0ffafaa9127.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b9a77ff85a69aa7bce05d995d3de500d.bin b/HoloBot/Library/ShaderCache/b/b9a77ff85a69aa7bce05d995d3de500d.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b9a77ff85a69aa7bce05d995d3de500d.bin differ diff --git a/HoloBot/Library/ShaderCache/b/b9af75ff9e16bfdc6ae55f593af49b00.bin b/HoloBot/Library/ShaderCache/b/b9af75ff9e16bfdc6ae55f593af49b00.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/b9af75ff9e16bfdc6ae55f593af49b00.bin differ diff --git a/HoloBot/Library/ShaderCache/b/ba3dcf49e48c6198ae122682b182c306.bin b/HoloBot/Library/ShaderCache/b/ba3dcf49e48c6198ae122682b182c306.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/ba3dcf49e48c6198ae122682b182c306.bin differ diff --git a/HoloBot/Library/ShaderCache/b/ba43ea83fae17ee571511c4f1d08e759.bin b/HoloBot/Library/ShaderCache/b/ba43ea83fae17ee571511c4f1d08e759.bin new file mode 100644 index 0000000..bbe94a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/ba43ea83fae17ee571511c4f1d08e759.bin differ diff --git a/HoloBot/Library/ShaderCache/b/ba56aa50b542e4bb0a76899f2dd6dcdd.bin b/HoloBot/Library/ShaderCache/b/ba56aa50b542e4bb0a76899f2dd6dcdd.bin new file mode 100644 index 0000000..591041d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/ba56aa50b542e4bb0a76899f2dd6dcdd.bin differ diff --git a/HoloBot/Library/ShaderCache/b/baafff7b2341bb11f0ea320f8d308b1e.bin b/HoloBot/Library/ShaderCache/b/baafff7b2341bb11f0ea320f8d308b1e.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/baafff7b2341bb11f0ea320f8d308b1e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bab1d539742e0f691895e410b6f8eb0e.bin b/HoloBot/Library/ShaderCache/b/bab1d539742e0f691895e410b6f8eb0e.bin new file mode 100644 index 0000000..7dea44f Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bab1d539742e0f691895e410b6f8eb0e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bade4120e968d6f8b009f597e24b2c64.bin b/HoloBot/Library/ShaderCache/b/bade4120e968d6f8b009f597e24b2c64.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bade4120e968d6f8b009f597e24b2c64.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bb12233094a30068427c09490312e1f1.bin b/HoloBot/Library/ShaderCache/b/bb12233094a30068427c09490312e1f1.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bb12233094a30068427c09490312e1f1.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bb4a3b0e2d411bcd65b8a61e05fa84b2.bin b/HoloBot/Library/ShaderCache/b/bb4a3b0e2d411bcd65b8a61e05fa84b2.bin new file mode 100644 index 0000000..4934bd8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bb4a3b0e2d411bcd65b8a61e05fa84b2.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bb8c0d13d429fabe3ae8a2118b3a30ce.bin b/HoloBot/Library/ShaderCache/b/bb8c0d13d429fabe3ae8a2118b3a30ce.bin new file mode 100644 index 0000000..bd66f04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bb8c0d13d429fabe3ae8a2118b3a30ce.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bbebbf8c2a5d44e7451deb60f8477c4f.bin b/HoloBot/Library/ShaderCache/b/bbebbf8c2a5d44e7451deb60f8477c4f.bin new file mode 100644 index 0000000..2e85312 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bbebbf8c2a5d44e7451deb60f8477c4f.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bbfa1d3cb448491281302a7adaed9f9a.bin b/HoloBot/Library/ShaderCache/b/bbfa1d3cb448491281302a7adaed9f9a.bin new file mode 100644 index 0000000..558df4a Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bbfa1d3cb448491281302a7adaed9f9a.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bc7cff134a33c94a8a55aae6e26932d3.bin b/HoloBot/Library/ShaderCache/b/bc7cff134a33c94a8a55aae6e26932d3.bin new file mode 100644 index 0000000..5949a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bc7cff134a33c94a8a55aae6e26932d3.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bc946f789145c95594d4978eead6892f.bin b/HoloBot/Library/ShaderCache/b/bc946f789145c95594d4978eead6892f.bin new file mode 100644 index 0000000..01cfbbe Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bc946f789145c95594d4978eead6892f.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bc97f78012544c04d9c83db1660f7f60.bin b/HoloBot/Library/ShaderCache/b/bc97f78012544c04d9c83db1660f7f60.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bc97f78012544c04d9c83db1660f7f60.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bcf53353fa0c8c767a38b7365abfb6e5.bin b/HoloBot/Library/ShaderCache/b/bcf53353fa0c8c767a38b7365abfb6e5.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bcf53353fa0c8c767a38b7365abfb6e5.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bd027e5e42252cf8678ee258040e9e53.bin b/HoloBot/Library/ShaderCache/b/bd027e5e42252cf8678ee258040e9e53.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bd027e5e42252cf8678ee258040e9e53.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bd0b3bd008fdf4a967e43ba6b7dcd26b.bin b/HoloBot/Library/ShaderCache/b/bd0b3bd008fdf4a967e43ba6b7dcd26b.bin new file mode 100644 index 0000000..1f01953 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bd0b3bd008fdf4a967e43ba6b7dcd26b.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bd747a11d80ec1b093f181865e050d96.bin b/HoloBot/Library/ShaderCache/b/bd747a11d80ec1b093f181865e050d96.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bd747a11d80ec1b093f181865e050d96.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bd899a2002fda02132cd4e24485af694.bin b/HoloBot/Library/ShaderCache/b/bd899a2002fda02132cd4e24485af694.bin new file mode 100644 index 0000000..e2b97a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bd899a2002fda02132cd4e24485af694.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bdb984de371dc9d19cfb4f6502b8db75.bin b/HoloBot/Library/ShaderCache/b/bdb984de371dc9d19cfb4f6502b8db75.bin new file mode 100644 index 0000000..72c7a49 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bdb984de371dc9d19cfb4f6502b8db75.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bdbcaa07308f5369b3947887f7a3f65a.bin b/HoloBot/Library/ShaderCache/b/bdbcaa07308f5369b3947887f7a3f65a.bin new file mode 100644 index 0000000..dba96d4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bdbcaa07308f5369b3947887f7a3f65a.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bdc0a6fc430c4013213f9773bc4d296b.bin b/HoloBot/Library/ShaderCache/b/bdc0a6fc430c4013213f9773bc4d296b.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bdc0a6fc430c4013213f9773bc4d296b.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bdd82244a86eaf48eafdb71bcf4103a0.bin b/HoloBot/Library/ShaderCache/b/bdd82244a86eaf48eafdb71bcf4103a0.bin new file mode 100644 index 0000000..2c63f64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bdd82244a86eaf48eafdb71bcf4103a0.bin differ diff --git a/HoloBot/Library/ShaderCache/b/be261bf5b180b305f41c059308e34891.bin b/HoloBot/Library/ShaderCache/b/be261bf5b180b305f41c059308e34891.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/be261bf5b180b305f41c059308e34891.bin differ diff --git a/HoloBot/Library/ShaderCache/b/be5590af6eec04fd44d12bcda15b2fc7.bin b/HoloBot/Library/ShaderCache/b/be5590af6eec04fd44d12bcda15b2fc7.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/be5590af6eec04fd44d12bcda15b2fc7.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bea2cdf1bedc4e00c64d196d7540ba88.bin b/HoloBot/Library/ShaderCache/b/bea2cdf1bedc4e00c64d196d7540ba88.bin new file mode 100644 index 0000000..a8f8ef5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bea2cdf1bedc4e00c64d196d7540ba88.bin differ diff --git a/HoloBot/Library/ShaderCache/b/becf13bb8f9b1436358dbb248426d259.bin b/HoloBot/Library/ShaderCache/b/becf13bb8f9b1436358dbb248426d259.bin new file mode 100644 index 0000000..746df64 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/becf13bb8f9b1436358dbb248426d259.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bee1bd31e5fea7c0eb2f3d85af2ecec8.bin b/HoloBot/Library/ShaderCache/b/bee1bd31e5fea7c0eb2f3d85af2ecec8.bin new file mode 100644 index 0000000..7b4be4b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bee1bd31e5fea7c0eb2f3d85af2ecec8.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf2ddb8779fe34907255659a87300f98.bin b/HoloBot/Library/ShaderCache/b/bf2ddb8779fe34907255659a87300f98.bin new file mode 100644 index 0000000..8a3446d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf2ddb8779fe34907255659a87300f98.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf3e327063441fd1063c6e71999c639e.bin b/HoloBot/Library/ShaderCache/b/bf3e327063441fd1063c6e71999c639e.bin new file mode 100644 index 0000000..6759386 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf3e327063441fd1063c6e71999c639e.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf5208a1da7dd2c563ec6ed54434ed5c.bin b/HoloBot/Library/ShaderCache/b/bf5208a1da7dd2c563ec6ed54434ed5c.bin new file mode 100644 index 0000000..0804ad9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf5208a1da7dd2c563ec6ed54434ed5c.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf5dd6b190acf383e411cec63012ae11.bin b/HoloBot/Library/ShaderCache/b/bf5dd6b190acf383e411cec63012ae11.bin new file mode 100644 index 0000000..726cb2a Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf5dd6b190acf383e411cec63012ae11.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf750fcc74a3a5fc4c953c3165ba67e7.bin b/HoloBot/Library/ShaderCache/b/bf750fcc74a3a5fc4c953c3165ba67e7.bin new file mode 100644 index 0000000..794d613 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf750fcc74a3a5fc4c953c3165ba67e7.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bf7b2f12fd6b661f862d8b423f56ceb4.bin b/HoloBot/Library/ShaderCache/b/bf7b2f12fd6b661f862d8b423f56ceb4.bin new file mode 100644 index 0000000..dc2cc67 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bf7b2f12fd6b661f862d8b423f56ceb4.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bfa537c5f9b0b7ec3891a79f3f41c175.bin b/HoloBot/Library/ShaderCache/b/bfa537c5f9b0b7ec3891a79f3f41c175.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bfa537c5f9b0b7ec3891a79f3f41c175.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bfc61e994a4e764559cad1079bfbbf4a.bin b/HoloBot/Library/ShaderCache/b/bfc61e994a4e764559cad1079bfbbf4a.bin new file mode 100644 index 0000000..b7ca81d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bfc61e994a4e764559cad1079bfbbf4a.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bfd453e52f2e1c6160482c91b6016936.bin b/HoloBot/Library/ShaderCache/b/bfd453e52f2e1c6160482c91b6016936.bin new file mode 100644 index 0000000..efdfa6b Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bfd453e52f2e1c6160482c91b6016936.bin differ diff --git a/HoloBot/Library/ShaderCache/b/bfe6b60737226f7cac61573203e7b782.bin b/HoloBot/Library/ShaderCache/b/bfe6b60737226f7cac61573203e7b782.bin new file mode 100644 index 0000000..00d0c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/b/bfe6b60737226f7cac61573203e7b782.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c00ece3db83462dcfda6ffed0f3f3cdc.bin b/HoloBot/Library/ShaderCache/c/c00ece3db83462dcfda6ffed0f3f3cdc.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c00ece3db83462dcfda6ffed0f3f3cdc.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c0262a2bf8d98e43fcdbb91214b5395a.bin b/HoloBot/Library/ShaderCache/c/c0262a2bf8d98e43fcdbb91214b5395a.bin new file mode 100644 index 0000000..740a3f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c0262a2bf8d98e43fcdbb91214b5395a.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c066a5760eb14b65a765c009552d2601.bin b/HoloBot/Library/ShaderCache/c/c066a5760eb14b65a765c009552d2601.bin new file mode 100644 index 0000000..7e3b4de Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c066a5760eb14b65a765c009552d2601.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c06f341de0dc0f31a27c7292f3b8031a.bin b/HoloBot/Library/ShaderCache/c/c06f341de0dc0f31a27c7292f3b8031a.bin new file mode 100644 index 0000000..2954408 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c06f341de0dc0f31a27c7292f3b8031a.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c078ce531e376dd60594c0a409c86e24.bin b/HoloBot/Library/ShaderCache/c/c078ce531e376dd60594c0a409c86e24.bin new file mode 100644 index 0000000..23ed3f4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c078ce531e376dd60594c0a409c86e24.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c09e59235149cfe9950046f9dc390aee.bin b/HoloBot/Library/ShaderCache/c/c09e59235149cfe9950046f9dc390aee.bin new file mode 100644 index 0000000..3e9c9cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c09e59235149cfe9950046f9dc390aee.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c0caa44fab72af686e6cb736de060fb6.bin b/HoloBot/Library/ShaderCache/c/c0caa44fab72af686e6cb736de060fb6.bin new file mode 100644 index 0000000..3d13378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c0caa44fab72af686e6cb736de060fb6.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c0de78d01f83825bbf1ca2d9ac9dd30c.bin b/HoloBot/Library/ShaderCache/c/c0de78d01f83825bbf1ca2d9ac9dd30c.bin new file mode 100644 index 0000000..d99825f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c0de78d01f83825bbf1ca2d9ac9dd30c.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c0fe32ffd2942e9aeda6a88f30645515.bin b/HoloBot/Library/ShaderCache/c/c0fe32ffd2942e9aeda6a88f30645515.bin new file mode 100644 index 0000000..a185740 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c0fe32ffd2942e9aeda6a88f30645515.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c101bb163778013495b1832331022263.bin b/HoloBot/Library/ShaderCache/c/c101bb163778013495b1832331022263.bin new file mode 100644 index 0000000..a8f8ef5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c101bb163778013495b1832331022263.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c15e8e3560729f1b1f95ee67322f1350.bin b/HoloBot/Library/ShaderCache/c/c15e8e3560729f1b1f95ee67322f1350.bin new file mode 100644 index 0000000..67d2ce4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c15e8e3560729f1b1f95ee67322f1350.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c16bfde25352990e807ce55509995955.bin b/HoloBot/Library/ShaderCache/c/c16bfde25352990e807ce55509995955.bin new file mode 100644 index 0000000..53a286b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c16bfde25352990e807ce55509995955.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c17f7364a98205ab75cada493f9a3c0c.bin b/HoloBot/Library/ShaderCache/c/c17f7364a98205ab75cada493f9a3c0c.bin new file mode 100644 index 0000000..2fc30c3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c17f7364a98205ab75cada493f9a3c0c.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c18f6494e4a1919fa973bb5fd0fdf3a8.bin b/HoloBot/Library/ShaderCache/c/c18f6494e4a1919fa973bb5fd0fdf3a8.bin new file mode 100644 index 0000000..589d3b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c18f6494e4a1919fa973bb5fd0fdf3a8.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c19c4d2544f21cf80f2894d00046dc5b.bin b/HoloBot/Library/ShaderCache/c/c19c4d2544f21cf80f2894d00046dc5b.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c19c4d2544f21cf80f2894d00046dc5b.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c1a69fd99788f2d1dcf63241fa4efce3.bin b/HoloBot/Library/ShaderCache/c/c1a69fd99788f2d1dcf63241fa4efce3.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c1a69fd99788f2d1dcf63241fa4efce3.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c20e4b40a40461556c218061878741fc.bin b/HoloBot/Library/ShaderCache/c/c20e4b40a40461556c218061878741fc.bin new file mode 100644 index 0000000..03c190e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c20e4b40a40461556c218061878741fc.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c21f76d55bfe6c20f72fd4c5f7d0700c.bin b/HoloBot/Library/ShaderCache/c/c21f76d55bfe6c20f72fd4c5f7d0700c.bin new file mode 100644 index 0000000..e1a66ae Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c21f76d55bfe6c20f72fd4c5f7d0700c.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c24250bffa3de45149a34619b10f5a74.bin b/HoloBot/Library/ShaderCache/c/c24250bffa3de45149a34619b10f5a74.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c24250bffa3de45149a34619b10f5a74.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c24d9475e0f25b052bd413ae3e66bf2d.bin b/HoloBot/Library/ShaderCache/c/c24d9475e0f25b052bd413ae3e66bf2d.bin new file mode 100644 index 0000000..86a049a Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c24d9475e0f25b052bd413ae3e66bf2d.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c250a77afc212f687b28eb895062d8c1.bin b/HoloBot/Library/ShaderCache/c/c250a77afc212f687b28eb895062d8c1.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c250a77afc212f687b28eb895062d8c1.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c265a0ee2e0aa497d6fdac523a3a637a.bin b/HoloBot/Library/ShaderCache/c/c265a0ee2e0aa497d6fdac523a3a637a.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c265a0ee2e0aa497d6fdac523a3a637a.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c286264aeedff58b0ce45ff950b9cfe0.bin b/HoloBot/Library/ShaderCache/c/c286264aeedff58b0ce45ff950b9cfe0.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c286264aeedff58b0ce45ff950b9cfe0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2910940b380df8c409e9b6fc97a7208.bin b/HoloBot/Library/ShaderCache/c/c2910940b380df8c409e9b6fc97a7208.bin new file mode 100644 index 0000000..9c4763a Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2910940b380df8c409e9b6fc97a7208.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2a91028062b419c9503ff6390a62ddf.bin b/HoloBot/Library/ShaderCache/c/c2a91028062b419c9503ff6390a62ddf.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2a91028062b419c9503ff6390a62ddf.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2bee82423ba7c9ef48ee37ee30affc8.bin b/HoloBot/Library/ShaderCache/c/c2bee82423ba7c9ef48ee37ee30affc8.bin new file mode 100644 index 0000000..088d577 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2bee82423ba7c9ef48ee37ee30affc8.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2e16cb01241a95b6c995e6302cfebbb.bin b/HoloBot/Library/ShaderCache/c/c2e16cb01241a95b6c995e6302cfebbb.bin new file mode 100644 index 0000000..947cd2f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2e16cb01241a95b6c995e6302cfebbb.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2f0992ac2a290e72ec17cbdf7904f86.bin b/HoloBot/Library/ShaderCache/c/c2f0992ac2a290e72ec17cbdf7904f86.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2f0992ac2a290e72ec17cbdf7904f86.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2f2f02c7efb90dab1c2f02c68d314e7.bin b/HoloBot/Library/ShaderCache/c/c2f2f02c7efb90dab1c2f02c68d314e7.bin new file mode 100644 index 0000000..63988c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2f2f02c7efb90dab1c2f02c68d314e7.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c2faef72791168c980133dafdf345827.bin b/HoloBot/Library/ShaderCache/c/c2faef72791168c980133dafdf345827.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c2faef72791168c980133dafdf345827.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c32d4882f9984ee44ccc718e2d08d0a0.bin b/HoloBot/Library/ShaderCache/c/c32d4882f9984ee44ccc718e2d08d0a0.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c32d4882f9984ee44ccc718e2d08d0a0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c32edcf309b97c4bc7a5a3c2d4025c07.bin b/HoloBot/Library/ShaderCache/c/c32edcf309b97c4bc7a5a3c2d4025c07.bin new file mode 100644 index 0000000..d17efb7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c32edcf309b97c4bc7a5a3c2d4025c07.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c335b51f4de1f6d40336e42d060d3e39.bin b/HoloBot/Library/ShaderCache/c/c335b51f4de1f6d40336e42d060d3e39.bin new file mode 100644 index 0000000..212ed35 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c335b51f4de1f6d40336e42d060d3e39.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c385448af00107a325628a9870d78437.bin b/HoloBot/Library/ShaderCache/c/c385448af00107a325628a9870d78437.bin new file mode 100644 index 0000000..86a19cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c385448af00107a325628a9870d78437.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c386890f4be9877bb7c3c816f8d5b3f9.bin b/HoloBot/Library/ShaderCache/c/c386890f4be9877bb7c3c816f8d5b3f9.bin new file mode 100644 index 0000000..724bbc1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c386890f4be9877bb7c3c816f8d5b3f9.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c38a729df7307660f27c42e703633780.bin b/HoloBot/Library/ShaderCache/c/c38a729df7307660f27c42e703633780.bin new file mode 100644 index 0000000..58212e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c38a729df7307660f27c42e703633780.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c39ec77ae6023379d657b15ff85ebc40.bin b/HoloBot/Library/ShaderCache/c/c39ec77ae6023379d657b15ff85ebc40.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c39ec77ae6023379d657b15ff85ebc40.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c3bfe86ab87f93faa84917baf03b0ce0.bin b/HoloBot/Library/ShaderCache/c/c3bfe86ab87f93faa84917baf03b0ce0.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c3bfe86ab87f93faa84917baf03b0ce0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c3dcd7e89266c7cf0c747a0c68421012.bin b/HoloBot/Library/ShaderCache/c/c3dcd7e89266c7cf0c747a0c68421012.bin new file mode 100644 index 0000000..44aaaa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c3dcd7e89266c7cf0c747a0c68421012.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c41389defca59fdd55fe58a2e84a72b6.bin b/HoloBot/Library/ShaderCache/c/c41389defca59fdd55fe58a2e84a72b6.bin new file mode 100644 index 0000000..94be850 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c41389defca59fdd55fe58a2e84a72b6.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c4156e67e64496ff766bb83527f83ac8.bin b/HoloBot/Library/ShaderCache/c/c4156e67e64496ff766bb83527f83ac8.bin new file mode 100644 index 0000000..a3d9540 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c4156e67e64496ff766bb83527f83ac8.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c41fb3cfd854cf3f735b59288567583a.bin b/HoloBot/Library/ShaderCache/c/c41fb3cfd854cf3f735b59288567583a.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c41fb3cfd854cf3f735b59288567583a.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c4532e78b67c316c181401c546ab0dec.bin b/HoloBot/Library/ShaderCache/c/c4532e78b67c316c181401c546ab0dec.bin new file mode 100644 index 0000000..eb32421 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c4532e78b67c316c181401c546ab0dec.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c45e49ec61218b6d5bb885709ab8a003.bin b/HoloBot/Library/ShaderCache/c/c45e49ec61218b6d5bb885709ab8a003.bin new file mode 100644 index 0000000..25a1c36 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c45e49ec61218b6d5bb885709ab8a003.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c4c977216fbfcaaaaa942e771bbcfa81.bin b/HoloBot/Library/ShaderCache/c/c4c977216fbfcaaaaa942e771bbcfa81.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c4c977216fbfcaaaaa942e771bbcfa81.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c4e6a90b706f8d6713ba70ed18aed975.bin b/HoloBot/Library/ShaderCache/c/c4e6a90b706f8d6713ba70ed18aed975.bin new file mode 100644 index 0000000..af30b5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c4e6a90b706f8d6713ba70ed18aed975.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c4fe7cd11c805e8696f476d120a5d0d0.bin b/HoloBot/Library/ShaderCache/c/c4fe7cd11c805e8696f476d120a5d0d0.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c4fe7cd11c805e8696f476d120a5d0d0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c50a9b4ec69f748eb47e0b364057bd49.bin b/HoloBot/Library/ShaderCache/c/c50a9b4ec69f748eb47e0b364057bd49.bin new file mode 100644 index 0000000..0ed63c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c50a9b4ec69f748eb47e0b364057bd49.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c516bd34b9fac31c1eb20e25b18f14f6.bin b/HoloBot/Library/ShaderCache/c/c516bd34b9fac31c1eb20e25b18f14f6.bin new file mode 100644 index 0000000..b4edcbf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c516bd34b9fac31c1eb20e25b18f14f6.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c5187ecf81d36f8a8f3cbae97fe0baa2.bin b/HoloBot/Library/ShaderCache/c/c5187ecf81d36f8a8f3cbae97fe0baa2.bin new file mode 100644 index 0000000..463ccd7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c5187ecf81d36f8a8f3cbae97fe0baa2.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c526fb73361e1b077f5d76ad5fa13cfe.bin b/HoloBot/Library/ShaderCache/c/c526fb73361e1b077f5d76ad5fa13cfe.bin new file mode 100644 index 0000000..a554a39 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c526fb73361e1b077f5d76ad5fa13cfe.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c5338e1e90e95141df79dd3d7d2148ae.bin b/HoloBot/Library/ShaderCache/c/c5338e1e90e95141df79dd3d7d2148ae.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c5338e1e90e95141df79dd3d7d2148ae.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c56eb24c73096e11c4019b5b16ccf4ec.bin b/HoloBot/Library/ShaderCache/c/c56eb24c73096e11c4019b5b16ccf4ec.bin new file mode 100644 index 0000000..8f0cf33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c56eb24c73096e11c4019b5b16ccf4ec.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c57e087c78a7f5519aca518337d74080.bin b/HoloBot/Library/ShaderCache/c/c57e087c78a7f5519aca518337d74080.bin new file mode 100644 index 0000000..fc0f8c2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c57e087c78a7f5519aca518337d74080.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c5864eb5c17ca74fed2736c0c79ff84b.bin b/HoloBot/Library/ShaderCache/c/c5864eb5c17ca74fed2736c0c79ff84b.bin new file mode 100644 index 0000000..cdc06c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c5864eb5c17ca74fed2736c0c79ff84b.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c5a88fd077db6c750cd7f43117760887.bin b/HoloBot/Library/ShaderCache/c/c5a88fd077db6c750cd7f43117760887.bin new file mode 100644 index 0000000..065cd4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c5a88fd077db6c750cd7f43117760887.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c5a992ccd527f6331603192c8a343a78.bin b/HoloBot/Library/ShaderCache/c/c5a992ccd527f6331603192c8a343a78.bin new file mode 100644 index 0000000..0d30117 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c5a992ccd527f6331603192c8a343a78.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c602a1d8aab1e53d4a02cfc403f4a606.bin b/HoloBot/Library/ShaderCache/c/c602a1d8aab1e53d4a02cfc403f4a606.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c602a1d8aab1e53d4a02cfc403f4a606.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c60f96277bdcc9a0361021cae537a706.bin b/HoloBot/Library/ShaderCache/c/c60f96277bdcc9a0361021cae537a706.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c60f96277bdcc9a0361021cae537a706.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c611deb209b0231a99cff71ac837e7e7.bin b/HoloBot/Library/ShaderCache/c/c611deb209b0231a99cff71ac837e7e7.bin new file mode 100644 index 0000000..ef8352e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c611deb209b0231a99cff71ac837e7e7.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c61242556081e97a5085208b7f4bc5a2.bin b/HoloBot/Library/ShaderCache/c/c61242556081e97a5085208b7f4bc5a2.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c61242556081e97a5085208b7f4bc5a2.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c61d1cba2cba33b006c8926ffa178a96.bin b/HoloBot/Library/ShaderCache/c/c61d1cba2cba33b006c8926ffa178a96.bin new file mode 100644 index 0000000..af8c8fa Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c61d1cba2cba33b006c8926ffa178a96.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6248314e6d42a33940c78b91ffa7923.bin b/HoloBot/Library/ShaderCache/c/c6248314e6d42a33940c78b91ffa7923.bin new file mode 100644 index 0000000..23ed3f4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6248314e6d42a33940c78b91ffa7923.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c628dc3357427c13d7023d37c797328d.bin b/HoloBot/Library/ShaderCache/c/c628dc3357427c13d7023d37c797328d.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c628dc3357427c13d7023d37c797328d.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6342513bfe2cf64b39edc82ebb967a4.bin b/HoloBot/Library/ShaderCache/c/c6342513bfe2cf64b39edc82ebb967a4.bin new file mode 100644 index 0000000..f3180d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6342513bfe2cf64b39edc82ebb967a4.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c67c0ebc9993bbe36872097901bee5aa.bin b/HoloBot/Library/ShaderCache/c/c67c0ebc9993bbe36872097901bee5aa.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c67c0ebc9993bbe36872097901bee5aa.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6b21ea974fa3c9bf68e4b6cdcd038c5.bin b/HoloBot/Library/ShaderCache/c/c6b21ea974fa3c9bf68e4b6cdcd038c5.bin new file mode 100644 index 0000000..45dd252 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6b21ea974fa3c9bf68e4b6cdcd038c5.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6b2d57623d6278a17c162cab12b7648.bin b/HoloBot/Library/ShaderCache/c/c6b2d57623d6278a17c162cab12b7648.bin new file mode 100644 index 0000000..2651962 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6b2d57623d6278a17c162cab12b7648.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6bc89e856f9eabf1c9eecea47e14a04.bin b/HoloBot/Library/ShaderCache/c/c6bc89e856f9eabf1c9eecea47e14a04.bin new file mode 100644 index 0000000..02773e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6bc89e856f9eabf1c9eecea47e14a04.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6c1b0d0d9c6fb4bcbe6bc57e6b5eae1.bin b/HoloBot/Library/ShaderCache/c/c6c1b0d0d9c6fb4bcbe6bc57e6b5eae1.bin new file mode 100644 index 0000000..2fc30c3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6c1b0d0d9c6fb4bcbe6bc57e6b5eae1.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6c4c7c24b7dc72f302bc3ccad7a10cf.bin b/HoloBot/Library/ShaderCache/c/c6c4c7c24b7dc72f302bc3ccad7a10cf.bin new file mode 100644 index 0000000..f4a85c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6c4c7c24b7dc72f302bc3ccad7a10cf.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c6c5ce0132a32ebca8c1ae27bf08c363.bin b/HoloBot/Library/ShaderCache/c/c6c5ce0132a32ebca8c1ae27bf08c363.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c6c5ce0132a32ebca8c1ae27bf08c363.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c70d3668d7b2dec8e4558aae525a39ea.bin b/HoloBot/Library/ShaderCache/c/c70d3668d7b2dec8e4558aae525a39ea.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c70d3668d7b2dec8e4558aae525a39ea.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c73b96e6799e6258cc040013d76acc6e.bin b/HoloBot/Library/ShaderCache/c/c73b96e6799e6258cc040013d76acc6e.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c73b96e6799e6258cc040013d76acc6e.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c74393870cd2535f6a2597cf84ab0ff4.bin b/HoloBot/Library/ShaderCache/c/c74393870cd2535f6a2597cf84ab0ff4.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c74393870cd2535f6a2597cf84ab0ff4.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c755e2c5949a7f9d17d023982aafdada.bin b/HoloBot/Library/ShaderCache/c/c755e2c5949a7f9d17d023982aafdada.bin new file mode 100644 index 0000000..103fcb7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c755e2c5949a7f9d17d023982aafdada.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c772efeb332555938890567f8a8a4747.bin b/HoloBot/Library/ShaderCache/c/c772efeb332555938890567f8a8a4747.bin new file mode 100644 index 0000000..1f554ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c772efeb332555938890567f8a8a4747.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c797224e96da44f62552f6eb94ac1e51.bin b/HoloBot/Library/ShaderCache/c/c797224e96da44f62552f6eb94ac1e51.bin new file mode 100644 index 0000000..334f4cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c797224e96da44f62552f6eb94ac1e51.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c7ab3004bc33e5e75c43c860b41f42cf.bin b/HoloBot/Library/ShaderCache/c/c7ab3004bc33e5e75c43c860b41f42cf.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c7ab3004bc33e5e75c43c860b41f42cf.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8001baaf935b2cfc3ee70d304979201.bin b/HoloBot/Library/ShaderCache/c/c8001baaf935b2cfc3ee70d304979201.bin new file mode 100644 index 0000000..3f683b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8001baaf935b2cfc3ee70d304979201.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c80d07d11da036d5a6781c843b213298.bin b/HoloBot/Library/ShaderCache/c/c80d07d11da036d5a6781c843b213298.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c80d07d11da036d5a6781c843b213298.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c80f811ede4da150d875928d08da4f2f.bin b/HoloBot/Library/ShaderCache/c/c80f811ede4da150d875928d08da4f2f.bin new file mode 100644 index 0000000..44b39ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c80f811ede4da150d875928d08da4f2f.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c82c15e8edfc54e7bcfb0d5e6e565665.bin b/HoloBot/Library/ShaderCache/c/c82c15e8edfc54e7bcfb0d5e6e565665.bin new file mode 100644 index 0000000..63dc1ea Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c82c15e8edfc54e7bcfb0d5e6e565665.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c84c06f85b6aafd6bd62683c45644718.bin b/HoloBot/Library/ShaderCache/c/c84c06f85b6aafd6bd62683c45644718.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c84c06f85b6aafd6bd62683c45644718.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c873f3d964374fafdcd210203c698f82.bin b/HoloBot/Library/ShaderCache/c/c873f3d964374fafdcd210203c698f82.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c873f3d964374fafdcd210203c698f82.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8815b91d4c2b96468f75f051b6ac72e.bin b/HoloBot/Library/ShaderCache/c/c8815b91d4c2b96468f75f051b6ac72e.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8815b91d4c2b96468f75f051b6ac72e.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c89d91abba201045c076dba6954dda84.bin b/HoloBot/Library/ShaderCache/c/c89d91abba201045c076dba6954dda84.bin new file mode 100644 index 0000000..0ed63c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c89d91abba201045c076dba6954dda84.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8b73defaecd3649571b6a9229b9c0e7.bin b/HoloBot/Library/ShaderCache/c/c8b73defaecd3649571b6a9229b9c0e7.bin new file mode 100644 index 0000000..954c235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8b73defaecd3649571b6a9229b9c0e7.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8c13546cf83c4264c72c983da844547.bin b/HoloBot/Library/ShaderCache/c/c8c13546cf83c4264c72c983da844547.bin new file mode 100644 index 0000000..3b4ee51 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8c13546cf83c4264c72c983da844547.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8d6326214576d66d9ddb2c5d19a2c80.bin b/HoloBot/Library/ShaderCache/c/c8d6326214576d66d9ddb2c5d19a2c80.bin new file mode 100644 index 0000000..d17efb7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8d6326214576d66d9ddb2c5d19a2c80.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8da783e14b5bfb49bcf80cf52724dff.bin b/HoloBot/Library/ShaderCache/c/c8da783e14b5bfb49bcf80cf52724dff.bin new file mode 100644 index 0000000..212ed35 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8da783e14b5bfb49bcf80cf52724dff.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8e021385adce0b7fed29924bcf45d79.bin b/HoloBot/Library/ShaderCache/c/c8e021385adce0b7fed29924bcf45d79.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8e021385adce0b7fed29924bcf45d79.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8ecd46fae93de5df9fa51ee4b856842.bin b/HoloBot/Library/ShaderCache/c/c8ecd46fae93de5df9fa51ee4b856842.bin new file mode 100644 index 0000000..f203ee7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8ecd46fae93de5df9fa51ee4b856842.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c8f37caba11ba061f2e7602b3203f667.bin b/HoloBot/Library/ShaderCache/c/c8f37caba11ba061f2e7602b3203f667.bin new file mode 100644 index 0000000..2e9e55a Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c8f37caba11ba061f2e7602b3203f667.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c91f360adeb062658b4528c9cd6c2dd5.bin b/HoloBot/Library/ShaderCache/c/c91f360adeb062658b4528c9cd6c2dd5.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c91f360adeb062658b4528c9cd6c2dd5.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c921671d7469fdbef808ed97d989b94b.bin b/HoloBot/Library/ShaderCache/c/c921671d7469fdbef808ed97d989b94b.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c921671d7469fdbef808ed97d989b94b.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c936ecbcaa413f45d55f8ce68b85f19d.bin b/HoloBot/Library/ShaderCache/c/c936ecbcaa413f45d55f8ce68b85f19d.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c936ecbcaa413f45d55f8ce68b85f19d.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c93bd034d4d0ef24947d5d0da95a9ff9.bin b/HoloBot/Library/ShaderCache/c/c93bd034d4d0ef24947d5d0da95a9ff9.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c93bd034d4d0ef24947d5d0da95a9ff9.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c93eb7845d3cde777f0867c69f8ffc83.bin b/HoloBot/Library/ShaderCache/c/c93eb7845d3cde777f0867c69f8ffc83.bin new file mode 100644 index 0000000..4934bd8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c93eb7845d3cde777f0867c69f8ffc83.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c95b27f1bc13cb6381f9522a0a2c553a.bin b/HoloBot/Library/ShaderCache/c/c95b27f1bc13cb6381f9522a0a2c553a.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c95b27f1bc13cb6381f9522a0a2c553a.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c960a0b1abc6f8632cd655ddca6bf558.bin b/HoloBot/Library/ShaderCache/c/c960a0b1abc6f8632cd655ddca6bf558.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c960a0b1abc6f8632cd655ddca6bf558.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c960c62664bda7de5256a207209f9e74.bin b/HoloBot/Library/ShaderCache/c/c960c62664bda7de5256a207209f9e74.bin new file mode 100644 index 0000000..fe971be Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c960c62664bda7de5256a207209f9e74.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c98bbf1e5ed18889e55aaa4cce31d08d.bin b/HoloBot/Library/ShaderCache/c/c98bbf1e5ed18889e55aaa4cce31d08d.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c98bbf1e5ed18889e55aaa4cce31d08d.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c9aa0d61df58b1d33424392ae3c56fdc.bin b/HoloBot/Library/ShaderCache/c/c9aa0d61df58b1d33424392ae3c56fdc.bin new file mode 100644 index 0000000..bd66f04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c9aa0d61df58b1d33424392ae3c56fdc.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c9b52dbf5541337330f4d41df4d1d761.bin b/HoloBot/Library/ShaderCache/c/c9b52dbf5541337330f4d41df4d1d761.bin new file mode 100644 index 0000000..334f4cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c9b52dbf5541337330f4d41df4d1d761.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c9c446f266de3064be02bb8bc92eb6cd.bin b/HoloBot/Library/ShaderCache/c/c9c446f266de3064be02bb8bc92eb6cd.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c9c446f266de3064be02bb8bc92eb6cd.bin differ diff --git a/HoloBot/Library/ShaderCache/c/c9e10f92185fa4f6384320ec176fc4f4.bin b/HoloBot/Library/ShaderCache/c/c9e10f92185fa4f6384320ec176fc4f4.bin new file mode 100644 index 0000000..b38b583 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/c9e10f92185fa4f6384320ec176fc4f4.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ca135d3fd627422f9ac220481b308519.bin b/HoloBot/Library/ShaderCache/c/ca135d3fd627422f9ac220481b308519.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ca135d3fd627422f9ac220481b308519.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ca17f4056f542cf92095a38270df0f32.bin b/HoloBot/Library/ShaderCache/c/ca17f4056f542cf92095a38270df0f32.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ca17f4056f542cf92095a38270df0f32.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ca5711cbfdd881bb1644818b21aaed0c.bin b/HoloBot/Library/ShaderCache/c/ca5711cbfdd881bb1644818b21aaed0c.bin new file mode 100644 index 0000000..5493f0d Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ca5711cbfdd881bb1644818b21aaed0c.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ca78c1e7c0c6682a5c82fce6b61f8cc7.bin b/HoloBot/Library/ShaderCache/c/ca78c1e7c0c6682a5c82fce6b61f8cc7.bin new file mode 100644 index 0000000..f9a3973 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ca78c1e7c0c6682a5c82fce6b61f8cc7.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cab0d46a3b7d6b44579d96b987ef6420.bin b/HoloBot/Library/ShaderCache/c/cab0d46a3b7d6b44579d96b987ef6420.bin new file mode 100644 index 0000000..bd118f1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cab0d46a3b7d6b44579d96b987ef6420.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cab22b838c58bc7c766a903b4efcaac3.bin b/HoloBot/Library/ShaderCache/c/cab22b838c58bc7c766a903b4efcaac3.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cab22b838c58bc7c766a903b4efcaac3.bin differ diff --git a/HoloBot/Library/ShaderCache/c/caccb37614ec7c9434f4c9aca3fda677.bin b/HoloBot/Library/ShaderCache/c/caccb37614ec7c9434f4c9aca3fda677.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/caccb37614ec7c9434f4c9aca3fda677.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cad947e103cd98e46568a2a1e16e29dd.bin b/HoloBot/Library/ShaderCache/c/cad947e103cd98e46568a2a1e16e29dd.bin new file mode 100644 index 0000000..fe70c9f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cad947e103cd98e46568a2a1e16e29dd.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cb56d7b0c695a22880c5a5c75b4203a9.bin b/HoloBot/Library/ShaderCache/c/cb56d7b0c695a22880c5a5c75b4203a9.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cb56d7b0c695a22880c5a5c75b4203a9.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cb8e418fa4c03010f30e3386d4376890.bin b/HoloBot/Library/ShaderCache/c/cb8e418fa4c03010f30e3386d4376890.bin new file mode 100644 index 0000000..ba9b2f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cb8e418fa4c03010f30e3386d4376890.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cb8f1f5dd6bc8baa9866a49aa2c5dc0b.bin b/HoloBot/Library/ShaderCache/c/cb8f1f5dd6bc8baa9866a49aa2c5dc0b.bin new file mode 100644 index 0000000..527d1ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cb8f1f5dd6bc8baa9866a49aa2c5dc0b.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cb91d03d1d7bbdc350411dbfe38ea7bf.bin b/HoloBot/Library/ShaderCache/c/cb91d03d1d7bbdc350411dbfe38ea7bf.bin new file mode 100644 index 0000000..5bc7fff Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cb91d03d1d7bbdc350411dbfe38ea7bf.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cb9b0a73c831cdddaeea91d919980888.bin b/HoloBot/Library/ShaderCache/c/cb9b0a73c831cdddaeea91d919980888.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cb9b0a73c831cdddaeea91d919980888.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cbcfe82358b3d6ab0b0899c58c190ec0.bin b/HoloBot/Library/ShaderCache/c/cbcfe82358b3d6ab0b0899c58c190ec0.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cbcfe82358b3d6ab0b0899c58c190ec0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cbd584c834a0494d81f2ac835ba0a08e.bin b/HoloBot/Library/ShaderCache/c/cbd584c834a0494d81f2ac835ba0a08e.bin new file mode 100644 index 0000000..1d825dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cbd584c834a0494d81f2ac835ba0a08e.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cc346acd172aef1d495f06b16ac2a17f.bin b/HoloBot/Library/ShaderCache/c/cc346acd172aef1d495f06b16ac2a17f.bin new file mode 100644 index 0000000..339116e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cc346acd172aef1d495f06b16ac2a17f.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cc6aa38b8d6246a1dca30a30a096d5a8.bin b/HoloBot/Library/ShaderCache/c/cc6aa38b8d6246a1dca30a30a096d5a8.bin new file mode 100644 index 0000000..455a76a Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cc6aa38b8d6246a1dca30a30a096d5a8.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cc7c66cf77e2a1fc6d1dd5cd432ab880.bin b/HoloBot/Library/ShaderCache/c/cc7c66cf77e2a1fc6d1dd5cd432ab880.bin new file mode 100644 index 0000000..589d3b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cc7c66cf77e2a1fc6d1dd5cd432ab880.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cc9eacdfae375247beb7fe987ce89469.bin b/HoloBot/Library/ShaderCache/c/cc9eacdfae375247beb7fe987ce89469.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cc9eacdfae375247beb7fe987ce89469.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cca4299e25d4f4289c1daaa297906d40.bin b/HoloBot/Library/ShaderCache/c/cca4299e25d4f4289c1daaa297906d40.bin new file mode 100644 index 0000000..29ae73b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cca4299e25d4f4289c1daaa297906d40.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cca853c47f4302b073280ca5596f153c.bin b/HoloBot/Library/ShaderCache/c/cca853c47f4302b073280ca5596f153c.bin new file mode 100644 index 0000000..7e5d043 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cca853c47f4302b073280ca5596f153c.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ccb2a14409af9c8b0ef2dae67df0fa80.bin b/HoloBot/Library/ShaderCache/c/ccb2a14409af9c8b0ef2dae67df0fa80.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ccb2a14409af9c8b0ef2dae67df0fa80.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ccee826157d12cf4f8259bbe472716b8.bin b/HoloBot/Library/ShaderCache/c/ccee826157d12cf4f8259bbe472716b8.bin new file mode 100644 index 0000000..527d1ed Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ccee826157d12cf4f8259bbe472716b8.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cd567dcc24d94a8cec9ba6e04fa56e7d.bin b/HoloBot/Library/ShaderCache/c/cd567dcc24d94a8cec9ba6e04fa56e7d.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cd567dcc24d94a8cec9ba6e04fa56e7d.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cd5e3fdff0db2269f84c0a22141135d3.bin b/HoloBot/Library/ShaderCache/c/cd5e3fdff0db2269f84c0a22141135d3.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cd5e3fdff0db2269f84c0a22141135d3.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cd8797ac9a95cd6855d6b65c29679c63.bin b/HoloBot/Library/ShaderCache/c/cd8797ac9a95cd6855d6b65c29679c63.bin new file mode 100644 index 0000000..16c1b2c Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cd8797ac9a95cd6855d6b65c29679c63.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cddbd17be44c2a0140ebca3d4fe442b0.bin b/HoloBot/Library/ShaderCache/c/cddbd17be44c2a0140ebca3d4fe442b0.bin new file mode 100644 index 0000000..01bf054 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cddbd17be44c2a0140ebca3d4fe442b0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cde03241a0d38c68f367694aa7b82258.bin b/HoloBot/Library/ShaderCache/c/cde03241a0d38c68f367694aa7b82258.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cde03241a0d38c68f367694aa7b82258.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cdee44270974ab600289953b416155bc.bin b/HoloBot/Library/ShaderCache/c/cdee44270974ab600289953b416155bc.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cdee44270974ab600289953b416155bc.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce0703f9abbdc2ed89420e6d69a2a704.bin b/HoloBot/Library/ShaderCache/c/ce0703f9abbdc2ed89420e6d69a2a704.bin new file mode 100644 index 0000000..8df700f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce0703f9abbdc2ed89420e6d69a2a704.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce256b1943111c1705366a2d14816935.bin b/HoloBot/Library/ShaderCache/c/ce256b1943111c1705366a2d14816935.bin new file mode 100644 index 0000000..1d7b030 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce256b1943111c1705366a2d14816935.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce4c374ae0fbd97d2fd5a988e2ea9964.bin b/HoloBot/Library/ShaderCache/c/ce4c374ae0fbd97d2fd5a988e2ea9964.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce4c374ae0fbd97d2fd5a988e2ea9964.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce501d59fb32f3ada65ad623b65f1a47.bin b/HoloBot/Library/ShaderCache/c/ce501d59fb32f3ada65ad623b65f1a47.bin new file mode 100644 index 0000000..23fcdbb Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce501d59fb32f3ada65ad623b65f1a47.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce52fc9f88e5fb43c6878ff7ced95331.bin b/HoloBot/Library/ShaderCache/c/ce52fc9f88e5fb43c6878ff7ced95331.bin new file mode 100644 index 0000000..4e1940b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce52fc9f88e5fb43c6878ff7ced95331.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce8ef1bb947e710b6b86000482311683.bin b/HoloBot/Library/ShaderCache/c/ce8ef1bb947e710b6b86000482311683.bin new file mode 100644 index 0000000..44b39ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce8ef1bb947e710b6b86000482311683.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce8f3195b63d97254a594f0c1ddfc036.bin b/HoloBot/Library/ShaderCache/c/ce8f3195b63d97254a594f0c1ddfc036.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce8f3195b63d97254a594f0c1ddfc036.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ce986c06e0f017c612243fa8262664ee.bin b/HoloBot/Library/ShaderCache/c/ce986c06e0f017c612243fa8262664ee.bin new file mode 100644 index 0000000..fddbe3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ce986c06e0f017c612243fa8262664ee.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cea077e54bf92c2807f25fc167cef662.bin b/HoloBot/Library/ShaderCache/c/cea077e54bf92c2807f25fc167cef662.bin new file mode 100644 index 0000000..a536e20 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cea077e54bf92c2807f25fc167cef662.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cea3bdcd3ed1b3d578401cf4acffb001.bin b/HoloBot/Library/ShaderCache/c/cea3bdcd3ed1b3d578401cf4acffb001.bin new file mode 100644 index 0000000..e3a15a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cea3bdcd3ed1b3d578401cf4acffb001.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cea9244c6611338ee7ebfa68cea2b443.bin b/HoloBot/Library/ShaderCache/c/cea9244c6611338ee7ebfa68cea2b443.bin new file mode 100644 index 0000000..5c8e858 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cea9244c6611338ee7ebfa68cea2b443.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cec59af63b2af09bce84bfbcc96546c0.bin b/HoloBot/Library/ShaderCache/c/cec59af63b2af09bce84bfbcc96546c0.bin new file mode 100644 index 0000000..552d2cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cec59af63b2af09bce84bfbcc96546c0.bin differ diff --git a/HoloBot/Library/ShaderCache/c/ced374e0f1fd1764689f6eb458be9ae7.bin b/HoloBot/Library/ShaderCache/c/ced374e0f1fd1764689f6eb458be9ae7.bin new file mode 100644 index 0000000..d8489eb Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/ced374e0f1fd1764689f6eb458be9ae7.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cefa6447c0ea2f4be4f93aeec5af97e3.bin b/HoloBot/Library/ShaderCache/c/cefa6447c0ea2f4be4f93aeec5af97e3.bin new file mode 100644 index 0000000..3e9c9cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cefa6447c0ea2f4be4f93aeec5af97e3.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cf371242ba614e52186cab0689bc6deb.bin b/HoloBot/Library/ShaderCache/c/cf371242ba614e52186cab0689bc6deb.bin new file mode 100644 index 0000000..cd7325b Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cf371242ba614e52186cab0689bc6deb.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cf54b6b7ef7c3ac46c3b7c83ac43ad70.bin b/HoloBot/Library/ShaderCache/c/cf54b6b7ef7c3ac46c3b7c83ac43ad70.bin new file mode 100644 index 0000000..36c6de6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cf54b6b7ef7c3ac46c3b7c83ac43ad70.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cf64506459f3a4f705ff05d8a921ea0f.bin b/HoloBot/Library/ShaderCache/c/cf64506459f3a4f705ff05d8a921ea0f.bin new file mode 100644 index 0000000..bfa056a Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cf64506459f3a4f705ff05d8a921ea0f.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cf8f21c257978a251251f2e78ac5a0d9.bin b/HoloBot/Library/ShaderCache/c/cf8f21c257978a251251f2e78ac5a0d9.bin new file mode 100644 index 0000000..f355baf Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cf8f21c257978a251251f2e78ac5a0d9.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cfc40e67d673bdc0a84ef2e4f30f7c82.bin b/HoloBot/Library/ShaderCache/c/cfc40e67d673bdc0a84ef2e4f30f7c82.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cfc40e67d673bdc0a84ef2e4f30f7c82.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cfdf1155893e83c8f4bba512ec0671c3.bin b/HoloBot/Library/ShaderCache/c/cfdf1155893e83c8f4bba512ec0671c3.bin new file mode 100644 index 0000000..c1b617d Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cfdf1155893e83c8f4bba512ec0671c3.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cff39b70a8465f441c3c495a95335c2e.bin b/HoloBot/Library/ShaderCache/c/cff39b70a8465f441c3c495a95335c2e.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cff39b70a8465f441c3c495a95335c2e.bin differ diff --git a/HoloBot/Library/ShaderCache/c/cff9028a74e571702a1cf9397415db3b.bin b/HoloBot/Library/ShaderCache/c/cff9028a74e571702a1cf9397415db3b.bin new file mode 100644 index 0000000..4096f1c Binary files /dev/null and b/HoloBot/Library/ShaderCache/c/cff9028a74e571702a1cf9397415db3b.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d008bbbbafc1a3ab33b7d3c26f5ff0f7.bin b/HoloBot/Library/ShaderCache/d/d008bbbbafc1a3ab33b7d3c26f5ff0f7.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d008bbbbafc1a3ab33b7d3c26f5ff0f7.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d00b957f0c801be8056489e082652c0c.bin b/HoloBot/Library/ShaderCache/d/d00b957f0c801be8056489e082652c0c.bin new file mode 100644 index 0000000..dfdbd56 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d00b957f0c801be8056489e082652c0c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d01711c81962909707bf937a3ee64474.bin b/HoloBot/Library/ShaderCache/d/d01711c81962909707bf937a3ee64474.bin new file mode 100644 index 0000000..b576065 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d01711c81962909707bf937a3ee64474.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d02ba142ee0699704f4fc27e1b43d8c2.bin b/HoloBot/Library/ShaderCache/d/d02ba142ee0699704f4fc27e1b43d8c2.bin new file mode 100644 index 0000000..189bbdf Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d02ba142ee0699704f4fc27e1b43d8c2.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d04725537db274e48f4642ee962ab27f.bin b/HoloBot/Library/ShaderCache/d/d04725537db274e48f4642ee962ab27f.bin new file mode 100644 index 0000000..48dee54 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d04725537db274e48f4642ee962ab27f.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d0aad6843fef88434c8cd05991d83fe2.bin b/HoloBot/Library/ShaderCache/d/d0aad6843fef88434c8cd05991d83fe2.bin new file mode 100644 index 0000000..8486689 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d0aad6843fef88434c8cd05991d83fe2.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d0e2c183c559c644f8252638de2b5d68.bin b/HoloBot/Library/ShaderCache/d/d0e2c183c559c644f8252638de2b5d68.bin new file mode 100644 index 0000000..2651962 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d0e2c183c559c644f8252638de2b5d68.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d103d0190a457a9d243f282b96cf4538.bin b/HoloBot/Library/ShaderCache/d/d103d0190a457a9d243f282b96cf4538.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d103d0190a457a9d243f282b96cf4538.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d1568b9deb8de3f4609f29ddfd8a3b91.bin b/HoloBot/Library/ShaderCache/d/d1568b9deb8de3f4609f29ddfd8a3b91.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d1568b9deb8de3f4609f29ddfd8a3b91.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d16f9d608c68aff63ad24aa04177db51.bin b/HoloBot/Library/ShaderCache/d/d16f9d608c68aff63ad24aa04177db51.bin new file mode 100644 index 0000000..5d22f62 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d16f9d608c68aff63ad24aa04177db51.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d18a7eadf4ff72e37f78f54206086874.bin b/HoloBot/Library/ShaderCache/d/d18a7eadf4ff72e37f78f54206086874.bin new file mode 100644 index 0000000..582cefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d18a7eadf4ff72e37f78f54206086874.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d1d21227c19d009af1a3bc586da550b9.bin b/HoloBot/Library/ShaderCache/d/d1d21227c19d009af1a3bc586da550b9.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d1d21227c19d009af1a3bc586da550b9.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d1d6c5c2909b61bf99c5c30b8ebb29c8.bin b/HoloBot/Library/ShaderCache/d/d1d6c5c2909b61bf99c5c30b8ebb29c8.bin new file mode 100644 index 0000000..ceb30cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d1d6c5c2909b61bf99c5c30b8ebb29c8.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d2146b2a3b6b7f147a6d7095e377dddb.bin b/HoloBot/Library/ShaderCache/d/d2146b2a3b6b7f147a6d7095e377dddb.bin new file mode 100644 index 0000000..df63d7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d2146b2a3b6b7f147a6d7095e377dddb.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d2557534ce1cebc294c709b0c175d4f9.bin b/HoloBot/Library/ShaderCache/d/d2557534ce1cebc294c709b0c175d4f9.bin new file mode 100644 index 0000000..8f0cf33 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d2557534ce1cebc294c709b0c175d4f9.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d29ff4ec2f6bdad6f276f260fcb7a197.bin b/HoloBot/Library/ShaderCache/d/d29ff4ec2f6bdad6f276f260fcb7a197.bin new file mode 100644 index 0000000..762968f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d29ff4ec2f6bdad6f276f260fcb7a197.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d2a1013334a62d7b4fbcbb6b7ebe8972.bin b/HoloBot/Library/ShaderCache/d/d2a1013334a62d7b4fbcbb6b7ebe8972.bin new file mode 100644 index 0000000..bbe94a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d2a1013334a62d7b4fbcbb6b7ebe8972.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d2c7f4c003de6bf5e2f96682d3aa5fa5.bin b/HoloBot/Library/ShaderCache/d/d2c7f4c003de6bf5e2f96682d3aa5fa5.bin new file mode 100644 index 0000000..c61e1b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d2c7f4c003de6bf5e2f96682d3aa5fa5.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d3169e46c2e521408e3c90a9da706c1d.bin b/HoloBot/Library/ShaderCache/d/d3169e46c2e521408e3c90a9da706c1d.bin new file mode 100644 index 0000000..5af50e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d3169e46c2e521408e3c90a9da706c1d.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d3199e151dede8dbcc5772d97cbfa024.bin b/HoloBot/Library/ShaderCache/d/d3199e151dede8dbcc5772d97cbfa024.bin new file mode 100644 index 0000000..54add9a Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d3199e151dede8dbcc5772d97cbfa024.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d31f06d5597c08212043f9e61bc8a6a5.bin b/HoloBot/Library/ShaderCache/d/d31f06d5597c08212043f9e61bc8a6a5.bin new file mode 100644 index 0000000..7333fc0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d31f06d5597c08212043f9e61bc8a6a5.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d36defeafbc1014b51e8b004ea0f46aa.bin b/HoloBot/Library/ShaderCache/d/d36defeafbc1014b51e8b004ea0f46aa.bin new file mode 100644 index 0000000..dd799f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d36defeafbc1014b51e8b004ea0f46aa.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d371b25e0b81eeec2e468a266b34b6d1.bin b/HoloBot/Library/ShaderCache/d/d371b25e0b81eeec2e468a266b34b6d1.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d371b25e0b81eeec2e468a266b34b6d1.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d37bc8245ee52a6fb1bb9a479401663a.bin b/HoloBot/Library/ShaderCache/d/d37bc8245ee52a6fb1bb9a479401663a.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d37bc8245ee52a6fb1bb9a479401663a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d39472e22186bad4d1a60a23c9e46a6e.bin b/HoloBot/Library/ShaderCache/d/d39472e22186bad4d1a60a23c9e46a6e.bin new file mode 100644 index 0000000..c199961 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d39472e22186bad4d1a60a23c9e46a6e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d396982e62b5179d86c1dfea2edf3e02.bin b/HoloBot/Library/ShaderCache/d/d396982e62b5179d86c1dfea2edf3e02.bin new file mode 100644 index 0000000..6329d50 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d396982e62b5179d86c1dfea2edf3e02.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d3b294984df5abee05bf7112663e9d6a.bin b/HoloBot/Library/ShaderCache/d/d3b294984df5abee05bf7112663e9d6a.bin new file mode 100644 index 0000000..5949a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d3b294984df5abee05bf7112663e9d6a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d4222ef0da8b3b557887bdef7087922e.bin b/HoloBot/Library/ShaderCache/d/d4222ef0da8b3b557887bdef7087922e.bin new file mode 100644 index 0000000..f8b577d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d4222ef0da8b3b557887bdef7087922e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d439c461aa93562eb1e1f989550b983c.bin b/HoloBot/Library/ShaderCache/d/d439c461aa93562eb1e1f989550b983c.bin new file mode 100644 index 0000000..94ce8c3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d439c461aa93562eb1e1f989550b983c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d485beaad2ad379875dc1535d5c96480.bin b/HoloBot/Library/ShaderCache/d/d485beaad2ad379875dc1535d5c96480.bin new file mode 100644 index 0000000..3708067 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d485beaad2ad379875dc1535d5c96480.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d49675c6c5f98276db58650de3820344.bin b/HoloBot/Library/ShaderCache/d/d49675c6c5f98276db58650de3820344.bin new file mode 100644 index 0000000..697d1c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d49675c6c5f98276db58650de3820344.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d51cc2222cdec363dd1281b585b1bc43.bin b/HoloBot/Library/ShaderCache/d/d51cc2222cdec363dd1281b585b1bc43.bin new file mode 100644 index 0000000..19bea58 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d51cc2222cdec363dd1281b585b1bc43.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d52e9e10e5f4d8de93307f1f032ced8b.bin b/HoloBot/Library/ShaderCache/d/d52e9e10e5f4d8de93307f1f032ced8b.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d52e9e10e5f4d8de93307f1f032ced8b.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d52f80661a46472a7b3950c4cac5366f.bin b/HoloBot/Library/ShaderCache/d/d52f80661a46472a7b3950c4cac5366f.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d52f80661a46472a7b3950c4cac5366f.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d5458c41ac58c0e9b167b4f633b98d09.bin b/HoloBot/Library/ShaderCache/d/d5458c41ac58c0e9b167b4f633b98d09.bin new file mode 100644 index 0000000..9da6ede Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d5458c41ac58c0e9b167b4f633b98d09.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d5526b10991ece07a1647dad18bafc9e.bin b/HoloBot/Library/ShaderCache/d/d5526b10991ece07a1647dad18bafc9e.bin new file mode 100644 index 0000000..851584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d5526b10991ece07a1647dad18bafc9e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d559143bed271c86d2a96c46d0570023.bin b/HoloBot/Library/ShaderCache/d/d559143bed271c86d2a96c46d0570023.bin new file mode 100644 index 0000000..1e20f01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d559143bed271c86d2a96c46d0570023.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d564c4dc56db3b9d3afabc67cf8c3a74.bin b/HoloBot/Library/ShaderCache/d/d564c4dc56db3b9d3afabc67cf8c3a74.bin new file mode 100644 index 0000000..3ac1224 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d564c4dc56db3b9d3afabc67cf8c3a74.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d58cdf7bfd727aba8f2f5e0895595c42.bin b/HoloBot/Library/ShaderCache/d/d58cdf7bfd727aba8f2f5e0895595c42.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d58cdf7bfd727aba8f2f5e0895595c42.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d59cd5028be62b371280a91ca439fc4f.bin b/HoloBot/Library/ShaderCache/d/d59cd5028be62b371280a91ca439fc4f.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d59cd5028be62b371280a91ca439fc4f.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d62b588d9ac042dd4cddee6ce276aec3.bin b/HoloBot/Library/ShaderCache/d/d62b588d9ac042dd4cddee6ce276aec3.bin new file mode 100644 index 0000000..99f0fcc Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d62b588d9ac042dd4cddee6ce276aec3.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d63a349ae731f80179abe93183fbd198.bin b/HoloBot/Library/ShaderCache/d/d63a349ae731f80179abe93183fbd198.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d63a349ae731f80179abe93183fbd198.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d63b55e9622dda22d18fbccad243409c.bin b/HoloBot/Library/ShaderCache/d/d63b55e9622dda22d18fbccad243409c.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d63b55e9622dda22d18fbccad243409c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d644b69ecbcb41e48e686b1f68c89dda.bin b/HoloBot/Library/ShaderCache/d/d644b69ecbcb41e48e686b1f68c89dda.bin new file mode 100644 index 0000000..878c5be Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d644b69ecbcb41e48e686b1f68c89dda.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d65d97d8e543bd3a923e26424f6ad5e4.bin b/HoloBot/Library/ShaderCache/d/d65d97d8e543bd3a923e26424f6ad5e4.bin new file mode 100644 index 0000000..e3a15a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d65d97d8e543bd3a923e26424f6ad5e4.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d671cc4f1fbd36d589d9a5801d39448a.bin b/HoloBot/Library/ShaderCache/d/d671cc4f1fbd36d589d9a5801d39448a.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d671cc4f1fbd36d589d9a5801d39448a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d67bb6754484d0a2c9fa47fb72c8f3a5.bin b/HoloBot/Library/ShaderCache/d/d67bb6754484d0a2c9fa47fb72c8f3a5.bin new file mode 100644 index 0000000..7b99fc7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d67bb6754484d0a2c9fa47fb72c8f3a5.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d68c8780c9486b0228bddb13ae82f6d2.bin b/HoloBot/Library/ShaderCache/d/d68c8780c9486b0228bddb13ae82f6d2.bin new file mode 100644 index 0000000..1b3ade8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d68c8780c9486b0228bddb13ae82f6d2.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d6d3df1b317c69c84e5594595cd405b1.bin b/HoloBot/Library/ShaderCache/d/d6d3df1b317c69c84e5594595cd405b1.bin new file mode 100644 index 0000000..d4c8cf8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d6d3df1b317c69c84e5594595cd405b1.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d72b2b973bf65204e03449ac66545fea.bin b/HoloBot/Library/ShaderCache/d/d72b2b973bf65204e03449ac66545fea.bin new file mode 100644 index 0000000..02773e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d72b2b973bf65204e03449ac66545fea.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d762d19a1699bd62e84e2289ec235a53.bin b/HoloBot/Library/ShaderCache/d/d762d19a1699bd62e84e2289ec235a53.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d762d19a1699bd62e84e2289ec235a53.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d78c07926f203fe8250ca43ac3afee5d.bin b/HoloBot/Library/ShaderCache/d/d78c07926f203fe8250ca43ac3afee5d.bin new file mode 100644 index 0000000..794d613 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d78c07926f203fe8250ca43ac3afee5d.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d792a8740b3cbfd47e1a33bcc02945f0.bin b/HoloBot/Library/ShaderCache/d/d792a8740b3cbfd47e1a33bcc02945f0.bin new file mode 100644 index 0000000..634c445 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d792a8740b3cbfd47e1a33bcc02945f0.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d7acf5f72cf7b3bba07e0ff91eb12a7a.bin b/HoloBot/Library/ShaderCache/d/d7acf5f72cf7b3bba07e0ff91eb12a7a.bin new file mode 100644 index 0000000..de7fc72 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d7acf5f72cf7b3bba07e0ff91eb12a7a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d7bc88f41541393d0af26c84f8940394.bin b/HoloBot/Library/ShaderCache/d/d7bc88f41541393d0af26c84f8940394.bin new file mode 100644 index 0000000..187eba7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d7bc88f41541393d0af26c84f8940394.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d7e7a0a12b7f092f2d2cf9de85408f58.bin b/HoloBot/Library/ShaderCache/d/d7e7a0a12b7f092f2d2cf9de85408f58.bin new file mode 100644 index 0000000..0bf8fc9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d7e7a0a12b7f092f2d2cf9de85408f58.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d7f5851a60c2bd3ed936e9fd7dd40188.bin b/HoloBot/Library/ShaderCache/d/d7f5851a60c2bd3ed936e9fd7dd40188.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d7f5851a60c2bd3ed936e9fd7dd40188.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d82b3b2e4eafdeebb5e8b1549ad396fc.bin b/HoloBot/Library/ShaderCache/d/d82b3b2e4eafdeebb5e8b1549ad396fc.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d82b3b2e4eafdeebb5e8b1549ad396fc.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d834e665cf5bdbb4f02302b693d68c11.bin b/HoloBot/Library/ShaderCache/d/d834e665cf5bdbb4f02302b693d68c11.bin new file mode 100644 index 0000000..cc261a6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d834e665cf5bdbb4f02302b693d68c11.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d84a8ab3ab4ad2e73e38e3834b425a12.bin b/HoloBot/Library/ShaderCache/d/d84a8ab3ab4ad2e73e38e3834b425a12.bin new file mode 100644 index 0000000..582cefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d84a8ab3ab4ad2e73e38e3834b425a12.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d851eac9e4ad73fa84aedb636b35f237.bin b/HoloBot/Library/ShaderCache/d/d851eac9e4ad73fa84aedb636b35f237.bin new file mode 100644 index 0000000..633ea16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d851eac9e4ad73fa84aedb636b35f237.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d854d5f895595be67dea09253ce4c4a2.bin b/HoloBot/Library/ShaderCache/d/d854d5f895595be67dea09253ce4c4a2.bin new file mode 100644 index 0000000..c41ec78 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d854d5f895595be67dea09253ce4c4a2.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d86f77970d13bdae419c3370b9167d3c.bin b/HoloBot/Library/ShaderCache/d/d86f77970d13bdae419c3370b9167d3c.bin new file mode 100644 index 0000000..93e1abc Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d86f77970d13bdae419c3370b9167d3c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d886123f714314385a761d32e86af9b1.bin b/HoloBot/Library/ShaderCache/d/d886123f714314385a761d32e86af9b1.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d886123f714314385a761d32e86af9b1.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d888fb038ade36247ea4d2d16a411af0.bin b/HoloBot/Library/ShaderCache/d/d888fb038ade36247ea4d2d16a411af0.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d888fb038ade36247ea4d2d16a411af0.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8961fbace75ba9b22b93a05836ae633.bin b/HoloBot/Library/ShaderCache/d/d8961fbace75ba9b22b93a05836ae633.bin new file mode 100644 index 0000000..918be03 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8961fbace75ba9b22b93a05836ae633.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8992e07fd4a32226c51e7b91a965205.bin b/HoloBot/Library/ShaderCache/d/d8992e07fd4a32226c51e7b91a965205.bin new file mode 100644 index 0000000..d4c4d55 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8992e07fd4a32226c51e7b91a965205.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8b26dca8202f7a6b57fa13ba51cfe5e.bin b/HoloBot/Library/ShaderCache/d/d8b26dca8202f7a6b57fa13ba51cfe5e.bin new file mode 100644 index 0000000..c5cbece Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8b26dca8202f7a6b57fa13ba51cfe5e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8cffe4e5ee22656d58e8a935f1e9c4a.bin b/HoloBot/Library/ShaderCache/d/d8cffe4e5ee22656d58e8a935f1e9c4a.bin new file mode 100644 index 0000000..f824b87 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8cffe4e5ee22656d58e8a935f1e9c4a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8e50c241d5fdd046b8f2382bd0b7551.bin b/HoloBot/Library/ShaderCache/d/d8e50c241d5fdd046b8f2382bd0b7551.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8e50c241d5fdd046b8f2382bd0b7551.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d8e6a4a4e2492ed94e17cc7742692c0f.bin b/HoloBot/Library/ShaderCache/d/d8e6a4a4e2492ed94e17cc7742692c0f.bin new file mode 100644 index 0000000..8f5c60d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d8e6a4a4e2492ed94e17cc7742692c0f.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d91158b5d7333659d2006d704f77ec0e.bin b/HoloBot/Library/ShaderCache/d/d91158b5d7333659d2006d704f77ec0e.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d91158b5d7333659d2006d704f77ec0e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d941062a2070227b539ee92da13cee19.bin b/HoloBot/Library/ShaderCache/d/d941062a2070227b539ee92da13cee19.bin new file mode 100644 index 0000000..553c5b9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d941062a2070227b539ee92da13cee19.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d97bcc2bb6d96ec0bd4dbe13becfb015.bin b/HoloBot/Library/ShaderCache/d/d97bcc2bb6d96ec0bd4dbe13becfb015.bin new file mode 100644 index 0000000..4202766 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d97bcc2bb6d96ec0bd4dbe13becfb015.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d99d9f590d044c922491ea0e8eda9779.bin b/HoloBot/Library/ShaderCache/d/d99d9f590d044c922491ea0e8eda9779.bin new file mode 100644 index 0000000..b7efd06 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d99d9f590d044c922491ea0e8eda9779.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d9ad0554607772344c0f0fc922ad5032.bin b/HoloBot/Library/ShaderCache/d/d9ad0554607772344c0f0fc922ad5032.bin new file mode 100644 index 0000000..e3d19e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d9ad0554607772344c0f0fc922ad5032.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d9d5703ebf0e4bec8e7f6cfc4d14c5ce.bin b/HoloBot/Library/ShaderCache/d/d9d5703ebf0e4bec8e7f6cfc4d14c5ce.bin new file mode 100644 index 0000000..582cefa Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d9d5703ebf0e4bec8e7f6cfc4d14c5ce.bin differ diff --git a/HoloBot/Library/ShaderCache/d/d9fe57249812787054b6fbbb7fd529a6.bin b/HoloBot/Library/ShaderCache/d/d9fe57249812787054b6fbbb7fd529a6.bin new file mode 100644 index 0000000..5af50e4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/d9fe57249812787054b6fbbb7fd529a6.bin differ diff --git a/HoloBot/Library/ShaderCache/d/da23ebe11bf48af0d816b18aa5e7ff8b.bin b/HoloBot/Library/ShaderCache/d/da23ebe11bf48af0d816b18aa5e7ff8b.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/da23ebe11bf48af0d816b18aa5e7ff8b.bin differ diff --git a/HoloBot/Library/ShaderCache/d/da67aa30f37a8269b2a66e2c202a1ea0.bin b/HoloBot/Library/ShaderCache/d/da67aa30f37a8269b2a66e2c202a1ea0.bin new file mode 100644 index 0000000..b5f5351 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/da67aa30f37a8269b2a66e2c202a1ea0.bin differ diff --git a/HoloBot/Library/ShaderCache/d/da6c63eaa8c776f5b1a459d5fd30daab.bin b/HoloBot/Library/ShaderCache/d/da6c63eaa8c776f5b1a459d5fd30daab.bin new file mode 100644 index 0000000..c211b44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/da6c63eaa8c776f5b1a459d5fd30daab.bin differ diff --git a/HoloBot/Library/ShaderCache/d/da87a1d6f90e88026f4d65c2219a4821.bin b/HoloBot/Library/ShaderCache/d/da87a1d6f90e88026f4d65c2219a4821.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/da87a1d6f90e88026f4d65c2219a4821.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dac6050e5ff316ee7058ed717c8c0884.bin b/HoloBot/Library/ShaderCache/d/dac6050e5ff316ee7058ed717c8c0884.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dac6050e5ff316ee7058ed717c8c0884.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dac71726d99fa48b53741aa11296ebeb.bin b/HoloBot/Library/ShaderCache/d/dac71726d99fa48b53741aa11296ebeb.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dac71726d99fa48b53741aa11296ebeb.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dad7d969aa6858ab8bcead3cf91fd205.bin b/HoloBot/Library/ShaderCache/d/dad7d969aa6858ab8bcead3cf91fd205.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dad7d969aa6858ab8bcead3cf91fd205.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dadd4710ec73df370554051b94738db7.bin b/HoloBot/Library/ShaderCache/d/dadd4710ec73df370554051b94738db7.bin new file mode 100644 index 0000000..46c080f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dadd4710ec73df370554051b94738db7.bin differ diff --git a/HoloBot/Library/ShaderCache/d/daee67c4ccb7a7ce260caae2ff1163bd.bin b/HoloBot/Library/ShaderCache/d/daee67c4ccb7a7ce260caae2ff1163bd.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/daee67c4ccb7a7ce260caae2ff1163bd.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dafc4e3fbdc7f6ab4690837599242e8c.bin b/HoloBot/Library/ShaderCache/d/dafc4e3fbdc7f6ab4690837599242e8c.bin new file mode 100644 index 0000000..e2b97a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dafc4e3fbdc7f6ab4690837599242e8c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db417c3a403823f77314450812e58d9a.bin b/HoloBot/Library/ShaderCache/d/db417c3a403823f77314450812e58d9a.bin new file mode 100644 index 0000000..63dc1ea Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db417c3a403823f77314450812e58d9a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db51ea176172375bea06dbf5b4cb20aa.bin b/HoloBot/Library/ShaderCache/d/db51ea176172375bea06dbf5b4cb20aa.bin new file mode 100644 index 0000000..82ef24d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db51ea176172375bea06dbf5b4cb20aa.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db5f34e7b2bdf1d166d965c26eeaf237.bin b/HoloBot/Library/ShaderCache/d/db5f34e7b2bdf1d166d965c26eeaf237.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db5f34e7b2bdf1d166d965c26eeaf237.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db674cde5c5b0d09ad47b44e10d1fdd0.bin b/HoloBot/Library/ShaderCache/d/db674cde5c5b0d09ad47b44e10d1fdd0.bin new file mode 100644 index 0000000..2245eaa Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db674cde5c5b0d09ad47b44e10d1fdd0.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db74b191c7794abf8966767b6e5cf9db.bin b/HoloBot/Library/ShaderCache/d/db74b191c7794abf8966767b6e5cf9db.bin new file mode 100644 index 0000000..d0fa95e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db74b191c7794abf8966767b6e5cf9db.bin differ diff --git a/HoloBot/Library/ShaderCache/d/db84d91be952315e59fd4575f0d19542.bin b/HoloBot/Library/ShaderCache/d/db84d91be952315e59fd4575f0d19542.bin new file mode 100644 index 0000000..cf6f809 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/db84d91be952315e59fd4575f0d19542.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dba759efb1f3654521fbfc77a918dd11.bin b/HoloBot/Library/ShaderCache/d/dba759efb1f3654521fbfc77a918dd11.bin new file mode 100644 index 0000000..339116e Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dba759efb1f3654521fbfc77a918dd11.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dbbcd6fcc2b3e8e2353be4915cfa7a40.bin b/HoloBot/Library/ShaderCache/d/dbbcd6fcc2b3e8e2353be4915cfa7a40.bin new file mode 100644 index 0000000..cad4012 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dbbcd6fcc2b3e8e2353be4915cfa7a40.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dbd5e7a8364deb13807663e896739318.bin b/HoloBot/Library/ShaderCache/d/dbd5e7a8364deb13807663e896739318.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dbd5e7a8364deb13807663e896739318.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dbdc4e09b59dd4060b3d3c4ad998932d.bin b/HoloBot/Library/ShaderCache/d/dbdc4e09b59dd4060b3d3c4ad998932d.bin new file mode 100644 index 0000000..86a19cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dbdc4e09b59dd4060b3d3c4ad998932d.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dbe9f34d56efbe31cf5c5198011ac4fc.bin b/HoloBot/Library/ShaderCache/d/dbe9f34d56efbe31cf5c5198011ac4fc.bin new file mode 100644 index 0000000..ae80888 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dbe9f34d56efbe31cf5c5198011ac4fc.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dbfeb5798e693b8e07c62c98c5da32ef.bin b/HoloBot/Library/ShaderCache/d/dbfeb5798e693b8e07c62c98c5da32ef.bin new file mode 100644 index 0000000..2641235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dbfeb5798e693b8e07c62c98c5da32ef.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dc285217779ada4bf98c3302d98c2397.bin b/HoloBot/Library/ShaderCache/d/dc285217779ada4bf98c3302d98c2397.bin new file mode 100644 index 0000000..b42c6b0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dc285217779ada4bf98c3302d98c2397.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dc5b9798a6a72c822b362fd540721a8e.bin b/HoloBot/Library/ShaderCache/d/dc5b9798a6a72c822b362fd540721a8e.bin new file mode 100644 index 0000000..d4cc89f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dc5b9798a6a72c822b362fd540721a8e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dc7301c94528560b8a781ec631faf301.bin b/HoloBot/Library/ShaderCache/d/dc7301c94528560b8a781ec631faf301.bin new file mode 100644 index 0000000..a58f9fb Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dc7301c94528560b8a781ec631faf301.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dc730f672b57bf690e1ef897cd4d885c.bin b/HoloBot/Library/ShaderCache/d/dc730f672b57bf690e1ef897cd4d885c.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dc730f672b57bf690e1ef897cd4d885c.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dc84cd66b9bf1e605f2a9bf7f12713ee.bin b/HoloBot/Library/ShaderCache/d/dc84cd66b9bf1e605f2a9bf7f12713ee.bin new file mode 100644 index 0000000..fdd34dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dc84cd66b9bf1e605f2a9bf7f12713ee.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dcbe5753063a4364e3bdb5b37ebbcfc9.bin b/HoloBot/Library/ShaderCache/d/dcbe5753063a4364e3bdb5b37ebbcfc9.bin new file mode 100644 index 0000000..d4cc89f Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dcbe5753063a4364e3bdb5b37ebbcfc9.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dcd6e5fa41528e96354a95579e048d68.bin b/HoloBot/Library/ShaderCache/d/dcd6e5fa41528e96354a95579e048d68.bin new file mode 100644 index 0000000..068f533 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dcd6e5fa41528e96354a95579e048d68.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dcf42ffe9ca9536dcf5e8205ecedc315.bin b/HoloBot/Library/ShaderCache/d/dcf42ffe9ca9536dcf5e8205ecedc315.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dcf42ffe9ca9536dcf5e8205ecedc315.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dd00283df12214c44056a3df15292a99.bin b/HoloBot/Library/ShaderCache/d/dd00283df12214c44056a3df15292a99.bin new file mode 100644 index 0000000..1c4b04c Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dd00283df12214c44056a3df15292a99.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dd3aabc70e570010728098a24c8cf925.bin b/HoloBot/Library/ShaderCache/d/dd3aabc70e570010728098a24c8cf925.bin new file mode 100644 index 0000000..ba9b2f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dd3aabc70e570010728098a24c8cf925.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dd7e96113df2f6a3c532e0065cb6978e.bin b/HoloBot/Library/ShaderCache/d/dd7e96113df2f6a3c532e0065cb6978e.bin new file mode 100644 index 0000000..1f554ff Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dd7e96113df2f6a3c532e0065cb6978e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dd85c9ecd863e4449ffeb3a67cec352f.bin b/HoloBot/Library/ShaderCache/d/dd85c9ecd863e4449ffeb3a67cec352f.bin new file mode 100644 index 0000000..4391efc Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dd85c9ecd863e4449ffeb3a67cec352f.bin differ diff --git a/HoloBot/Library/ShaderCache/d/ddb589e8885ff1f2854dba8d59576c7a.bin b/HoloBot/Library/ShaderCache/d/ddb589e8885ff1f2854dba8d59576c7a.bin new file mode 100644 index 0000000..7e5d043 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/ddb589e8885ff1f2854dba8d59576c7a.bin differ diff --git a/HoloBot/Library/ShaderCache/d/ddd2f9d52ce606fada33e37eead103e1.bin b/HoloBot/Library/ShaderCache/d/ddd2f9d52ce606fada33e37eead103e1.bin new file mode 100644 index 0000000..27b58c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/ddd2f9d52ce606fada33e37eead103e1.bin differ diff --git a/HoloBot/Library/ShaderCache/d/de1aceeccf1f6e253041b5e9fa245af5.bin b/HoloBot/Library/ShaderCache/d/de1aceeccf1f6e253041b5e9fa245af5.bin new file mode 100644 index 0000000..6c1e674 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/de1aceeccf1f6e253041b5e9fa245af5.bin differ diff --git a/HoloBot/Library/ShaderCache/d/de2248a3a6ec1992197b18c17a7c4f44.bin b/HoloBot/Library/ShaderCache/d/de2248a3a6ec1992197b18c17a7c4f44.bin new file mode 100644 index 0000000..58212e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/de2248a3a6ec1992197b18c17a7c4f44.bin differ diff --git a/HoloBot/Library/ShaderCache/d/de5b64ca73f0d9cad9555cd88062d5cc.bin b/HoloBot/Library/ShaderCache/d/de5b64ca73f0d9cad9555cd88062d5cc.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/de5b64ca73f0d9cad9555cd88062d5cc.bin differ diff --git a/HoloBot/Library/ShaderCache/d/ded685d264b9d9d9904563e814454329.bin b/HoloBot/Library/ShaderCache/d/ded685d264b9d9d9904563e814454329.bin new file mode 100644 index 0000000..29ae73b Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/ded685d264b9d9d9904563e814454329.bin differ diff --git a/HoloBot/Library/ShaderCache/d/deef0550f909f22b6de3a5efa6aa151b.bin b/HoloBot/Library/ShaderCache/d/deef0550f909f22b6de3a5efa6aa151b.bin new file mode 100644 index 0000000..a2de8e6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/deef0550f909f22b6de3a5efa6aa151b.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df0c5d68b0b2947c5271ac37829bac2b.bin b/HoloBot/Library/ShaderCache/d/df0c5d68b0b2947c5271ac37829bac2b.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df0c5d68b0b2947c5271ac37829bac2b.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin b/HoloBot/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin new file mode 100644 index 0000000..d4c4d55 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df1d40ab17c9880966988712024caffc.bin b/HoloBot/Library/ShaderCache/d/df1d40ab17c9880966988712024caffc.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df1d40ab17c9880966988712024caffc.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df37105ca8261c31232e0083f1f011cf.bin b/HoloBot/Library/ShaderCache/d/df37105ca8261c31232e0083f1f011cf.bin new file mode 100644 index 0000000..fe04f40 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df37105ca8261c31232e0083f1f011cf.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df3f023942115c3e02446c70e96f1b60.bin b/HoloBot/Library/ShaderCache/d/df3f023942115c3e02446c70e96f1b60.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df3f023942115c3e02446c70e96f1b60.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df451f7608cc315cc933658c87900a31.bin b/HoloBot/Library/ShaderCache/d/df451f7608cc315cc933658c87900a31.bin new file mode 100644 index 0000000..284a1b5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df451f7608cc315cc933658c87900a31.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df75f5532b447bf7c42f9feb0cdfe2e2.bin b/HoloBot/Library/ShaderCache/d/df75f5532b447bf7c42f9feb0cdfe2e2.bin new file mode 100644 index 0000000..b38b583 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df75f5532b447bf7c42f9feb0cdfe2e2.bin differ diff --git a/HoloBot/Library/ShaderCache/d/df80f793a084d1532e28fc8dad845857.bin b/HoloBot/Library/ShaderCache/d/df80f793a084d1532e28fc8dad845857.bin new file mode 100644 index 0000000..040821d Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/df80f793a084d1532e28fc8dad845857.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dfa040988cf4361a5c8936a43d8d44e7.bin b/HoloBot/Library/ShaderCache/d/dfa040988cf4361a5c8936a43d8d44e7.bin new file mode 100644 index 0000000..eb5f773 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dfa040988cf4361a5c8936a43d8d44e7.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dfa72448ae28a9cb9701072747f14e1d.bin b/HoloBot/Library/ShaderCache/d/dfa72448ae28a9cb9701072747f14e1d.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dfa72448ae28a9cb9701072747f14e1d.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dfba5403a76f9a0a185be98c933803f1.bin b/HoloBot/Library/ShaderCache/d/dfba5403a76f9a0a185be98c933803f1.bin new file mode 100644 index 0000000..c8f2fa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dfba5403a76f9a0a185be98c933803f1.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dffb5ac23d94766a4c5015c9994aaa11.bin b/HoloBot/Library/ShaderCache/d/dffb5ac23d94766a4c5015c9994aaa11.bin new file mode 100644 index 0000000..ab63420 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dffb5ac23d94766a4c5015c9994aaa11.bin differ diff --git a/HoloBot/Library/ShaderCache/d/dffc6c0d286dccc5e38c3486493d6ab8.bin b/HoloBot/Library/ShaderCache/d/dffc6c0d286dccc5e38c3486493d6ab8.bin new file mode 100644 index 0000000..29be6c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/d/dffc6c0d286dccc5e38c3486493d6ab8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e00011bdb1ed5fc617c7a0ccae0fcb51.bin b/HoloBot/Library/ShaderCache/e/e00011bdb1ed5fc617c7a0ccae0fcb51.bin new file mode 100644 index 0000000..5005c28 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e00011bdb1ed5fc617c7a0ccae0fcb51.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e00899c7723f472e36045122e74d1001.bin b/HoloBot/Library/ShaderCache/e/e00899c7723f472e36045122e74d1001.bin new file mode 100644 index 0000000..958dc31 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e00899c7723f472e36045122e74d1001.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e01085f57606b5248acbb1325220d99e.bin b/HoloBot/Library/ShaderCache/e/e01085f57606b5248acbb1325220d99e.bin new file mode 100644 index 0000000..3e60b25 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e01085f57606b5248acbb1325220d99e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e01d03b229cf54eaed52974f25ccb351.bin b/HoloBot/Library/ShaderCache/e/e01d03b229cf54eaed52974f25ccb351.bin new file mode 100644 index 0000000..fde5743 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e01d03b229cf54eaed52974f25ccb351.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e01e6df18acbb024c4a72a2ee622e4d5.bin b/HoloBot/Library/ShaderCache/e/e01e6df18acbb024c4a72a2ee622e4d5.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e01e6df18acbb024c4a72a2ee622e4d5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e041e817b3680aa24d5ce6c814dce4a3.bin b/HoloBot/Library/ShaderCache/e/e041e817b3680aa24d5ce6c814dce4a3.bin new file mode 100644 index 0000000..40fe4f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e041e817b3680aa24d5ce6c814dce4a3.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e04cb5e0f0397b465a7e5c80365ee8e7.bin b/HoloBot/Library/ShaderCache/e/e04cb5e0f0397b465a7e5c80365ee8e7.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e04cb5e0f0397b465a7e5c80365ee8e7.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e085f2fe266a209ef7eb006f45aa3672.bin b/HoloBot/Library/ShaderCache/e/e085f2fe266a209ef7eb006f45aa3672.bin new file mode 100644 index 0000000..633ea16 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e085f2fe266a209ef7eb006f45aa3672.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e08cf172ca6b212ba27a60dcd6cb3f7c.bin b/HoloBot/Library/ShaderCache/e/e08cf172ca6b212ba27a60dcd6cb3f7c.bin new file mode 100644 index 0000000..7b99fc7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e08cf172ca6b212ba27a60dcd6cb3f7c.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0a56c4117b24257982f16852f5276b4.bin b/HoloBot/Library/ShaderCache/e/e0a56c4117b24257982f16852f5276b4.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0a56c4117b24257982f16852f5276b4.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0b35499bdd95c91de884d167d25f995.bin b/HoloBot/Library/ShaderCache/e/e0b35499bdd95c91de884d167d25f995.bin new file mode 100644 index 0000000..12a0596 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0b35499bdd95c91de884d167d25f995.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0bd8a99a5b4c983c33bb8b27915fa72.bin b/HoloBot/Library/ShaderCache/e/e0bd8a99a5b4c983c33bb8b27915fa72.bin new file mode 100644 index 0000000..800aa8e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0bd8a99a5b4c983c33bb8b27915fa72.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0de575859d8b2ee82e582455b95d29e.bin b/HoloBot/Library/ShaderCache/e/e0de575859d8b2ee82e582455b95d29e.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0de575859d8b2ee82e582455b95d29e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0ecba19f606985fe2d9f802089491f9.bin b/HoloBot/Library/ShaderCache/e/e0ecba19f606985fe2d9f802089491f9.bin new file mode 100644 index 0000000..b54dcee Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0ecba19f606985fe2d9f802089491f9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e0ef742ce56c05071a4216de94787e07.bin b/HoloBot/Library/ShaderCache/e/e0ef742ce56c05071a4216de94787e07.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e0ef742ce56c05071a4216de94787e07.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e12749a2cac65f7492a16ba88eba7b57.bin b/HoloBot/Library/ShaderCache/e/e12749a2cac65f7492a16ba88eba7b57.bin new file mode 100644 index 0000000..8d73d0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e12749a2cac65f7492a16ba88eba7b57.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e153b8f3246d60063443b9c1ae5fddfc.bin b/HoloBot/Library/ShaderCache/e/e153b8f3246d60063443b9c1ae5fddfc.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e153b8f3246d60063443b9c1ae5fddfc.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e166835a34f7889a4004bd8f73a86663.bin b/HoloBot/Library/ShaderCache/e/e166835a34f7889a4004bd8f73a86663.bin new file mode 100644 index 0000000..f419d3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e166835a34f7889a4004bd8f73a86663.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e17cff884e7162003a37562b8c50ee80.bin b/HoloBot/Library/ShaderCache/e/e17cff884e7162003a37562b8c50ee80.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e17cff884e7162003a37562b8c50ee80.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e18d19b1cd4d97ef558771530ba475fa.bin b/HoloBot/Library/ShaderCache/e/e18d19b1cd4d97ef558771530ba475fa.bin new file mode 100644 index 0000000..af30b5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e18d19b1cd4d97ef558771530ba475fa.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e22491126f6b75357fe832874bee2820.bin b/HoloBot/Library/ShaderCache/e/e22491126f6b75357fe832874bee2820.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e22491126f6b75357fe832874bee2820.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e22842a26eab789ec1fea579aeb9d0f7.bin b/HoloBot/Library/ShaderCache/e/e22842a26eab789ec1fea579aeb9d0f7.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e22842a26eab789ec1fea579aeb9d0f7.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e22b5739001fc4343cc3158b43c0f7e8.bin b/HoloBot/Library/ShaderCache/e/e22b5739001fc4343cc3158b43c0f7e8.bin new file mode 100644 index 0000000..869ee0b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e22b5739001fc4343cc3158b43c0f7e8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e22fd7be11f7a5fb07255477fd7f856c.bin b/HoloBot/Library/ShaderCache/e/e22fd7be11f7a5fb07255477fd7f856c.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e22fd7be11f7a5fb07255477fd7f856c.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e231b6783b00a67bb3a80a0570b6d73c.bin b/HoloBot/Library/ShaderCache/e/e231b6783b00a67bb3a80a0570b6d73c.bin new file mode 100644 index 0000000..76aa9d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e231b6783b00a67bb3a80a0570b6d73c.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e26112bb9ed603abf1077f1960dfb1ef.bin b/HoloBot/Library/ShaderCache/e/e26112bb9ed603abf1077f1960dfb1ef.bin new file mode 100644 index 0000000..8f5c60d Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e26112bb9ed603abf1077f1960dfb1ef.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e2686f0f87847acd89dbbaec7f6f49b9.bin b/HoloBot/Library/ShaderCache/e/e2686f0f87847acd89dbbaec7f6f49b9.bin new file mode 100644 index 0000000..76c5018 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e2686f0f87847acd89dbbaec7f6f49b9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e272c26bbeda6e66133ac9ed1757ed6a.bin b/HoloBot/Library/ShaderCache/e/e272c26bbeda6e66133ac9ed1757ed6a.bin new file mode 100644 index 0000000..63dc1ea Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e272c26bbeda6e66133ac9ed1757ed6a.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e2ae4e95d824a73882bfe0a0955420b1.bin b/HoloBot/Library/ShaderCache/e/e2ae4e95d824a73882bfe0a0955420b1.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e2ae4e95d824a73882bfe0a0955420b1.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e2cd9ceb04e49ab3a201977cd6fb0d3d.bin b/HoloBot/Library/ShaderCache/e/e2cd9ceb04e49ab3a201977cd6fb0d3d.bin new file mode 100644 index 0000000..2b438ad Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e2cd9ceb04e49ab3a201977cd6fb0d3d.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e2e06551ad06235be5d7cd29c769feba.bin b/HoloBot/Library/ShaderCache/e/e2e06551ad06235be5d7cd29c769feba.bin new file mode 100644 index 0000000..21ed045 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e2e06551ad06235be5d7cd29c769feba.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e2ed4305478ec25244f3bf716479c129.bin b/HoloBot/Library/ShaderCache/e/e2ed4305478ec25244f3bf716479c129.bin new file mode 100644 index 0000000..63123de Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e2ed4305478ec25244f3bf716479c129.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e30216f888df7b86076951bb7bc00ec1.bin b/HoloBot/Library/ShaderCache/e/e30216f888df7b86076951bb7bc00ec1.bin new file mode 100644 index 0000000..cb0e68c Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e30216f888df7b86076951bb7bc00ec1.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e31c92b4eb03ebe1cac2eeb7ee08ed61.bin b/HoloBot/Library/ShaderCache/e/e31c92b4eb03ebe1cac2eeb7ee08ed61.bin new file mode 100644 index 0000000..a9bf00f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e31c92b4eb03ebe1cac2eeb7ee08ed61.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e31fd0b4674281c28fc3f83fe459b116.bin b/HoloBot/Library/ShaderCache/e/e31fd0b4674281c28fc3f83fe459b116.bin new file mode 100644 index 0000000..fb9d3c9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e31fd0b4674281c28fc3f83fe459b116.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e325d0db74d1f51b166c4fa4a65237df.bin b/HoloBot/Library/ShaderCache/e/e325d0db74d1f51b166c4fa4a65237df.bin new file mode 100644 index 0000000..7569820 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e325d0db74d1f51b166c4fa4a65237df.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3301940f9f5d1aeef58298872134ff8.bin b/HoloBot/Library/ShaderCache/e/e3301940f9f5d1aeef58298872134ff8.bin new file mode 100644 index 0000000..1f01953 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3301940f9f5d1aeef58298872134ff8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e37d54997e6c85c0bba70861944ba73a.bin b/HoloBot/Library/ShaderCache/e/e37d54997e6c85c0bba70861944ba73a.bin new file mode 100644 index 0000000..1cdc337 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e37d54997e6c85c0bba70861944ba73a.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e383248f19c0a4643b3d5f0e33818efe.bin b/HoloBot/Library/ShaderCache/e/e383248f19c0a4643b3d5f0e33818efe.bin new file mode 100644 index 0000000..1c4b04c Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e383248f19c0a4643b3d5f0e33818efe.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e38adff29291cb60317854ec622f5511.bin b/HoloBot/Library/ShaderCache/e/e38adff29291cb60317854ec622f5511.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e38adff29291cb60317854ec622f5511.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3936bcbf9b96c031eb1237d285c13dc.bin b/HoloBot/Library/ShaderCache/e/e3936bcbf9b96c031eb1237d285c13dc.bin new file mode 100644 index 0000000..01cfbbe Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3936bcbf9b96c031eb1237d285c13dc.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e395a64fd7bf5db06ef8fafb561866cd.bin b/HoloBot/Library/ShaderCache/e/e395a64fd7bf5db06ef8fafb561866cd.bin new file mode 100644 index 0000000..de1c658 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e395a64fd7bf5db06ef8fafb561866cd.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e39855d67aa1d56d9a09cc5e4d86a19b.bin b/HoloBot/Library/ShaderCache/e/e39855d67aa1d56d9a09cc5e4d86a19b.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e39855d67aa1d56d9a09cc5e4d86a19b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3c0560fdc0c8d20be2b6cef04985d2b.bin b/HoloBot/Library/ShaderCache/e/e3c0560fdc0c8d20be2b6cef04985d2b.bin new file mode 100644 index 0000000..cfce1c4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3c0560fdc0c8d20be2b6cef04985d2b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3e3f46b092b67e56ff3b4d29d459de8.bin b/HoloBot/Library/ShaderCache/e/e3e3f46b092b67e56ff3b4d29d459de8.bin new file mode 100644 index 0000000..efdfa6b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3e3f46b092b67e56ff3b4d29d459de8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3e814b038437d45258a39331c91b7e0.bin b/HoloBot/Library/ShaderCache/e/e3e814b038437d45258a39331c91b7e0.bin new file mode 100644 index 0000000..6adc47a Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3e814b038437d45258a39331c91b7e0.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e3f2dc113663cdd6caa1e9627ac6234e.bin b/HoloBot/Library/ShaderCache/e/e3f2dc113663cdd6caa1e9627ac6234e.bin new file mode 100644 index 0000000..17760d9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e3f2dc113663cdd6caa1e9627ac6234e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e40fb511f6e6d480f16331f8d59901d1.bin b/HoloBot/Library/ShaderCache/e/e40fb511f6e6d480f16331f8d59901d1.bin new file mode 100644 index 0000000..110d6cf Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e40fb511f6e6d480f16331f8d59901d1.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e411189613be28fc2e900e4ac8e58cc4.bin b/HoloBot/Library/ShaderCache/e/e411189613be28fc2e900e4ac8e58cc4.bin new file mode 100644 index 0000000..3532977 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e411189613be28fc2e900e4ac8e58cc4.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e41c8e8a301bca46b9ac69a9dc4d650e.bin b/HoloBot/Library/ShaderCache/e/e41c8e8a301bca46b9ac69a9dc4d650e.bin new file mode 100644 index 0000000..f3180d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e41c8e8a301bca46b9ac69a9dc4d650e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4240969ba0997e1527f36ffd11d0683.bin b/HoloBot/Library/ShaderCache/e/e4240969ba0997e1527f36ffd11d0683.bin new file mode 100644 index 0000000..3009f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4240969ba0997e1527f36ffd11d0683.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e43992dbd25aa4c8d3570fb64e5f2548.bin b/HoloBot/Library/ShaderCache/e/e43992dbd25aa4c8d3570fb64e5f2548.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e43992dbd25aa4c8d3570fb64e5f2548.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e43bd0f8fbc5d779ac7e25f5c9a2f1f6.bin b/HoloBot/Library/ShaderCache/e/e43bd0f8fbc5d779ac7e25f5c9a2f1f6.bin new file mode 100644 index 0000000..0c92bda Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e43bd0f8fbc5d779ac7e25f5c9a2f1f6.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e44fe07248c046df5ee3bc595ba80688.bin b/HoloBot/Library/ShaderCache/e/e44fe07248c046df5ee3bc595ba80688.bin new file mode 100644 index 0000000..3676498 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e44fe07248c046df5ee3bc595ba80688.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4539e5ffaf4d75bd97fc5d2d540163f.bin b/HoloBot/Library/ShaderCache/e/e4539e5ffaf4d75bd97fc5d2d540163f.bin new file mode 100644 index 0000000..c9e03f6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4539e5ffaf4d75bd97fc5d2d540163f.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e48fb665adbf06eb70cbab44e50571f5.bin b/HoloBot/Library/ShaderCache/e/e48fb665adbf06eb70cbab44e50571f5.bin new file mode 100644 index 0000000..80158dc Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e48fb665adbf06eb70cbab44e50571f5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e492aa1afb9783f31fe65878587f5a52.bin b/HoloBot/Library/ShaderCache/e/e492aa1afb9783f31fe65878587f5a52.bin new file mode 100644 index 0000000..7333fc0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e492aa1afb9783f31fe65878587f5a52.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4a150a55e5f7ede0bc87074cb51ce84.bin b/HoloBot/Library/ShaderCache/e/e4a150a55e5f7ede0bc87074cb51ce84.bin new file mode 100644 index 0000000..0ed63c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4a150a55e5f7ede0bc87074cb51ce84.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4a843ff1d5abf06f17e1956a68ee186.bin b/HoloBot/Library/ShaderCache/e/e4a843ff1d5abf06f17e1956a68ee186.bin new file mode 100644 index 0000000..03080d7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4a843ff1d5abf06f17e1956a68ee186.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4b42349069dfa2cf69efae4da1f6470.bin b/HoloBot/Library/ShaderCache/e/e4b42349069dfa2cf69efae4da1f6470.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4b42349069dfa2cf69efae4da1f6470.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4b5e70025bda2318366b164c3cf2047.bin b/HoloBot/Library/ShaderCache/e/e4b5e70025bda2318366b164c3cf2047.bin new file mode 100644 index 0000000..8763fae Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4b5e70025bda2318366b164c3cf2047.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4cd85734ae0828f9307feb2831343c3.bin b/HoloBot/Library/ShaderCache/e/e4cd85734ae0828f9307feb2831343c3.bin new file mode 100644 index 0000000..8d73d0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4cd85734ae0828f9307feb2831343c3.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4f0332d3d5ca090c399dc7b05db468d.bin b/HoloBot/Library/ShaderCache/e/e4f0332d3d5ca090c399dc7b05db468d.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4f0332d3d5ca090c399dc7b05db468d.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e4f7c603967db1e11e5c72c3bbf624a9.bin b/HoloBot/Library/ShaderCache/e/e4f7c603967db1e11e5c72c3bbf624a9.bin new file mode 100644 index 0000000..1ce4dc4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e4f7c603967db1e11e5c72c3bbf624a9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5353a76581b5749d41e1a771e74b071.bin b/HoloBot/Library/ShaderCache/e/e5353a76581b5749d41e1a771e74b071.bin new file mode 100644 index 0000000..284a1b5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5353a76581b5749d41e1a771e74b071.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5687e7218fd3cfcee7390e1fe44176d.bin b/HoloBot/Library/ShaderCache/e/e5687e7218fd3cfcee7390e1fe44176d.bin new file mode 100644 index 0000000..f8b4d44 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5687e7218fd3cfcee7390e1fe44176d.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5726295e9fa39cba30faff12e0f2e1f.bin b/HoloBot/Library/ShaderCache/e/e5726295e9fa39cba30faff12e0f2e1f.bin new file mode 100644 index 0000000..c199961 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5726295e9fa39cba30faff12e0f2e1f.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e58ff2b083338622f5d7c1139779c9cd.bin b/HoloBot/Library/ShaderCache/e/e58ff2b083338622f5d7c1139779c9cd.bin new file mode 100644 index 0000000..14df558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e58ff2b083338622f5d7c1139779c9cd.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5953eaa6f4c29fc963e29d30211e292.bin b/HoloBot/Library/ShaderCache/e/e5953eaa6f4c29fc963e29d30211e292.bin new file mode 100644 index 0000000..e73c01e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5953eaa6f4c29fc963e29d30211e292.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e597c4019825b8ee00155f1cf0d004b5.bin b/HoloBot/Library/ShaderCache/e/e597c4019825b8ee00155f1cf0d004b5.bin new file mode 100644 index 0000000..519dd42 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e597c4019825b8ee00155f1cf0d004b5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5b6b0305a8728bd8d13d5b37d0d89c8.bin b/HoloBot/Library/ShaderCache/e/e5b6b0305a8728bd8d13d5b37d0d89c8.bin new file mode 100644 index 0000000..8336fda Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5b6b0305a8728bd8d13d5b37d0d89c8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5bba9f0ba179bc7ff6fca4a294b4ee6.bin b/HoloBot/Library/ShaderCache/e/e5bba9f0ba179bc7ff6fca4a294b4ee6.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5bba9f0ba179bc7ff6fca4a294b4ee6.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5d878904ca754cbf89b14b6419955f6.bin b/HoloBot/Library/ShaderCache/e/e5d878904ca754cbf89b14b6419955f6.bin new file mode 100644 index 0000000..cdc06c8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5d878904ca754cbf89b14b6419955f6.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5e7127f2404e829944e45962c04a6f7.bin b/HoloBot/Library/ShaderCache/e/e5e7127f2404e829944e45962c04a6f7.bin new file mode 100644 index 0000000..5ab7acb Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5e7127f2404e829944e45962c04a6f7.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e5e8165a0e862af4752e5d36deecd9a9.bin b/HoloBot/Library/ShaderCache/e/e5e8165a0e862af4752e5d36deecd9a9.bin new file mode 100644 index 0000000..2643afa Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e5e8165a0e862af4752e5d36deecd9a9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e60dd0ae75893eb707d2a1653688736d.bin b/HoloBot/Library/ShaderCache/e/e60dd0ae75893eb707d2a1653688736d.bin new file mode 100644 index 0000000..f5f1abf Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e60dd0ae75893eb707d2a1653688736d.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e64a5747b47342c000ff665ac7a6fa9f.bin b/HoloBot/Library/ShaderCache/e/e64a5747b47342c000ff665ac7a6fa9f.bin new file mode 100644 index 0000000..6323eab Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e64a5747b47342c000ff665ac7a6fa9f.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e64c8e738d741d65e745ac3c3d932d98.bin b/HoloBot/Library/ShaderCache/e/e64c8e738d741d65e745ac3c3d932d98.bin new file mode 100644 index 0000000..95e584e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e64c8e738d741d65e745ac3c3d932d98.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e672b9705e3299c9bc817fed7c665462.bin b/HoloBot/Library/ShaderCache/e/e672b9705e3299c9bc817fed7c665462.bin new file mode 100644 index 0000000..6db9dfe Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e672b9705e3299c9bc817fed7c665462.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e6c0065ac7c535cec5ed37991fd7ada8.bin b/HoloBot/Library/ShaderCache/e/e6c0065ac7c535cec5ed37991fd7ada8.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e6c0065ac7c535cec5ed37991fd7ada8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e6e11e35dee0c1a0bd3681804d62e782.bin b/HoloBot/Library/ShaderCache/e/e6e11e35dee0c1a0bd3681804d62e782.bin new file mode 100644 index 0000000..38336d8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e6e11e35dee0c1a0bd3681804d62e782.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e72659e4b4f107442b7b6299c8e0f0ba.bin b/HoloBot/Library/ShaderCache/e/e72659e4b4f107442b7b6299c8e0f0ba.bin new file mode 100644 index 0000000..1b5e627 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e72659e4b4f107442b7b6299c8e0f0ba.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e726b83d6d30b38955def0769ea7591e.bin b/HoloBot/Library/ShaderCache/e/e726b83d6d30b38955def0769ea7591e.bin new file mode 100644 index 0000000..8491ed0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e726b83d6d30b38955def0769ea7591e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e7334775fec889bcdc3b92b0d47da24d.bin b/HoloBot/Library/ShaderCache/e/e7334775fec889bcdc3b92b0d47da24d.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e7334775fec889bcdc3b92b0d47da24d.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e7f60625e57f8837b1619ca4c76fec05.bin b/HoloBot/Library/ShaderCache/e/e7f60625e57f8837b1619ca4c76fec05.bin new file mode 100644 index 0000000..f419d3e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e7f60625e57f8837b1619ca4c76fec05.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e80b078f6020918ccf0ae8fe125e2ac9.bin b/HoloBot/Library/ShaderCache/e/e80b078f6020918ccf0ae8fe125e2ac9.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e80b078f6020918ccf0ae8fe125e2ac9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e80b662b751b2621de12578c2adb99f5.bin b/HoloBot/Library/ShaderCache/e/e80b662b751b2621de12578c2adb99f5.bin new file mode 100644 index 0000000..b854a5b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e80b662b751b2621de12578c2adb99f5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e840cacbfcd02c4d75edb2c9a611647b.bin b/HoloBot/Library/ShaderCache/e/e840cacbfcd02c4d75edb2c9a611647b.bin new file mode 100644 index 0000000..68082a0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e840cacbfcd02c4d75edb2c9a611647b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e84514a554fc21f4ca3c79aa9e41ac06.bin b/HoloBot/Library/ShaderCache/e/e84514a554fc21f4ca3c79aa9e41ac06.bin new file mode 100644 index 0000000..25a9572 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e84514a554fc21f4ca3c79aa9e41ac06.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e893b5d89bc06cdc71203c7611a812e2.bin b/HoloBot/Library/ShaderCache/e/e893b5d89bc06cdc71203c7611a812e2.bin new file mode 100644 index 0000000..3cdfee2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e893b5d89bc06cdc71203c7611a812e2.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e8a6e90daa5a4d3b9ad79e75259752a0.bin b/HoloBot/Library/ShaderCache/e/e8a6e90daa5a4d3b9ad79e75259752a0.bin new file mode 100644 index 0000000..fe70c9f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e8a6e90daa5a4d3b9ad79e75259752a0.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e8d46f932e46c1430243d12d9bdd9e66.bin b/HoloBot/Library/ShaderCache/e/e8d46f932e46c1430243d12d9bdd9e66.bin new file mode 100644 index 0000000..2e85312 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e8d46f932e46c1430243d12d9bdd9e66.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e922c872f383874b4b1ac4588d426f08.bin b/HoloBot/Library/ShaderCache/e/e922c872f383874b4b1ac4588d426f08.bin new file mode 100644 index 0000000..48d7db1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e922c872f383874b4b1ac4588d426f08.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e93b95037f237122187c7969e3d89c47.bin b/HoloBot/Library/ShaderCache/e/e93b95037f237122187c7969e3d89c47.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e93b95037f237122187c7969e3d89c47.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e94a32b756c5e99b13c5594ead1b58e6.bin b/HoloBot/Library/ShaderCache/e/e94a32b756c5e99b13c5594ead1b58e6.bin new file mode 100644 index 0000000..06ccd71 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e94a32b756c5e99b13c5594ead1b58e6.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e97ede12278d3e65720cf467ec615eab.bin b/HoloBot/Library/ShaderCache/e/e97ede12278d3e65720cf467ec615eab.bin new file mode 100644 index 0000000..3e60b25 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e97ede12278d3e65720cf467ec615eab.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e9917551ffc833e3d0d0c2e434132296.bin b/HoloBot/Library/ShaderCache/e/e9917551ffc833e3d0d0c2e434132296.bin new file mode 100644 index 0000000..fe04f40 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e9917551ffc833e3d0d0c2e434132296.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e9d6c8a673716fa8c6d81518ddbe103c.bin b/HoloBot/Library/ShaderCache/e/e9d6c8a673716fa8c6d81518ddbe103c.bin new file mode 100644 index 0000000..81ee184 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e9d6c8a673716fa8c6d81518ddbe103c.bin differ diff --git a/HoloBot/Library/ShaderCache/e/e9f5e9954c92a8692eb19d979cd7e6cc.bin b/HoloBot/Library/ShaderCache/e/e9f5e9954c92a8692eb19d979cd7e6cc.bin new file mode 100644 index 0000000..2de7ba3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/e9f5e9954c92a8692eb19d979cd7e6cc.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea10466c5f50399935797f0458c338e4.bin b/HoloBot/Library/ShaderCache/e/ea10466c5f50399935797f0458c338e4.bin new file mode 100644 index 0000000..0d2bd01 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea10466c5f50399935797f0458c338e4.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea6d5aa4515da334cae92d28b568ee20.bin b/HoloBot/Library/ShaderCache/e/ea6d5aa4515da334cae92d28b568ee20.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea6d5aa4515da334cae92d28b568ee20.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea7635b71a766367c39cd2f9d79160f9.bin b/HoloBot/Library/ShaderCache/e/ea7635b71a766367c39cd2f9d79160f9.bin new file mode 100644 index 0000000..d17efb7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea7635b71a766367c39cd2f9d79160f9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea837125ed7c0d0e281c8ed370c099f0.bin b/HoloBot/Library/ShaderCache/e/ea837125ed7c0d0e281c8ed370c099f0.bin new file mode 100644 index 0000000..4934bd8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea837125ed7c0d0e281c8ed370c099f0.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea8f89a21d78d0f8de61dd17885539cf.bin b/HoloBot/Library/ShaderCache/e/ea8f89a21d78d0f8de61dd17885539cf.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea8f89a21d78d0f8de61dd17885539cf.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ea95a4fb49f713fc64b1de913af00333.bin b/HoloBot/Library/ShaderCache/e/ea95a4fb49f713fc64b1de913af00333.bin new file mode 100644 index 0000000..8e5b397 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ea95a4fb49f713fc64b1de913af00333.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eaa4230f75e62179dd33b8ede4835b2f.bin b/HoloBot/Library/ShaderCache/e/eaa4230f75e62179dd33b8ede4835b2f.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eaa4230f75e62179dd33b8ede4835b2f.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eac9ea7b816a4967d958bdda900d4a3e.bin b/HoloBot/Library/ShaderCache/e/eac9ea7b816a4967d958bdda900d4a3e.bin new file mode 100644 index 0000000..33abf4d Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eac9ea7b816a4967d958bdda900d4a3e.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ead574bdc733129cdbb07830caa370cf.bin b/HoloBot/Library/ShaderCache/e/ead574bdc733129cdbb07830caa370cf.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ead574bdc733129cdbb07830caa370cf.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eb39c49c92344a46d994cbe4399bc0d5.bin b/HoloBot/Library/ShaderCache/e/eb39c49c92344a46d994cbe4399bc0d5.bin new file mode 100644 index 0000000..81ee184 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eb39c49c92344a46d994cbe4399bc0d5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eb3b669643fb7050f57c06c232ed0aa9.bin b/HoloBot/Library/ShaderCache/e/eb3b669643fb7050f57c06c232ed0aa9.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eb3b669643fb7050f57c06c232ed0aa9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eb69cf682dfdfff7d8c78090f4105d1b.bin b/HoloBot/Library/ShaderCache/e/eb69cf682dfdfff7d8c78090f4105d1b.bin new file mode 100644 index 0000000..7a0040a Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eb69cf682dfdfff7d8c78090f4105d1b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eb9d5db8472249e92aed587341d4486a.bin b/HoloBot/Library/ShaderCache/e/eb9d5db8472249e92aed587341d4486a.bin new file mode 100644 index 0000000..0f4d082 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eb9d5db8472249e92aed587341d4486a.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eba301a6d5f5c3e4fde31933735b43d0.bin b/HoloBot/Library/ShaderCache/e/eba301a6d5f5c3e4fde31933735b43d0.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eba301a6d5f5c3e4fde31933735b43d0.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ebb4526a959cc712c63084c2a909d423.bin b/HoloBot/Library/ShaderCache/e/ebb4526a959cc712c63084c2a909d423.bin new file mode 100644 index 0000000..de1c658 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ebb4526a959cc712c63084c2a909d423.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ebc731b6aa67e7cb763ff61923d33512.bin b/HoloBot/Library/ShaderCache/e/ebc731b6aa67e7cb763ff61923d33512.bin new file mode 100644 index 0000000..0619302 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ebc731b6aa67e7cb763ff61923d33512.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ebde8612f6ea9a04c8c49d40dcb3d4e5.bin b/HoloBot/Library/ShaderCache/e/ebde8612f6ea9a04c8c49d40dcb3d4e5.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ebde8612f6ea9a04c8c49d40dcb3d4e5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ebfa5df394271e5063d90fc50d8d2257.bin b/HoloBot/Library/ShaderCache/e/ebfa5df394271e5063d90fc50d8d2257.bin new file mode 100644 index 0000000..bbe94a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ebfa5df394271e5063d90fc50d8d2257.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ec67a9dedc4c91457e2035f369bef713.bin b/HoloBot/Library/ShaderCache/e/ec67a9dedc4c91457e2035f369bef713.bin new file mode 100644 index 0000000..0b2863e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ec67a9dedc4c91457e2035f369bef713.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ec7d13e713fcb09ea0f37e874ea03b4c.bin b/HoloBot/Library/ShaderCache/e/ec7d13e713fcb09ea0f37e874ea03b4c.bin new file mode 100644 index 0000000..7178378 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ec7d13e713fcb09ea0f37e874ea03b4c.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ec7e3781fbc701e8cba0e9dc567ca14b.bin b/HoloBot/Library/ShaderCache/e/ec7e3781fbc701e8cba0e9dc567ca14b.bin new file mode 100644 index 0000000..5f58b19 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ec7e3781fbc701e8cba0e9dc567ca14b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eca95646f3eccb3842de37b836997b42.bin b/HoloBot/Library/ShaderCache/e/eca95646f3eccb3842de37b836997b42.bin new file mode 100644 index 0000000..463ccd7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eca95646f3eccb3842de37b836997b42.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ecc33e56e7b3ddbd679a08c503949c93.bin b/HoloBot/Library/ShaderCache/e/ecc33e56e7b3ddbd679a08c503949c93.bin new file mode 100644 index 0000000..040821d Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ecc33e56e7b3ddbd679a08c503949c93.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ecc8ef30489d13dbfe7fe7e5199716a7.bin b/HoloBot/Library/ShaderCache/e/ecc8ef30489d13dbfe7fe7e5199716a7.bin new file mode 100644 index 0000000..b947028 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ecc8ef30489d13dbfe7fe7e5199716a7.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ecdaf25b0cd905badb28e134fd784b73.bin b/HoloBot/Library/ShaderCache/e/ecdaf25b0cd905badb28e134fd784b73.bin new file mode 100644 index 0000000..66d76ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ecdaf25b0cd905badb28e134fd784b73.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ecf457aaeb1dfc277bb228fbc290ee76.bin b/HoloBot/Library/ShaderCache/e/ecf457aaeb1dfc277bb228fbc290ee76.bin new file mode 100644 index 0000000..bf43d6e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ecf457aaeb1dfc277bb228fbc290ee76.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ed5cce7efff5a0b07b6cdce9514bd1b0.bin b/HoloBot/Library/ShaderCache/e/ed5cce7efff5a0b07b6cdce9514bd1b0.bin new file mode 100644 index 0000000..866cca7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ed5cce7efff5a0b07b6cdce9514bd1b0.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ed64b4569deb0e17e8cc72c74ec2ace9.bin b/HoloBot/Library/ShaderCache/e/ed64b4569deb0e17e8cc72c74ec2ace9.bin new file mode 100644 index 0000000..69f2119 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ed64b4569deb0e17e8cc72c74ec2ace9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ed8a136af7a4a8592888a2175c23c8d5.bin b/HoloBot/Library/ShaderCache/e/ed8a136af7a4a8592888a2175c23c8d5.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ed8a136af7a4a8592888a2175c23c8d5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ed91f20538bb14e038b35a312303bd02.bin b/HoloBot/Library/ShaderCache/e/ed91f20538bb14e038b35a312303bd02.bin new file mode 100644 index 0000000..aee85bf Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ed91f20538bb14e038b35a312303bd02.bin differ diff --git a/HoloBot/Library/ShaderCache/e/edaa289598f2777c8c239a1fa15e05d9.bin b/HoloBot/Library/ShaderCache/e/edaa289598f2777c8c239a1fa15e05d9.bin new file mode 100644 index 0000000..dcdb9db Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/edaa289598f2777c8c239a1fa15e05d9.bin differ diff --git a/HoloBot/Library/ShaderCache/e/edb06f0fffb858cc10db1e87da30716b.bin b/HoloBot/Library/ShaderCache/e/edb06f0fffb858cc10db1e87da30716b.bin new file mode 100644 index 0000000..87f6693 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/edb06f0fffb858cc10db1e87da30716b.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ede54f82787d14704c1d6a1520e223a3.bin b/HoloBot/Library/ShaderCache/e/ede54f82787d14704c1d6a1520e223a3.bin new file mode 100644 index 0000000..cf6c67e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ede54f82787d14704c1d6a1520e223a3.bin differ diff --git a/HoloBot/Library/ShaderCache/e/edec19ac10515641c3acb56949802cec.bin b/HoloBot/Library/ShaderCache/e/edec19ac10515641c3acb56949802cec.bin new file mode 100644 index 0000000..89bed3b Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/edec19ac10515641c3acb56949802cec.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ee0bc399f85ab05bafca80b3b920a019.bin b/HoloBot/Library/ShaderCache/e/ee0bc399f85ab05bafca80b3b920a019.bin new file mode 100644 index 0000000..740a3f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ee0bc399f85ab05bafca80b3b920a019.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eeb0ea3be699b9b26c135b5dcc45c0eb.bin b/HoloBot/Library/ShaderCache/e/eeb0ea3be699b9b26c135b5dcc45c0eb.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eeb0ea3be699b9b26c135b5dcc45c0eb.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eeb35b892b9c3aa93494e3d3d7083093.bin b/HoloBot/Library/ShaderCache/e/eeb35b892b9c3aa93494e3d3d7083093.bin new file mode 100644 index 0000000..fde5743 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eeb35b892b9c3aa93494e3d3d7083093.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eecab27713f21cfe7a3ccea82c3240d8.bin b/HoloBot/Library/ShaderCache/e/eecab27713f21cfe7a3ccea82c3240d8.bin new file mode 100644 index 0000000..9af9400 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eecab27713f21cfe7a3ccea82c3240d8.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eee371906af41f5c42760bad7eb2a861.bin b/HoloBot/Library/ShaderCache/e/eee371906af41f5c42760bad7eb2a861.bin new file mode 100644 index 0000000..44aaaa2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eee371906af41f5c42760bad7eb2a861.bin differ diff --git a/HoloBot/Library/ShaderCache/e/eef9709c6bf2debc95eccbbc7d49d9b5.bin b/HoloBot/Library/ShaderCache/e/eef9709c6bf2debc95eccbbc7d49d9b5.bin new file mode 100644 index 0000000..69f2119 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/eef9709c6bf2debc95eccbbc7d49d9b5.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ef0f6bafc6e70db4d85042efddecf672.bin b/HoloBot/Library/ShaderCache/e/ef0f6bafc6e70db4d85042efddecf672.bin new file mode 100644 index 0000000..2e65225 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ef0f6bafc6e70db4d85042efddecf672.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ef432d6fabba8813025a155d85182e57.bin b/HoloBot/Library/ShaderCache/e/ef432d6fabba8813025a155d85182e57.bin new file mode 100644 index 0000000..284a1b5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ef432d6fabba8813025a155d85182e57.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ef540a86ac7b8a11e21c22c9fb10ee44.bin b/HoloBot/Library/ShaderCache/e/ef540a86ac7b8a11e21c22c9fb10ee44.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ef540a86ac7b8a11e21c22c9fb10ee44.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ef5514cba841978c98cd5789c5ff4790.bin b/HoloBot/Library/ShaderCache/e/ef5514cba841978c98cd5789c5ff4790.bin new file mode 100644 index 0000000..065cd4e Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ef5514cba841978c98cd5789c5ff4790.bin differ diff --git a/HoloBot/Library/ShaderCache/e/ef9d92ffc16420e4cf96652dc2e73664.bin b/HoloBot/Library/ShaderCache/e/ef9d92ffc16420e4cf96652dc2e73664.bin new file mode 100644 index 0000000..9d7f256 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/ef9d92ffc16420e4cf96652dc2e73664.bin differ diff --git a/HoloBot/Library/ShaderCache/e/efc0e88b6f539bdf311b37650357d3ab.bin b/HoloBot/Library/ShaderCache/e/efc0e88b6f539bdf311b37650357d3ab.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/e/efc0e88b6f539bdf311b37650357d3ab.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f00c0548eba07e55dfa1e10bc62679bd.bin b/HoloBot/Library/ShaderCache/f/f00c0548eba07e55dfa1e10bc62679bd.bin new file mode 100644 index 0000000..fd381e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f00c0548eba07e55dfa1e10bc62679bd.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f00ef495d5c23b325d52ec89ea5c37e0.bin b/HoloBot/Library/ShaderCache/f/f00ef495d5c23b325d52ec89ea5c37e0.bin new file mode 100644 index 0000000..954c235 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f00ef495d5c23b325d52ec89ea5c37e0.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f00f210f7cf84405f12d72a8900705a8.bin b/HoloBot/Library/ShaderCache/f/f00f210f7cf84405f12d72a8900705a8.bin new file mode 100644 index 0000000..1dc4624 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f00f210f7cf84405f12d72a8900705a8.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f023e86cfa91975af529a681e0a2dfad.bin b/HoloBot/Library/ShaderCache/f/f023e86cfa91975af529a681e0a2dfad.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f023e86cfa91975af529a681e0a2dfad.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin b/HoloBot/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f0b07722d4343f05b645c8fb83dcf58f.bin b/HoloBot/Library/ShaderCache/f/f0b07722d4343f05b645c8fb83dcf58f.bin new file mode 100644 index 0000000..e44e7f8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f0b07722d4343f05b645c8fb83dcf58f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f0bfd37e3b26a07f5d720da713160a8f.bin b/HoloBot/Library/ShaderCache/f/f0bfd37e3b26a07f5d720da713160a8f.bin new file mode 100644 index 0000000..d8cd855 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f0bfd37e3b26a07f5d720da713160a8f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f0d685ef9bcca9f9fca2aa12ff980093.bin b/HoloBot/Library/ShaderCache/f/f0d685ef9bcca9f9fca2aa12ff980093.bin new file mode 100644 index 0000000..de41a04 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f0d685ef9bcca9f9fca2aa12ff980093.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f112a4330a7745ad0333cd795133aabb.bin b/HoloBot/Library/ShaderCache/f/f112a4330a7745ad0333cd795133aabb.bin new file mode 100644 index 0000000..94f16e8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f112a4330a7745ad0333cd795133aabb.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f15a4d0d751c1a995960f52f84af658c.bin b/HoloBot/Library/ShaderCache/f/f15a4d0d751c1a995960f52f84af658c.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f15a4d0d751c1a995960f52f84af658c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f16edd705f8c6632e1ef813fd104195c.bin b/HoloBot/Library/ShaderCache/f/f16edd705f8c6632e1ef813fd104195c.bin new file mode 100644 index 0000000..759974b Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f16edd705f8c6632e1ef813fd104195c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f17a37eed83139454b86654994b6867c.bin b/HoloBot/Library/ShaderCache/f/f17a37eed83139454b86654994b6867c.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f17a37eed83139454b86654994b6867c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f199ef337aac57530249d5e885ebf787.bin b/HoloBot/Library/ShaderCache/f/f199ef337aac57530249d5e885ebf787.bin new file mode 100644 index 0000000..5fbe3b4 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f199ef337aac57530249d5e885ebf787.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f1d4f330b2048b99b63e1a587b35bc5a.bin b/HoloBot/Library/ShaderCache/f/f1d4f330b2048b99b63e1a587b35bc5a.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f1d4f330b2048b99b63e1a587b35bc5a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f1d8e63c62fd57f365f02f868c4f506f.bin b/HoloBot/Library/ShaderCache/f/f1d8e63c62fd57f365f02f868c4f506f.bin new file mode 100644 index 0000000..093a62e Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f1d8e63c62fd57f365f02f868c4f506f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f1e4404e5cdce0347e5785edd2b9abcb.bin b/HoloBot/Library/ShaderCache/f/f1e4404e5cdce0347e5785edd2b9abcb.bin new file mode 100644 index 0000000..32ba667 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f1e4404e5cdce0347e5785edd2b9abcb.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f2362b54bf488817ae231889bc087e0c.bin b/HoloBot/Library/ShaderCache/f/f2362b54bf488817ae231889bc087e0c.bin new file mode 100644 index 0000000..2bf12f0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f2362b54bf488817ae231889bc087e0c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f242ae0cbb8eaf2860e6372c95f78c17.bin b/HoloBot/Library/ShaderCache/f/f242ae0cbb8eaf2860e6372c95f78c17.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f242ae0cbb8eaf2860e6372c95f78c17.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f244a4e66653b4e22864ed71a5ba1fb3.bin b/HoloBot/Library/ShaderCache/f/f244a4e66653b4e22864ed71a5ba1fb3.bin new file mode 100644 index 0000000..80a510b Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f244a4e66653b4e22864ed71a5ba1fb3.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f27b392599a88d5d38e4e7fda75ed212.bin b/HoloBot/Library/ShaderCache/f/f27b392599a88d5d38e4e7fda75ed212.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f27b392599a88d5d38e4e7fda75ed212.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f288f6c6a9891147cc4da697500a5f90.bin b/HoloBot/Library/ShaderCache/f/f288f6c6a9891147cc4da697500a5f90.bin new file mode 100644 index 0000000..a660f5c Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f288f6c6a9891147cc4da697500a5f90.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f29f6b20df221406a484615164b90a0a.bin b/HoloBot/Library/ShaderCache/f/f29f6b20df221406a484615164b90a0a.bin new file mode 100644 index 0000000..892bb23 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f29f6b20df221406a484615164b90a0a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f2e4cd0213bffb09ea20d1856926bc93.bin b/HoloBot/Library/ShaderCache/f/f2e4cd0213bffb09ea20d1856926bc93.bin new file mode 100644 index 0000000..6354ec1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f2e4cd0213bffb09ea20d1856926bc93.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f2ff7659ea55b2030028aa787caf1159.bin b/HoloBot/Library/ShaderCache/f/f2ff7659ea55b2030028aa787caf1159.bin new file mode 100644 index 0000000..6d43c7d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f2ff7659ea55b2030028aa787caf1159.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f301061c0a01b5ec89fb0a8d54b6dc75.bin b/HoloBot/Library/ShaderCache/f/f301061c0a01b5ec89fb0a8d54b6dc75.bin new file mode 100644 index 0000000..aef713d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f301061c0a01b5ec89fb0a8d54b6dc75.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f306083ae520c5a59196fddbf1d51119.bin b/HoloBot/Library/ShaderCache/f/f306083ae520c5a59196fddbf1d51119.bin new file mode 100644 index 0000000..eaa7950 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f306083ae520c5a59196fddbf1d51119.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f30b3d123a92c1db70d0f50ea2d132ff.bin b/HoloBot/Library/ShaderCache/f/f30b3d123a92c1db70d0f50ea2d132ff.bin new file mode 100644 index 0000000..f617f52 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f30b3d123a92c1db70d0f50ea2d132ff.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f3213153993bede5573509cb4245bf46.bin b/HoloBot/Library/ShaderCache/f/f3213153993bede5573509cb4245bf46.bin new file mode 100644 index 0000000..3a836c1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f3213153993bede5573509cb4245bf46.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f340f591222b217cd62b4650daa4b9f2.bin b/HoloBot/Library/ShaderCache/f/f340f591222b217cd62b4650daa4b9f2.bin new file mode 100644 index 0000000..552d2cc Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f340f591222b217cd62b4650daa4b9f2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f34f793d1921d86e4ef4892d28e9dcdb.bin b/HoloBot/Library/ShaderCache/f/f34f793d1921d86e4ef4892d28e9dcdb.bin new file mode 100644 index 0000000..a6e4112 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f34f793d1921d86e4ef4892d28e9dcdb.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f34f9950b6f1e81d91bbd065f10a9327.bin b/HoloBot/Library/ShaderCache/f/f34f9950b6f1e81d91bbd065f10a9327.bin new file mode 100644 index 0000000..4d807e2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f34f9950b6f1e81d91bbd065f10a9327.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f356c9f189297354340a3e6a9d36b5de.bin b/HoloBot/Library/ShaderCache/f/f356c9f189297354340a3e6a9d36b5de.bin new file mode 100644 index 0000000..106a701 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f356c9f189297354340a3e6a9d36b5de.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f393af64c2bbb0c13f6ecb3ab942bccd.bin b/HoloBot/Library/ShaderCache/f/f393af64c2bbb0c13f6ecb3ab942bccd.bin new file mode 100644 index 0000000..7edc3cd Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f393af64c2bbb0c13f6ecb3ab942bccd.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f3aa6646d20d3cf3fc6cca9eab656f17.bin b/HoloBot/Library/ShaderCache/f/f3aa6646d20d3cf3fc6cca9eab656f17.bin new file mode 100644 index 0000000..c19ec2e Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f3aa6646d20d3cf3fc6cca9eab656f17.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f3be653039ba7fafd64a221300c0f4e2.bin b/HoloBot/Library/ShaderCache/f/f3be653039ba7fafd64a221300c0f4e2.bin new file mode 100644 index 0000000..7a18125 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f3be653039ba7fafd64a221300c0f4e2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f3c90f949aa1cc1ea11cd7bb15cef927.bin b/HoloBot/Library/ShaderCache/f/f3c90f949aa1cc1ea11cd7bb15cef927.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f3c90f949aa1cc1ea11cd7bb15cef927.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f3e4906671721d0e081ac10556e0e763.bin b/HoloBot/Library/ShaderCache/f/f3e4906671721d0e081ac10556e0e763.bin new file mode 100644 index 0000000..6354ec1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f3e4906671721d0e081ac10556e0e763.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f409069defcb4e88add36be3070a80f0.bin b/HoloBot/Library/ShaderCache/f/f409069defcb4e88add36be3070a80f0.bin new file mode 100644 index 0000000..27e17f2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f409069defcb4e88add36be3070a80f0.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f41389807b87775dad02669f8ee05e85.bin b/HoloBot/Library/ShaderCache/f/f41389807b87775dad02669f8ee05e85.bin new file mode 100644 index 0000000..96a09e7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f41389807b87775dad02669f8ee05e85.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f44599d964bbdddf5d1b189e7f6202bc.bin b/HoloBot/Library/ShaderCache/f/f44599d964bbdddf5d1b189e7f6202bc.bin new file mode 100644 index 0000000..9485001 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f44599d964bbdddf5d1b189e7f6202bc.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f446b1fa6e1bd7b58b330f2e822344ff.bin b/HoloBot/Library/ShaderCache/f/f446b1fa6e1bd7b58b330f2e822344ff.bin new file mode 100644 index 0000000..d6717a9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f446b1fa6e1bd7b58b330f2e822344ff.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f44920e815587b1f971fdce0a8e64e00.bin b/HoloBot/Library/ShaderCache/f/f44920e815587b1f971fdce0a8e64e00.bin new file mode 100644 index 0000000..918be03 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f44920e815587b1f971fdce0a8e64e00.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f45c07d10132d0511e9cecacaa54620d.bin b/HoloBot/Library/ShaderCache/f/f45c07d10132d0511e9cecacaa54620d.bin new file mode 100644 index 0000000..9ffc509 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f45c07d10132d0511e9cecacaa54620d.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f46116a0ffe1c8798cd6af2911036578.bin b/HoloBot/Library/ShaderCache/f/f46116a0ffe1c8798cd6af2911036578.bin new file mode 100644 index 0000000..de8c9ab Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f46116a0ffe1c8798cd6af2911036578.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f46db221eff4b2ef0508ccef4b9b8127.bin b/HoloBot/Library/ShaderCache/f/f46db221eff4b2ef0508ccef4b9b8127.bin new file mode 100644 index 0000000..26eb063 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f46db221eff4b2ef0508ccef4b9b8127.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f4995d55c61676e7468efff41a9b1b19.bin b/HoloBot/Library/ShaderCache/f/f4995d55c61676e7468efff41a9b1b19.bin new file mode 100644 index 0000000..b52a35b Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f4995d55c61676e7468efff41a9b1b19.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f4f07b93596522c4543a2d27650acbce.bin b/HoloBot/Library/ShaderCache/f/f4f07b93596522c4543a2d27650acbce.bin new file mode 100644 index 0000000..59a0d9c Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f4f07b93596522c4543a2d27650acbce.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f4f3e4cbfe89310a62d883d740cee971.bin b/HoloBot/Library/ShaderCache/f/f4f3e4cbfe89310a62d883d740cee971.bin new file mode 100644 index 0000000..ae80888 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f4f3e4cbfe89310a62d883d740cee971.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f4fa153db2ef2679c7a234c5be3812d3.bin b/HoloBot/Library/ShaderCache/f/f4fa153db2ef2679c7a234c5be3812d3.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f4fa153db2ef2679c7a234c5be3812d3.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f5046d171ada550f0dff4316b869c2b2.bin b/HoloBot/Library/ShaderCache/f/f5046d171ada550f0dff4316b869c2b2.bin new file mode 100644 index 0000000..2b38035 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f5046d171ada550f0dff4316b869c2b2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f585a1e0a028265815d2db270c465ca3.bin b/HoloBot/Library/ShaderCache/f/f585a1e0a028265815d2db270c465ca3.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f585a1e0a028265815d2db270c465ca3.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f5a6e6c66dc318a30733c693b30160f7.bin b/HoloBot/Library/ShaderCache/f/f5a6e6c66dc318a30733c693b30160f7.bin new file mode 100644 index 0000000..055a41c Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f5a6e6c66dc318a30733c693b30160f7.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f5b2e74e45f45fe227c8e912d42d04dd.bin b/HoloBot/Library/ShaderCache/f/f5b2e74e45f45fe227c8e912d42d04dd.bin new file mode 100644 index 0000000..8be8d8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f5b2e74e45f45fe227c8e912d42d04dd.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f5d1672e32ea124c462abda276fd97a2.bin b/HoloBot/Library/ShaderCache/f/f5d1672e32ea124c462abda276fd97a2.bin new file mode 100644 index 0000000..947cd2f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f5d1672e32ea124c462abda276fd97a2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f5db8c470768568c03be69ac29747a39.bin b/HoloBot/Library/ShaderCache/f/f5db8c470768568c03be69ac29747a39.bin new file mode 100644 index 0000000..49f0348 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f5db8c470768568c03be69ac29747a39.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f618c2a1dc7287d3ffcd92c9ca84f5b6.bin b/HoloBot/Library/ShaderCache/f/f618c2a1dc7287d3ffcd92c9ca84f5b6.bin new file mode 100644 index 0000000..ba288ab Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f618c2a1dc7287d3ffcd92c9ca84f5b6.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f64745efaffaa9923a0c4588fa346b52.bin b/HoloBot/Library/ShaderCache/f/f64745efaffaa9923a0c4588fa346b52.bin new file mode 100644 index 0000000..8a2794b Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f64745efaffaa9923a0c4588fa346b52.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f6ac5628417a68930f13f7df64c3539a.bin b/HoloBot/Library/ShaderCache/f/f6ac5628417a68930f13f7df64c3539a.bin new file mode 100644 index 0000000..4acdccb Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f6ac5628417a68930f13f7df64c3539a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f6bfafe1639345e226faa59a2b4c9999.bin b/HoloBot/Library/ShaderCache/f/f6bfafe1639345e226faa59a2b4c9999.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f6bfafe1639345e226faa59a2b4c9999.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f6dc195c054f721884a0450c976d94cb.bin b/HoloBot/Library/ShaderCache/f/f6dc195c054f721884a0450c976d94cb.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f6dc195c054f721884a0450c976d94cb.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f74218410e07000f428ac168a53a8c11.bin b/HoloBot/Library/ShaderCache/f/f74218410e07000f428ac168a53a8c11.bin new file mode 100644 index 0000000..14ac7b7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f74218410e07000f428ac168a53a8c11.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f763897c4ce9929e715ecab676e0e8fc.bin b/HoloBot/Library/ShaderCache/f/f763897c4ce9929e715ecab676e0e8fc.bin new file mode 100644 index 0000000..46a8cf0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f763897c4ce9929e715ecab676e0e8fc.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7880f4e0aa1a2d64a8cdf06c66ca65c.bin b/HoloBot/Library/ShaderCache/f/f7880f4e0aa1a2d64a8cdf06c66ca65c.bin new file mode 100644 index 0000000..4096f1c Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7880f4e0aa1a2d64a8cdf06c66ca65c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7aba2df15f82c611d3e7cf6413e9ca5.bin b/HoloBot/Library/ShaderCache/f/f7aba2df15f82c611d3e7cf6413e9ca5.bin new file mode 100644 index 0000000..240aa35 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7aba2df15f82c611d3e7cf6413e9ca5.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7b6739ed5ffd01f70f36e9df82742ff.bin b/HoloBot/Library/ShaderCache/f/f7b6739ed5ffd01f70f36e9df82742ff.bin new file mode 100644 index 0000000..bfec024 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7b6739ed5ffd01f70f36e9df82742ff.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7cb3172c5d2082bbb08d7e5edbb6b74.bin b/HoloBot/Library/ShaderCache/f/f7cb3172c5d2082bbb08d7e5edbb6b74.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7cb3172c5d2082bbb08d7e5edbb6b74.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7d7243fd45f76b044d9ddca5b4dcaf5.bin b/HoloBot/Library/ShaderCache/f/f7d7243fd45f76b044d9ddca5b4dcaf5.bin new file mode 100644 index 0000000..a030121 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7d7243fd45f76b044d9ddca5b4dcaf5.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7dc6c7171d2cc4ad6a1cc34450c87f7.bin b/HoloBot/Library/ShaderCache/f/f7dc6c7171d2cc4ad6a1cc34450c87f7.bin new file mode 100644 index 0000000..6329d50 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7dc6c7171d2cc4ad6a1cc34450c87f7.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f7f57ad7389864ced5b06e025de78e45.bin b/HoloBot/Library/ShaderCache/f/f7f57ad7389864ced5b06e025de78e45.bin new file mode 100644 index 0000000..bfa056a Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f7f57ad7389864ced5b06e025de78e45.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f808b25049b7326df5ebc4f2f66a1eff.bin b/HoloBot/Library/ShaderCache/f/f808b25049b7326df5ebc4f2f66a1eff.bin new file mode 100644 index 0000000..1d6e08f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f808b25049b7326df5ebc4f2f66a1eff.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f82bf6f31d5e2f93d4f702d685ed3f7a.bin b/HoloBot/Library/ShaderCache/f/f82bf6f31d5e2f93d4f702d685ed3f7a.bin new file mode 100644 index 0000000..ec4c169 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f82bf6f31d5e2f93d4f702d685ed3f7a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f8368a87432dbf420fd6bb52ea95e15b.bin b/HoloBot/Library/ShaderCache/f/f8368a87432dbf420fd6bb52ea95e15b.bin new file mode 100644 index 0000000..6493b60 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f8368a87432dbf420fd6bb52ea95e15b.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f851e188c7b14d6310ed07ffb47c9ec1.bin b/HoloBot/Library/ShaderCache/f/f851e188c7b14d6310ed07ffb47c9ec1.bin new file mode 100644 index 0000000..eaa7c2d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f851e188c7b14d6310ed07ffb47c9ec1.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f8615ba514818b0fb3fef6b409fa4be7.bin b/HoloBot/Library/ShaderCache/f/f8615ba514818b0fb3fef6b409fa4be7.bin new file mode 100644 index 0000000..9253148 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f8615ba514818b0fb3fef6b409fa4be7.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f8672c1383b4e7be064cca7726c454c1.bin b/HoloBot/Library/ShaderCache/f/f8672c1383b4e7be064cca7726c454c1.bin new file mode 100644 index 0000000..d27c392 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f8672c1383b4e7be064cca7726c454c1.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f86c212d8b380c1b376c0349866a9021.bin b/HoloBot/Library/ShaderCache/f/f86c212d8b380c1b376c0349866a9021.bin new file mode 100644 index 0000000..1f6a787 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f86c212d8b380c1b376c0349866a9021.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f87cfda1718a7076b1411baccb711867.bin b/HoloBot/Library/ShaderCache/f/f87cfda1718a7076b1411baccb711867.bin new file mode 100644 index 0000000..b576350 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f87cfda1718a7076b1411baccb711867.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f885dd214da2f0480d6ecc9169d8e478.bin b/HoloBot/Library/ShaderCache/f/f885dd214da2f0480d6ecc9169d8e478.bin new file mode 100644 index 0000000..1c6e2ef Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f885dd214da2f0480d6ecc9169d8e478.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f89a59376c46fee93d8ea7e247c7590c.bin b/HoloBot/Library/ShaderCache/f/f89a59376c46fee93d8ea7e247c7590c.bin new file mode 100644 index 0000000..2245eaa Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f89a59376c46fee93d8ea7e247c7590c.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f8b5bfbc59aec091e2c259f37a573050.bin b/HoloBot/Library/ShaderCache/f/f8b5bfbc59aec091e2c259f37a573050.bin new file mode 100644 index 0000000..4a850ca Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f8b5bfbc59aec091e2c259f37a573050.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f8fef711b3d1d185971d1b1923b7cc52.bin b/HoloBot/Library/ShaderCache/f/f8fef711b3d1d185971d1b1923b7cc52.bin new file mode 100644 index 0000000..8d9b41f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f8fef711b3d1d185971d1b1923b7cc52.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f91788f13c1a0c4d8d088995d4f613de.bin b/HoloBot/Library/ShaderCache/f/f91788f13c1a0c4d8d088995d4f613de.bin new file mode 100644 index 0000000..b947028 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f91788f13c1a0c4d8d088995d4f613de.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f928de4d34b3b8205aeb569f6f692a04.bin b/HoloBot/Library/ShaderCache/f/f928de4d34b3b8205aeb569f6f692a04.bin new file mode 100644 index 0000000..7b99fc7 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f928de4d34b3b8205aeb569f6f692a04.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f92b283ba19fe24336d70ad863c72060.bin b/HoloBot/Library/ShaderCache/f/f92b283ba19fe24336d70ad863c72060.bin new file mode 100644 index 0000000..db391ac Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f92b283ba19fe24336d70ad863c72060.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f94d10e8e04271fa04747732346a3dd2.bin b/HoloBot/Library/ShaderCache/f/f94d10e8e04271fa04747732346a3dd2.bin new file mode 100644 index 0000000..dbcf32d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f94d10e8e04271fa04747732346a3dd2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f94fbeb7c148fbe4bb4fded5b073646b.bin b/HoloBot/Library/ShaderCache/f/f94fbeb7c148fbe4bb4fded5b073646b.bin new file mode 100644 index 0000000..64844ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f94fbeb7c148fbe4bb4fded5b073646b.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f95030ec3052588fa3a63f4579d7582f.bin b/HoloBot/Library/ShaderCache/f/f95030ec3052588fa3a63f4579d7582f.bin new file mode 100644 index 0000000..e2841e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f95030ec3052588fa3a63f4579d7582f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f974ff2a938ba0a83293e82b53dcb875.bin b/HoloBot/Library/ShaderCache/f/f974ff2a938ba0a83293e82b53dcb875.bin new file mode 100644 index 0000000..7f3b649 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f974ff2a938ba0a83293e82b53dcb875.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f97eb4313232c753d44fd8f3889d462b.bin b/HoloBot/Library/ShaderCache/f/f97eb4313232c753d44fd8f3889d462b.bin new file mode 100644 index 0000000..6ac3933 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f97eb4313232c753d44fd8f3889d462b.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f97f8dfcd6979d9d831ed9f409575d3e.bin b/HoloBot/Library/ShaderCache/f/f97f8dfcd6979d9d831ed9f409575d3e.bin new file mode 100644 index 0000000..5fb62e0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f97f8dfcd6979d9d831ed9f409575d3e.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9867aa696b7e43602c9abe68ec295ae.bin b/HoloBot/Library/ShaderCache/f/f9867aa696b7e43602c9abe68ec295ae.bin new file mode 100644 index 0000000..06d5709 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9867aa696b7e43602c9abe68ec295ae.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f98de006c90707ac9132ba27882b2a2f.bin b/HoloBot/Library/ShaderCache/f/f98de006c90707ac9132ba27882b2a2f.bin new file mode 100644 index 0000000..612e396 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f98de006c90707ac9132ba27882b2a2f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9aaa6001b1cfaafa0a6acd45cfd90db.bin b/HoloBot/Library/ShaderCache/f/f9aaa6001b1cfaafa0a6acd45cfd90db.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9aaa6001b1cfaafa0a6acd45cfd90db.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9c96675f267862cbbf7138eb3ace1a0.bin b/HoloBot/Library/ShaderCache/f/f9c96675f267862cbbf7138eb3ace1a0.bin new file mode 100644 index 0000000..79c476b Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9c96675f267862cbbf7138eb3ace1a0.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9cfe6b2c6d8a388815cfa33843aa4a5.bin b/HoloBot/Library/ShaderCache/f/f9cfe6b2c6d8a388815cfa33843aa4a5.bin new file mode 100644 index 0000000..2beaf08 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9cfe6b2c6d8a388815cfa33843aa4a5.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9d61c1c47579c63d41b8369d6c76a60.bin b/HoloBot/Library/ShaderCache/f/f9d61c1c47579c63d41b8369d6c76a60.bin new file mode 100644 index 0000000..278421e Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9d61c1c47579c63d41b8369d6c76a60.bin differ diff --git a/HoloBot/Library/ShaderCache/f/f9ee940345eb13021b46b720f5750f35.bin b/HoloBot/Library/ShaderCache/f/f9ee940345eb13021b46b720f5750f35.bin new file mode 100644 index 0000000..e9e8fe8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/f9ee940345eb13021b46b720f5750f35.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fa2c615833aaef56182d8fb5b2453faa.bin b/HoloBot/Library/ShaderCache/f/fa2c615833aaef56182d8fb5b2453faa.bin new file mode 100644 index 0000000..358de8f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fa2c615833aaef56182d8fb5b2453faa.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fa46642f588dc2161eb83e08473bee38.bin b/HoloBot/Library/ShaderCache/f/fa46642f588dc2161eb83e08473bee38.bin new file mode 100644 index 0000000..569bd14 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fa46642f588dc2161eb83e08473bee38.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fa501536d9545978fa17aa64aa9bee58.bin b/HoloBot/Library/ShaderCache/f/fa501536d9545978fa17aa64aa9bee58.bin new file mode 100644 index 0000000..07ee560 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fa501536d9545978fa17aa64aa9bee58.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fa84404a19f8ef31b64de76bbf77541b.bin b/HoloBot/Library/ShaderCache/f/fa84404a19f8ef31b64de76bbf77541b.bin new file mode 100644 index 0000000..3bc8210 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fa84404a19f8ef31b64de76bbf77541b.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fa888da55e3de3a1e5feb58ce8ec5b21.bin b/HoloBot/Library/ShaderCache/f/fa888da55e3de3a1e5feb58ce8ec5b21.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fa888da55e3de3a1e5feb58ce8ec5b21.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fab2ffd748574dcc3ae1e36eac098371.bin b/HoloBot/Library/ShaderCache/f/fab2ffd748574dcc3ae1e36eac098371.bin new file mode 100644 index 0000000..4ba935e Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fab2ffd748574dcc3ae1e36eac098371.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fac12a06df53a9ea5c16bb1210b76d77.bin b/HoloBot/Library/ShaderCache/f/fac12a06df53a9ea5c16bb1210b76d77.bin new file mode 100644 index 0000000..01060b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fac12a06df53a9ea5c16bb1210b76d77.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fad5a80bae743bccf530fb3c3a9ee9e0.bin b/HoloBot/Library/ShaderCache/f/fad5a80bae743bccf530fb3c3a9ee9e0.bin new file mode 100644 index 0000000..87f8dec Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fad5a80bae743bccf530fb3c3a9ee9e0.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fae4174bccfee7d438caf255cc9e7b33.bin b/HoloBot/Library/ShaderCache/f/fae4174bccfee7d438caf255cc9e7b33.bin new file mode 100644 index 0000000..84480c0 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fae4174bccfee7d438caf255cc9e7b33.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb1144c9e6129e8ff4240e5740e5bbfd.bin b/HoloBot/Library/ShaderCache/f/fb1144c9e6129e8ff4240e5740e5bbfd.bin new file mode 100644 index 0000000..e8fa1cb Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb1144c9e6129e8ff4240e5740e5bbfd.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb1b8835d052c9276f41e467cbefd192.bin b/HoloBot/Library/ShaderCache/f/fb1b8835d052c9276f41e467cbefd192.bin new file mode 100644 index 0000000..3161f09 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb1b8835d052c9276f41e467cbefd192.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb3b69438464fe01d16c99aa0477a51a.bin b/HoloBot/Library/ShaderCache/f/fb3b69438464fe01d16c99aa0477a51a.bin new file mode 100644 index 0000000..4202766 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb3b69438464fe01d16c99aa0477a51a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb646f6d74260dc3616d3bb83912649d.bin b/HoloBot/Library/ShaderCache/f/fb646f6d74260dc3616d3bb83912649d.bin new file mode 100644 index 0000000..f9905b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb646f6d74260dc3616d3bb83912649d.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb70b9ec0e00a1488b5cf1e63f83202f.bin b/HoloBot/Library/ShaderCache/f/fb70b9ec0e00a1488b5cf1e63f83202f.bin new file mode 100644 index 0000000..719fafc Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb70b9ec0e00a1488b5cf1e63f83202f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb78535a2748c863f5eb705f1dafd178.bin b/HoloBot/Library/ShaderCache/f/fb78535a2748c863f5eb705f1dafd178.bin new file mode 100644 index 0000000..72cb052 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb78535a2748c863f5eb705f1dafd178.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fb93a92cb65bed88ae23c9c640db5375.bin b/HoloBot/Library/ShaderCache/f/fb93a92cb65bed88ae23c9c640db5375.bin new file mode 100644 index 0000000..2a6a887 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fb93a92cb65bed88ae23c9c640db5375.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fbc75e88263d77de22c859e84f08ebaf.bin b/HoloBot/Library/ShaderCache/f/fbc75e88263d77de22c859e84f08ebaf.bin new file mode 100644 index 0000000..9a6cebc Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fbc75e88263d77de22c859e84f08ebaf.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fbdbce2d35844a6853856e0a4b01d9e1.bin b/HoloBot/Library/ShaderCache/f/fbdbce2d35844a6853856e0a4b01d9e1.bin new file mode 100644 index 0000000..1d9def1 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fbdbce2d35844a6853856e0a4b01d9e1.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fbf4911af10ed6456ee082894ca910f3.bin b/HoloBot/Library/ShaderCache/f/fbf4911af10ed6456ee082894ca910f3.bin new file mode 100644 index 0000000..03c461d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fbf4911af10ed6456ee082894ca910f3.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc368a21ef4eb0715e1a6990ae134f04.bin b/HoloBot/Library/ShaderCache/f/fc368a21ef4eb0715e1a6990ae134f04.bin new file mode 100644 index 0000000..3f683b8 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc368a21ef4eb0715e1a6990ae134f04.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc5f73dfd2d5d60aad5683280c8682fc.bin b/HoloBot/Library/ShaderCache/f/fc5f73dfd2d5d60aad5683280c8682fc.bin new file mode 100644 index 0000000..814eb1a Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc5f73dfd2d5d60aad5683280c8682fc.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc68d4790ce585d6aec33312898d486a.bin b/HoloBot/Library/ShaderCache/f/fc68d4790ce585d6aec33312898d486a.bin new file mode 100644 index 0000000..62a3b40 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc68d4790ce585d6aec33312898d486a.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc6ecdc78c4b33974d4b8a506b529a79.bin b/HoloBot/Library/ShaderCache/f/fc6ecdc78c4b33974d4b8a506b529a79.bin new file mode 100644 index 0000000..f2d02ec Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc6ecdc78c4b33974d4b8a506b529a79.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc8ebfce088bc7b1b8aed844ce31f389.bin b/HoloBot/Library/ShaderCache/f/fc8ebfce088bc7b1b8aed844ce31f389.bin new file mode 100644 index 0000000..f3180d2 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc8ebfce088bc7b1b8aed844ce31f389.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fc9ac449595f55fae1b322ce8c97935e.bin b/HoloBot/Library/ShaderCache/f/fc9ac449595f55fae1b322ce8c97935e.bin new file mode 100644 index 0000000..dba348e Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fc9ac449595f55fae1b322ce8c97935e.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fcac19827e233b8cd43a602dde413d26.bin b/HoloBot/Library/ShaderCache/f/fcac19827e233b8cd43a602dde413d26.bin new file mode 100644 index 0000000..1e94ace Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fcac19827e233b8cd43a602dde413d26.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fccf5e307ab1bd5b34b6a6bececa0364.bin b/HoloBot/Library/ShaderCache/f/fccf5e307ab1bd5b34b6a6bececa0364.bin new file mode 100644 index 0000000..c8577c5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fccf5e307ab1bd5b34b6a6bececa0364.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fce9e3d588602a9d1a7f48ccbc021b68.bin b/HoloBot/Library/ShaderCache/f/fce9e3d588602a9d1a7f48ccbc021b68.bin new file mode 100644 index 0000000..7dea44f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fce9e3d588602a9d1a7f48ccbc021b68.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fd228218dc0766758de71d300b9fe390.bin b/HoloBot/Library/ShaderCache/f/fd228218dc0766758de71d300b9fe390.bin new file mode 100644 index 0000000..eda0ed6 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fd228218dc0766758de71d300b9fe390.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fd3f2cbdfda1f1839f8308db261035bd.bin b/HoloBot/Library/ShaderCache/f/fd3f2cbdfda1f1839f8308db261035bd.bin new file mode 100644 index 0000000..b81595f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fd3f2cbdfda1f1839f8308db261035bd.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fd5a0d95b410c4c5b89433e38333b8d8.bin b/HoloBot/Library/ShaderCache/f/fd5a0d95b410c4c5b89433e38333b8d8.bin new file mode 100644 index 0000000..6e46021 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fd5a0d95b410c4c5b89433e38333b8d8.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fd9278099a9c9e477b64a2326b34b8e1.bin b/HoloBot/Library/ShaderCache/f/fd9278099a9c9e477b64a2326b34b8e1.bin new file mode 100644 index 0000000..957bb73 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fd9278099a9c9e477b64a2326b34b8e1.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fdabd925bafc120919bbe08bac86ddc2.bin b/HoloBot/Library/ShaderCache/f/fdabd925bafc120919bbe08bac86ddc2.bin new file mode 100644 index 0000000..27cb558 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fdabd925bafc120919bbe08bac86ddc2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fdac316ab6cba6b5a4410f87fef204d9.bin b/HoloBot/Library/ShaderCache/f/fdac316ab6cba6b5a4410f87fef204d9.bin new file mode 100644 index 0000000..710d6e9 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fdac316ab6cba6b5a4410f87fef204d9.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fde6c90dc78fa41cd9abded831b843df.bin b/HoloBot/Library/ShaderCache/f/fde6c90dc78fa41cd9abded831b843df.bin new file mode 100644 index 0000000..53110ce Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fde6c90dc78fa41cd9abded831b843df.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe0d43c758e81321d8095c5f1028adbc.bin b/HoloBot/Library/ShaderCache/f/fe0d43c758e81321d8095c5f1028adbc.bin new file mode 100644 index 0000000..249e4f5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe0d43c758e81321d8095c5f1028adbc.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe15650ce5a6436c9d58847030300333.bin b/HoloBot/Library/ShaderCache/f/fe15650ce5a6436c9d58847030300333.bin new file mode 100644 index 0000000..d31b61d Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe15650ce5a6436c9d58847030300333.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe1df6bdeb33ad49a132caef751b3f51.bin b/HoloBot/Library/ShaderCache/f/fe1df6bdeb33ad49a132caef751b3f51.bin new file mode 100644 index 0000000..11a7877 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe1df6bdeb33ad49a132caef751b3f51.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe282e43f0a04f6d770f4572dae070a2.bin b/HoloBot/Library/ShaderCache/f/fe282e43f0a04f6d770f4572dae070a2.bin new file mode 100644 index 0000000..3b71699 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe282e43f0a04f6d770f4572dae070a2.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe6934d0994a60f4dbfdf27ef30306c0.bin b/HoloBot/Library/ShaderCache/f/fe6934d0994a60f4dbfdf27ef30306c0.bin new file mode 100644 index 0000000..e6e27b3 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe6934d0994a60f4dbfdf27ef30306c0.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe73429ae695af5262535d80eb163d72.bin b/HoloBot/Library/ShaderCache/f/fe73429ae695af5262535d80eb163d72.bin new file mode 100644 index 0000000..a228c77 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe73429ae695af5262535d80eb163d72.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe7d784ae1b1cc12b55b89ae90e1ea19.bin b/HoloBot/Library/ShaderCache/f/fe7d784ae1b1cc12b55b89ae90e1ea19.bin new file mode 100644 index 0000000..5b24465 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe7d784ae1b1cc12b55b89ae90e1ea19.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fe8ea708e2e1eba67eaf99c722192996.bin b/HoloBot/Library/ShaderCache/f/fe8ea708e2e1eba67eaf99c722192996.bin new file mode 100644 index 0000000..08209e5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fe8ea708e2e1eba67eaf99c722192996.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fed135248e6573422477b1ba3107546e.bin b/HoloBot/Library/ShaderCache/f/fed135248e6573422477b1ba3107546e.bin new file mode 100644 index 0000000..1dba7fe Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fed135248e6573422477b1ba3107546e.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff1a36911be30643a9b28343a2fa4047.bin b/HoloBot/Library/ShaderCache/f/ff1a36911be30643a9b28343a2fa4047.bin new file mode 100644 index 0000000..fcab954 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff1a36911be30643a9b28343a2fa4047.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff3b46a436a709afc92d0a27a558cf6b.bin b/HoloBot/Library/ShaderCache/f/ff3b46a436a709afc92d0a27a558cf6b.bin new file mode 100644 index 0000000..987fc83 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff3b46a436a709afc92d0a27a558cf6b.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff4122c50a6cd1951e33aeae290aae8f.bin b/HoloBot/Library/ShaderCache/f/ff4122c50a6cd1951e33aeae290aae8f.bin new file mode 100644 index 0000000..3b4ee51 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff4122c50a6cd1951e33aeae290aae8f.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff635ada9938998789e9aba22424135d.bin b/HoloBot/Library/ShaderCache/f/ff635ada9938998789e9aba22424135d.bin new file mode 100644 index 0000000..b6ecc0f Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff635ada9938998789e9aba22424135d.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff8b8fe56fc3267f48fdfc7216231050.bin b/HoloBot/Library/ShaderCache/f/ff8b8fe56fc3267f48fdfc7216231050.bin new file mode 100644 index 0000000..2e9e55a Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff8b8fe56fc3267f48fdfc7216231050.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ff8c1357b60c55d0fd9ff34557ba6661.bin b/HoloBot/Library/ShaderCache/f/ff8c1357b60c55d0fd9ff34557ba6661.bin new file mode 100644 index 0000000..c01c457 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ff8c1357b60c55d0fd9ff34557ba6661.bin differ diff --git a/HoloBot/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin b/HoloBot/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin new file mode 100644 index 0000000..d6d1f13 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin differ diff --git a/HoloBot/Library/ShaderCache/f/fff11380f3550fab90f823bfb854b238.bin b/HoloBot/Library/ShaderCache/f/fff11380f3550fab90f823bfb854b238.bin new file mode 100644 index 0000000..6d1b0a5 Binary files /dev/null and b/HoloBot/Library/ShaderCache/f/fff11380f3550fab90f823bfb854b238.bin differ diff --git a/HoloBot/Library/UnityAssemblies/Mono.Cecil.dll b/HoloBot/Library/UnityAssemblies/Mono.Cecil.dll new file mode 100644 index 0000000..cb3321e Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/Mono.Cecil.dll differ diff --git a/HoloBot/Library/UnityAssemblies/SyntaxTree.VisualStudio.Unity.Bridge.dll b/HoloBot/Library/UnityAssemblies/SyntaxTree.VisualStudio.Unity.Bridge.dll new file mode 100644 index 0000000..2d3a5b3 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/SyntaxTree.VisualStudio.Unity.Bridge.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.dll new file mode 100644 index 0000000..8239fa9 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.xml new file mode 100644 index 0000000..34a46ff --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.Advertisements.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.Advertisements + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.dll new file mode 100644 index 0000000..e6bcef7 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.xml new file mode 100644 index 0000000..a2c2031 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.Analytics.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.Analytics + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.dll new file mode 100644 index 0000000..9b703ab Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.xml new file mode 100644 index 0000000..1c90fd4 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.EditorTestsRunner.xml @@ -0,0 +1,198 @@ + + + + + UnityEditor.EditorTestsRunner + + + + This class can invoke editor tests runs. + + + + + Execute editor tests run. + + Test runner callback. + Test names to run. + Categories to run. + + + + Execute editor tests run. + + Test runner callback. + Test names to run. + Categories to run. + + + + Run tests in the editor tests runner window. + + Names of the tests to run. + + + + Run tests in the editor tests runner window. + + Names of the tests to run. + + + + Interface for editor tests runner callback. + + + + + Duration of the test in seconds. + + + + + Whether the test was executed. + + + + + Full name of the test (includes namespace). + + + + + Id of the test. + + + + + Whether the test should be ignored (and not executed). + + + + + Whether the test completed successfully. + + + + + Logs from the test run. + + + + + Message from the test. + + + + + Name of the test (without namespace). + + + + + The result. + + + + + Stacktrace from the test run. + + + + + Callback for the editor tests runner. + + + + + The run was finished. + + + + + The run was interrupted by an exception. + + The exception that was raised. + + + + The run has started. + + The name of the suite that is being run. + The number of tests that will be run. + + + + A test has been finished. + + The result of the test. + + + + A test has been started. + + The name of the test. + + + + Result of an editor test run. + + + + + The test was cancelled. + + + + + The test finished with an error. + + + + + The test finished with a failure. + + + + + The test was ignored. + + + + + The test result is inconclusive. + + + + + The test is not runnable. + + + + + The test was skipped. + + + + + The test succeeded. + + + + + Base class for editor tests which have the ability to assert log messages. + + + + + Expect a log message that matches the parameter. + + The expected log message. + + + + Expect a log message that matches the regular expression pattern. + + The expected regex pattern. + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Graphs.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.Graphs.dll new file mode 100644 index 0000000..9d884a9 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.Graphs.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.dll new file mode 100644 index 0000000..74ffc8b Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.xml new file mode 100644 index 0000000..86314a3 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.HoloLens.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.HoloLens + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.dll new file mode 100644 index 0000000..9ba7e18 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.xml new file mode 100644 index 0000000..68ebeb5 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.Networking.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.Networking + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.dll new file mode 100644 index 0000000..2d08549 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.xml new file mode 100644 index 0000000..820fcdb --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.PlaymodeTestsRunner.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.PlaymodeTestsRunner + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.dll new file mode 100644 index 0000000..edaecc8 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.xml new file mode 100644 index 0000000..5f34249 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.TreeEditor.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.TreeEditor + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.UI.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.UI.dll new file mode 100644 index 0000000..0e6e3d1 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.UI.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.UI.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.UI.xml new file mode 100644 index 0000000..5a68024 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.UI.xml @@ -0,0 +1,373 @@ + + + + + UnityEditor.UI + + + + Custom Editor for the EventSystem Component. + + + + + Can this component be previewed in its current state? + + + True if this component can be Previewed in its current state. + + + + + See Editor.OnInspectorGUI. + + + + + Custom preview for Image component. + + Rectangle in which to draw the preview. + Background image. + + + + Does this edit require to be repainted constantly in its current state? + + + + + Custom Editor for the EventTrigger Component. + + + + + Implement specific EventTrigger inspector GUI code here. If you want to simply extend the existing editor call the base OnInspectorGUI () before doing any custom GUI code. + + + + + PropertyDrawer for AnimationTriggers. + + + + + Custom Editor for the AspectRatioFitter component. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the Button Component. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the CanvasScaler component. + + + + + PropertyDrawer for ColorBlock. + + + + + Custom Editor for the ContentSizeFitter Component. + + + + + + See Editor.OnInspectorGUI. + + + + + Custom editor for the Dropdown component. + + + + + See Editor.OnInspectorGUI. + + + + + PropertyDrawer for FontData. + + + + + Initialize the serialized properties for the drawer. + + + + + + Extend this class to write your own graphic editor. + + + + + GUI related to the appearance of the graphic. Color and Material properties appear here. + + + + + GUI for showing a button that sets the size of the RectTransform to the native size for this Graphic. + + + + + See MonoBehaviour.OnDisable. + + + + + Implement specific GraphicEditor inspector GUI code here. If you want to simply extend the existing editor call the base OnInspectorGUI () before doing any custom GUI code. + + + + + GUI related to the Raycasting settings for the graphic. + + + + + Set if the 'Set Native Size' button should be visible for this editor. + + + + + + + Custom Editor for the GridLayout Component. + + + + + See Editor.OnInspectorGUI. + + + + + The Editor for the HorizontalOrVerticalLayoutGroup class. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the Image Component. + + + + + A string cointaining the Image details to be used as a overlay on the component Preview. + + + The Image details. + + + + + Can this component be Previewed in its current state? + + + True if this component can be Previewed in its current state. + + + + + See MonoBehaviour.OnDisable. + + + + + Implement specific ImageEditor inspector GUI code here. If you want to simply extend the existing editor call the base OnInspectorGUI () before doing any custom GUI code. + + + + + Custom preview for Image component. + + Rectangle in which to draw the preview. + Background image. + + + + GUI for showing the Sprite property. + + + + + GUI for showing the image type and associated settings. + + + + + Custom Editor for the InputField Component. + + + + + See: Editor.OnInspectorGUI. + + + + + Editor for the LayoutElement component. + + + + + See: Editor.OnInspectorGUI. + + + + + Custom Editor for the Mask component. + + + + + PropertyDrawer for Navigation. + + + + + Custom editor for RawImage. + + + + + A string cointaining the Image details to be used as a overlay on the component Preview. + + + The RawImage details. + + + + + Can this component be Previewed in its current state? + + + True if this component can be Previewed in its current state. + + + + + Implement specific RawImage inspector GUI code here. If you want to simply extend the existing editor call the base OnInspectorGUI () before doing any custom GUI code. + + + + + Custom preview for Image component. + + Rectangle in which to draw the preview. + Background image. + + + + Custom editor for the RectMask2d component. + + + + + Custom Editor for the Scrollbar Component. + + + + + See: Editor.OnInspectorGUI. + + + + + Editor for the ScrollRect component. + + + + + See MonoBehaviour.OnDisable. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the Selectable Component. + + + + + See MonoBehaviour.OnDisable. + + + + + See Editor.OnInspectorGUI. + + + + + Base class for custom editors that are for components that implement the SelfControllerEditor interface. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the Slider Component. + + + + + See Editor.OnInspectorGUI. + + + + + PropertyDrawer for SpriteState. + + + + + Custom Editor for the Text Component. + + + + + See Editor.OnInspectorGUI. + + + + + Custom Editor for the Toggle Component. + + + + + See Editor.OnInspectorGUI. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.VR.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.VR.dll new file mode 100644 index 0000000..e96f183 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.VR.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.VR.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.VR.xml new file mode 100644 index 0000000..f08d3a5 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.VR.xml @@ -0,0 +1,8 @@ + + + + + UnityEditor.VR + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.WSA.Extensions.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.WSA.Extensions.dll new file mode 100644 index 0000000..0bc6141 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.WSA.Extensions.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.WebGL.Extensions.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.WebGL.Extensions.dll new file mode 100644 index 0000000..1c7728a Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.WebGL.Extensions.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.WindowsStandalone.Extensions.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.WindowsStandalone.Extensions.dll new file mode 100644 index 0000000..a8f758e Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.WindowsStandalone.Extensions.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.dll b/HoloBot/Library/UnityAssemblies/UnityEditor.dll new file mode 100644 index 0000000..8045940 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEditor.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEditor.xml b/HoloBot/Library/UnityAssemblies/UnityEditor.xml new file mode 100644 index 0000000..7909b6e --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEditor.xml @@ -0,0 +1,24511 @@ + + + + + UnityEditor + + + + The behavior in case of unhandled .NET exception. + + + + + Crash in case of unhandled .NET exception (Crash Report will be generated). + + + + + Silent exit in case of unhandled .NET exception (no Crash Report generated). + + + + + Navigation mesh builder interface. + + + + + Returns true if an asynchronous build is still running. + + + + + Build the Navmesh. + + + + + Build the Navmesh Asyncronously. + + + + + Builds the combined navmesh for the contents of multiple scenes. + + Array of paths to scenes that are used for building the navmesh. + + + + Cancel Navmesh construction. + + + + + Clear all Navmeshes. + + + + + Hierarchy sort method to allow for items and their children to be sorted alphabetically. + + + + + Content to visualize the alphabetical sorting method. + + + + + Editor API for the Unity Services editor feature. Normally Analytics is enabled from the Services window, but if writing your own editor extension, this API can be used. + + + + + This Boolean field will cause the Analytics feature in Unity to be enabled if true, or disabled if false. + + + + + Set to true for testing Analytics integration only within the Editor. + + + + + Type of Android build system. + + + + + Export ADT (legacy) project. + + + + + Build APK using Gradle or export Gradle project. + + + + + Build APK using internal build system. + + + + + Gamepad support level for Android TV. + + + + + Requires a gamepad for gameplay. + + + + + Game is fully operational with a D-pad, no gamepad needed. + + + + + Works with a gamepad, but does not require it. + + + + + Preferred application install location. + + + + + Let the OS decide, app doesn't have any preferences. + + + + + Force installation into internal memory. Needed for things like Live Wallpapers. + + + + + Prefer external, if possible. Install to internal otherwise. + + + + + Supported Android SDK versions. + + + + + Android 2.3.3, "Gingerbread", API level 10. + + + + + Android 3.0, "Honeycomb", API level 11. + + + + + Android 3.1, "Honeycomb", API level 12. + + + + + Android 3.2, "Honeycomb", API level 13. + + + + + Android 4.0, "Ice Cream Sandwich", API level 14. + + + + + Android 4.0.3, "Ice Cream Sandwich", API level 15. + + + + + Android 4.1, "Jelly Bean", API level 16. + + + + + Android 4.2, "Jelly Bean", API level 17. + + + + + Android 4.3, "Jelly Bean", API level 18. + + + + + Android 4.4, "KitKat", API level 19. + + + + + Android 5.0, "Lollipop", API level 21. + + + + + Android 5.1, "Lollipop", API level 22. + + + + + Android 2.3.1, "Gingerbread", API level 9. + + + + + Application should show ActivityIndicator when loading. + + + + + Don't Show. + + + + + Inversed Large. + + + + + Inversed Small. + + + + + Large. + + + + + Small. + + + + + Android splash screen scale modes. + + + + + Center. + + + + + Scale to fill. + + + + + Scale to fit. + + + + + Target Android device architecture. + + + + + Intel only. + + + + + ARMv7 only. + + + + + All supported architectures. + + + + + Lerp from 0 - 1. + + + + + Retuns the float value of the tween. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Returns a value between from and to depending on the current value of the bools animation. + + Value to lerp from. + Value to lerp to. + + + + Type specific implementation of BaseAnimValue_1.GetValue. + + + Current value. + + + + + An animated float value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Type specific implementation of BaseAnimValue_1.GetValue. + + + Current Value. + + + + + An animated Quaternion value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Type specific implementation of BaseAnimValue_1.GetValue. + + + Current Value. + + + + + An animated Vector3 value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Constructor. + + Start Value. + + + + + Type specific implementation of BaseAnimValue_1.GetValue. + + + Current Value. + + + + + Abstract base class for Animated Values. + + + + + Is the value currently animating. + + + + + Speed of the tween. + + + + + Target to tween towards. + + + + + Current value of the animation. + + + + + Callback while the value is changing. + + + + + Begin an animation moving from the start value to the target value. + + Target value. + Start value. + + + + Abstract function to be overridden in derived types. Should return the current value of the animated value. + + + Current Value. + + + + + Stop the animation and assign the given value. + + Value to assign. + + + + An AnimationClipCurveData object contains all the information needed to identify a specific curve in an AnimationClip. The curve animates a specific property of a component material attached to a game object animated bone. + + + + + The actual animation curve. + + + + + The path of the game object / bone being animated. + + + + + The name of the property being animated. + + + + + The type of the component / material being animated. + + + + + AnimationMode is used by the AnimationWindow to store properties modified + by the AnimationClip playback. + + + + + The color used to show that a property is currently being animated. + + + + + Initialise the start of the animation clip sampling. + + + + + Finish the sampling of the animation clip. + + + + + Are we currently in AnimationMode? + + + + + Is the specified property currently in animation mode and being animated? + + The object to determine if it contained the animation. + The name of the animation to search for. + + Whether the property search is found or not. + + + + + Samples an AnimationClip on the object and also records any modified + properties in AnimationMode. + + + + + + + + Starts the animation mode. + + + + + Stops Animation mode, reverts all properties that were animated in animation mode. + + + + + Condition that is used to determine if a transition must be taken. + + + + + The mode of the condition. + + + + + The name of the parameter used in the condition. + + + + + The AnimatorParameter's threshold value for the condition to be true. + + + + + The mode of the condition. + + + + + The condition is true when parameter value is equal to the threshold. + + + + + The condition is true when parameter value is greater than the threshold. + + + + + The condition is true when the parameter value is true. + + + + + The condition is true when the parameter value is false. + + + + + The condition is true when the parameter value is less than the threshold. + + + + + The condition is true when the parameter value is not equal to the threshold. + + + + + The Animator Controller controls animation through layers with state machines, controlled by parameters. + + + + + The layers in the controller. + + + + + Parameters are used to communicate between scripting and the controller. They are used to drive transitions and blendtrees for example. + + + + + Adds a state machine behaviour class of type stateMachineBehaviourType to the AnimatorState for layer layerIndex. This function should be used when you are dealing with synchronized layer and would like to add a state machine behaviour on a synchronized layer. C# Users can use a generic version. + + + + + + + + Generic version. See the page for more details. + + + + + + + Utility function to add a layer to the controller. + + The name of the Layer. + The layer to add. + + + + Utility function to add a layer to the controller. + + The name of the Layer. + The layer to add. + + + + Utility function that creates a new state with the motion in it. + + The Motion that will be in the AnimatorState. + The layer where the Motion will be added. + + + + Utility function that creates a new state with the motion in it. + + The Motion that will be in the AnimatorState. + The layer where the Motion will be added. + + + + Utility function to add a parameter to the controller. + + The name of the parameter. + The type of the parameter. + The parameter to add. + + + + Utility function to add a parameter to the controller. + + The name of the parameter. + The type of the parameter. + The parameter to add. + + + + Creates an AnimatorController at the given path. + + The path where the AnimatorController asset will be created. + + The created AnimationController or null if an error occured. + + + + + Creates an AnimatorController at the given path, and automatically create an AnimatorLayer with an AnimatorStateMachine that will add a State with the AnimationClip in it. + + The path where the AnimatorController will be created. + The default clip that will be played by the AnimatorController. + + + + Creates a BlendTree in a new AnimatorState. + + The name of the BlendTree. + The created BlendTree. + The index where the BlendTree will be created. + + + + Creates a BlendTree in a new AnimatorState. + + The name of the BlendTree. + The created BlendTree. + The index where the BlendTree will be created. + + + + This function will create a StateMachineBehaviour instance based on the class define in this script. + + MonoScript class to instantiate. + + Returns instance id of created object, returns 0 if something is not valid. + + + + + Constructor. + + + + + Use this function to retrieve the owner of this behaviour. + + The State Machine Behaviour to get context for. + + Returns the State Machine Behaviour edition context. + + + + + Returns all StateMachineBehaviour that match type T or are derived from T. + + + + + Gets the effective state machine behaviour list for the AnimatorState. Behaviours are either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to get Behaviour list that is effectively used. + + The AnimatorState which we want the Behaviour list. + The layer that is queried. + + + + Gets the effective Motion for the AnimatorState. The Motion is either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to get the Motion that is effectively used. + + The AnimatorState which we want the Motion. + The layer that is queried. + + + + Gets the effective Motion for the AnimatorState. The Motion is either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to get the Motion that is effectively used. + + The AnimatorState which we want the Motion. + The layer that is queried. + + + + Creates a unique name for the layers. + + The desired name of the AnimatorLayer. + + + + Creates a unique name for the parameter. + + The desired name of the AnimatorParameter. + + + + Utility function to remove a layer from the controller. + + The index of the AnimatorLayer. + + + + Utility function to remove a parameter from the controller. + + The index of the AnimatorParameter. + + + + Sets the effective state machine Behaviour list for the AnimatorState. The Behaviour list is either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to set the Behaviour list that is effectively used. + + The AnimatorState which we want to set the Behaviour list. + The layer to set the Behaviour list. + The Behaviour list that will be set. + + + + Sets the effective Motion for the AnimatorState. The Motion is either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to set the Motion that is effectively used. + + The AnimatorState which we want to set the Motion. + The Motion that will be set. + The layer to set the Motion. + + + + Sets the effective Motion for the AnimatorState. The Motion is either stored in the AnimatorStateMachine or in the AnimatorLayer's ovverrides. Use this function to set the Motion that is effectively used. + + The AnimatorState which we want to set the Motion. + The Motion that will be set. + The layer to set the Motion. + + + + The Animation Layer contains a state machine that controls animations of a model or part of it. + + + + + The AvatarMask that is used to mask the animation on the given layer. + + + + + The blending mode used by the layer. It is not taken into account for the first layer. + + + + + The default blending weight that the layers has. It is not taken into account for the first layer. + + + + + When active, the layer will have an IK pass when evaluated. It will trigger an OnAnimatorIK callback. + + + + + The name of the layer. + + + + + The state machine for the layer. + + + + + When active, the layer will take control of the duration of the Synced Layer. + + + + + Specifies the index of the Synced Layer. + + + + + Gets the override behaviour list for the state on the given layer. + + The state which we want to get the behaviour list. + + + + Gets the override motion for the state on the given layer. + + The state which we want to get the motion. + + + + Sets the override behaviour list for the state on the given layer. + + The state which we want to set the behaviour list. + The behaviour list that will be set. + + + + Sets the override motion for the state on the given layer. + + The state which we want to set the motion. + The motion that will be set. + + + + Specifies how the layer is blended with the previous layers. + + + + + Animations are added to the previous layers. + + + + + Animations overrides to the previous layers. + + + + + States are the basic building blocks of a state machine. Each state contains a Motion ( AnimationClip or BlendTree) which will play while the character is in that state. When an event in the game triggers a state transition, the character will be left in a new state whose animation sequence will then take over. + + + + + The Behaviour list assigned to this state. + + + + + Offset at which the animation loop starts. Useful for synchronizing looped animations. +Units is normalized time. + + + + + The animator controller parameter that drives the cycle offset value. + + + + + Define if the cycle offset value is driven by an Animator controller parameter or by the value set in the editor. + + + + + Should Foot IK be respected for this state. + + + + + Should the state be mirrored. + + + + + The animator controller parameter that drives the mirror value. + + + + + Define if the mirror value is driven by an Animator controller parameter or by the value set in the editor. + + + + + The motion assigned to this state. + + + + + The hashed name of the state. + + + + + The default speed of the motion. + + + + + The animator controller parameter that drives the speed value. + + + + + Define if the speed value is driven by an Animator controller parameter or by the value set in the editor. + + + + + A tag can be used to identify a state. + + + + + The transitions that are going out of the state. + + + + + Whether or not the AnimatorStates writes back the default values for properties that are not animated by its Motion. + + + + + Utility function to add an outgoing transition to the exit of the state's parent state machine. + + If true, the exit time will be the equivalent of 0.25 second. + + The Animations.AnimatorStateTransition that was added. + + + + + Utility function to add an outgoing transition to the exit of the state's parent state machine. + + If true, the exit time will be the equivalent of 0.25 second. + + The Animations.AnimatorStateTransition that was added. + + + + + Adds a state machine behaviour class of type stateMachineBehaviourType to the AnimatorState. C# Users can use a generic version. + + + + + + Generic version. See the page for more details. + + + + + Utility function to add an outgoing transition to the destination state. + + If true, the exit time will be the equivalent of 0.25 second. + The destination state. + + + + Utility function to add an outgoing transition to the destination state. + + If true, the exit time will be the equivalent of 0.25 second. + The destination state. + + + + Utility function to add an outgoing transition to the destination state machine. + + If true, the exit time will be the equivalent of 0.25 second. + The destination state machine. + + + + Utility function to add an outgoing transition to the destination state machine. + + If true, the exit time will be the equivalent of 0.25 second. + The destination state machine. + + + + Utility function to add an outgoing transition. + + The transition to add. + + + + Utility function to remove a transition from the state. + + Transition to remove. + + + + A graph controlling the interaction of states. Each state references a motion. + + + + + The position of the AnyState node. + + + + + The list of AnyState transitions. + + + + + The Behaviour list assigned to this state machine. + + + + + The state that the state machine will be in when it starts. + + + + + The position of the entry node. + + + + + The list of entry transitions in the state machine. + + + + + The position of the exit node. + + + + + The position of the parent state machine node. Only valid when in a hierachic state machine. + + + + + The list of sub state machines. + + + + + The list of states. + + + + + Utility function to add an AnyState transition to the specified state or statemachine. + + The destination state. + The destination statemachine. + + + + Utility function to add an AnyState transition to the specified state or statemachine. + + The destination state. + The destination statemachine. + + + + Utility function to add an incoming transition to the exit of it's parent state machine. + + The destination Animations.AnimatorState state. + The destination Animations.AnimatorStateMachine state machine. + + + + Utility function to add an incoming transition to the exit of it's parent state machine. + + The destination Animations.AnimatorState state. + The destination Animations.AnimatorStateMachine state machine. + + + + Utility function to add a state to the state machine. + + The name of the new state. + The position of the state node. + + The AnimatorState that was created for this state. + + + + + Utility function to add a state to the state machine. + + The name of the new state. + The position of the state node. + + The AnimatorState that was created for this state. + + + + + Utility function to add a state to the state machine. + + The state to add. + The position of the state node. + + + + Utility function to add a state machine to the state machine. + + The name of the new state machine. + The position of the state machine node. + + The newly created Animations.AnimatorStateMachine state machine. + + + + + Utility function to add a state machine to the state machine. + + The name of the new state machine. + The position of the state machine node. + + The newly created Animations.AnimatorStateMachine state machine. + + + + + Utility function to add a state machine to the state machine. + + The state machine to add. + The position of the state machine node. + + + + Adds a state machine behaviour class of type stateMachineBehaviourType to the AnimatorStateMachine. C# Users can use a generic version. + + + + + + Generic version. See the page for more details. + + + + + Utility function to add an outgoing transition from the source state machine to the exit of it's parent state machine. + + The source state machine. + + + + Utility function to add an outgoing transition from the source state machine to the destination. + + The source state machine. + The destination state machine. + The destination state. + + The Animations.AnimatorTransition transition that was created. + + + + + Utility function to add an outgoing transition from the source state machine to the destination. + + The source state machine. + The destination state machine. + The destination state. + + The Animations.AnimatorTransition transition that was created. + + + + + Utility function to add an outgoing transition from the source state machine to the destination. + + The source state machine. + The destination state machine. + The destination state. + + The Animations.AnimatorTransition transition that was created. + + + + + Gets the list of all outgoing state machine transitions from given state machine. + + The source state machine. + + + + Makes a unique state machine name in the context of the parent state machine. + + Desired name for the state machine. + + + + Makes a unique state name in the context of the parent state machine. + + Desired name for the state. + + + + Utility function to remove an AnyState transition from the state machine. + + The AnyStat transition to remove. + + + + Utility function to remove an entry transition from the state machine. + + The transition to remove. + + + + Utility function to remove a state from the state machine. + + The state to remove. + + + + Utility function to remove a state machine from its parent state machine. + + The state machine to remove. + + + + Utility function to remove an outgoing transition from source state machine. + + The transition to remove. + The source state machine. + + + + Sets the list of all outgoing state machine transitions from given state machine. + + The source state machine. + The outgoing transitions. + + + + + Transitions define when and how the state machine switch from one state to another. AnimatorStateTransition always originate from an Animator State (or AnyState) and have timing parameters. + + + + + Set to true to allow or disallow transition to self during AnyState transition. + + + + + The duration of the transition. + + + + + The normalized time of the source state when the condition is true. + + + + + When active the transition will have an exit time condition. + + + + + When active the transition duration will have a fixed duration. + + + + + Which AnimatorState transitions can interrupt the Transition. + + + + + The time at which the destination state will start. + + + + + The Transition can be interrupted by a transition that has a higher priority. + + + + + Creates a new animator state transition. + + + + + Transitions define when and how the state machine switch from on state to another. AnimatorTransition always originate from a StateMachine or a StateMachine entry. They do not define timing parameters. + + + + + Creates a new animator transition. + + + + + Base class for animator transitions. Transitions define when and how the state machine switches from one state to another. + + + + + Animations.AnimatorCondition conditions that need to be met for a transition to happen. + + + + + The destination state of the transition. + + + + + The destination state machine of the transition. + + + + + Is the transition destination the exit of the current state machine. + + + + + Mutes the transition. The transition will never occur. + + + + + Mutes all other transitions in the source state. + + + + + Utility function to add a condition to a transition. + + The Animations.AnimatorCondition mode of the condition. + The threshold value of the condition. + The name of the parameter. + + + + Utility function to remove a condition from the transition. + + The condition to remove. + + + + AvatarMask are used to mask out humanoid body parts and transforms. + + + + + Number of transforms. + + + + + Creates a new AvatarMask. + + + + + Returns true if the humanoid body part at the given index is active. + + The index of the humanoid body part. + + + + Returns true if the transform at the given index is active. + + The index of the transform. + + + + Returns the path of the transform at the given index. + + The index of the transform. + + + + Sets the humanoid body part at the given index to active or not. + + The index of the humanoid body part. + Active or not. + + + + Sets the tranform at the given index to active or not. + + The index of the transform. + Active or not. + + + + Sets the path of the transform at the given index. + + The index of the transform. + The path of the transform. + + + + Avatar body part. + + + + + The Body. + + + + + The Head. + + + + + Total number of body parts. + + + + + The Left Arm. + + + + + Left Fingers. + + + + + Left Foot IK. + + + + + Left Hand IK. + + + + + The Left Leg. + + + + + The Right Arm. + + + + + Right Fingers. + + + + + Right Foot IK. + + + + + Right Hand IK. + + + + + The Right Leg. + + + + + The Root. + + + + + Blend trees are used to blend continuously animation between their childs. They can either be 1D or 2D. + + + + + Parameter that is used to compute the blending weight of the childs in 1D blend trees or on the X axis of a 2D blend tree. + + + + + Parameter that is used to compute the blending weight of the childs on the Y axis of a 2D blend tree. + + + + + The Blending type can be either 1D or different types of 2D. + + + + + A copy of the list of the blend tree child motions. + + + + + Sets the maximum threshold that will be used by the ChildMotion. Only used when useAutomaticThresholds is true. + + + + + Sets the minimum threshold that will be used by the ChildMotion. Only used when useAutomaticThresholds is true. + + + + + When active, the children's thresholds are automatically spread between 0 and 1. + + + + + Utility function to add a child motion to a blend trees. + + The motion to add as child. + The position of the child. When using 2D blend trees. + The threshold of the child. When using 1D blend trees. + + + + Utility function to add a child motion to a blend trees. + + The motion to add as child. + The position of the child. When using 2D blend trees. + The threshold of the child. When using 1D blend trees. + + + + Utility function to add a child motion to a blend trees. + + The motion to add as child. + The position of the child. When using 2D blend trees. + The threshold of the child. When using 1D blend trees. + + + + Utility function to add a child blend tree to a blend tree. + + The position of the child. When using 2D blend trees. + The threshold of the child. When using 1D blend trees. + + + + Utility function to add a child blend tree to a blend tree. + + The position of the child. When using 2D blend trees. + The threshold of the child. When using 1D blend trees. + + + + Utility function to remove the child of a blend tree. + + The index of the blend tree to remove. + + + + The type of blending algorithm that the blend tree uses. + + + + + Direct control of blending weight for each node. + + + + + Best used when your motions do not represent different directions. + + + + + This blend type is used when your motions represent different directions, however you can have multiple motions in the same direction, for example "walk forward" and "run forward". + + + + + Basic blending using a single parameter. + + + + + Best used when your motions represent different directions, such as "walk forward", "walk backward", "walk left", and "walk right", or "aim up", "aim down", "aim left", and "aim right". + + + + + Structure that represents a state in the context of its parent state machine. + + + + + The position the the state node in the context of its parent state machine. + + + + + The state. + + + + + Structure that represents a state machine in the context of its parent state machine. + + + + + The position the the state machine node in the context of its parent state machine. + + + + + The state machine. + + + + + Structure that represents a motion in the context of its parent blend tree. + + + + + Normalized time offset of the child. + + + + + The parameter used by the child when used in a BlendTree of type BlendTreeType.Direct. + + + + + Mirror of the child. + + + + + The motion itself. + + + + + The position of the child. Used in 2D blend trees. + + + + + The threshold of the child. Used in 1D blend trees. + + + + + The relative speed of the child. + + + + + This class contains all the owner's information for this State Machine Behaviour. + + + + + The Animations.AnimatorController that owns this state machine behaviour. + + + + + The object that owns this state machine behaviour. Could be an Animations.AnimatorState or Animations.AnimatorStateMachine. + + + + + The animator's layer index that owns this state machine behaviour. + + + + + Which AnimatorState transitions can interrupt the Transition. + + + + + The Transition can be interrupted by transitions in the destination AnimatorState. + + + + + The Transition can be interrupted by transitions in the source or the destination AnimatorState. + + + + + The Transition cannot be interrupted. Formely know as Atomic. + + + + + The Transition can be interrupted by transitions in the source AnimatorState. + + + + + The Transition can be interrupted by transitions in the source or the destination AnimatorState. + + + + + Editor utility functions for modifying animation clips. + + + + + Triggered when an animation curve inside an animation clip has been modified. + + + + + Calculates path from root transform to target transform. + + + + + + + Describes the type of modification that caused OnCurveWasModified to fire. + + + + + Retrieves all curves from a specific animation clip. + + + + + + + Retrieves all curves from a specific animation clip. + + + + + + + Returns all the animatable bindings that a specific game object has. + + + + + + + Returns the animated object that the binding is pointing to. + + + + + + + Returns the array of AnimationClips that are referenced in the Animation component. + + + + + + Retrieves all animation events associated with the animation clip. + + + + + + Returns all the float curve bindings currently stored in the clip. + + + + + + Return the float curve that the binding is pointing to. + + + + + + + + + + Return the float curve that the binding is pointing to. + + + + + + + + + + Retrieves the current float value by sampling a curve value on a specific game object. + + + + + + + + + + Return the object reference curve that the binding is pointing to. + + + + + + + Returns all the object reference curve bindings currently stored in the clip. + + + + + + Triggered when an animation curve inside an animation clip has been modified. + + + + + + + + Set the additive reference pose from referenceClip at time for animation clip clip. + + The animation clip to be used. + The animation clip containing the reference pose. + Time that defines the reference pose in referenceClip. + + + + Sets the array of AnimationClips to be referenced in the Animation component. + + + + + + + Replaces all animation events in the animation clip. + + + + + + + Adds, modifies or removes an editor float curve in a given clip. + + The animation clip to which the curve will be added. + The bindings which defines the path and the property of the curve. + The curve to add. Setting this to null will remove the curve. + + + + Change the specified keyframe broken tangent flag. + + The curve to modify. + Keyframe index. + Broken flag. + + + + Change the specified keyframe tangent mode. + + The curve to modify. + Keyframe index. + Tangent mode. + + + + Change the specified keyframe tangent mode. + + The curve to modify. + Keyframe index. + Tangent mode. + + + + Adds, modifies or removes an object reference curve in a given clip. + + Setting this to null will remove the curve. + + + + + + Tangent constraints on Keyframe. + + + + + The tangents are automatically set to make the curve go smoothly through the key. + + + + + The tangents are automatically set to make the curve go smoothly through the key. + + + + + The curve retains a constant value between two keys. + + + + + The tangent can be freely set by dragging the tangent handle. + + + + + The tangent points towards the neighboring key. + + + + + .NET API compatibility level. + + + + + .NET 2.0. + + + + + .NET 2.0 Subset. + + + + + Helpers for builtin arrays ... + + + + + Appends item to the end of array. + + + + + + + Appends items to the end of array. + + + + + + + Compares two arrays. + + + + + True if both have the same number of elements and the contents are equal. + + + + + Clears the array. + + + + + + Determines if the array contains the item. + + + + + True if item is in array, false otherwise. + + + + + Find the index of the first element that satisfies the predicate. + + + + + The zero-based index of the first occurrence of the element, if found; otherwise, �1. + + + + + Index of first element with value value. + + + + + The zero-based index of the element, if found; otherwise -1. + + + + + Inserts item item at position index. + + + + + + + + Index of the last element with value value. + + + + + The zero-based index of the element, if found; otherwise -1. + + + + + Removes item from array. + + + + + + + Remove element at position index. + + + + + + + Method used for calculating a font's ascent. + + + + + Ascender method. + + + + + Bounding box method. + + + + + Legacy bounding box method. + + + + + Aspect ratio. + + + + + 16:10 aspect ratio. + + + + + 16:9 aspect ratio. + + + + + 4:3 aspect ratio. + + + + + 5:4 aspect ratio. + + + + + Undefined aspect ratios. + + + + + AssetBundle building map entry. + + + + + AssetBundle name. + + + + + AssetBundle variant. + + + + + Asset names which belong to the given AssetBundle. + + + + + An Interface for accessing assets and performing operations on assets. + + + + + Callback raised whenever a package import is cancelled by the user. + + + + + + Callback raised whenever a package import successfully completes. + + + + + + Callback raised whenever a package import failed. + + + + + + Callback raised whenever a package import starts. + + + + + + Adds objectToAdd to an existing asset at path. + + Object to add to the existing asset. + Filesystem path to the asset. + + + + Adds objectToAdd to an existing asset identified by assetObject. + + + + + + + Get the GUID for the asset at path. + + Filesystem path for the asset. + + GUID. + + + + + Removes all labels attached to an asset. + + + + + + Is object an asset? + + + + + + + Is object an asset? + + + + + + + Duplicates the asset at path and stores it at newPath. + + Filesystem path of the source asset. + Filesystem path of the new asset to create. + + + + Creates a new asset at path. + + Object to use in creating the asset. + Filesystem path for the new asset. + + + + Create a new folder. + + The name of the parent folder. + The name of the new folder. + + The GUID of the newly created folder. + + + + + Deletes the asset file at path. + + Filesystem path of the asset to be deleted. + + + + Exports the assets identified by assetPathNames to a unitypackage file in fileName. + + + + + + + + + Exports the assets identified by assetPathNames to a unitypackage file in fileName. + + + + + + + + + Exports the assets identified by assetPathNames to a unitypackage file in fileName. + + + + + + + + + Exports the assets identified by assetPathNames to a unitypackage file in fileName. + + + + + + + + + Search the asset database using a search filter string. + + The filter string can contain search data for: names, asset labels and types (class names). + Specifying one or more folders will limit the searching to these folders and their child folders (and is faster than searching all assets). + + Array of matching asset GUIDs. + + + + + Search the asset database using a search filter string. + + The filter string can contain search data for: names, asset labels and types (class names). + Specifying one or more folders will limit the searching to these folders and their child folders (and is faster than searching all assets). + + Array of matching asset GUIDs. + + + + + Creates a new unique path for an asset. + + + + + + Return all the AssetBundle names in the asset database. + + + Array of asset bundle names. + + + + + Given an assetBundleName, returns the list of AssetBundles that it depends on. + + The name of the AssetBundle for which dependencies are required. + If false, returns only AssetBundles which are direct dependencies of the input; if true, includes all indirect dependencies of the input. + + The names of all AssetBundles that the input depends on. + + + + + Returns the hash of all the dependencies of an asset. + + Path to the asset. + + Aggregate hash. + + + + + Returns the path name relative to the project folder where the asset is stored. + + + + + + Returns the path name relative to the project folder where the asset is stored. + + The instance ID of the asset. + A reference to the asset. + + The asset path name, or null, or an empty string if the asset does not exist. + + + + + Returns the path name relative to the project folder where the asset is stored. + + The instance ID of the asset. + A reference to the asset. + + The asset path name, or null, or an empty string if the asset does not exist. + + + + + Gets the path to the asset file associated with a text .meta file. + + + + + + Get the paths of the assets which have been marked with the given assetBundle name. + + + + + + Get the asset paths from the given assetBundle name and asset name. + + + + + + + Retrieves an icon for the asset at the given asset path. + + + + + + Given a pathName, returns the list of all assets that it depends on. + + The path to the asset for which dependencies are required. + If false, return only assets which are direct dependencies of the input; if true, include all indirect dependencies of the input. Defaults to true. + + The paths of all assets that the input depends on. + + + + + Given a pathName, returns the list of all assets that it depends on. + + The path to the asset for which dependencies are required. + If false, return only assets which are direct dependencies of the input; if true, include all indirect dependencies of the input. Defaults to true. + + The paths of all assets that the input depends on. + + + + + Given an array of pathNames, returns the list of all assets that the input depend on. + + The path to the assets for which dependencies are required. + If false, return only assets which are direct dependencies of the input; if true, include all indirect dependencies of the input. Defaults to true. + + The paths of all assets that the input depends on. + + + + + Given an array of pathNames, returns the list of all assets that the input depend on. + + The path to the assets for which dependencies are required. + If false, return only assets which are direct dependencies of the input; if true, include all indirect dependencies of the input. Defaults to true. + + The paths of all assets that the input depends on. + + + + + Returns all labels attached to a given asset. + + + + + + Returns the type of the main asset object at assetPath. + + Filesystem path of the asset to load. + + + + Given an absolute path to a directory, this method will return an array of all it's subdirectories. + + + + + + Gets the path to the text .meta file associated with an asset. + + The path to the asset. + + The path to the .meta text file or empty string if the file does not exist. + + + + + Gets the path to the text .meta file associated with an asset. + + The path to the asset. + + The path to the .meta text file or empty string if the file does not exist. + + + + + Return all the unused assetBundle names in the asset database. + + + + + Translate a GUID to its current asset path. + + + + + + Import asset at path. + + + + + + + Import asset at path. + + + + + + + Imports package at packagePath into the current project. + + + + + + + Delegate to be called from AssetDatabase.ImportPackage callbacks. packageName is the name of the package that raised the callback. + + + + + + Delegate to be called from AssetDatabase.ImportPackage callbacks. packageName is the name of the package that raised the callback. errorMessage is the reason for the failure. + + + + + + + Is asset a foreign asset? + + + + + + + Is asset a foreign asset? + + + + + + + Is asset a main asset in the project window? + + + + + + + Is asset a main asset in the project window? + + + + + + + Returns true if the main asset object at assetPath is loaded in memory. + + Filesystem path of the asset to load. + + + + Is asset a native asset? + + + + + + + Is asset a native asset? + + + + + + + Use IsOpenForEdit to determine if the asset is open for edit by the version control. + + Is the path to the asset on disk relative to project folder. + Used to give reason for not open. + + + + True is the asset can be edited. + + + + + Use IsOpenForEdit to determine if the asset is open for edit by the version control. + + Is the path to the asset on disk relative to project folder. + Used to give reason for not open. + + + + True is the asset can be edited. + + + + + Use IsOpenForEdit to determine if the asset is open for edit by the version control. + + Is the path to the asset on disk relative to project folder. + Used to give reason for not open. + + + + True is the asset can be edited. + + + + + Use IsOpenForEdit to determine if the asset is open for edit by the version control. + + Is the path to the asset on disk relative to project folder. + Used to give reason for not open. + + + + True is the asset can be edited. + + + + + Does the asset form part of another asset? + + The asset Object to query. + Instance ID of the asset Object to query. + + + + Does the asset form part of another asset? + + The asset Object to query. + Instance ID of the asset Object to query. + + + + Given an absolute path to a folder, returns true if it exists, false otherwise. + + + + + + Returns all asset representations at assetPath. + + + + + + Returns an array of all asset objects at assetPath. + + Filesystem path to the asset. + + + + Returns the first asset object of type type at given path assetPath. + + Path of the asset to load. + Data type of the asset. + + The asset matching the parameters. + + + + + Returns the main asset object at assetPath. + + Filesystem path of the asset to load. + + + + Move an asset file from one folder to another. + + The path where the asset currently resides. + The path which the asset should be moved to. + + An empty string if the asset has been successfully moved, otherwise an error message. + + + + + Moves the asset at path to the trash. + + + + + + Opens the asset with associated application. + + + + + + + + Opens the asset with associated application. + + + + + + + + Opens the asset with associated application. + + + + + + + + Opens the asset with associated application. + + + + + + + + Opens the asset(s) with associated application(s). + + + + + + Import any changed assets. + + + + + + Import any changed assets. + + + + + + Remove the assetBundle name from the asset database. The forceRemove flag is used to indicate if you want to remove it even it's in use. + + The assetBundle name you want to remove. + Flag to indicate if you want to remove the assetBundle name even it's in use. + + + + Remove all the unused assetBundle names in the asset database. + + + + + Rename an asset file. + + The path where the asset currently resides. + The new name which should be given to the asset. + + An empty string, if the asset has been successfully renamed, otherwise an error message. + + + + + Writes all unsaved asset changes to disk. + + + + + Replaces that list of labels on an asset. + + + + + + + Begin Asset importing. This lets you group several asset imports together into one larger import. + + + + + Stop Asset importing. This lets you group several asset imports together into one larger import. + + + + + Checks if an asset file can be moved from one folder to another. (Without actually moving the file). + + The path where the asset currently resides. + The path which the asset should be moved to. + + An empty string if the asset can be moved, otherwise an error message. + + + + + Writes the import settings to disk. + + + + + + Result of Asset delete operation + + + + + Tells Unity that the asset was deleted by the callback. Unity will not try to delete the asset, but will delete the cached version and preview file. + + + + + Tells the internal implementation that the callback did not delete the asset. The asset will be delete by the internal implementation. + + + + + Tells Unity that the file cannot be deleted and Unity should leave it alone. + + + + + Base class from which asset importers for specific asset types derive. + + + + + Get or set the AssetBundle name. + + + + + Get or set the AssetBundle variant. + + + + + The path name of the asset for this importer. (Read Only) + + + + + Get or set any user data. + + + + + Retrieves the asset importer for the asset at path. + + + + + + Save asset importer settings if asset importer is dirty. + + + + + Set the AssetBundle name and variant. + + AssetBundle name. + AssetBundle variant. + + + + AssetModificationProcessor lets you hook into saving of serialized assets and + scenes which are edited inside Unity. + + + + + Result of Asset move + + + + + Tells the internal implementation that the script moved the asset physically on disk. + + + + + Tells the internal implementation that the asset was not moved physically on disk by the script. + + + + + Tells the internal implementation that the script could not move the assets. + + + + + AssetPostprocessor lets you hook into the import pipeline and run scripts prior or after importing assets. + + + + + Reference to the asset importer. + + + + + The path name of the asset being imported. + + + + + Override the order in which importers are processed. + + + + + Returns the version of the asset postprocessor. + + + + + Logs an import error message to the console. + + + + + + + Logs an import error message to the console. + + + + + + + Logs an import warning to the console. + + + + + + + Logs an import warning to the console. + + + + + + + Utility for fetching asset previews by instance ID of assets, See AssetPreview.GetAssetPreview. Since previews are loaded asynchronously methods are provided for requesting if all previews have been fully loaded, see AssetPreview.IsLoadingAssetPreviews. Loaded previews are stored in a cache, the size of the cache can be controlled by calling [AssetPreview.SetPreviewTextureCacheSize]. + + + + + Returns a preview texture for an asset. + + + + + + Returns a preview texture for an instanceID of an asset. + + + + + Returns the thumbnail for an object (like the ones you see in the project view). + + + + + + Returns the thumbnail for the type. + + + + + + Returns the thumbnail for the object's type. + + + + + Loading previews is asynchronous so it is useful to know if a specific asset preview is in the process of being loaded so client code e.g can repaint while waiting for the loading to finish. + + InstanceID of the assset that a preview has been requested for by: AssetPreview.GetAssetPreview(). + + + + Loading previews is asynchronous so it is useful to know if any requested previews are in the process of being loaded so client code e.g can repaint while waiting. + + + + + Set the asset preview cache to a size that can hold all visible previews on the screen at once. + + The number of previews that can be loaded into the cache before the least used previews are being unloaded. + + + + Antialiased curve rendering functionality used by audio tools in the editor. + + + + + Curve evaluation function that allows simultaneous evaluation of the curve y-value and a color of the curve at that point. + + Normalized x-position in the range [0; 1] at which the curve should be evaluated. + Color of the curve at the evaluated point. + + + + Curve evaluation function used to evaluate the curve y-value and at the specified point. + + Normalized x-position in the range [0; 1] at which the curve should be evaluated. + + + + Curve evaluation function that allows simultaneous evaluation of the min- and max-curves. The returned minValue and maxValue values are expected to be in the range [-1; 1] and a value of 0 corresponds to the vertical center of the rectangle that is drawn into. Values outside of this range will be clamped. Additionally the color of the curve at this point is evaluated. + + Normalized x-position in the range [0; 1] at which the min- and max-curves should be evaluated. + Color of the curve at the specified evaluation point. + Returned value of the minimum curve. Clamped to [-1; 1]. + Returned value of the maximum curve. Clamped to [-1; 1]. + + + + Renders a thin curve determined by the curve evaluation function. The solid color of the curve is set by the curveColor argument. + + Rectangle determining the size of the graph. + Curve evaluation function. + Solid fill color of the curve. The alpha-channel determines the amount of opacity. + + + + Fills the area between the curve evaluated by the AudioCurveAndColorEvaluator provided and the bottom of the rectngle with smooth gradients along the edges. + + Rectangle determining the size of the graph. + Normalized x-position in the range [0; 1] at which the curve should be evaluated. The returned value is expected to be in the range [-1; 1] and a value of 0 corresponds to the vertical center of the rectangle that is drawn into. Values outside of this range will be clamped. + Solid fill color of the curve. The alpha-channel determines the amount of opacity. + + + + Fills the area between the curve evaluated by the AudioCurveAndColorEvaluator provided and the bottom of the rectngle with smooth gradients along the edges. + + Rectangle determining the size of the graph. + Normalized x-position in the range [0; 1] at which the curve should be evaluated. The returned value is expected to be in the range [-1; 1] and a value of 0 corresponds to the vertical center of the rectangle that is drawn into. Values outside of this range will be clamped. + Solid fill color of the curve. The alpha-channel determines the amount of opacity. + + + + Fills the area between the two curves evaluated by the AudioMinMaxCurveAndColorEvaluator provided with smooth gradients along the edges. + + Rectangle determining the size of the graph. + Normalized x-position in the range [0; 1] at which the min- and max-curves should be evaluated. The returned minValue and maxValue values are expected to be in the range [-1; 1] and a value of 0 corresponds to the vertical center of the rectangle that is drawn into. Values outside of this range will be clamped. + + + + Fills the area between the curve evaluated by the AudioCurveAndColorEvaluator provided and its vertical mirror image with smooth gradients along the edges. Useful for drawing amplitude plots of audio signals. + + Rectangle determining the size of the graph. + Normalized x-position in the range [0; 1] at which the curve should be evaluated. The returned value is expected to be in the range [0; 1] and a value of 0 corresponds to the vertical center of the rectangle that is drawn into. Values outside of this range will be clamped. + + + + Audio importer lets you modify AudioClip import settings from editor scripts. + + + + + Compression bitrate. + + + + + The default sample settings for the AudioClip importer. + + + + + Force this clip to mono? + + + + + Corresponding to the "Load In Background" flag in the AudioClip inspector, when this flag is set, the loading of the clip will happen delayed without blocking the main thread. + + + + + Preloads audio data of the clip when the clip asset is loaded. When this flag is off, scripts have to call AudioClip.LoadAudioData() to load the data before the clip can be played. Properties like length, channels and format are available before the audio data has been loaded. + + + + + Clears the sample settings override for the given platform. + + The platform to clear the overrides for. + + Returns true if any overrides were actually cleared. + + + + + Returns whether a given build target has its sample settings currently overridden. + + The platform to query if this AudioImporter has an override for. + + Returns true if the platform is currently overriden in this AudioImporter. + + + + + Return the current override settings for the given platform. + + The platform to get the override settings for. + + The override sample settings for the given platform. + + + + + Sets the override sample settings for the given platform. + + The platform which will have the sample settings overridden. + The override settings for the given platform. + + Returns true if the settings were successfully overriden. Some setting overrides are not possible for the given platform, in which case false is returned and the settings are not registered. + + + + + This structure contains a collection of settings used to define how an AudioClip should be imported. + +This structure is used with the AudioImporter to define how the AudioClip should be imported and treated during loading within the scene. + + + + + CompressionFormat defines the compression type that the audio file is encoded to. Different compression types have different performance and audio artifact characteristics. + + + + + LoadType defines how the imported AudioClip data should be loaded. + + + + + Audio compression quality (0-1) + +Amount of compression. The value roughly corresponds to the ratio between the resulting and the source file sizes. + + + + + Target sample rate to convert to when samplerateSetting is set to OverrideSampleRate. + + + + + Defines how the sample rate is modified (if at all) of the importer audio file. + + + + + The sample rate setting used within the AudioImporter. This defines the sample rate conversion of audio on import. + + + + + Let Unity deduce the optimal sample rate for the AudioClip being imported. The audio file will be analysed and a minimal sample rate chosen while still preserving audio quality. + + + + + Override the sample rate of the imported audio file with a custom value. + + + + + Do not change the sample rate of the imported audio file. The sample rate will be preserved for the imported AudioClip. + + + + + The base class used to create new sorting. + + + + + The content to display to quickly identify the hierarchy's mode. + + + + + The sorting method used to determine the order of GameObjects. + + + + + + + Asset Bundle building options. + + + + + Append the hash to the assetBundle name. + + + + + Use chunk-based LZ4 compression when creating the AssetBundle. + + + + + Includes all dependencies. + + + + + Forces inclusion of the entire asset. + + + + + Builds an asset bundle using a hash for the id of the object stored in the asset bundle. + + + + + Do not include type information within the AssetBundle. + + + + + Do a dry run build. + + + + + Force rebuild the assetBundles. + + + + + Ignore the type tree changes when doing the incremental build check. + + + + + Build assetBundle without any special option. + + + + + Do not allow the build to succeed if any errors are reporting during it. + + + + + Don't compress the data when creating the asset bundle. + + + + + Building options. Multiple options can be combined together. + + + + + Used when building Xcode (iOS) or Eclipse (Android) projects. + + + + + Allow script debuggers to attach to the player remotely. + + + + + Run the built player. + + + + + Build a compressed asset bundle that contains streamed scenes loadable with the WWW class. + + + + + Build only the scripts of a project. + + + + + Start the player with a connection to the profiler in the editor. + + + + + Build a development version of the player. + + + + + Build headless Linux standalone. + + + + + Include assertions in the build. By default, the assertions are only included in development builds. + + + + + Force full optimizations for script complilation in Development builds. + + + + + Perform the specified build without any special settings or extra tasks. + + + + + Show the built player. + + + + + Do not allow the build to succeed if any errors are reporting during it. + + + + + Symlink runtime libraries when generating iOS Xcode project. (Faster iteration time). + + + + + Don't compress the data when creating the asset bundle. + + + + + Copy UnityObject.js alongside Web Player so it wouldn't have to be downloaded from internet. + + + + + Lets you programmatically build players or AssetBundles which can be loaded from the web. + + + + + Is a player currently being built? + + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle. + + Lets you specify a specific object that can be conveniently retrieved using AssetBundle.mainAsset. + An array of assets to write into the bundle. + The filename where to write the compressed asset bundle. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform to build the bundle for. + The optional crc output parameter can be used to get a CRC checksum for the generated AssetBundle, which can be used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload. + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Builds an asset bundle, with custom names for the assets. + + A collection of assets to be built into the asset bundle. Asset bundles can contain any asset found in the project folder. + An array of strings of the same size as the number of assets. +These will be used as asset names, which you can then pass to AssetBundle.Load to load a specific asset. Use BuildAssetBundle to just use the asset's path names instead. + The location where the compressed asset bundle will be written to. + Automatically include dependencies or always include complete assets instead of just the exact referenced objects. + The platform where the asset bundle will be used. + An optional output parameter used to get a CRC checksum for the generated AssetBundle. (Used to verify content when downloading AssetBundles using WWW.LoadFromCacheOrDownload.) + + + + Build all AssetBundles specified in the editor. + + Output path for the AssetBundles. + AssetBundle building options. + Chosen target build platform. + + The manifest listing all AssetBundles included in this build. + + + + + Build AssetBundles from a building map. + + Output path for the AssetBundles. + AssetBundle building map. + AssetBundle building options. + Target build platform. + + The manifest listing all AssetBundles included in this build. + + + + + Builds a player. + + Provide various options to control the behavior of BuildPipeline.BuildPlayer. + + An error message if an error occurred. + + + + + Builds a player. These overloads are still supported, but will be replaces by BuildPlayer (BuildPlayerOptions). Please use it instead. + + The scenes to be included in the build. If empty, the currently open scene will be built. Paths are relative to the project folder (AssetsMyLevelsMyScene.unity). + The path where the application will be built. + The BuildTarget to build. + Additional BuildOptions, like whether to run the built player. + + An error message if an error occurred. + + + + + Builds a player. These overloads are still supported, but will be replaces by BuildPlayer (BuildPlayerOptions). Please use it instead. + + The scenes to be included in the build. If empty, the currently open scene will be built. Paths are relative to the project folder (AssetsMyLevelsMyScene.unity). + The path where the application will be built. + The BuildTarget to build. + Additional BuildOptions, like whether to run the built player. + + An error message if an error occurred. + + + + + Builds one or more scenes and all their dependencies into a compressed asset bundle. + + Pathnames of levels to include in the asset bundle. + Pathname for the output asset bundle. + Runtime platform on which the asset bundle will be used. + Output parameter to receive CRC checksum of generated assetbundle. + Build options. See BuildOptions for possible values. + + String with an error message, empty on success. + + + + + Builds one or more scenes and all their dependencies into a compressed asset bundle. + + Pathnames of levels to include in the asset bundle. + Pathname for the output asset bundle. + Runtime platform on which the asset bundle will be used. + Output parameter to receive CRC checksum of generated assetbundle. + Build options. See BuildOptions for possible values. + + String with an error message, empty on success. + + + + + Builds one or more scenes and all their dependencies into a compressed asset bundle. + + Pathnames of levels to include in the asset bundle. + Pathname for the output asset bundle. + Runtime platform on which the asset bundle will be used. + Output parameter to receive CRC checksum of generated assetbundle. + Build options. See BuildOptions for possible values. + + String with an error message, empty on success. + + + + + Builds one or more scenes and all their dependencies into a compressed asset bundle. + + Pathnames of levels to include in the asset bundle. + Pathname for the output asset bundle. + Runtime platform on which the asset bundle will be used. + Output parameter to receive CRC checksum of generated assetbundle. + Build options. See BuildOptions for possible values. + + String with an error message, empty on success. + + + + + Extract the crc checksum for the given AssetBundle. + + + + + + + Extract the hash for the given AssetBundle. + + + + + + + Lets you manage cross-references and dependencies between different asset bundles and player builds. + + + + + Lets you manage cross-references and dependencies between different asset bundles and player builds. + + + + + Provide various options to control the behavior of BuildPipeline.BuildPlayer. + + + + + The path to an manifest file describing all of the asset bundles used in the build (optional). + + + + + The path where the application will be built. + + + + + Additional BuildOptions, like whether to run the built player. + + + + + The scenes to be included in the build. If empty, the currently open scene will be built. Paths are relative to the project folder (AssetsMyLevelsMyScene.unity). + + + + + The BuildTarget to build. + + + + + Target build platform. + + + + + Build an iOS player. + + + + + OBSOLETE: Use iOS. Build an iOS player. + + + + + Build to Apple's tvOS platform. + + + + + Build an Android .apk standalone app. + + + + + Build to Nintendo 3DS platform. + + + + + Build a PS4 Standalone. + + + + + Build a PS Vita Standalone. + + + + + Build to Samsung Smart TV platform. + + + + + Build a Linux standalone. + + + + + Build a Linux 64-bit standalone. + + + + + Build a Linux universal standalone. + + + + + Build a macOS standalone (Intel only). + + + + + Build a macOS Intel 64-bit standalone. + + + + + Build a universal macOS standalone. + + + + + Build a Windows standalone. + + + + + Build a Windows 64-bit standalone. + + + + + Build a Tizen player. + + + + + WebGL. + + + + + Build a web player. (This build target is deprecated. Building for web player will no longer be supported in future versions of Unity.) + + + + + Build a streamed web player. + + + + + Build a Wii U standalone. + + + + + Build an Windows Store Apps player. + + + + + Build a Xbox One Standalone. + + + + + Build target group. + + + + + Apple iOS target. + + + + + OBSOLETE: Use iOS. Apple iOS target. + + + + + Apple's tvOS target. + + + + + Android target. + + + + + Nintendo 3DS target. + + + + + Sony Playstation 4 target. + + + + + Sony PS Vita target. + + + + + Samsung Smart TV target. + + + + + Mac/PC standalone target. + + + + + Samsung Tizen target. + + + + + Unknown target. + + + + + WebGL. + + + + + Mac/PC webplayer target. + + + + + Nintendo Wii U target. + + + + + Windows Store Apps target. + + + + + Microsoft Xbox One target. + + + + + Base class for Attributes that require a callback index. + + + + + Add this attribute to a method to get a notification after scripts have been reloaded. + + + + + DidReloadScripts attribute. + + Order in which separate attributes will be processed. + + + + DidReloadScripts attribute. + + Order in which separate attributes will be processed. + + + + Callback attribute for opening an asset in Unity (e.g the callback is fired when double clicking an asset in the Project Browser). + + + + + Add this attribute to a method to get a notification just after building the player. + + + + + Add this attribute to a method to get a notification just after building the scene. + + + + + Attribute used to make a custom editor support multi-object editing. + + + + + Stores a curve and its name that will be used to create additionnal curves during the import process. + + + + + The animation curve. + + + + + The name of the animation curve. + + + + + AnimationClip mask options for ModelImporterClipAnimation. + + + + + Use a mask from your project to specify which transforms animation should be imported. + + + + + A mask containing all the transform in the file will be created internally. + + + + + No Mask. All the animation will be imported. + + + + + Used as input to ColorField to configure the HDR color ranges in the ColorPicker. + + + + + Maximum allowed color component value when using the ColorPicker. + + + + + Maximum exposure value allowed in the Color Picker. + + + + + Minimum allowed color component value when using the ColorPicker. + + + + + Minimum exposure value allowed in the Color Picker. + + + + + + + Minimum brightness value allowed when using the Color Picker. + Maximum brightness value allowed when using the Color Picker. + Minimum exposure value used in the tonemapping section of the Color Picker. + Maximum exposure value used in the tonemapping section of the Color Picker. + + + + Editor API for the Unity Services editor feature. Normally CrashReporting is enabled from the Services window, but if writing your own editor extension, this API can be used. + + + + + This Boolean field will cause the CrashReporting feature in Unity to capture exceptions that occur in the editor while running in Play mode if true, or ignore those errors if false. + + + + + This Boolean field will cause the CrashReporting feature in Unity to be enabled if true, or disabled if false. + + + + + Tells an Editor class which run-time type it's an editor for. + + + + + If true, match this editor only if all non-fallback editors do not match. Defaults to false. + + + + + Defines which object type the custom editor class can edit. + + Type that this editor can edit. + If true, child classes of inspectedType will also show this editor. Defaults to false. + + + + Defines which object type the custom editor class can edit. + + Type that this editor can edit. + If true, child classes of inspectedType will also show this editor. Defaults to false. + + + + Adds an extra preview in the Inspector for the specified type. + + + + + Tells a DefaultPreview which class it's a preview for. + + The type you want to create a custom preview for. + + + + Tells a custom PropertyDrawer or DecoratorDrawer which run-time Serializable class or PropertyAttribute it's a drawer for. + + + + + Tells a PropertyDrawer or DecoratorDrawer class which run-time class or attribute it's a drawer for. + + If the drawer is for a custom Serializable class, the type should be that class. If the drawer is for script variables with a specific PropertyAttribute, the type should be that attribute. + If true, the drawer will be used for any children of the specified class unless they define their own drawer. + + + + Tells a PropertyDrawer or DecoratorDrawer class which run-time class or attribute it's a drawer for. + + If the drawer is for a custom Serializable class, the type should be that class. If the drawer is for script variables with a specific PropertyAttribute, the type should be that attribute. + If true, the drawer will be used for any children of the specified class unless they define their own drawer. + + + + Direct3D 11 fullscreen mode. + + + + + Exclusive mode. + + + + + Fullscreen window. + + + + + Direct3D 9 fullscreen mode. + + + + + Exclusive mode. + + + + + Fullscreen window. + + + + + Texture importer lets you modify Texture2D import settings for DDS textures from editor scripts. + + + + + Is texture data readable from scripts. + + + + + Base class to derive custom decorator drawers from. + + + + + The PropertyAttribute for the decorator. (Read Only) + + + + + Override this method to specify how tall the GUI for this decorator is in pixels. + + + + + Override this method to make your own GUI for the decorator. +See DecoratorDrawer for an example of how to use this. + + Rectangle on the screen to use for the decorator GUI. + + + + DefaultAsset is used for assets that does not have a specific type (yet). + + + + + Constructor. + + + + + Editor drag & drop operations. + + + + + Get or set ID of currently active drag and drop control. + + + + + References to Object|objects being dragged. + + + + + The file names being dragged. + + + + + The visual indication of the drag. + + + + + Accept a drag operation. + + + + + Get data associated with current drag and drop operation. + + + + + + Clears drag & drop data. + + + + + Set data associated with current drag and drop operation. + + + + + + + Start a drag operation. + + + + + + Visual indication mode for Drag & Drop operation. + + + + + Copy dragged objects. + + + + + Generic drag operation. + + + + + Link dragged objects to target. + + + + + Move dragged objects. + + + + + No indication (drag should not be performed). + + + + + Rejected drag operation. + + + + + Drawing modes for Handles.DrawCamera. + + + + + Draw objects with the albedo component only. + + + + + Display alpha channel of the rendering. + + + + + Draw objects with baked GI only. + + + + + Draw objects with different color for each chart (UV island). + + + + + Draw with different color for each cluster. + + + + + Draw diffuse color of Deferred Shading g-buffer. + + + + + Draw world space normal of Deferred Shading g-buffer. + + + + + Draw smoothness value of Deferred Shading g-buffer. + + + + + Draw specular color of Deferred Shading g-buffer. + + + + + Draw objects with directionality for real-time GI. + + + + + Draw objects with the emission component only. + + + + + Draw objects with real-time GI only. + + + + + Draw lit clusters. + + + + + Display texture resolution, with red tint indicating too high resolution, and blue tint indicating texture sizes that could be higher. + + + + + Draw the camera like it would be drawn in-game. This uses the clear flags of the camera. + + + + + Display scene overdraw, with brighter colors indicating more overdraw. + + + + + Draw color-coded render paths. + + + + + Draw directional light shadowmap cascades. + + + + + Draw objects with different color for each GI system. + + + + + Draw the camera textured with selection wireframe and no background clearing. + + + + + Draw the camera where all objects have a wireframe overlay. and no background clearing. + + + + + Draw the camera in wireframe and no background clearing. + + + + + The DrawGizmo attribute allows you to supply a gizmo renderer for any Component. + + + + + Defines when the gizmo should be invoked for drawing. + + Flags to denote when the gizmo should be drawn. + + + + Same as above. drawnGizmoType determines of what type the object we are drawing the gizmo of has to be. + + Flags to denote when the gizmo should be drawn. + Type of object for which the gizmo should be drawn. + + + + Base class to derive custom Editors from. Use this to create your own custom inspectors and editors for your objects. + + + + + A SerializedObject representing the object or objects being inspected. + + + + + The object being inspected. + + + + + An array of all the object being inspected. + + + + + On return previousEditor is an editor for targetObject or targetObjects. The function either returns if the editor is already tracking the objects, or Destroys the previous editor and creates a new one. + + The object the editor is tracking. + The requested editor type. null for the default editor for the object. + The previous editor for the object. Once CreateCachedEditor returns previousEditor is an editor for the targetObject or targetObjects. + The objects the editor is tracking. + + + + + + On return previousEditor is an editor for targetObject or targetObjects. The function either returns if the editor is already tracking the objects, or Destroys the previous editor and creates a new one. + + The object the editor is tracking. + The requested editor type. null for the default editor for the object. + The previous editor for the object. Once CreateCachedEditor returns previousEditor is an editor for the targetObject or targetObjects. + The objects the editor is tracking. + + + + + + Make a custom editor for targetObject or targetObjects. + + All objects must be of same exact type. + + + + + + + Make a custom editor for targetObject or targetObjects. + + All objects must be of same exact type. + + + + + + + Make a custom editor for targetObject or targetObjects. + + All objects must be of same exact type. + + + + + + + Make a custom editor for targetObject or targetObjects. + + All objects must be of same exact type. + + + + + + + Draw the built-in inspector. + + + + + Call this function to draw the header of the editor. + + + + + The first entry point for Preview Drawing. + + The available area to draw the preview. + + + + + Implement this method to show asset information on top of the asset preview. + + + + + Override this method if you want to change the label of the Preview area. + + + + + Override this method in subclasses if you implement OnPreviewGUI. + + + True if this component can be Previewed in its current state. + + + + + Implement this function to make a custom inspector. + + + + + Implement to create your own interactive custom preview. Interactive custom previews are used in the preview area of the inspector and the object selector. + + Rectangle in which to draw the preview. + Background image. + + + + Implement to create your own custom preview for the preview area of the inspector, primary editor headers and the object selector. + + Rectangle in which to draw the preview. + Background image. + + + + Override this method if you want to show custom controls in the preview header. + + + + + Override this method if you want to render a static preview that shows. + + + + + + + + + Repaint any inspectors that shows this editor. + + + + + Does this edit require to be repainted constantly in its current state? + + + + + Override this method in subclasses to return false if you don't want default margins. + + + + + Main Application class. + + + + + Path to the Unity editor contents folder. (Read Only) + + + + + Returns the path to the Unity editor application. (Read Only) + + + + + The path of the scene that the user has currently open (Will be an empty string if no scene is currently open). (Read Only) + + + + + Delegate which is called once after all inspectors update. + + + + + A callback to be raised when an object in the hierarchy changes. + +Each time an object is (or a group of objects are) created, renamed, parented, unparented or destroyed this callback is raised. + + + + + + Delegate for OnGUI events for every visible list item in the HierarchyWindow. + + + + + Is editor currently compiling scripts? (Read Only) + + + + + Is editor currently paused? + + + + + Is editor currently in play mode? + + + + + Is editor either currently in play mode, or about to switch to it? (Read Only) + + + + + Is editor currently connected to Unity Remote 4 client app. + + + + + Is true if the currently open scene in the editor contains unsaved modifications. + + + + + This property is true if the Editor is currently refreshing the AssetDatabase. During this time, the editor checks to see if any files have changed, whether they need to be reimported, and reimports them. (Read Only) + + + + + Delegate for changed keyboard modifier keys. + + + + + Delegate for play mode state changes. + + + + + Callback raised whenever the state of the Project window changes. + + + + + Delegate for OnGUI events for every visible list item in the ProjectWindow. + + + + + Callback raised whenever the contents of a window's search box are changed. + + + + + The time since the editor was started. (Read Only) + + + + + Delegate for generic updates. + + + + + Plays system beep sound. + + + + + Delegate to be called from EditorApplication callbacks. + + + + + Set the hierarchy sorting method as dirty. + + + + + Invokes the menu item in the specified path. + + + + + + Exit the Unity editor application. + + + + + + Delegate to be called for every visible list item in the HierarchyWindow on every OnGUI event. + + + + + + + Load the given level additively in play mode asynchronously + + + + + + Load the given level additively in play mode. + + + + + + Load the given level in play mode asynchronously. + + + + + + Load the given level in play mode. + + + + + + Prevents loading of assemblies when it is inconvenient. + + + + + Explicitly mark the current opened scene as modified. + + + + + Create a new absolutely empty scene. + + + + + Create a new scene. + + + + + Open another project. + + The path of a project to open. + Arguments to pass to command line. + + + + Opens the scene at path. + + + + + + Opens the scene at path additively. + + + + + + Delegate to be called for every visible list item in the ProjectWindow on every OnGUI event. + + + + + + + Can be used to ensure repaint of the HierarchyWindow. + + + + + Can be used to ensure repaint of the ProjectWindow. + + + + + Saves all serializable assets that have not yet been written to disk (eg. Materials). + + + + + Ask the user if they want to save the open scene. + + + + + Save the open scene. + + The file path to save at. If empty, the current open scene will be overwritten, or if never saved before, a save dialog is shown. + If set to true, the scene will be saved without changing the currentScene and without clearing the unsaved changes marker. + + True if the save succeeded, otherwise false. + + + + + Save the open scene. + + The file path to save at. If empty, the current open scene will be overwritten, or if never saved before, a save dialog is shown. + If set to true, the scene will be saved without changing the currentScene and without clearing the unsaved changes marker. + + True if the save succeeded, otherwise false. + + + + + Save the open scene. + + The file path to save at. If empty, the current open scene will be overwritten, or if never saved before, a save dialog is shown. + If set to true, the scene will be saved without changing the currentScene and without clearing the unsaved changes marker. + + True if the save succeeded, otherwise false. + + + + + Perform a single frame step. + + + + + Must be called after LockReloadAssemblies, to reenable loading of assemblies. + + + + + This class allows you to modify the Editor for an example of how to use this class. + +See Also: EditorBuildSettingsScene, EditorBuildSettings.scenes. + + + + + The list of Scenes that should be included in the build. +This is the same list of Scenes that is shown in the window. You can modify this list to set up which Scenes should be included in the build. + + + + + This class is used for entries in the Scenes list, as displayed in the window. This class contains the scene path of a scene and an enabled flag that indicates wether the scene is enabled in the BuildSettings window or not. + +You can use this class in combination with EditorBuildSettings.scenes to populate the list of Scenes included in the build via script. This is useful when creating custom editor scripts to automate your build pipeline. + +See EditorBuildSettings.scenes for an example script. + + + + + Whether this scene is enabled in the for an example of how to use this class. + +See Also: EditorBuildSettingsScene, EditorBuildSettings.scenes. + + + + + The file path of the scene as listed in the Editor for an example of how to use this class. + +See Also: EditorBuildSettingsScene, EditorBuildSettings.scenes. + + + + + Defines how a curve is attached to an object that it controls. + + + + + The transform path of the object that is animated. + + + + + The property of the object that is animated. + + + + + These work pretty much like the normal GUI functions - and also have matching implementations in EditorGUILayout. + + + + + Is the platform-dependent "action" modifier key held down? (Read Only) + + + + + The indent level of the field labels. + + + + + Makes the following controls give the appearance of editing multiple different values. + + + + + Check if any control was changed inside a block of code. + + + + + Create a group of controls that can be disabled. + + Boolean specifying if the controls inside the group should be disabled. + + + + Create a Property wrapper, useful for making regular GUI controls work with SerializedProperty. + + Rectangle on the screen to use for the control, including label if applicable. + Optional label in front of the slider. Use null to use the name from the SerializedProperty. Use GUIContent.none to not display a label. + The SerializedProperty to use for the control. + + The actual label to use for the control. + + + + + Make Center & Extents field for entering a Bounds. + + Rectangle on the screen to use for the field. + Optional label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make Center & Extents field for entering a Bounds. + + Rectangle on the screen to use for the field. + Optional label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Check if any control was changed inside a block of code. + + + + + True if GUI.changed was set to true, otherwise false. + + + + + Begins a ChangeCheckScope. + + + + + Make a field for selecting a Color. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + + The color selected by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + Optional label to display in front of the field. Pass [[GUIContent.none] to hide the label. + + + + Make a field for editing an AnimationCurve. + + Rectangle on the screen to use for the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + Optional label to display in front of the field. Pass [[GUIContent.none] to hide the label. + + + + Make a delayed text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Rectangle on the screen to use for the double field. + The double property to edit. + Optional label to display in front of the double field. Pass GUIContent.none to hide label. + + + + Make a delayed text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Rectangle on the screen to use for the float field. + The float property to edit. + Optional label to display in front of the float field. Pass GUIContent.none to hide label. + + + + Make a delayed text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + Rectangle on the screen to use for the int field. + The int property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + + + + Make a delayed text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Rectangle on the screen to use for the text field. + The text property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + + + + Create a group of controls that can be disabled. + + + + + Create a new DisabledGroupScope and begin the corresponding group. + + Boolean specifying if the controls inside the group should be disabled. + + + + Create a group of controls that can be disabled. + + + + + Create a new DisabledScope and begin the corresponding group. + + Boolean specifying if the controls inside the group should be disabled. + + + + Make a text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering doubles. + + Rectangle on the screen to use for the double field. + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Draws the texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + Material to be used when drawing the texture. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws the texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + Material to be used when drawing the texture. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws the texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + Material to be used when drawing the texture. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws the texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + Material to be used when drawing the texture. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws a filled rectangle of color at the specified position and size within the current editor window. + + The position and size of the rectangle to draw. + The color of the rectange. + + + + Draws the alpha channel of a texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws the alpha channel of a texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws the alpha channel of a texture within a rectangle. + + Rectangle on the screen to draw the texture within. + Texture to display. + How to scale the image when the aspect ratio of it doesn't fit the aspect ratio to be drawn within. + Aspect ratio to use for the source image. If 0 (the default), the aspect ratio from the image is used. + + + + Draws a label with a drop shadow. + + Where to show the label. + Text to show +@style style to use. + + + + + + Draws a label with a drop shadow. + + Where to show the label. + Text to show +@style style to use. + + + + + + Draws a label with a drop shadow. + + Where to show the label. + Text to show +@style style to use. + + + + + + Draws a label with a drop shadow. + + Where to show the label. + Text to show +@style style to use. + + + + + + Ends a change check started with BeginChangeCheck (). + + + True if GUI.changed was set to true, otherwise false. + + + + + Ends a disabled group started with BeginDisabledGroup. + + + + + Ends a Property wrapper started with BeginProperty. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Make a field for enum based masks. + + Rectangle on the screen to use for this control. + Enum to use for the flags. + Optional GUIStyle. + Caption/label for the control. + + The value modified by the user. + + + + + Internal version that also gives you back which flags were changed and what they were changed to. + + + + + Make an enum popup selection field for a bitmask. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum options the field shows. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field for a bitmask. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum options the field shows. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + + The enum option that has been selected by the user. + + + + + Make a text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering floats. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Move keyboard focus to a named text field and begin editing of the content. + + Name set using GUI.SetNextControlName. + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + Rectangle on the screen to use for the arrow and label. + The shown foldout state. + The label to show. + Optional GUIStyle. + Should the label be a clickable part of the control? + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Get the height needed for a PropertyField control. + + Height of the property area. + Descriptive text or image. + Should the returned height include the height of child properties? + + + + Get the height needed for a PropertyField control. + + Height of the property area. + Descriptive text or image. + Should the returned height include the height of child properties? + + + + Get the height needed for a PropertyField control. + + Height of the property area. + Descriptive text or image. + Should the returned height include the height of child properties? + + + + Make a label for some control. + + Rectangle on the screen to use in total for both the label and the control. + Rectangle on the screen to use for the label. + Label to show for the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Optional GUIStyle to use for the label. + + + + Make a label for some control. + + Rectangle on the screen to use in total for both the label and the control. + Rectangle on the screen to use for the label. + Label to show for the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Optional GUIStyle to use for the label. + + + + Make a label for some control. + + Rectangle on the screen to use in total for both the label and the control. + Rectangle on the screen to use for the label. + Label to show for the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Optional GUIStyle to use for the label. + + + + Make a help box with a message to the user. + + Rectangle on the screen to draw the help box within. + The message text. + The type of message. + + + + Make an inspector-window-like titlebar. + + Rectangle on the screen to use for the titlebar. + The foldout state shown with the arrow. + The object (for example a component) that the titlebar is for. + The objects that the titlebar is for. + Whether this editor should display a foldout arrow in order to toggle the display of its properties. + + The foldout state selected by the user. + + + + + Make an inspector-window-like titlebar. + + Rectangle on the screen to use for the titlebar. + The foldout state shown with the arrow. + The object (for example a component) that the titlebar is for. + The objects that the titlebar is for. + Whether this editor should display a foldout arrow in order to toggle the display of its properties. + + The foldout state selected by the user. + + + + + Make an inspector-window-like titlebar. + + Rectangle on the screen to use for the titlebar. + The foldout state shown with the arrow. + The object (for example a component) that the titlebar is for. + The objects that the titlebar is for. + Whether this editor should display a foldout arrow in order to toggle the display of its properties. + + The foldout state selected by the user. + + + + + Make an inspector-window-like titlebar. + + Rectangle on the screen to use for the titlebar. + The foldout state shown with the arrow. + The object (for example a component) that the titlebar is for. + The objects that the titlebar is for. + Whether this editor should display a foldout arrow in order to toggle the display of its properties. + + The foldout state selected by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Rectangle on the screen to use for the int field. + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional GUIStyle. + + The value of the option that has been selected by the user. + + + + + + + Rectangle on the screen to use for the field. + The SerializedProperty to use for the control. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional label in front of the field. + + + + + + Rectangle on the screen to use for the field. + The SerializedProperty to use for the control. + An array with the displayed options the user can choose from. + An array with the values for each option. If optionValues a direct mapping of selectedValue to displayedOptions is assumed. + Optional label in front of the field. + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a label field. (Useful for showing read-only info.) + + Rectangle on the screen to use for the label field. + Label in front of the label field. + The label to show to the right. + Style information (color, etc) for displaying the label. + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a layer selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + + The layer selected by the user. + + + + + Make a text field for entering long integers. + + Rectangle on the screen to use for the long field. + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Rectangle on the screen to use for the long field. + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Rectangle on the screen to use for the long field. + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Rectangle on the screen to use for the long field. + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Rectangle on the screen to use for the long field. + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + + The value entered by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a field for masks. + + Rectangle on the screen to use for this control. + Label for the field. + The current mask to display. + A string array containing the labels for each flag. + Optional GUIStyle. + A string array containing the labels for each flag. + + The value modified by the user. + + + + + Make a special slider the user can use to specify a range between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + + + + Make a special slider the user can use to specify a range between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + + + + Make a special slider the user can use to specify a range between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + + + + Make a special slider the user can use to specify a range between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + + + + Make a multi-control with text fields for entering multiple floats in the same line. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + Array with small labels to show in front of each float field. There is room for one letter per field only. + Array with the values to edit. + + + + Make a multi-control with text fields for entering multiple floats in the same line. + + Rectangle on the screen to use for the float field. + Optional label to display in front of the float field. + Array with small labels to show in front of each float field. There is room for one letter per field only. + Array with the values to edit. + + + + Make a multi-control with several property fields in the same line. + + Rectangle on the screen to use for the multi-property field. + The SerializedProperty of the first property to make a control for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + Array with small labels to show in front of each float field. There is room for one letter per field only. + + + + Make a multi-control with several property fields in the same line. + + Rectangle on the screen to use for the multi-property field. + The SerializedProperty of the first property to make a control for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + Array with small labels to show in front of each float field. There is room for one letter per field only. + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + + The object that has been set by the user. + + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label to display in front of the field. Pass GUIContent.none to hide the label. + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label to display in front of the field. Pass GUIContent.none to hide the label. + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label to display in front of the field. Pass GUIContent.none to hide the label. + + + + Make an object field. You can assign objects either by drag and drop objects or by selecting an object using the Object Picker. + + Rectangle on the screen to use for the field. + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label to display in front of the field. Pass GUIContent.none to hide the label. + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Rectangle on the screen to use for the password field. + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + + The password entered by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + + The index of the option that has been selected by the user. + + + + + Make a label in front of some control. + + Rectangle on the screen to use in total for both the label and the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Label to show in front of the control. + Style to use for the label. + + Rectangle on the screen to use just for the control itself. + + + + + Make a label in front of some control. + + Rectangle on the screen to use in total for both the label and the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Label to show in front of the control. + Style to use for the label. + + Rectangle on the screen to use just for the control itself. + + + + + Make a label in front of some control. + + Rectangle on the screen to use in total for both the label and the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Label to show in front of the control. + Style to use for the label. + + Rectangle on the screen to use just for the control itself. + + + + + Make a label in front of some control. + + Rectangle on the screen to use in total for both the label and the control. + The unique ID of the control. If none specified, the ID of the following control is used. + Label to show in front of the control. + Style to use for the label. + + Rectangle on the screen to use just for the control itself. + + + + + Make a progress bar. + + Rectangle on the screen to use in total for both the control. + Value that is shown. + + + + + + Make a field for SerializedProperty. + + Rectangle on the screen to use for the property field. + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Make a field for SerializedProperty. + + Rectangle on the screen to use for the property field. + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Create a Property wrapper, useful for making regular GUI controls work with SerializedProperty. + + + + + The actual label to use for the control. + + + + + Create a new PropertyScope and begin the corresponding property. + + Rectangle on the screen to use for the control, including label if applicable. + Label in front of the slider. Use null to use the name from the SerializedProperty. Use GUIContent.none to not display a label. + The SerializedProperty to use for the control. + + + + Make an X, Y, W & H field for entering a Rect. + + Rectangle on the screen to use for the field. + Optional label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y, W & H field for entering a Rect. + + Rectangle on the screen to use for the field. + Optional label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y, W & H field for entering a Rect. + + Rectangle on the screen to use for the field. + Optional label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y, W & H for Rect using SerializedProperty (not public). + + + + + Make a selectable label field. (Useful for showing read-only info that can be copy-pasted.) + + Rectangle on the screen to use for the label. + The text to show. + Optional GUIStyle. + + + + Make a selectable label field. (Useful for showing read-only info that can be copy-pasted.) + + Rectangle on the screen to use for the label. + The text to show. + Optional GUIStyle. + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a slider the user can drag to change a value between a min and a max. + + Rectangle on the screen to use for the slider. + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a tag selection field. + + Rectangle on the screen to use for the field. + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + + The tag selected by the user. + + + + + Make a text area. + + Rectangle on the screen to use for the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text area. + + Rectangle on the screen to use for the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a text field. + + Rectangle on the screen to use for the text field. + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + + The text entered by the user. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle. + + Rectangle on the screen to use for the toggle. + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + + The selected state of the toggle. + + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Rectangle on the screen to use for the toggle. + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + + The value set by the user. + + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Rectangle on the screen to use for the toggle. + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + + The value set by the user. + + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Rectangle on the screen to use for the toggle. + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + + The value set by the user. + + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Rectangle on the screen to use for the toggle. + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + + The value set by the user. + + + + + Make an X & Y field for entering a Vector2. + + Rectangle on the screen to use for the field. + Label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X & Y field for entering a Vector2. + + Rectangle on the screen to use for the field. + Label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y & Z field for entering a Vector3. + + Rectangle on the screen to use for the field. + Label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y & Z field for entering a Vector3. + + Rectangle on the screen to use for the field. + Label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Make an X, Y, Z & W field for entering a Vector4. + + Rectangle on the screen to use for the field. + Label to display above the field. + The value to edit. + + The value entered by the user. + + + + + Auto-layouted version of EditorGUI. + + + + + Begins a group that can be be hidden/shown and the transition will be animated. + + A value between 0 and 1, 0 being hidden, and 1 being fully visible. + + If the group is visible or not. + + + + + Begin a horizontal group and get its rect back. + + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Begin a horizontal group and get its rect back. + + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Begin an automatically layouted scrollview. + + The position to use display. + Optional parameter to always show the horizontal scrollbar. If false or left out, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Optional parameter to always show the vertical scrollbar. If false or left out, it is only shown when content inside the ScrollView is taller than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Begin an automatically layouted scrollview. + + The position to use display. + Optional parameter to always show the horizontal scrollbar. If false or left out, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Optional parameter to always show the vertical scrollbar. If false or left out, it is only shown when content inside the ScrollView is taller than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Begin an automatically layouted scrollview. + + The position to use display. + Optional parameter to always show the horizontal scrollbar. If false or left out, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Optional parameter to always show the vertical scrollbar. If false or left out, it is only shown when content inside the ScrollView is taller than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Begin an automatically layouted scrollview. + + The position to use display. + Optional parameter to always show the horizontal scrollbar. If false or left out, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Optional parameter to always show the vertical scrollbar. If false or left out, it is only shown when content inside the ScrollView is taller than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Begin an automatically layouted scrollview. + + The position to use display. + Optional parameter to always show the horizontal scrollbar. If false or left out, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Optional parameter to always show the vertical scrollbar. If false or left out, it is only shown when content inside the ScrollView is taller than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Begin a vertical group with a toggle to enable or disable all the controls within at once. + + Label to show above the toggled controls. + Enabled state of the toggle group. + + The enabled state selected by the user. + + + + + Begin a vertical group with a toggle to enable or disable all the controls within at once. + + Label to show above the toggled controls. + Enabled state of the toggle group. + + The enabled state selected by the user. + + + + + Begin a vertical group and get its rect back. + + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. + Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Begin a vertical group and get its rect back. + + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. + Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Begin a vertical group and get its rect back. + + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. + Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make Center & Extents field for entering a Bounds. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make Center & Extents field for entering a Bounds. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make Center & Extents field for entering a Bounds. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a field for selecting a Color. + + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The color selected by the user. + + + + + Make a field for selecting a Color. + + Optional label to display in front of the field. + The color to edit. + If true, the color picker should show the eyedropper control. If false, don't show it. + If true, allow the user to set an alpha value for the color. If false, hide the alpha component. + If true, treat the color as an HDR value. If false, treat it as a standard LDR value. + An object that sets the presentation parameters for an HDR color. If not using an HDR color, set this to null. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The color selected by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + Optional label to display in front of the field. + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The curve edited by the user. + + + + + Make a field for editing an AnimationCurve. + + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + Optional label to display in front of the field. Pass [[GUIContent.none] to hide the label. + + + + Make a field for editing an AnimationCurve. + + The curve to edit. + The color to show the curve with. + Optional rectangle that the curve is restrained within. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + Optional label to display in front of the field. Pass [[GUIContent.none] to hide the label. + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the double field. + + + + + Make a delayed text field for entering doubles. + + The double property to edit. + Optional label to display in front of the double field. Pass GUIContent.none to hide label. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a delayed text field for entering doubles. + + The double property to edit. + Optional label to display in front of the double field. Pass GUIContent.none to hide label. + + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, + GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the float field. + + + + + Make a delayed text field for entering floats. + + The float property to edit. + Optional label to display in front of the float field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a delayed text field for entering floats. + + The float property to edit. + Optional label to display in front of the float field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the int field. + + + + + Make a delayed text field for entering integers. + + The int property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a delayed text field for entering integers. + + The int property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + Optional label to display in front of the int field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. Note that the return value will not change until the user has pressed enter or focus is moved away from the text field. + + + + + Make a delayed text field. + + The text property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a delayed text field. + + The text property to edit. + Optional label to display in front of the int field. Pass GUIContent.none to hide label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering double values. + + Optional label to display in front of the double field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Closes a group started with BeginFadeGroup. + + + + + Close a group started with BeginHorizontal. + + + + + Ends a scrollview started with a call to BeginScrollView. + + + + + Close a group started with BeginToggleGroup. + + + + + Close a group started with BeginVertical. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make a field for enum based masks. + + Prefix label for this field. + Enum to use for the flags. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + The value modified by the user. + + + + + Make an enum popup selection field for a bitmask. + + Optional label in front of the field. + The enum options the field shows. + Optional layout options. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field for a bitmask. + + Optional label in front of the field. + The enum options the field shows. + Optional layout options. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field for a bitmask. + + Optional label in front of the field. + The enum options the field shows. + Optional layout options. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field for a bitmask. + + Optional label in front of the field. + The enum options the field shows. + Optional layout options. + Optional GUIStyle. + + The enum options that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Make an enum popup selection field. + + Optional label in front of the field. + The enum option the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The enum option that has been selected by the user. + + + + + Begins a group that can be be hidden/shown and the transition will be animated. + + + + + Whether the group is visible. + + + + + Create a new FadeGroupScope and begin the corresponding group. + + A value between 0 and 1, 0 being hidden, and 1 being fully visible. + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering float values. + + Optional label to display in front of the float field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Make a label with a foldout arrow to the left of it. + + The shown foldout state. + The label to show. + Optional GUIStyle. + Whether to toggle the foldout state when the label is clicked. + + The foldout state selected by the user. If true, you should render sub-objects. + + + + + Get a rect for an Editor control. + + Optional boolean to specify if the control has a label. Default is true. + The height in pixels of the control. Default is EditorGUIUtility.singleLineHeight. + Optional GUIStyle to use for the control. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Get a rect for an Editor control. + + Optional boolean to specify if the control has a label. Default is true. + The height in pixels of the control. Default is EditorGUIUtility.singleLineHeight. + Optional GUIStyle to use for the control. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Get a rect for an Editor control. + + Optional boolean to specify if the control has a label. Default is true. + The height in pixels of the control. Default is EditorGUIUtility.singleLineHeight. + Optional GUIStyle to use for the control. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Get a rect for an Editor control. + + Optional boolean to specify if the control has a label. Default is true. + The height in pixels of the control. Default is EditorGUIUtility.singleLineHeight. + Optional GUIStyle to use for the control. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a help box with a message to the user. + + The message text. + The type of message. + If true, the box will cover the whole width of the window; otherwise it will cover the controls part only. + + + + Make a help box with a message to the user. + + The message text. + The type of message. + If true, the box will cover the whole width of the window; otherwise it will cover the controls part only. + + + + Disposable helper class for managing BeginHorizontal / EndHorizontal. + + + + + The rect of the horizontal group. + + + + + Create a new HorizontalScope and begin the corresponding horizontal group. + + The style to use for background image and padding values. If left out, the background is transparent. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Create a new HorizontalScope and begin the corresponding horizontal group. + + The style to use for background image and padding values. If left out, the background is transparent. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make an inspector-window-like titlebar. + + The foldout state shown with the arrow. + The object (for example a component) or objects that the titlebar is for. + + + The foldout state selected by the user. + + + + + Make an inspector-window-like titlebar. + + The foldout state shown with the arrow. + The object (for example a component) or objects that the titlebar is for. + + + The foldout state selected by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering integers. + + Optional label to display in front of the int field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + Optional label in front of the field. + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value of the option that has been selected by the user. + + + + + Make an integer popup selection field. + + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional label in front of the field. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make an integer popup selection field. + + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional label in front of the field. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make an integer popup selection field. + + The value of the option the field shows. + An array with the displayed options the user can choose from. + An array with the values for each option. + Optional label in front of the field. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a slider the user can drag to change an integer value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a label field. (Useful for showing read-only info.) + + Label in front of the label field. + The label to show to the right. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a layer selection field. + + Optional label in front of the field. + The layer shown in the field. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The layer selected by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a text field for entering long integers. + + Optional label to display in front of the long field. + The value to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a field for masks. + + Prefix label of the field. + The current mask to display. + A string array containing the labels for each flag. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + The value modified by the user. + + + + + Make a special slider the user can use to specify a range between a min and a max. + + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a special slider the user can use to specify a range between a min and a max. + + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a special slider the user can use to specify a range between a min and a max. + + Optional label in front of the slider. + The lower value of the range the slider shows, passed by reference. + The upper value at the range the slider shows, passed by reference. + The limit at the left end of the slider. + The limit at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The object that has been set by the user. + + + + + Make a field to receive any object type. + + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The object that has been set by the user. + + + + + Make a field to receive any object type. + + Optional label in front of the field. + The object the field shows. + The type of the objects that can be assigned. + Allow assigning scene objects. See Description for more info. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The object that has been set by the user. + + + + + Make a field to receive any object type. + + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. Pass GUIContent.none to hide the label. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. Pass GUIContent.none to hide the label. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. Pass GUIContent.none to hide the label. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object reference property the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. Pass GUIContent.none to hide the label. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. + Optional label in front of the field. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. + Optional label in front of the field. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a field to receive any object type. + + The object the field shows. + The type of the objects that can be assigned. + Optional label in front of the field. + Optional label in front of the field. + An optional list of layout options that specify extra layout properties. Any values passed in here will override settings defined by the style. +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a text field where the user can enter a password. + + Optional label to display in front of the password field. + The password to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The password entered by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a generic popup selection field. + + Optional label in front of the field. + The index of the option the field shows. + An array with the options shown in the popup. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The index of the option that has been selected by the user. + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a label in front of some control. + + Label to show to the left of the control. + + + + + + Make a field for SerializedProperty. + + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Make a field for SerializedProperty. + + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Make a field for SerializedProperty. + + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Make a field for SerializedProperty. + + The SerializedProperty to make a field for. + Optional label to use. If not specified the label of the property itself is used. Use GUIContent.none to not display a label at all. + If true the property including children is drawn; otherwise only the control itself (such as only a foldout but nothing below it). + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + True if the property has children and is expanded and includeChildren was set to false; otherwise false. + + + + + Make an X, Y, W & H field for entering a Rect. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make an X, Y, W & H field for entering a Rect. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make an X, Y, W & H field for entering a Rect. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Disposable helper class for managing BeginScrollView / EndScrollView. + + + + + Whether this ScrollView should handle scroll wheel events. (default: true). + + + + + The modified scrollPosition. Feed this back into the variable you pass in, as shown in the example. + + + + + Create a new ScrollViewScope and begin the corresponding ScrollView. + + The scroll position to use. + Whether to always show the horizontal scrollbar. If false, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Whether to always show the vertical scrollbar. If false, it is only shown when the content inside the ScrollView is higher than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + + Create a new ScrollViewScope and begin the corresponding ScrollView. + + The scroll position to use. + Whether to always show the horizontal scrollbar. If false, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Whether to always show the vertical scrollbar. If false, it is only shown when the content inside the ScrollView is higher than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + + Create a new ScrollViewScope and begin the corresponding ScrollView. + + The scroll position to use. + Whether to always show the horizontal scrollbar. If false, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Whether to always show the vertical scrollbar. If false, it is only shown when the content inside the ScrollView is higher than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + + Create a new ScrollViewScope and begin the corresponding ScrollView. + + The scroll position to use. + Whether to always show the horizontal scrollbar. If false, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Whether to always show the vertical scrollbar. If false, it is only shown when the content inside the ScrollView is higher than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + + Create a new ScrollViewScope and begin the corresponding ScrollView. + + The scroll position to use. + Whether to always show the horizontal scrollbar. If false, it is only shown when the content inside the ScrollView is wider than the scrollview itself. + Whether to always show the vertical scrollbar. If false, it is only shown when the content inside the ScrollView is higher than the scrollview itself. + Optional GUIStyle to use for the horizontal scrollbar. If left out, the horizontalScrollbar style from the current GUISkin is used. + Optional GUIStyle to use for the vertical scrollbar. If left out, the verticalScrollbar style from the current GUISkin is used. + + + + + + + Make a selectable label field. (Useful for showing read-only info that can be copy-pasted.) + + The text to show. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a selectable label field. (Useful for showing read-only info that can be copy-pasted.) + + The text to show. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value that has been set by the user. + + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a slider the user can drag to change a value between a min and a max. + + Optional label in front of the slider. + The value the slider shows. This determines the position of the draggable thumb. + The value at the left end of the slider. + The value at the right end of the slider. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a small space between the previous control and the following. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a tag selection field. + + Optional label in front of the field. + The tag the field shows. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The tag selected by the user. + + + + + Make a text area. + + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text area. + + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a text field. + + Optional label to display in front of the text field. + The text to edit. + Optional GUIStyle. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The text entered by the user. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Make a toggle. + + Optional label in front of the toggle. + The shown state of the toggle. + Optional GUIStyle. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> + +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The selected state of the toggle. + + + + + Begin a vertical group with a toggle to enable or disable all the controls within at once. + + + + + The enabled state selected by the user. + + + + + + + Label to show above the toggled controls. + Enabled state of the toggle group. + + + + + + Label to show above the toggled controls. + Enabled state of the toggle group. + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make a toggle field where the toggle is to the left and the label immediately to the right of it. + + Label to display next to the toggle. + The value to edit. + Optional GUIStyle to use for the label. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Make an X & Y field for entering a Vector2. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + + + The value entered by the user. + + + + + Make an X & Y field for entering a Vector2. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> + + + The value entered by the user. + + + + + Make an X, Y & Z field for entering a Vector3. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make an X, Y & Z field for entering a Vector3. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting + properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Make an X, Y, Z & W field for entering a Vector4. + + Label to display above the field. + The value to edit. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + The value entered by the user. + + + + + Disposable helper class for managing BeginVertical / EndVertical. + + + + + The rect of the vertical group. + + + + + Create a new VerticalScope and begin the corresponding vertical group. + + The style to use for background image and padding values. If left out, the background is transparent. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Create a new VerticalScope and begin the corresponding vertical group. + + The style to use for background image and padding values. If left out, the background is transparent. + An optional list of layout options that specify extra layouting properties. Any values passed in here will override settings defined by the style.<br> +See Also: GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, +GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight. + + + + Miscellaneous helper stuff for EditorGUI. + + + + + The width of the GUI area for the current EditorWindow or other view. + + + + + Is a text field currently editing text? + + + + + The minimum width in pixels reserved for the fields of Editor GUI controls. + + + + + Is the Editor GUI is hierarchy mode? + + + + + Is the user currently using the pro skin? (Read Only) + + + + + The width in pixels reserved for labels of Editor GUI controls. + + + + + The scale of GUI points relative to screen pixels for the current view + +This value is the number of screen pixels per point of interface space. For instance, 2.0 on retina displays. Note that the value may differ from one view to the next if the views are on monitors with different UI scales. + + + + + Get the height used for a single Editor control such as a one-line EditorGUI.TextField or EditorGUI.Popup. + + + + + Get the height used by default for vertical spacing between controls. + + + + + The system copy buffer. + + + + + Get a white texture. + + + + + Is the Editor GUI currently in wide mode? + + + + + Add a custom mouse pointer to a control. + + The rectangle the control should be shown within. + The mouse cursor to use. + ID of a target control. + + + + Add a custom mouse pointer to a control. + + The rectangle the control should be shown within. + The mouse cursor to use. + ID of a target control. + + + + Creates an event that can be sent to another window. + + The command to be sent. + + + + Draw a color swatch. + + The rectangle to draw the color swatch within. + The color to draw. + + + + Draw a curve swatch. + + The rectangle to draw the color swatch within. + The curve to draw. + The curve to draw as a SerializedProperty. + The color to draw the curve with. + The color to draw the background with. + Optional parameter to specify the range of the curve which should be included in swatch. + + + + Draw a curve swatch. + + The rectangle to draw the color swatch within. + The curve to draw. + The curve to draw as a SerializedProperty. + The color to draw the curve with. + The color to draw the background with. + Optional parameter to specify the range of the curve which should be included in swatch. + + + + Draw swatch with a filled region between two SerializedProperty curves. + + + + + + + + + + + Draw swatch with a filled region between two curves. + + + + + + + + + + + Get a texture from its source filename. + + + + + + Get one of the built-in GUI skins, which can be the game view, inspector or scene view skin as chosen by the parameter. + + + + + + Layout list of string items left to right, top to bottom in the given area. + + Area where to layout the items. + Style for the items. + Extra horizontal spacing between successive items. + Extra vertical spacing between item rows. + Strings to layout. + + List of rectangles for the passed items. + + + + + Get the size that has been set using SetIconSize. + + + + + The controlID of the currently showing object picker. + + + + + The object currently selected in the object picker. + + + + + Does a given class have per-object thumbnails? + + + + + + Fetch the GUIContent from the Unity builtin resources with the given name. + + Content name. + Tooltip. + + + + + Fetch the GUIContent from the Unity builtin resources with the given name. + + Content name. + Tooltip. + + + + + Check if any enabled camera can render to a particular display. + + Display index. + + True if a camera will render to the display. + + + + + Load a built-in resource. + + + + + + Load a required built-in resource. + + + + + + Make all EditorGUI look like regular controls. + + Width to use for prefixed labels. + Width of text entries. + + + + Make all EditorGUI look like regular controls. + + Width to use for prefixed labels. + Width of text entries. + + + + Make all EditorGUI look like regular controls. + + Width to use for prefixed labels. + Width of text entries. + + + + Make all EditorGUI look like simplified outline view controls. + + + + + Return a GUIContent object with the name and icon of an Object. + + + + + + + Ping an object in the Scene like clicking it in an inspector. + + The object to be pinged. + + + + + Ping an object in the Scene like clicking it in an inspector. + + The object to be pinged. + + + + + Convert a position from pixel to point space. + + A GUI position in pixel space. + + A vector representing the same position in point space. + + + + + Convert a Rect from pixel space to point space. + + A GUI rect measured in pixels. + + A rect representing the same area in points. + + + + + Convert a Rect from point space to pixel space. + + A GUI rect measured in points. + + A rect representing the same area in pixels. + + + + + Converts a position from point to pixel space. + + A GUI position in point space. + + The same position in pixel space. + + + + + Send an input event into the game. + + + + + + Render all ingame cameras. + + The device coordinates to render all game cameras into. + Show gizmos as well. + + + + + + Render all ingame cameras. + + The device coordinates to render all game cameras into. + Show gizmos as well. + + + + + + Set icons rendered as part of GUIContent to be rendered at a specific size. + + + + + + Show the object picker from code. + + The object to be selected by default. + Is selection of scene objects allowed, or should it only show assets. + Default search filter to apply. + The id of the control to set. This is useful if you are showing more than one of these. You can get the value at a later time. + + + + Utility functions for working with JSON data and engine objects. + + + + + Overwrite data in an object by reading from its JSON representation. + + The JSON representation of the object. + The object to overwrite. + + + + Generate a JSON representation of an object. + + The object to convert to JSON form. + If true, format the output for readability. If false, format the output for minimum size. Default is false. + + The object's data in JSON format. + + + + + Generate a JSON representation of an object. + + The object to convert to JSON form. + If true, format the output for readability. If false, format the output for minimum size. Default is false. + + The object's data in JSON format. + + + + + Stores and accesses Unity editor preferences. + + + + + Removes all keys and values from the preferences. Use with caution. + + + + + Removes key and its corresponding value from the preferences. + + + + + + Returns the value corresponding to key in the preference file if it exists. + + + + + + + Returns the value corresponding to key in the preference file if it exists. + + + + + + + Returns the float value corresponding to key if it exists in the preference file. + + Name of key to read float from. + Float value to return if the key is not in the storage. + + The float value stored in the preference file or the defaultValue id the + requested float does not exist. + + + + + Returns the float value corresponding to key if it exists in the preference file. + + Name of key to read float from. + Float value to return if the key is not in the storage. + + The float value stored in the preference file or the defaultValue id the + requested float does not exist. + + + + + Returns the value corresponding to key in the preference file if it exists. + + Name of key to read integer from. + Integer value to return if the key is not in the storage. + + The value stored in the preference file. + + + + + Returns the value corresponding to key in the preference file if it exists. + + Name of key to read integer from. + Integer value to return if the key is not in the storage. + + The value stored in the preference file. + + + + + Returns the value corresponding to key in the preference file if it exists. + + + + + + + Returns the value corresponding to key in the preference file if it exists. + + + + + + + Returns true if key exists in the preferences file. + + Name of key to check for. + + The existence or not of the key. + + + + + Sets the value of the preference identified by key. + + + + + + + Sets the float value of the preference identified by key. + + Name of key to write float into. + Float value to write into the storage. + + + + Sets the value of the preference identified by key as an integer. + + Name of key to write integer to. + Value of the integer to write into the storage. + + + + Sets the value of the preference identified by key. + + + + + + + The editor selected render mode for Scene View selection. + + + + + The Renderer has no selection highlight or wireframe in the Editor. + + + + + The Renderer has selection highlight but no wireframe in the Editor. + + + + + The Renderer has wireframe but not selection highlight in the Editor. + + + + + Enum that selects which skin to return from EditorGUIUtility.GetBuiltinSkin. + + + + + The skin used for game views. + + + + + The skin used for inspectors. + + + + + The skin used for scene views. + + + + + Common GUIStyles used for EditorGUI controls. + + + + + Bold font. + + + + + Style for bold label. + + + + + Style for label with small font which is centered and grey. + + + + + Style used for headings for Color fields. + + + + + Style used for headings for EditorGUI.Foldout. + + + + + Style used for headings for EditorGUI.Foldout. + + + + + Style used for background box for EditorGUI.HelpBox. + + + + + Wrap content in a vertical group with this style to get the default margins used in the Inspector. + + + + + Wrap content in a vertical group with this style to get full width margins in the Inspector. + + + + + Style used for the labelled on all EditorGUI overloads that take a prefix label. + + + + + Style for label with large font. + + + + + Style used for headings for Layer masks. + + + + + Mini Bold font. + + + + + Style for mini bold label. + + + + + Style used for a standalone small button. + + + + + Style used for the leftmost button in a horizontal button group. + + + + + Style used for the middle buttons in a horizontal group. + + + + + Style used for the rightmost button in a horizontal group. + + + + + Mini font. + + + + + Style for label with small font. + + + + + Smaller text field. + + + + + Style used for field editors for numbers. + + + + + Style used for headings for object fields. + + + + + Style used for object fields that have a thumbnail (e.g Textures). + + + + + Style used for headings for the Select button in object fields. + + + + + Style used for EditorGUI.Popup, EditorGUI.EnumPopup,. + + + + + Style used for a radio button. + + + + + Standard font. + + + + + Style used for EditorGUI.TextArea. + + + + + Style used for EditorGUI.TextField. + + + + + Style used for headings for EditorGUI.Toggle. + + + + + Style used for headings for EditorGUILayout.BeginToggleGroup. + + + + + Toolbar background from top of windows. + + + + + Style for Button and Toggles in toolbars. + + + + + Toolbar Dropdown. + + + + + Toolbar Popup. + + + + + Toolbar text field. + + + + + Style for white bold label. + + + + + Style for white label. + + + + + Style for white large label. + + + + + Style for white mini label. + + + + + Style for word wrapped label. + + + + + Style for word wrapped mini label. + + + + + User build settings for the Editor + + + + + The currently active build target. + + + + + Triggered in response to SwitchActiveBuildTarget. + + + + + DEFINE directives for the compiler. + + + + + Enable source-level debuggers to connect. + + + + + Android platform options. + + + + + Set which build system to use for building the Android package. + + + + + Is build script only enabled. + + + + + Build data compressed with PSArc. + + + + + Start the player with a connection to the profiler. + + + + + Enables a development build. + + + + + Enables a Linux headless build. + + + + + Are divide by zero's actively checked? + + + + + Are null references actively checked? + + + + + Export Android Project for use with Android StudioGradle or EclipseADT. + + + + + Force installation of package, even if error. + + + + + Force full optimizations for script complilation in Development builds. + + + + + Place the built player in the build folder. + + + + + Scheme with which the project will be run in Xcode. + + + + + Create a .cia "download image" for deploying to test kits (3DS). + + + + + Build submission materials. + + + + + PS4 Build Subtarget. + + + + + Specifies which version of PS4 hardware to target. + + + + + PSM Build Subtarget. + + + + + PS Vita Build subtarget. + + + + + The currently selected build target group. + + + + + The currently selected target for a standalone build. + + + + + When building an Xbox One Streaming Install package (makepkg.exe) The layout generation code in Unity will assign each scene and associated assets to individual chunks. Unity will mark scene 0 as being part of the launch range, IE the set of chunks required to launch the game, you may include additional scenes in this launch range if you desire, this specifies a range of scenes (starting at 0) to be included in the launch set. + + + + + Symlink runtime libraries with an iOS Xcode project. + + + + + The texture compression type to be used when building. + + + + + Use prebuilt JavaScript version of Unity engine. + + + + + Build the webplayer along with the UnityObject.js file (so it doesn't need to be downloaded). + + + + + Select the streaming option for a webplayer build. + + + + + Boot mode of a devkit. + + + + + Wii U player debug level. + + + + + Built player postprocessing options. + + + + + Enable network API. + + + + + Generate and reference C# projects from your main solution. + + + + + Target Windows SDK. + + + + + Sets and gets target device type for the application to run on when building to Windows Store platform. + + + + + Xbox Build subtarget. + + + + + The currently selected Xbox One Deploy Method. + + + + + Network shared folder path e.g. +MYCOMPUTER\SHAREDFOLDER\. + + + + + Windows account username associated with PC share folder. + + + + + Get the current location for the build. + + + + + + Returns value for platform specifc Editor setting. + + The name of the platform. + The name of the setting. + + + + Is .NET Native enabled for specific build configuration. +More information - https:msdn.microsoft.comen-uslibrary/dn584397(v=vs.110).aspx. + + Build configuration. + + True if .NET Native is enabled for the specific build configuration. + + + + + Set a new location for the build. + + + + + + + Set platform specifc Editor setting. + + The name of the platform. + The name of the setting. + Setting value. + + + + Enables or Disables .NET Native for specific build configuration. +More information - https:msdn.microsoft.comen-uslibrary/dn584397(v=vs.110).aspx. + + Build configuration. + Is enabled? + + + + Select a new build target to be active. + + + + True if the build target was successfully switched, false otherwise (for example, if license checks fail, files are missing, or if the user has cancelled the operation via the UI). + + + + + Editor utility functions. + + + + + Removes progress bar. + + + + + Collect all objects in the hierarchy rooted at each of the given objects. + + Array of objects where the search will start. + + Array of objects heirarchically attached to the search array. + + + + + Calculates and returns a list of all assets the assets listed in roots depend on. + + + + + + Compress a texture. + + + + + + + + Compress a texture. + + + + + + + + Copy all settings of a Unity Object. + + + + + + + Copy all settings of a Unity Object to a second Object if they differ. + + + + + + + Creates a game object with HideFlags and specified components. + + + + + + + + Displays or updates a progress bar that has a cancel button. + + + + + + + + Displays a modal dialog. + + The title of the message box. + The text of the message. + Label displayed on the OK dialog button. + Label displayed on the Cancel dialog button. + + + + Displays a modal dialog. + + The title of the message box. + The text of the message. + Label displayed on the OK dialog button. + Label displayed on the Cancel dialog button. + + + + Displays a modal dialog with three buttons. + + + + + + + + + + Displays a popup menu. + + + + + + + + Displays or updates a progress bar. + + + + + + + + Saves an AudioClip or MovieTexture to a file. + + + + + + + Brings the project window to the front and focuses it. + + + + + Returns a text for a number of bytes. + + + + + + Is the object enabled (0 disabled, 1 enabled, -1 has no enabled button). + + + + + + Translates an instance ID to a reference to an object. + + + + + + Determines if an object is stored on disk. + + + + + + Human-like sorting. + + + + + + + Displays the "open file" dialog and returns the selected path name. + + + + + + + + Displays the "open file" dialog and returns the selected path name. + + Title for dialog. + Default directory. + File extensions in form { "Image files", "png,jpg,jpeg", "All files", "*" }. + + + + Displays the "open folder" dialog and returns the selected path name. + + + + + + + + Displays the "save file" dialog and returns the selected path name. + + + + + + + + + Displays the "save file" dialog in the Assets folder of the project and returns the selected path name. + + + + + + + + + Displays the "save folder" dialog and returns the selected path name. + + + + + + + + Marks target object as dirty. (Only suitable for non-scene objects). + + The object to mark as dirty. + + + + Set the enabled state of the object. + + + + + + + Set the Scene View selected display mode for this Renderer. + + + + + + + Set whether the Renderer's wireframe will be hidden when the renderer's GameObject is selected. + + + + + + + Unloads assets that are not used. + + When true delete assets even if linked in scripts. + + + + Unloads assets that are not used. + + When true delete assets even if linked in scripts. + + + + Derive from this class to create an editor window. + + + + + Does the window automatically repaint whenever the scene has changed? + + + + + The EditorWindow which currently has keyboard focus. (Read Only) + + + + + Is this window maximized. + + + + + The maximum size of this window. + + + + + The minimum size of this window. + + + + + The EditorWindow currently under the mouse cursor. (Read Only) + + + + + The position of the window in screen space. + + + + + The title of this window. + + + + + The GUIContent used for drawing the title of EditorWindows. + + + + + Does the GUI in this editor window want MouseMove events? + + + + + Mark the beginning area of all popup windows. + + + + + Close the editor window. + + + + + Close a window group started with EditorWindow.BeginWindows. + + + + + Moves keyboard focus to this EditorWindow. + + + + + Focuses the first found EditorWindow of specified type if it is open. + + The type of the window. Must derive from EditorWindow. + + + + Focuses the first found EditorWindow of type T if it is open. + + The type of the window. Must derive from EditorWindow. + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + An array of EditorWindow types that the window will attempt to dock onto. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + An array of EditorWindow types that the window will attempt to dock onto. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type T which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + An array of EditorWindow types that the window will attempt to dock onto. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Returns the first EditorWindow of type t which is currently on the screen. + + The type of the window. Must derive from EditorWindow. + The position on the screen where a newly created window will show. + Set this to true, to create a floating utility window, false to create a normal window. + If GetWindow creates a new window, it will get this title. If this value is null, use the class name as title. + Whether to give the window focus, if it already exists. (If GetWindow creates a new window, it will always get focus). + + + + Stop showing notification message. + + + + + Make the window repaint. + + + + + Sends an Event to a window. + + + + + + Show the EditorWindow. + + + + + + Show the EditorWindow. + + + + + + Shows a window with dropdown behaviour and styling. + + The button from which the position of the window will be determined (see description). + The initial size of the window. + + + + Show the editor window in the auxiliary window. + + + + + Show a notification message. + + + + + + Shows an Editor window using popup-style framing. + + + + + Show the EditorWindow as a floating utility window. + + + + + Editor tools for working with persistent UnityEvents. + + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + Argument to use when invoking. + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + Argument to use when invoking. + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + Argument to use when invoking. + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + Argument to use when invoking. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, call to the listener. Will be invoked with the arguments as defined by the Event and sent from the call location. + + Event to modify. + Function to call. + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + Argument to use when invoking. + + + + Adds a persistent, preset call to the listener. + + Event to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + Argument to use when invoking. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + Argument to use when invoking. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + Argument to use when invoking. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + Argument to use when invoking. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + Argument to use when invoking. + + + + Modifies the event at the given index. + + Event to modify. + Index to modify. + Function to call. + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Removes the given function from the event. + + Event to modify. + Index to remove (if specified). + Function to remove (if specified). + + + + Unregisters the given listener at the specified index. + + Event to modify. + Index to unregister. + + + + Export package option. Multiple options can be combined together using the | operator. + + + + + Default mode. Will not include dependencies or subdirectories nor include Library assets unless specifically included in the asset list. + + + + + In addition to the assets paths listed, all dependent assets will be included as well. + + + + + The exported package will include all library assets, ie. the project settings located in the Library folder of the project. + + + + + The export operation will be run asynchronously and reveal the exported package file in a file browser window after the export is finished. + + + + + Will recurse through any subdirectories listed and include all assets inside them. + + + + + Lets you do move, copy, delete operations over files or directories. + + + + + Copies a file or a directory. + + + + + + + Copies the file or directory. + + + + + + + Deletes a file or a directory given a path. + + + + + + Returns a unique path in the Temp folder within your current project. + + + + + Moves a file or a directory from a given path to another path. + + + + + + + Replaces a directory. + + + + + + + Replaces a file. + + + + + + + Font rendering mode constants for TrueTypeFontImporter. + + + + + Use hinted font rendering without anti-aliasing. This is the crispest font rendering option, and may be most readable for small. + + + + + Use Anti-Aliased Font rendering with hinting. This forces character lines to run along pixel boundaries, and generally produces. + + + + + Use the OS default font rendering mode. This selects either FontRenderingMode.HintedSmooth or. + + + + + Use Anti-Aliased Font rendering. When using dynamic fonts, this is the mode which is fastest in rendering font textures. + + + + + Texture case constants for TrueTypeFontImporter. + + + + + Import basic ASCII character set. + + + + + Only import lower case ASCII character set. + + + + + Only import upper case ASCII character set. + + + + + Custom set of characters. + + + + + Render characters into font texture at runtime as needed. + + + + + Import a set of Unicode characters common for latin scripts. + + + + + GameObject utility functions. + + + + + Returns true if the passed in StaticEditorFlags are set on the GameObject specified. + + The GameObject to check. + The flags you want to check. + + Whether the GameObject's static flags match the flags specified. + + + + + Get the navmesh area index for the GameObject. + + GameObject to query. + + NavMesh area index. + + + + + Get the navmesh area index from the area name. + + NavMesh area name to query. + + The NavMesh area index. If there is no NavMesh area with the requested name, the return value is -1. + + + + + Get all the navmesh area names. + + + Names of all the NavMesh areas. + + + + + Get the navmesh layer for the GameObject. + + The GameObject to check. + + The navmesh layer for the GameObject specified. + + + + + Get the navmesh layer from the layer name. + + The name of the navmesh layer. + + The layer number of the navmesh layer name specified. + + + + + Get all the navmesh layer names. + + + An array of the names of all navmesh layers. + + + + + Gets the StaticEditorFlags of the GameObject specified. + + The GameObject whose flags you are interested in. + + The static editor flags of the GameObject specified. + + + + + Get unique name for a new GameObject compared to existing siblings. Useful when trying to avoid duplicate naming. When duplicate(s) are found, uses incremental a number after the base name. + + Target parent for a new GameObject. Null means root level. + Requested name for a new GameObject. + + Unique name for a new GameObject. + + + + + Set the navmesh area for the gameobject. + + GameObject to modify. + NavMesh area index to set. + + + + Set the navmesh layer for the GameObject. + + The GameObject on which to set the navmesh layer. + The layer number you want to set. + + + + Sets the parent and gives the child the same layer and position. + + The GameObject that should have a new parent set. + The GameObject that the child should get as a parent and have position and layer copied from. If null, this function does nothing. + + + + Sets the static editor flags on the specified GameObject. + + The GameObject whose static editor flags you want to set. + The flags to set on the GameObject. + + + + The GenericMenu lets you create a custom context and dropdown menus. + + + + + Add a disabled item to the menu. + + The GUIContent to display as a disabled menu item. + + + + Add an item to the menu. + + The GUIContent to add as a menu item. + Whether to show the item is currently activated (i.e. a tick next to the item in the menu). + The function to call when the menu item is selected. + + + + Add an item to the menu. + + The GUIContent to add as a menu item. + Whether to show the item is currently activated (i.e. a tick next to the item in the menu). + The function to call when the menu item is selected. + The data to pass to the function called when the item is selected. + + + + Add a seperator item to the menu. + + The path to the submenu, if adding a separator to a submenu. When adding a separator to the top level of a menu, use an empty string as the path. + + + + Show the menu at the given screen rect. + + The position at which to show the menu. + + + + Get number of items in the menu. + + + The number of items in the menu. + + + + + Callback function, called when a menu item is selected. + + + + + Callback function with user data, called when a menu item is selected. + + The data to pass through to the callback function. + + + + Show the menu under the mouse when right-clicked. + + + + + Determines how a gizmo is drawn or picked in the Unity editor. + + + + + Draw the gizmo if it is active (shown in the inspector). + + + + + Draw the gizmo if it is selected or it is a child/descendent of the selected. + + + + + Draw the gizmo if it is not selected. + + + + + Draw the gizmo if it is not selected and also no parent/ancestor is selected. + + + + + The gizmo can be picked in the editor. + + + + + Draw the gizmo if it is selected. + + + + + Base class for PropertyDrawer and DecoratorDrawer. + + + + + Custom 3D GUI controls and drawing in the Scene view. + + + + + Color to use for handles that represent the center of something. + + + + + Look up or set the Color of the handles. + + + + + Setup viewport and stuff for a current camera. + + + + + The inverse of the matrix for all handle operations. + + + + + Are handles lit? + + + + + Matrix for all handle operations. + + + + + Soft color to use for for less interactive UI, or handles that are used rarely (or not at all). + + + + + Color to use for the currently active handle. + + + + + Color to use for handles that manipulate the X coordinate of something. + + + + + Color to use for handles that manipulates the Y coordinate of something. + + + + + Color to use for handles that manipulates the Z coordinate of something. + + + + + Draw an arrow like those used by the move tool. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw an arrow like those used by the move tool. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Begin a 2D GUI block inside the 3D handle GUI. + + The position and size of the 2D GUI area. + + + + Begin a 2D GUI block inside the 3D handle GUI. + + The position and size of the 2D GUI area. + + + + Make a 3D button. + + The world-space position to draw the button. + The rotation of the button. + The visual size of the button. + The size of the button for the purpose of detecting a click. + The draw style of the button. + + True when the user clicks the button. + + + + + The function to use for drawing the handle e.g. Handles.RectangleCap. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Draw a camera-facing Circle. Pass this into handle functions. + + The control ID for the handle. + The world-space position for the start of the handle. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw a circle handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Clears the camera. + + Where in the Scene to clear. + The camera to clear. + + + + Draw a Cone. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw a cone handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Draw a cube. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw a cube handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Draw a Cylinder. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw a cylinder handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Make a 3D disc that can be dragged with the mouse. + + The rotation of the disc. + The center of the disc. + The axis to rotate around. + The size of the disc in world space. + If true, only the front-facing half of the circle is draw / draggable. This is useful when you have many overlapping rotation axes (like in the default rotate tool) to avoid clutter. + The grid size to snap to. + + The new rotation value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Draw a camera-facing dot. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Draw a dot handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Draw anti-aliased convex polygon specified with point array. + + List of points describing the convex polygon. + + + + Draw anti-aliased line specified with point array and width. + + The AA texture used for rendering. To get an anti-aliased effect use a texture that is 1x2 pixels with one transparent white pixel and one opaque white pixel. + The width of the line. + List of points to build the line from. + + + + + Draw anti-aliased line specified with point array and width. + + The AA texture used for rendering. To get an anti-aliased effect use a texture that is 1x2 pixels with one transparent white pixel and one opaque white pixel. + The width of the line. + List of points to build the line from. + + + + + Draw anti-aliased line specified with point array and width. + + The AA texture used for rendering. To get an anti-aliased effect use a texture that is 1x2 pixels with one transparent white pixel and one opaque white pixel. + The width of the line. + List of points to build the line from. + + + + + Draw anti-aliased line specified with point array and width. + + The AA texture used for rendering. To get an anti-aliased effect use a texture that is 1x2 pixels with one transparent white pixel and one opaque white pixel. + The width of the line. + List of points to build the line from. + + + + + Draw anti-aliased line specified with point array and width. + + The AA texture used for rendering. To get an anti-aliased effect use a texture that is 1x2 pixels with one transparent white pixel and one opaque white pixel. + The width of the line. + List of points to build the line from. + + + + + Draw textured bezier line through start and end points with the given tangents. + + The start point of the bezier line. + The end point of the bezier line. + The start tangent of the bezier line. + The end tangent of the bezier line. + The color to use for the bezier line. + The texture to use for drawing the bezier line. + The width of the bezier line. + + + + Draws a camera inside a rectangle. + + The area to draw the camera within in GUI coordinates. + The camera to draw. + How the camera is drawn (textured, wireframe, etc). + Parameters of grid drawing (can be omitted). + + + + Draws a camera inside a rectangle. + + The area to draw the camera within in GUI coordinates. + The camera to draw. + How the camera is drawn (textured, wireframe, etc.). + + + + Draws a camera inside a rectangle. + + The area to draw the camera within in GUI coordinates. + The camera to draw. + How the camera is drawn (textured, wireframe, etc.). + + + + The function to use for drawing the handle e.g. Handles.RectangleCap. + + + + + + + + + Draw a dotted line from p1 to p2. + + The start point. + The end point. + The size in pixels for the lengths of the line segments and the gaps between them. + + + + Draw a list of dotted line segments. + + A list of pairs of points that represent the start and end of line segments. + The size in pixels for the lengths of the line segments and the gaps between them. + + + + Draw a list of indexed dotted line segments. + + A list of points. + A list of pairs of indices to the start and end points of the line segments. + The size in pixels for the lengths of the line segments and the gaps between them. + + + + Draw a line from p1 to p2. + + + + + + + Draw a list of line segments. + + A list of pairs of points that represent the start and end of line segments. + + + + Draw a list of indexed line segments. + + A list of points. + A list of pairs of indices to the start and end points of the line segments. + + + + Draw a line going through the list of all points. + + + + + + Draw a camera facing selection frame. + + + + + + + + + + Draw a circular sector (pie piece) in 3D space. + + The center of the circle. + The normal of the circle. + The direction of the point on the circumference, relative to the center, where the sector begins. + The angle of the sector, in degrees. + The radius of the circle. + + + + Draw a solid flat disc in 3D space. + + The center of the dics. + The normal of the disc. + The radius of the disc. + + + + Draw a solid outlined rectangle in 3D space. + + The 4 vertices of the rectangle in world coordinates. + The color of the rectangle's face. + The outline color of the rectangle. + + + + Draw a circular arc in 3D space. + + The center of the circle. + The normal of the circle. + The direction of the point on the circle circumference, relative to the center, where the arc begins. + The angle of the arc, in degrees. + The radius of the circle. + + + + Draw a wireframe box with center and size. + + Position of the cube. + Size of the cube. + + + + Draw the outline of a flat disc in 3D space. + + The center of the dics. + The normal of the disc. + The radius of the disc. + + + + End a 2D GUI block and get back to the 3D handle GUI. + + + + + Make an unconstrained movement handle. + + The position of the handle. + The rotation of the handle. + The size of the handle. + The function to use for drawing the handle (e.g. Handles.RectangleCap). + The grid size to snap movement to. + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Make an unconstrained rotation handle. + + Orientation of the handle. + Center of the handle in 3D space. + The size of the handle. + + The new rotation value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Get the width and height of the main Game view. + + + The size of the Game view. + + + + + Make a text label positioned in 3D space. + + Position in 3D space as seen from the current handle camera. + Text to display on the label. + Texture to display on the label. + Text, image and tooltip for this label. + The style to use. If left out, the label style from the current GUISkin is used. + + + + Make a text label positioned in 3D space. + + Position in 3D space as seen from the current handle camera. + Text to display on the label. + Texture to display on the label. + Text, image and tooltip for this label. + The style to use. If left out, the label style from the current GUISkin is used. + + + + Make a text label positioned in 3D space. + + Position in 3D space as seen from the current handle camera. + Text to display on the label. + Texture to display on the label. + Text, image and tooltip for this label. + The style to use. If left out, the label style from the current GUISkin is used. + + + + Make a text label positioned in 3D space. + + Position in 3D space as seen from the current handle camera. + Text to display on the label. + Texture to display on the label. + Text, image and tooltip for this label. + The style to use. If left out, the label style from the current GUISkin is used. + + + + Make a text label positioned in 3D space. + + Position in 3D space as seen from the current handle camera. + Text to display on the label. + Texture to display on the label. + Text, image and tooltip for this label. + The style to use. If left out, the label style from the current GUISkin is used. + + + + Retuns an array of points to representing the bezier curve. See Handles.DrawBezier. + + The location where the Bezier starts. + The location where the Bezier ends + The direction the Bezier will start in. + The direction the Bezier will end in. + + + The array of the Bezier points. + + + + + Make a 3D Scene view position handle. + + Center of the handle in 3D space. + Orientation of the handle in 3D space. + + The new value modified by the user's interaction with the handle. If the + user has not moved the handle, it returns the same value that you passed into the function. + + + + + Make a Scene view radius handle. + + Orientation of the handle. + Center of the handle in 3D space. + Radius to modify. + Whether to omit the circular outline of the radius and only draw the point handles. + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Make a Scene view radius handle. + + Orientation of the handle. + Center of the handle in 3D space. + Radius to modify. + Whether to omit the circular outline of the radius and only draw the point handles. + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Draw a rectangle handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + + + + Make a Scene view rotation handle. + + Orientation of the handle. + Center of the handle in 3D space. + + The new rotation value modified by the user's interaction with the handle. + If the user has not moved the handle, it returns the same value that you passed into the function. + + + + + Make a Scene view scale handle. + + Scale to modify. + The position of the handle. + The rotation of the handle. + Allows you to scale the size of the handle on-scren. + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Make a directional scale slider. + + The value the user can modify. + The position of the handle. + The direction of the handle. + The rotation of whole object. + The size of the handle. + The new value after the user has modified it. + + The value modified by the user's interaction with the handle. + + + + + Make a single-float draggable handle. + + The value the user can modify. + The position of the handle. + The rotation of the handle. + The size of the handle. + The function to use for drawing the handle (e.g. Handles.RectangleCap). + The new value after the user has modified it. + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Draw a camera facing selection frame. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + The size of the handle in world-space units. + + + + Set the current camera so all Handles and Gizmos are draw with its settings. + + The camera to draw. + The 2D size of the camera. + + + + + Set the current camera so all Handles and Gizmos are draw with its settings. + + The camera to draw. + The 2D size of the camera. + + + + + Make a 3D slider. + + The position of the current point. + The direction of the sliding. + 3D size the size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + The snap value (see SnapValue). + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Make a 3D slider. + + The position of the current point. + The direction of the sliding. + 3D size the size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + The snap value (see SnapValue). + + The new value modified by the user's interaction with the handle. If the user has not moved the handle, it will return the same value as you passed into the function. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Slide a handle in a 2D plane. + + (optional) override the default ControlID for this Slider2D instance. + The position of the current point. + (optional) renders the Slider2D at handlePos, but treats the Slider2D's origin as handlePos + offset. Useful for Slider2D instances that are placed/rendered relative to another object or handle. + The direction of the handle, only used for rendering of the handle. + The first direction of the sliding. + The second direction of the sliding. + The size of the handle. + The function to call for doing the actual drawing - by default, it's Handles.ArrowCap, but any function that has the same signature can be used. + (float or Vector2) set the snap increment (Pass a Vector2 to use separate snap increments in each dimension). + (default: false) render a rectangle around the handle when dragging. + + The new handle position. + + + + + Rounds the value val to the closest multiple of snap (snap can only be positive). + + The argument to be modified and its value returned. + The destination amount. + + The rounded value, if snap is positive, and val otherwise. + + + + + Draw a Sphere. Pass this into handle functions. + + The control ID for the handle. + The 3D location for the sphere. + The rotation of the sphere around the object connected to. + The size of the sphere. + + + + Draw a sphere handle. Pass this into handle functions. + + The control ID for the handle. + The world-space position of the handle's start point. + The rotation of the handle. + Event type for the handle to act upon. By design it handles EventType.Layout and EventType.Repaint events. + The size of the handle in world-space units. + + + + Helper functions for Scene View style 3D GUI. + + + + + Get standard acceleration for dragging values (Read Only). + + + + + Get nice mouse delta to use for dragging a float value (Read Only). + + + + + Get nice mouse delta to use for zooming (Read Only). + + + + + Record a distance measurement from a handle. + + + + + + + Add the ID for a default control. This will be picked if nothing else is. + + + + + + Map a mouse drag onto a movement along a line in 3D space. + + The source point of the drag. + The destination point of the drag. + The 3D position the dragged object had at src ray. + 3D direction of constrained movement. + + The distance travelled along constraintDir. + + + + + Get the point on an arc (in 3D space) which is closest to the current mouse position. + + + + + + + + + + Get the point on an disc (in 3D space) which is closest to the current mouse position. + + + + + + + + Get the point on a polyline (in 3D space) which is closest to the current mouse position. + + + + + + Calculate distance between a point and a Bezier curve. + + + + + + + + + + Calculate distance between a point and a line. + + + + + + + + Distance from a point p in 2d to a line defined by two points a and b. + + + + + + + + Distance from a point p in 2d to a line segment defined by two points a and b. + + + + + + + + Pixel distance from mouse pointer to a 3D section of a disc. + + + + + + + + + + Pixel distance from mouse pointer to camera facing circle. + + + + + + + Pixel distance from mouse pointer to a 3D disc. + + + + + + + + Pixel distance from mouse pointer to line. + + + + + + + Pixel distance from mouse pointer to a polyline. + + + + + + Pixel distance from mouse pointer to a rectangle on screen. + + + + + + + + Get world space size of a manipulator handle at given position. + + The position of the handle in 3d space. + + A constant screen-size for the handle, based on the distance between from the supplied handle's position to the camera. + + + + + Convert 2D GUI position to a world space ray. + + + + + + Pick game object closest to specified position. + + Select prefab. + Returns index into material array of the Renderer component that is closest to specified position. + + + + + Pick game object closest to specified position. + + Select prefab. + Returns index into material array of the Renderer component that is closest to specified position. + + + + + Pick GameObjects that lie within a specified screen rectangle. + + An screen rectangle specified with pixel coordinates. + + + + + + + + + + + Returns the parameter for the projection of the point on the given line. + + + + + + + + Retrieve all camera settings. + + + + + + Project point onto a line. + + + + + + + + Store all camera settings. + + + + + + Casts ray against the scene and report if an object lies in its path. + + + + A boxed RaycastHit, null if nothing hit it. + + + + + Repaint the current view. + + + + + Calculate a rectangle to display a 2D GUI element near a projected point in 3D space. + + The world-space position to use. + The content to make room for. + The style to use. The style's alignment. + + + + Convert world space point to a 2D GUI position. + + Point in world space. + + + + Helper class to access Unity documentation. + + + + + Open url in the default web browser. + + + + + + Get the URL for this object's documentation. + + The object to retrieve documentation for. + + The documentation URL for the object. Note that this could use the http: or file: schemas. + + + + + Is there a help page for this object? + + + + + + Show help page for this object. + + + + + + Show a help page. + + + + + + Use this class to highlight elements in the editor for use in in-editor tutorials and similar. + + + + + Is there currently an active highlight? + + + + + The rect in screenspace of the current active highlight. + + + + + The text of the current active highlight. + + + + + Is the current active highlight visible yet? + + + + + Highlights an element in the editor. + + The title of the window the element is inside. + The text to identify the element with. + Optional mode to specify how to search for the element. + + true if the requested element was found; otherwise false. + + + + + Highlights an element in the editor. + + The title of the window the element is inside. + The text to identify the element with. + Optional mode to specify how to search for the element. + + true if the requested element was found; otherwise false. + + + + + Call this method to create an identifiable rect that the Highlighter can find. + + The position to make highlightable. + The identifier text of the rect. + + + + Stops the active highlight. + + + + + Used to specify how to find a given element in the editor to highlight. + + + + + Highlights the first element found using any of the search modes. + + + + + Highlights an element containing text using the text as identifier. + + + + + Highlights an element with a given identifier text. + + + + + Highlights nothing. + + + + + Highlights an entire editor control using its label text as identifier. + + + + + Asset importing options. + + + + + Default import options. + + + + + Force a full reimport but don't download the assets from the cache server. + + + + + Import all assets synchronously. + + + + + Forces asset import as uncompressed for edition facilities. + + + + + User initiated asset import. + + + + + When a folder is imported, import all its contents as well. + + + + + Allow an editor class to be initialized when Unity loads without action from the user. + + + + + Allow an editor class method to be initialized when Unity loads without action from the user. + + + + + Application behavior when entering background. + + + + + Custom background behavior, see iOSBackgroundMode for specific background modes. + + + + + Application should exit when entering background. + + + + + Application should suspend execution when entering background. + + + + + Background modes supported by the application corresponding to project settings in Xcode. + + + + + Audio, AirPlay and Picture in Picture. + + + + + Uses Bluetooth LE accessories. + + + + + Acts as a Bluetooth LE accessory. + + + + + External accessory communication. + + + + + Background fetch. + + + + + Location updates. + + + + + Newsstand downloads. + + + + + No background modes supported. + + + + + Remote notifications. + + + + + Voice over IP. + + + + + Build configurations for the generated Xcode project. + + + + + Build configuration set to Debug for the generated Xcode project. + + + + + Build configuration set to Release for the generated Xcode project with optimization enabled. + + + + + A device requirement description used for configuration of App Slicing. + + + + + The values of the device requirement description. + + + + + Constructs new device requirement description. + + + + + Supported iOS SDK versions. + + + + + Device SDK. + + + + + Simulator SDK. + + + + + Activity Indicator on loading. + + + + + Don't Show. + + + + + Gray. + + + + + White. + + + + + White Large. + + + + + iOS status bar style. + + + + + Black opaque. + + + + + Black translucent. + + + + + Default. + + + + + Target iOS device. + + + + + iPad Only. + + + + + Universal : iPhone/iPod + iPad. + + + + + iPhone/iPod Only. + + + + + Supported iOS deployment versions. + + + + + iOS 4.0. + + + + + iOS 4.1. + + + + + iOS 4.2. + + + + + iOS 4.3. + + + + + iOS 5.0. + + + + + iOS 5.1. + + + + + iOS 6.0. + + + + + iOS 7.0. + + + + + iOS 7.1. + + + + + iOS 8.0. + + + + + iOS 8.1. + + + + + Unknown iOS version, managed by user. + + + + + The lighting data asset used by the active scene. + + + + + Bake quality setting for LightmapEditorSettings. + + + + + High quality bake for final renderings. + + + + + Low quality bake for preview renderings. + + + + + Various settings for the bake. + + + + + Beyond this distance a ray is considered to be unoccluded. + + + + + The maximum height of an individual lightmap texture. + + + + + The maximum width of an individual lightmap texture. + + + + + Texel separation between shapes. + + + + + Lightmap resolution in texels per world unit. Defines the resolution of Realtime GI if enabled. If Baked GI is enabled, this defines the resolution used for indirect lighting. Higher resolution may take a long time to bake. + + + + + Determines how Unity will compress baked reflection cubemap. + + + + + Whether to use texture compression on the generated lightmaps. + + + + + A collection of parameters that impact lightmap and realtime GI computations. + + + + + The maximum number of times to supersample a texel to reduce aliasing. + + + + + The percentage of rays shot from a ray origin that must hit front faces to be considered usable. + + + + + BakedLightmapTag is an integer that affects the assignment to baked lightmaps. Objects with different values for bakedLightmapTag are guaranteed to not be assigned to the same lightmap even if the other baking parameters are the same. + + + + + The radius (in texels) of the post-processing filter that blurs baked direct lighting. + + + + + Controls the resolution at which Enlighten stores and can transfer input light. + + + + + The number of rays used for lights with an area. Allows for accurate soft shadowing. + + + + + The amount of data used for realtime GI texels. Specifies how detailed view of the scene a texel has. Small values mean more averaged out lighting. + + + + + The number of rays to cast for computing irradiance form factors. + + + + + If enabled, the object appears transparent during GlobalIllumination lighting calculations. + + + + + Maximum size of gaps that can be ignored for GI (multiplier on pixel size). + + + + + The texel resolution per meter used for realtime lightmaps. This value is multiplied by LightmapEditorSettings.resolution. + + + + + Whether pairs of edges should be stitched together. + + + + + System tag is an integer identifier. It lets you force an object into a different Enlighten system even though all the other parameters are the same. + + + + + The maximum number of times to supersample a texel to reduce aliasing in AO. + + + + + The number of rays to cast for computing ambient occlusion. + + + + + Allows to control the lightmapping job. + + + + + Is baked GI enabled? + + + + + Boost the albedo. + + + + + Returns the current lightmapping build progress or 0 if Lightmapping.isRunning is false. + + + + + Delegate which is called when bake job is completed. + + + + + The lightmap baking workflow mode used. Iterative mode is default, but you can switch to on demand mode which bakes only when the user presses the bake button. + + + + + Scale for indirect lighting. + + + + + Returns true when the bake job is running, false otherwise (Read Only). + + + + + The lighting data asset used by the active scene. + + + + + Is realtime GI enabled? + + + + + Stars a synchronous bake job. + + + + + Starts an asynchronous bake job. + + + + + Starts a synchronous bake job, but only bakes light probes. + + + + + Starts an asynchronous bake job, but only bakes light probes. + + + + + Bakes an array of scenes. + + The path of the scenes that should be baked. + + + + Starts a synchronous bake job for the probe. + + Target probe. + The location where cubemap will be saved. + + Returns true if baking was succesful. + + + + + Starts a synchronous bake job for the selected objects. + + + + + Starts an asynchronous bake job for the selected objects. + + + + + Cancels the currently running asynchronous bake job. + + + + + Deletes all lightmap assets and makes all lights behave as if they weren't baked yet. + + + + + Clears the cache used by lightmaps, reflection probes and default reflection. + + + + + Remove the lighting data asset used by the current scene. + + + + + Get how many chunks the terrain is divided into for GI baking. + + The terrain. + Number of chunks in terrain width. + Number of chunks in terrain length. + + + + Workflow mode for lightmap baking. Default is Iterative. + + + + + Always run lightmapping, changes to the scene are detected automatically. + + + + + Deprecated 4.x lightmapping support. + + + + + Run lightmapping only when the user presses the bake button. + + + + + Delegate used by Lightmapping.completed callback. + + + + + Calculates a Delaunay Tetrahedralization of the 'positions' point set - the same way the lightmapper. + + + + + + + + LOD Utility Helpers. + + + + + Recalculate the bounding region for the given LODGroup. + + + + + + Mac fullscreen mode. + + + + + Fullscreen window. + + + + + Fullscreen window with Dock and Menu bar. + + + + + The Unity Material Editor. + + + + + Is the current material expanded. + + + + + Useful for indenting shader properties that need the same indent as mini texture field. + + + + + Apply initial MaterialPropertyDrawer values. + + + + + + + Apply initial MaterialPropertyDrawer values. + + + + + + + Called when the Editor is woken up. + + + + + Draw a property field for a color shader property. + + Label for the property. + + + + + + Draw a property field for a color shader property. + + Label for the property. + + + + + + Default handling of preview area for materials. + + + + + + + Default toolbar for material preview area. + + + + + Handles UI for one shader property ignoring any custom drawers. + + + + + + + + Handles UI for one shader property ignoring any custom drawers. + + + + + + + + Draw a property field for a float shader property. + + Label for the property. + + + + + + Draw a property field for a float shader property. + + Label for the property. + + + + + + Calculate height needed for the property, ignoring custom drawers. + + + + + + Utility method for GUI layouting ShaderGUI. Used e.g for the rect after a left aligned Color field. + + Field Rect. + + A sub rect of the input Rect. + + + + + Utility method for GUI layouting ShaderGUI. + + Field Rect. + + A sub rect of the input Rect. + + + + + Utility method for GUI layouting ShaderGUI. + + Field Rect. + + A sub rect of the input Rect. + + + + + Get shader property information of the passed materials. + + + + + + Get information about a single shader property. + + Selected materials. + Property name. + Property index. + + + + Get information about a single shader property. + + Selected materials. + Property name. + Property index. + + + + Calculate height needed for the property. + + + + + + + Calculate height needed for the property. + + + + + + + Utility method for GUI layouting ShaderGUI. This is the rect after the label which can be used for multiple properties. The input rect can be fetched by calling: EditorGUILayout.GetControlRect. + + Line Rect. + + A sub rect of the input Rect. + + + + + Utility method for GUI layouting ShaderGUI. + + Field Rect. + + A sub rect of the input Rect. + + + + + Get the value of a given texture offset for a given texture property. + + Name of the texture property that you wish to examine the offset of. + Does the x offset have multiple values? + Does the y offset have multiple values? + + + + Returns the free rect below the label and before the large thumb object field. Is used for e.g. tiling and offset properties. + + The total rect of the texture property. + + + + Get the value of a given texture scale for a given texture property. + + Name of the texture property that you wish to examine the scale of. + Does the x scale have multiple values? + Does the y scale have multiple values? + + + + Can this component be Previewed in its current state? + + + True if this component can be Previewed in its current state. + + + + + Make a help box with a message and button. Returns true, if button was pressed. + + The message text. + The button text. + + Returns true, if button was pressed. + + + + + This function will draw the UI for the lightmap emission property. (None, Realtime, baked) + +See Also: MaterialLightmapFlags. + + + + + This function will draw the UI for the lightmap emission property. (None, Realtime, baked) + +See Also: MaterialLightmapFlags. + + + + + This function will draw the UI for the lightmap emission property. (None, Realtime, baked) + +See Also: MaterialLightmapFlags. + + + + + Called when the editor is disabled, if overridden please call the base OnDisable() to ensure that the material inspector is set up properly. + + + + + Called when the editor is enabled, if overridden please call the base OnEnable() to ensure that the material inspector is set up properly. + + + + + Implement specific MaterialEditor GUI code here. If you want to simply extend the existing editor call the base OnInspectorGUI () before doing any custom GUI code. + + + + + Custom preview for Image component. + + Rectangle in which to draw the preview. + Background image. + + + + Whenever a material property is changed call this function. This will rebuild the inspector and validate the properties. + + + + + Default rendering of shader properties. + + Array of material properties. + + + + Render the standard material properties. This method will either render properties using a IShaderGUI instance if found otherwise it uses PropertiesDefaultGUI. + + + Returns true if any value was changed. + + + + + Draw a range slider for a range shader property. + + Label for the property. + The property to edit. + Position and size of the range slider control. + + + + Draw a range slider for a range shader property. + + Label for the property. + The property to edit. + Position and size of the range slider control. + + + + Call this when you change a material property. It will add an undo for the action. + + Undo Label. + + + + Display UI for editing material's render queue setting. + + + + + + Display UI for editing material's render queue setting. + + + + + + Does this edit require to be repainted constantly in its current state? + + + + + Set EditorGUIUtility.fieldWidth and labelWidth to the default values that PropertiesGUI uses. + + + + + Set the shader of the material. + + Shader to set. + Should undo be registered. + + + + + Set the shader of the material. + + Shader to set. + Should undo be registered. + + + + + Set the offset of a given texture property. + + Name of the texture property that you wish to modify the offset of. + Scale to set. + Set the x or y component of the offset (0 for x, 1 for y). + + + + Set the scale of a given texture property. + + Name of the texture property that you wish to modify the scale of. + Scale to set. + Set the x or y component of the scale (0 for x, 1 for y). + + + + Handes UI for one shader property. + + + + + + + + Handes UI for one shader property. + + + + + + + + Checks if particular property has incorrect type of texture specified by the material, displays appropriate warning and suggests the user to automatically fix the problem. + + The texture property to check and display warning for, if necessary. + + + + Draw a property field for a texture shader property. + + Label for the field. + Draw scale / offset. + + + + + + + Draw a property field for a texture shader property. + + Label for the field. + Draw scale / offset. + + + + + + + Draw a property field for a texture shader property. + + Label for the field. + Draw scale / offset. + + + + + + + Draw a property field for a texture shader property. + + Label for the field. + Draw scale / offset. + + + + + + + Draw a property field for a texture shader property. + + Label for the field. + Draw scale / offset. + + + + + + + Draw a property field for a texture shader property that only takes up a single line height. + + Rect that this control should be rendered in. + Label for the field. + + + + Returns total height used by this control. + + + + + Method for showing a texture property control with additional inlined properites. + + The label used for the texture property. + The texture property. + First optional property inlined after the texture property. + Second optional property inlined after the extraProperty1. + + Returns the Rect used. + + + + + Method for showing a texture property control with additional inlined properites. + + The label used for the texture property. + The texture property. + First optional property inlined after the texture property. + Second optional property inlined after the extraProperty1. + + Returns the Rect used. + + + + + Method for showing a texture property control with additional inlined properites. + + The label used for the texture property. + The texture property. + First optional property inlined after the texture property. + Second optional property inlined after the extraProperty1. + + Returns the Rect used. + + + + + Method for showing a compact layout of properties. + + The label used for the texture property. + The texture property. + First extra property inlined after the texture property. + Label for the second extra property (on a new line and indented). + Second property on a new line below the texture. + + Returns the Rect used. + + + + + Method for showing a texture property control with a HDR color field and its color brightness float field. + + The label used for the texture property. + The texture property. + The color property (will be treated as a HDR color). + The HDR color configuration used by the HDR Color Picker. + If false then the alpha channel information will be hidden in the GUI. + + Return the Rect used. + + + + + Draws tiling and offset properties for a texture. + + Rect to draw this control in. + Property to draw. + If this control should be rendered under large texture property control use 'true'. If this control should be shown seperately use 'false'. + + + + Draws tiling and offset properties for a texture. + + Rect to draw this control in. + Property to draw. + If this control should be rendered under large texture property control use 'true'. If this control should be shown seperately use 'false'. + + + + TODO. + + + + + + + + TODO. + + + + + + + + Draw a property field for a vector shader property. + + Label for the field. + + + + + + Draw a property field for a vector shader property. + + Label for the field. + + + + + + Describes information and value of a single shader property. + + + + + Color value of the property. + + + + + Display name of the property (Read Only). + + + + + Flags that control how property is displayed (Read Only). + + + + + Float vaue of the property. + + + + + Does this property have multiple different values? (Read Only) + + + + + Name of the property (Read Only). + + + + + Min/max limits of a ranged float property (Read Only). + + + + + Material objects being edited by this property (Read Only). + + + + + Texture dimension (2D, Cubemap etc.) of the property (Read Only). + + + + + Texture value of the property. + + + + + Type of the property (Read Only). + + + + + Vector value of the property. + + + + + Flags that control how a MaterialProperty is displayed. + + + + + Signifies that values of this property contain High Dynamic Range (HDR) data. + + + + + Do not show the property in the inspector. + + + + + No flags are set. + + + + + Signifies that values of this property contain Normal (normalized vector) data. + + + + + Do not show UV scale/offset fields next to a texture. + + + + + Texture value for this property will be queried from renderer's MaterialPropertyBlock, instead of from the material. This corresponds to the "[PerRendererData]" attribute in front of a property in the shader code. + + + + + Material property type. + + + + + Color property. + + + + + Float property. + + + + + Ranged float (with min/max values) property. + + + + + Texture property. + + + + + Vector property. + + + + + Base class to derive custom material property drawers from. + + + + + Apply extra initial values to the material. + + The MaterialProperty to apply values for. + + + + Override this method to specify how tall the GUI for this property is in pixels. + + The MaterialProperty to make the custom GUI for. + The label of this property. + Current material editor. + + + + Override this method to make your own GUI for the property. + + Rectangle on the screen to use for the property GUI. + The MaterialProperty to make the custom GUI for. + The label of this property. + Current material editor. + + + + A pair of from and to indices describing what thing keeps what other thing alive. + + + + + Index into a virtual list of all GC handles, followed by all native objects. + + + + + Index into a virtual list of all GC handles, followed by all native objects. + + + + + Description of a field of a managed type. + + + + + Is this field static? + + + + + Name of this field. + + + + + Offset of this field. + + + + + The typeindex into PackedMemorySnapshot.typeDescriptions of the type this field belongs to. + + + + + A dump of a piece of memory from the player that's being profiled. + + + + + The actual bytes of the memory dump. + + + + + The start address of this piece of memory. + + + + + MemorySnapshot is a profiling tool to help diagnose memory usage. + + + + + Event that will be fired when a new memory snapshot comes in through the profiler connection. Its argument will be a PackedMemorySnapshot. + + + + + + Requests a new snapshot from the currently connected target of the profiler. Currently only il2cpp-based players are able to provide memory snapshots. + + + + + A description of a GC handle used by the virtual machine. + + + + + The address of the managed object that the GC handle is referencing. + + + + + PackedMemorySnapshot is a compact representation of a memory snapshot that a player has sent through the profiler connection. + + + + + Connections is an array of from,to pairs that describe which things are keeping which other things alive. + + + + + All GC handles in use in the memorysnapshot. + + + + + Array of actual managed heap memory sections. + + + + + All native C++ objects that were loaded at time of the snapshot. + + + + + Descriptions of all the C++ unity types the profiled player knows about. + + + + + Descriptions of all the managed types that were known to the virtual machine when the snapshot was taken. + + + + + Information about the virtual machine running executing the managade code inside the player. + + + + + A description of a C++ unity type. + + + + + ClassId of the base class of this C++ class. + + + + + Name of this C++ unity type. + + + + + Description of a C++ unity object in memory. + + + + + ClassId of this C++ object. Use this classId to index into PackedMemorySnapshot.nativeTypes. + + + + + The hideFlags this native object has. + + + + + InstanceId of this object. + + + + + Has this object has been marked as DontDestroyOnLoad? + + + + + Is this native object an internal Unity manager object? + + + + + Is this object persistent? (Assets are persistent, objects stored in scenes are persistent, dynamically created objects are not) + + + + + Name of this object. + + + + + The memory address of the native C++ object. This matches the "m_CachedPtr" field of UnityEngine.Object. + + + + + Size in bytes of this object. + + + + + Description of a managed type. + + + + + If this is an arrayType, this will return the rank of the array. (1 for a 1-dimensional array, 2 for a 2-dimensional array, etc) + + + + + Name of the assembly this type was loaded from. + + + + + The base type for this type, pointed to by an index into PackedMemorySnapshot.typeDescriptions. + + + + + An array containing descriptions of all fields of this type. + + + + + Is this type an array? + + + + + Is this type a value type? (if it's not a value type, it's a reference type) + + + + + Name of this type. + + + + + Size in bytes of an instance of this type. If this type is an arraytype, this describes the amount of bytes a single element in the array will take up. + + + + + The actual contents of the bytes that store this types static fields, at the point of time when the snapshot was taken. + + + + + The typeIndex of this type. This index is an index into the PackedMemorySnapshot.typeDescriptions array. + + + + + The address in memory that contains the description of this type inside the virtual machine. This can be used to match managed objects in the heap to their corresponding TypeDescription, as the first pointer of a managed object points to its type description. + + + + + Information about a virtual machine that provided a memory snapshot. + + + + + Allocation granularity in bytes used by the virtual machine allocator. + + + + + Offset in bytes inside the object header of an array object where the bounds of the array is stored. + + + + + Size in bytes of the header of an array object. + + + + + Offset in bytes inside the object header of an array object where the size of the array is stored. + + + + + A version number that will change when the object layout inside the managed heap will change. + + + + + Size in bytes of the header of each managed object. + + + + + Size in bytes of a pointer. + + + + + Menu class to manipulate the menu item. + + + + + Default constructor. + + + + + Get the check status of the given menu. + + + + + + Set the check status of the given menu. + + + + + + + Used to extract the context for a MenuItem. MenuCommand objects are passed to custom menu item functions defined using the MenuItem attribute. + + + + + Context is the object that is the target of a menu command. + + + + + An integer for passing custom information to a menu item. + + + + + Creates a new MenuCommand object. + + + + + + + Creates a new MenuCommand object. + + + + + + The MenuItem attribute allows you to add menu items to the main menu and inspector context menus. + + + + + Creates a menu item and invokes the static function following it, when the menu item is selected. + + The itemName is the menu item represented like a pathname. + For example the menu item could be "GameObject/Do Something". + If isValidateFunction is true, this is a validation + function and will be called before invoking the menu function with the same itemName. + The order by which the menu items are displayed. + + + + Creates a menu item and invokes the static function following it, when the menu item is selected. + + The itemName is the menu item represented like a pathname. + For example the menu item could be "GameObject/Do Something". + If isValidateFunction is true, this is a validation + function and will be called before invoking the menu function with the same itemName. + The order by which the menu items are displayed. + + + + Creates a menu item and invokes the static function following it, when the menu item is selected. + + The itemName is the menu item represented like a pathname. + For example the menu item could be "GameObject/Do Something". + If isValidateFunction is true, this is a validation + function and will be called before invoking the menu function with the same itemName. + The order by which the menu items are displayed. + + + + Various utilities for mesh manipulation. + + + + + Returns the mesh compression setting for a Mesh. + + The mesh to get information on. + + + + Optimizes the mesh for GPU access. + + + + + + Change the mesh compression setting for a mesh. + + The mesh to set the compression mode for. + The compression mode to set. + + + + Will insert per-triangle uv2 in mesh and handle vertex splitting etc. + + + + + + + User message types. + + + + + Error message. + + + + + Info message. + + + + + Neutral message. + + + + + Warning message. + + + + + Compressed texture format for target build platform. + + + + + ASTC texture compression. + + + + + ATI texture compression. Available on devices running Adreno GPU, including HTC Nexus One, Droid Incredible, EVO, and others. + + + + + S3 texture compression, nonspecific to DXT variant. Supported on devices running Nvidia Tegra2 platform, including Motorala Xoom, Motorola Atrix, Droid Bionic, and others. + + + + + ETC1 texture compression (or RGBA16 for textures with alpha), supported by all devices. + + + + + ETC2 texture compression. + + + + + Don't override texture compression. + + + + + PowerVR texture compression. Available in devices running PowerVR SGX530/540 GPU, such as Motorola DROID series; Samsung Galaxy S, Nexus S, and Galaxy Tab; and others. + + + + + Model importer lets you modify import settings from editor scripts. + + + + + Add to imported meshes. + + + + + Animation compression setting. + + + + + Allowed error of animation position compression. + + + + + Allowed error of animation rotation compression. + + + + + Allowed error of animation scale compression. + + + + + Animator generation mode. + + + + + The default wrap mode for the generated animation clips. + + + + + Bake Inverse Kinematics (IK) when importing. + + + + + Animation clips to split animation into. See Also: ModelImporterClipAnimation. + + + + + Generate a list of all default animation clip based on TakeInfo. + + + + + Animation optimization setting. + + + + + File scale factor (if available) or default one. (Read-only). + + + + + Animation generation options. + + + + + Material generation options. + + + + + Generate secondary UV set for lightmapping. + + + + + Global scale factor for importing. + + + + + The human description that is used to generate an Avatar during the import process. + + + + + Controls how much oversampling is used when importing humanoid animations for retargeting. + + + + + Import animation from file. + + + + + Controls import of BlendShapes. + + + + + Generates the list of all imported take. + + + + + Import materials from file. + + + + + Vertex normal import options. + + + + + Vertex tangent import options. + + + + + Is Bake Inverse Kinematics (IK) supported by this importer. + + + + + Is FileScale was used when importing. + + + + + Are mesh vertices and indices accessible from script? + + + + + Is import of tangents supported by this importer. + + + + + Is useFileUnits supported for this asset. + + + + + Material naming setting. + + + + + Existing material search setting. + + + + + Mesh compression setting. + + + + + The path of the transform used to generation the motion of the animation. + + + + + Normals import mode. + + + + + Smoothing angle (in degrees) for calculating normals. + + + + + Animation optimization setting. + + + + + Vertex optimization setting. + + + + + Generates the list of all imported Animations. + + + + + If set to false, the importer will not resample curves when possible. +Read more about. + +Notes: + +- Some unsupported FBX features (such as PreRotation or PostRotation on transforms) will override this setting. In these situations, animation curves will still be resampled even if the setting is disabled. For best results, avoid using PreRotation, PostRotation and GetRotationPivot. + +- This option was introduced in Version 5.3. Prior to this version, Unity's import behaviour was as if this option was always enabled. Therefore enabling the option gives the same behaviour as pre-5.3 animation import. + + + + + + Threshold for angle distortion (in degrees) when generating secondary UV. + + + + + Threshold for area distortion when generating secondary UV. + + + + + Hard angle (in degrees) for generating secondary UV. + + + + + Margin to be left between charts when packing secondary UV. + + + + + Imports the HumanDescription from the given Avatar. + + + + + Should tangents be split across UV seams. + + + + + Swap primary and secondary UV channels when importing. + + + + + Tangents import mode. + + + + + Generates the list of all imported Transforms. + + + + + Detect file units and import as 1FileUnit=1UnityUnit, otherwise it will import as 1cm=1UnityUnit. + + + + + Creates a mask that matches the model hierarchy, and applies it to the provided ModelImporterClipAnimation. + + Clip to which the mask will be applied. + + + + Animation compression options for ModelImporter. + + + + + Perform keyframe reduction. + + + + + Perform keyframe reduction and compression. + + + + + No animation compression. + + + + + Perform keyframe reduction and choose the best animation curve representation at runtime to reduce memory footprint (default). + + + + + Animation mode for ModelImporter. + + + + + Generate a generic animator. + + + + + Generate a human animator. + + + + + Generate a legacy animation type. + + + + + Generate no animation data. + + + + + Animation clips to split animation into. + + + + + The additive reference pose frame. + + + + + Additionnal curves that will be that will be added during the import process. + + + + + Offset to the cycle of a looping animation, if a different time in it is desired to be the start. + + + + + AnimationEvents that will be added during the import process. + + + + + First frame of the clip. + + + + + Enable to defines an additive reference pose. + + + + + Keeps the feet aligned with the root transform position. + + + + + Offset to the vertical root position. + + + + + Keeps the vertical position as it is authored in the source file. + + + + + Keeps the vertical position as it is authored in the source file. + + + + + Keeps the vertical position as it is authored in the source file. + + + + + Last frame of the clip. + + + + + Enable to make vertical root motion be baked into the movement of the bones. Disable to make vertical root motion be stored as root motion. + + + + + Enable to make horizontal root motion be baked into the movement of the bones. Disable to make horizontal root motion be stored as root motion. + + + + + Enable to make root rotation be baked into the movement of the bones. Disable to make root rotation be stored as root motion. + + + + + Is the clip a looping animation? + + + + + Enable to make the motion loop seamlessly. + + + + + Enable to make the clip loop. + + + + + Returns true when the source AvatarMask has changed. This only happens when ModelImporterClipAnimation.maskType is set to ClipAnimationMaskType.CopyFromOther +To force a reload of the mask, simply set ModelImporterClipAnimation.maskSource to the desired AvatarMask. + + + + + The AvatarMask used to mask transforms during the import process. + + + + + Define mask type. + + + + + Mirror left and right in this clip. + + + + + Clip name. + + + + + Offset in degrees to the root rotation. + + + + + Take name. + + + + + The wrap mode of the animation. + + + + + Copy the mask settings from an AvatarMask to the clip configuration. + + AvatarMask from which the mask settings will be imported. + + + + Copy the current masking settings from the clip to an AvatarMask. + + AvatarMask to which the masking values will be saved. + + + + Animation generation options for ModelImporter. These options relate to the legacy Animation system, they should only be used when ModelImporter.animationType==ModelImporterAnimationType.Legacy. + + + + + Default animation import mode (All animations are stored in the root object). + + + + + Generate animations in the objects that animate. + + + + + Generate animations in the root objects of the animation package. + + + + + Generate animations in the transform root objects. + + + + + Do not generate animations. + + + + + Material generation options for ModelImporter. + + + + + Do not generate materials. + + + + + Generate a material for each material in the source asset. + + + + + Generate a material for each texture used. + + + + + Humanoid Oversampling available multipliers. + + + + + Default Humanoid Oversampling multiplier = 1 which is equivalent to no oversampling. + + + + + Humanoid Oversampling samples at 2 times the sampling rate found in the imported file. + + + + + Humanoid Oversampling samples at 4 times the sampling rate found in the imported file. + + + + + Humanoid Oversampling samples at 8 times the sampling rate found in the imported file. + + + + + Material naming options for ModelImporter. + + + + + Use a material name of the form <materialName>.mat. + + + + + Use material names in the form <modelFileName>-<materialName>.mat. + + + + + Use material names in the form <textureName>.mat. + + + + + <textureName>.mat or <modelFileName>-<materialName>.mat material name. + + + + + Material search options for ModelImporter. + + + + + Search in all project. + + + + + Search in local Materials folder. + + + + + Recursive-up search in Materials folders. + + + + + Mesh compression options for ModelImporter. + + + + + High amount of mesh compression. + + + + + Low amount of mesh compression. + + + + + Medium amount of mesh compression. + + + + + No mesh compression (default). + + + + + Vertex normal generation options for ModelImporter. + + + + + Calculate vertex normals. + + + + + Import vertex normals from model file (default). + + + + + Do not import vertex normals. + + + + + Vertex tangent generation options for ModelImporter. + + + + + Calculate tangents with legacy algorithm. + + + + + Calculate tangents with legacy algorithm, with splits across UV charts. + + + + + Calculate tangents using MikkTSpace (default). + + + + + Import vertex tangents from model file. + + + + + Do not import vertex tangents. + + + + + Tangent space generation options for ModelImporter. + + + + + Calculate tangents. + + + + + Import normals/tangents from file. + + + + + Strip normals/tangents. + + + + + Representation of Script assets. + + + + + Returns the MonoScript object containing specified MonoBehaviour. + + The MonoBehaviour whose MonoScript should be returned. + + + + Returns the MonoScript object containing specified ScriptableObject. + + The ScriptableObject whose MonoScript should be returned. + + + + Returns the System.Type object of the class implemented by this script. + + + + + Custom mouse cursor shapes used with EditorGUIUtility.AddCursorRect. + + + + + Normal pointer arrow. + + + + + Arrow with the minus symbol next to it. + + + + + Arrow with the plus symbol next to it. + + + + + The current user defined cursor. + + + + + Cursor with an eye and stylized arrow keys for FPS navigation. + + + + + Arrow with a Link badge (for assigning pointers). + + + + + Arrow with the move symbol next to it for the sceneview. + + + + + Cursor with an eye for orbit. + + + + + Cursor with a dragging hand for pan. + + + + + Horizontal resize arrows. + + + + + Resize up-Left for window edges. + + + + + Resize up-right for window edges. + + + + + Vertical resize arrows. + + + + + Arrow with the rotate symbol next to it for the sceneview. + + + + + Arrow with the scale symbol next to it for the sceneview. + + + + + Arrow with small arrows for indicating sliding at number fields. + + + + + Left-Right resize arrows for window splitters. + + + + + Up-Down resize arrows for window splitters. + + + + + Text cursor. + + + + + Cursor with a magnifying glass for zoom. + + + + + AssetImporter for importing MovieTextures. + + + + + Duration of the Movie to be imported in seconds. + + + + + Is the movie texture storing non-color data? + + + + + Quality setting to use when importing the movie. This is a float value from 0 to 1. + + + + + Helper class for constructing displayable names for objects. + + + + + Class name of an object. + + + + + + Drag and drop title for an object. + + + + + + Inspector title for an object. + + + + + + Make a unique name using the provided name as a base. + +If the target name is in the provided list of existing names, a unique name is generated by appending the next available numerical increment. + + A list of pre-existing names. + Desired name to be used as is, or as a base. + + A name not found in the list of pre-existing names. + + + + + Make a displayable name for a variable. + + + + + + Sets the name of an Object. + + + + + + + Base Class to derive from when creating Custom Previews. + + + + + The object currently being previewed. + + + + + This is the first entry point for Preview Drawing. + + The available area to draw the preview. + + + + Implement this method to show object information on top of the object preview. + + + + + Override this method if you want to change the label of the Preview area. + + + + + Can this component be Previewed in its current state? + + + True if this component can be Previewed in its current state. + + + + + Called when the Preview gets created with the objects being previewed. + + The objects being previewed. + + + + Called to iterate through the targets, this will be used when previewing more than one target. + + + True if there is another target available. + + + + + Implement to create your own interactive custom preview. Interactive custom previews are used in the preview area of the inspector and the object selector. + + Rectangle in which to draw the preview. + Background image. + + + + Implement to create your own custom preview for the preview area of the inspector, primary editor headers and the object selector. + + Rectangle in which to draw the preview. + Background image. + + + + Override this method if you want to show custom controls in the preview header. + + + + + Called to Reset the target before iterating through them. + + + + + Where is the tool handle placed. + + + + + The tool handle is at the graphical center of the selection. + + + + + The tool handle is on the pivot point of the active object. + + + + + How is the tool handle oriented. + + + + + The tool handle is aligned along the global axes. + + + + + The tool handle is oriented from the active object. + + + + + Player Settings is where you define various parameters for the final game that you will build in Unity. Some of these values are used in the Resolution Dialog that launches when you open a standalone game. + + + + + Accelerometer update frequency. + + + + + Sets the crash behavior on .NET unhandled exception. + + + + + Is the advanced version being used? + + + + + Is auto-rotation to landscape left supported? + + + + + Is auto-rotation to landscape right supported? + + + + + Is auto-rotation to portrait supported? + + + + + Is auto-rotation to portrait upside-down supported? + + + + + If enabled, allows the user to switch between full screen and windowed mode using OS specific keyboard short cuts. + + + + + Additional AOT compilation options. Shared by AOT platforms. + + + + + .NET API compatibility level. + + + + + Pre bake collision meshes on player build. + + + + + Application bundle identifier shared between iOS & Android platforms. + + + + + Application bundle version shared between iOS & Android platforms. + + + + + Defines if fullscreen games should darken secondary displays. + + + + + A unique cloud project identifier. It is unique for every project (Read Only). + + + + + Set the rendering color space for the current project. + + + + + The name of your company. + + + + + Default cursor's click position in pixels from the top left corner of the cursor image. + + + + + Define how to handle fullscreen mode in Windows standalones (Direct3D 11 mode). + + + + + Define how to handle fullscreen mode in Windows standalones (Direct3D 9 mode). + + + + + The default cursor for your application. + + + + + Default screen orientation for mobiles. + + + + + If enabled, the game will default to fullscreen mode. + + + + + Default vertical dimension of stand-alone player window. + + + + + Default horizontal dimension of stand-alone player window. + + + + + Default vertical dimension of web player window. + + + + + Default horizontal dimension of web player window. + + + + + Defines the behaviour of the Resolution Dialog on product launch. + + + + + Enables CrashReport API. + + + + + Enables internal profiler. + + + + + First level to have access to all Resources.Load assets in Streamed Web Players. + + + + + Restrict standalone players to a single concurrent running instance. + + + + + Enable GPU skinning on capable platforms. + + + + + Enable graphics jobs (multi threaded rendering). + + + + + The bundle identifier of the iPhone application. + + + + + Password for the key used for signing an Android application. + + + + + Password used for interacting with the Android Keystore. + + + + + Describes the reason for access to the user's location data. + + + + + Are ObjC uncaught exceptions logged? + + + + + Define how to handle fullscreen mode in macOS standalones. + + + + + Mute or allow audio from other applications to play in the background while the Unity application is running. + + + + + The name of your product. + + + + + Protect graphics memory. + + + + + Which rendering path is enabled? + + + + + Use resizable window in standalone player builds. + + + + + The image to display in the Resolution Dialog window. + + + + + If enabled, your game will continue to run after lost focus. + + + + + Should the builtin Unity splash screen be shown? + + + + + Should Unity support single-pass stereo rendering? + + + + + The style to use for the builtin Unity splash screen. + + + + + Should status bar be hidden. Shared between iOS & Android platforms. + + + + + Active stereo rendering path + + + + + Should player render in stereoscopic 3d on supported hardware? + + + + + Remove unused Engine code from your build (IL2CPP-only). + + + + + Managed code stripping level. + + + + + Should unused Mesh components be excluded from game build? + + + + + 32-bit Display Buffer is used. + + + + + Let the OS autorotate the screen as the device orientation changes. + + + + + Should Direct3D 11 be used when available? + + + + + Enable receipt validation for the Mac App Store. + + + + + Write a log file with debugging information. + + + + + Virtual Reality specific splash screen. + + + + + Enable virtual reality support. + + + + + On Windows, show the application in the background if Fullscreen Windowed mode is used. + + + + + Xbox 360 Kinect Head Orientation file deployment. + + + + + Xbox 360 Kinect Head Position file deployment. + + + + + Xbox 360 Kinect resource file deployment. + + + + + Xbox 360 Avatars. + + + + + Xbox 360 Kinect title flag - if false, the Kinect APIs are inactive. + + + + + Xbox 360 Kinect automatic skeleton tracking. + + + + + Xbox 360 Kinect Enable Speech Engine. + + + + + Xbox 360 auto-generation of _SPAConfig.cs. + + + + + Xbox 360 ImageXex override configuration file path. + + + + + Xbox 360 SPA file path. + + + + + Xbox 360 Kinect Speech DB. + + + + + Xbox 360 splash screen. + + + + + Xbox 360 title id. + + + + + Android specific player settings. + + + + + Publish the build as a game rather than a regular application. This option affects devices running Android 5.0 Lollipop and later + + + + + Provide a build that is Android TV compatible. + + + + + Android bundle version code. + + + + + Disable Depth and Stencil Buffers. + + + + + Force internet permission flag. + + + + + Force SD card permission. + + + + + Android key alias name. + + + + + Android key alias password. + + + + + Android keystore name. + + + + + Android keystore password. + + + + + License verification flag. + + + + + Minimal Android SDK version. + + + + + Preferred application install location. + + + + + Application should show ActivityIndicator when loading. + + + + + Android splash screen scale mode. + + + + + Android target device. + + + + + 24-bit Depth Buffer is used. + + + + + Use APK Expansion Files. + + + + + Get graphics APIs to be used on a build platform. + + Platform to get APIs for. + + Array of graphics APIs. + + + + + Returns the list of assigned icons for the specified platform. + + + + + + Returns a list of icon sizes for the specified platform. + + + + + + Returns a PlayerSettings named bool property (with an optional build target it should apply to). + + Name of the property. + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + The current value of the property. + + + + + Returns a PlayerSettings named int property (with an optional build target it should apply to). + + Name of the property. + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + The current value of the property. + + + + + Searches for property and assigns it's value to given variable. + + Name of the property. + Variable, to which to store the value of the property, if set. + An optional build target group, to which the property applies. + + True if property was set and it's value assigned to given variable. + + + + + Searches for property and assigns it's value to given variable. + + Name of the property. + Variable, to which to store the value of the property, if set. + An optional build target group, to which the property applies. + + True if property was set and it's value assigned to given variable. + + + + + Searches for property and assigns it's value to given variable. + + Name of the property. + Variable, to which to store the value of the property, if set. + An optional build target group, to which the property applies. + + True if property was set and it's value assigned to given variable. + + + + + Returns a PlayerSettings named string property (with an optional build target it should apply to). + + Name of the property. + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + The current value of the property. + + + + + Get user-specified symbols for script compilation for the given build target group. + + + + + + Get stack trace logging options. + + + + + + Is a build platform using automatic graphics API choice? + + Platform to get the flag for. + + Should best available graphics API be used. + + + + + Returns whether or not the specified aspect ratio is enabled. + + + + + + iOS specific player settings. + + + + + Should insecure HTTP downloads be allowed? + + + + + Application behavior when entering background. + + + + + Set this property with your Apple Developer Team ID. You can find this on the Apple Developer website under <a href="https:developer.apple.comaccount#membership"> Account > Membership </a> . This sets the Team ID for the generated Xcode project, allowing developers to use the Build and Run functionality. An Apple Developer Team ID must be set here for automatic signing of your app. + + + + + iOS application display name. + + + + + Supported background execution modes (when appInBackgroundBehavior is set to iOSAppInBackgroundBehavior.Custom). + + + + + The build number of the bundle. + + + + + Describes the reason for access to the user's camera. + + + + + Application should exit when suspended to background. + + + + + Should hard shadows be enforced when running on (mobile) Metal. + + + + + Describes the reason for access to the user's location data. + + + + + Describes the reason for access to the user's microphone. + + + + + Determines iPod playing behavior. + + + + + Icon is prerendered. + + + + + RequiresFullScreen maps to Apple's plist build setting UIRequiresFullScreen, which is used to opt out of being eligible to participate in Slide Over and Split View for iOS 9.0 multitasking. + + + + + Application requires persistent WiFi. + + + + + Script calling optimization. + + + + + Active iOS SDK version used for build. + + + + + Application should show ActivityIndicator when loading. + + + + + Status bar style. + + + + + Targeted device. + + + + + Deployment minimal version of iOS. + + + + + Deployment minimal version of iOS. + + + + + Indicates whether application will use On Demand Resources (ODR) API. + + + + + Is multi-threaded rendering enabled? + + + + + Nintendo 3DS player settings. + + + + + The unique ID of the application, issued by Nintendo. (0x00300 -> 0xf7fff) + + + + + Specify true to enable static memory compression or false to disable it. + + + + + Disable depth/stencil buffers, to free up memory. + + + + + Disable sterescopic (3D) view on the upper screen. + + + + + Enable shared L/R command list, for increased performance with stereoscopic rendering. + + + + + Enable vsync. + + + + + Specify the expanded save data number using 20 bits. + + + + + Application Logo Style. + + + + + Distribution media size. + + + + + Specifies the product code, or the add-on content code. + + + + + Specifies the title region settings. + + + + + Specify the stack size of the main thread, in bytes. + + + + + The 3DS target platform. + + + + + The title of the application. + + + + + Specify true when using expanded save data. + + + + + Nintendo 3DS logo style specification. + + + + + For Chinese region titles. + + + + + For titles for which Nintendo purchased the publishing license from the software manufacturer, etc. + + + + + For all other titles. + + + + + For Nintendo first-party titles. + + + + + Nintendo 3DS distribution media size. + + + + + 128MB + + + + + 1GB + + + + + 256MB + + + + + 2GB + + + + + 512MB + + + + + Nintendo 3DS Title region. + + + + + For all regions. + + + + + For the American region. + + + + + For the Chinese region. + + + + + For the European region. + + + + + For the Japanese region. + + + + + For the Korean region. + + + + + For the Taiwanese region. + + + + + Nintendo 3DS target platform. + + + + + Target the New Nintendo 3DS platform. + + + + + Target the Nintendo 3DS platform. + + + + + PS4 application category. + + + + + Application. + + + + + PS4 enter button assignment. + + + + + Circle button. + + + + + Cross button. + + + + + Remote Play key assignment. + + + + + No Remote play key assignment. + + + + + Remote Play key layout configuration A. + + + + + Remote Play key layout configuration B. + + + + + Remote Play key layout configuration C. + + + + + Remote Play key layout configuration D. + + + + + Remote Play key layout configuration E. + + + + + Remote Play key layout configuration F. + + + + + Remote Play key layout configuration G. + + + + + Remote Play key layout configuration H. + + + + + PS Vita specific player settings. + + + + + Aquire PS Vita background music. + + + + + The PS Vita application version. + + + + + The package build category. + + + + + The applications content ID. + + + + + PS Vita DRM Type. + + + + + Specifies whether circle or cross will be used as the default enter button. + + + + + Specifies whether or not a health warning will be added to the software manual. + + + + + Specifies the color of the PS Vita information bar, true = white, false = black. + + + + + Specifies whether or not to show the PS Vita information bar when the application starts. + + + + + Keystone file. + + + + + PS Vita Live area background image. + + + + + PS Vita Live area gate image. + + + + + PS Vita Live area path. + + + + + PS Vita Live area trial path. + + + + + PS Vita sofware manual. + + + + + PS Vita content master version. + + + + + Should always = 01.00. + + + + + PS Vita memory expansion mode. + + + + + PSN Age rating. + + + + + PS Vita NP Passphrase. + + + + + PS Vita NP Signature. + + + + + PS Vita NP Communications ID. + + + + + Support Game Boot Message or Game Joining Presence. + + + + + PS Vita NP Title Data File. + + + + + Path specifying wher to copy a trophy pack from. + + + + + 32 character password for use if you want to access the contents of a package. + + + + + Path specifying where to copy the package parameter file (param.sfx) from. + + + + + PS Vita parental level. + + + + + For cumlative patch packages. + + + + + For building cumulative patch packages. + + + + + PS Vita power mode. + + + + + Save data quota. + + + + + The applications short title. + + + + + PS Vita media type. + + + + + PS Vita TV boot mode. + + + + + PS Vita TV Disable Emu flag. + + + + + Indicates that this is an upgradable (trial) type application which can be converted to a full application by purchasing an upgrade. + + + + + Support for the PS Vita location library was removed by SCE in SDK 3.570. + + + + + Support for the PS Vita twitter dialog was removed by SCE in SDK 3.570. + + + + + Application package category enum. + + + + + An application package. + + + + + Application patch package. + + + + + DRM type enum. + + + + + Free content. + + + + + Paid for content. + + + + + Enter button assignment enum. + + + + + Circle button. + + + + + Cross button. + + + + + Default. + + + + + Memory expansion mode enum. + + + + + Enable 109MB memory expansion mode. + + + + + Enable 29MB memory expansion mode. + + + + + Enable 77MB memory expansion mode. + + + + + Memory expansion disabled. + + + + + Power mode enum. + + + + + Mode A - default. + + + + + Mode B - GPU High - No WLAN or COM. + + + + + Mode C - GPU High - No Camera, OLED Low brightness. + + + + + PS Vita TV boot mode enum. + + + + + Default (Managed by System Software) (SCEE or SCEA). + + + + + PS Vita Bootable, PS Vita TV Bootable (SCEJ or SCE Asia). + + + + + PS Vita Bootable, PS Vita TV Not Bootable (SCEJ or SCE Asia). + + + + + Samsung Smart TV specific Player Settings. + + + + + The address used when accessing the device. + + + + + Author of the created product. + + + + + Product author's e-mail. + + + + + The category of the created product. + + + + + The description of the created product. + + + + + The author's website link. + + + + + Types of available product categories. + + + + + The education category. + + + + + The games category (default). + + + + + The information category. + + + + + The kids category. + + + + + The lifestyle category. + + + + + The sports category. + + + + + The videos category. + + + + + Enables the specified aspect ratio. + + + + + + + Set graphics APIs to be used on a build platform. + + Platform to set APIs for. + Array of graphics APIs. + + + + Assign a list of icons for the specified platform. + + + + + + + Sets a PlayerSettings named bool property. + + Name of the property. + Value of the property (bool). + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + + + Sets a PlayerSettings named int property. + + Name of the property. + Value of the property (int). + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + + + Sets a PlayerSettings named string property. + + Name of the property. + Value of the property (string). + BuildTarget for which the property should apply (use default value BuildTargetGroup.Unknown to apply to all targets). + + + + Set user-specified symbols for script compilation for the given build target group. + + + + + + + Set stack trace logging options. +Note: calling this function will implicitly call Application.SetStackTraceLogType. + + + + + + + Should a build platform use automatic graphics API choice. + + Platform to set the flag for. + Should best available graphics API be used? + + + + Interface to splash screen player settings. + + + + + The target zoom (from 0 to 1) for the background when it reaches the end of the SplashScreen animation's total duration. Only used when animationMode is PlayerSettings.SplashScreen.AnimationMode.Custom|AnimationMode.Custom. + + + + + The target zoom (from 0 to 1) for the logo when it reaches the end of the logo animation's total duration. Only used when animationMode is PlayerSettings.SplashScreen.AnimationMode.Custom|AnimationMode.Custom. + + + + + The type of animation applied during the splash screen. + + + + + The background Sprite that is shown in landscape mode. Also shown in portrait mode if backgroundPortrait is null. + + + + + The background color shown if no background Sprite is assigned. Default is a dark blue RGB(34.44,54). + + + + + The background Sprite that is shown in portrait mode. + + + + + Determines how the Unity logo should be drawn, if it is enabled. If no Unity logo exists in [logos] then the draw mode defaults to PlayerSettings.SplashScreen.DrawMode.UnityLogoBelow|DrawMode.UnityLogoBelow. + + + + + The collection of logos that is shown during the splash screen. Logos are drawn in ascending order, starting from index 0, followed by 1, etc etc. + + + + + In order to increase contrast between the background and the logos, an overlay color modifier is applied. The overlay opacity is the strength of this effect. Note: Reducing the value below 0.5 requires a Plus/Pro license. + + + + + Set this to true to display the Splash Screen be shown when the application is launched. Set it to false to disable the Splash Screen. Note: Disabling the Splash Screen requires a Plus/Pro license. + + + + + Set this to true to show the Unity logo during the Splash Screen. Set it to false to disable the Unity logo. Note: Disabling the Unity logo requires a Plus/Pro license. + + + + + The style to use for the Unity logo during the Splash Screen. + + + + + The type of animation applied during the Splash Screen. + + + + + Animates the Splash Screen using custom values from PlayerSettings.SplashScreen.animationBackgroundZoom and PlayerSettings.SplashScreen.animationLogoZoom. + + + + + Animates the Splash Screen with a simulated dolly effect. + + + + + No animation is applied to the Splash Screen logo or background. + + + + + Determines how the Unity logo should be drawn, if it is enabled. + + + + + The Unity logo is shown sequentially providing it exists in the PlayerSettings.SplashScreen.logos collection. + + + + + The Unity logo is drawn in the lower portion of the screen for the duration of the Splash Screen, while the PlayerSettings.SplashScreen.logos are shown in the centre. + + + + + The style to use for the Unity logo during the Splash Screen. + + + + + A dark Unity logo with a light background. + + + + + A white Unity logo with a dark background. + + + + + A single logo that is shown during the Splash Screen. Controls the Sprite that is displayed and its duration. + + + + + The total time in seconds for which the logo is shown. The minimum duration is 2 seconds. + + + + + The Sprite that is shown during this logo. If this is null, then no logo will be displayed for the duration. + + + + + The Unity logo Sprite. + + + + + Creates a new Splash Screen logo with the provided duration and logo Sprite. + + The total time in seconds that the logo will be shown. Note minimum time is 2 seconds. + The logo Sprite to display. + + The new logo. + + + + + Creates a new Splash Screen logo with the provided duration and the unity logo. + + The total time in seconds that the logo will be shown. Note minimum time is 2 seconds. + + The new logo. + + + + + Tizen specific player settings. + + + + + Currently chosen Tizen deployment target. + + + + + Choose a type of Tizen target to deploy to. Options are Device or Emulator. + + + + + Minimum Tizen OS version that this application is compatible with. + IMPORTANT: For example: if you choose Tizen 2.4 your application will only run on devices with Tizen 2.4 or later. + + + + + Description of your project to be displayed in the Tizen Store. + + + + + URL of your project to be displayed in the Tizen Store. + + + + + Sets or gets the game loading indicator style.For available styles see TizenShowActivityIndicatorOnLoading. + + + + + Name of the security profile to code sign Tizen applications with. + + + + + Tizen application capabilities. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tvOS specific player settings. + + + + + Application requires extended game controller. + + + + + Active tvOS SDK version used for build. + + + + + Deployment minimal version of tvOS. + + + + + Deployment minimal version of tvOS. + + + + + WebGL specific player settings. + + + + + CompressionFormat defines the compression type that the WebGL resources are encoded to. + + + + + Enables automatic caching of asset data. + + + + + Enables writting out of debug symbols to the build output directory in a *.debugSymbols.js file. + + + + + Exception support for WebGL builds. + + + + + Memory size for WebGL builds in MB. + + + + + Path to the WebGL template asset. + + + + + Windows Store Apps specific player settings. + + + + + Specify how to compile C# files when building to Windows Store Apps. + + + + + Enable/Disable independent input source feature. + + + + + Enable/Disable low latency presentation API. + + + + + Where Unity gets input from. + + + + + Windows Store Apps declarations. + + + + + Set information for file type associations. + +For more information - https:msdn.microsoft.comlibrarywindowsappshh779671https:msdn.microsoft.comlibrarywindowsappshh779671. + + + + + + Registers this application to be a default handler for specified URI scheme name. + + For example: if you specify myunitygame, your application can be run from other applications via the URI scheme myunitygame:. You can also test this using the Windows "Run" dialog box (invoked with Windows + R key). + + For more information https:msdn.microsoft.comlibrarywindowsappshh779670https:msdn.microsoft.comlibrarywindowsappshh779670. + + + + + Get path for image, that will be populated to the Visual Studio solution and the package manifest. + + + + + + + Set path for image, that will be populated to the Visual Studio solution and the package manifest. + + + + + + + + Compilation overrides for C# files. + + + + + C# files are compiled using Mono compiler. + + + + + C# files are compiled using Microsoft compiler and .NET Core, you can use Windows Runtime API, but classes implemented in C# files aren't accessible from JS or Boo languages. + + + + + C# files not located in Plugins, Standard Assets, Pro Standard Assets folders are compiled using Microsoft compiler and .NET Core, all other C# files are compiled using Mono compiler. The advantage is that classes implemented in C# are accessible from JS and Boo languages. + + + + + Describes File Type Association declaration. + + + + + Localizable string that will be displayed to the user as associated file handler. + + + + + Supported file types for this association. + + + + + Various image scales, supported by Windows Store Apps. + + + + + Image types, supported by Windows Store Apps. + + + + + Where Unity takes input from (subscripbes to events). + + + + + Subscribe to CoreWindow events. + + + + + Create Independent Input Source and receive input from it. + + + + + Subscribe to SwapChainPanel events. + + + + + Describes supported file type for File Type Association declaration. + + + + + The 'Content Type' value for the file type's MIME content type. For example: 'image/jpeg'. Can also be left blank. + + + + + File type extension. For ex., .myUnityGame + + + + + Represents plugin importer. + + + + + Is plugin native or managed? Note: C++ libraries with CLR support are treated as native plugins, because Unity cannot load such libraries. You can still access them via P/Invoke. + + + + + Clear all plugin settings and set the compatability with Any Platform to true. + + + + + Constructor. + + + + + Returns all plugin importers for all platforms. + + + + + Is plugin comptabile with any platform. + + + + + Is plugin compatible with editor. + + + + + Is plugin compatible with specified platform. + + Target platform. + + + + + Is plugin compatible with specified platform. + + Target platform. + + + + + Returns editor specific data for specified key. + + Key value for data. + + + + Is Editor excluded when Any Platform is set to true. + + + + + Is platform excluded when Any Platform set to true. + + Target platform. + + + + + Is platform excluded when Any Platform set to true. + + Target platform. + + + + + Returns all plugin importers for specfied platform. + + Target platform. + Name of the target platform. + + + + Returns all plugin importers for specfied platform. + + Target platform. + Name of the target platform. + + + + Identifies whether or not this plugin will be overridden if a plugin of the same name is placed in your project folder. + + + + + Get platform specific data. + + Target platform. + Key value for data. + + + + + Get platform specific data. + + Target platform. + Key value for data. + + + + + Set compatiblity with any platform. + + Is plugin compatible with any platform. + + + + Set compatiblity with any editor. + + Is plugin compatible with editor. + + + + Set compatiblity with specified platform. + + Target platform. + Is plugin compatible with specified platform. + Target platform. + + + + Set compatiblity with specified platform. + + Target platform. + Is plugin compatible with specified platform. + Target platform. + + + + Set editor specific data. + + Key value for data. + Data. + + + + Exclude Editor from compatible platforms when Any Platform is set to true. + + + + + + Exclude platform from compatible platforms when Any Platform is set to true. + + Target platform. + + + + + + Exclude platform from compatible platforms when Any Platform is set to true. + + Target platform. + + + + + + Set platform specific data. + + Target platform. + Key value for data. + Data. + + + + + Set platform specific data. + + Target platform. + Key value for data. + Data. + + + + + Identifies whether or not this plugin should be included in the current build target. + + + + + Class used to display popup windows that inherit from PopupWindowContent. + + + + + Show a popup with the given PopupWindowContent. + + The rect of the button that opens the popup. + The content to show in the popup window. + + + + Class used to implement content for a popup window. + + + + + The EditorWindow that contains the popup content. + + + + + The size of the popup window. + + + The size of the Popup window. + + + + + Callback when the popup window is closed. + + + + + Callback for drawing GUI controls for the popup window. + + The rectangle to draw the GUI inside. + + + + Callback when the popup window is opened. + + + + + The type of a prefab object as returned by PrefabUtility.GetPrefabType. + + + + + The object is an instance of an imported 3D model, but the connection is broken. + + + + + The object is an instance of a user created prefab, but the connection is broken. + + + + + The object was an instance of a prefab, but the original prefab could not be found. + + + + + The object is an imported 3D model asset. + + + + + The object is an instance of an imported 3D model. + + + + + The object is not a prefab nor an instance of a prefab. + + + + + The object is a user created prefab asset. + + + + + The object is an instance of a user created prefab. + + + + + Utility class for any prefab related operations. + + + + + Called after prefab instances in the scene have been updated. + + + + + Connects the source prefab to the game object. + + + + + + + Creates an empty prefab at given path. + + + + + + Creates a prefab from a game object hierarchy. + + + + + + + + Creates a prefab from a game object hierarchy. + + + + + + + + Disconnects the prefab instance from its parent prefab. + + + + + + Helper function to find the prefab root of an object (used for picking niceness). + + The object to check. + + The prefab root. + + + + + Returns the topmost game object that has the same prefab parent as target. + + Scene to instantiate the prefab in. + + + The GameObject at the root of the prefab. + + + + + Returns root game object of the prefab instance if that root prefab instance is a parent of the prefab. + + GameObject to process. + + Return the root game object of the prefab asset. + + + + + Retrieves the enclosing prefab for any object contained within. + + An object contained within a prefab object. + + The prefab the object is contained in. + + + + + Returns the parent asset object of source, or null if it can't be found. + + + + + + Given an object, returns its prefab type (None, if it's not a prefab). + + + + + + Extract all modifications that are applied to the prefab instance compared to the parent prefab. + + + + + + Instantiate an asset that is referenced by a prefab and use it on the prefab instance. + + + + + + Instantiates the given prefab in a given scene. + + Prefab asset to instantiate. + Scene to instantiate the prefab in. + + The GameObject at the root of the prefab. + + + + + Instantiates the given prefab in a given scene. + + Prefab asset to instantiate. + Scene to instantiate the prefab in. + + The GameObject at the root of the prefab. + + + + + Force re-merging all prefab instances of this prefab. + + + + + + Delegate for method that is called after prefab instances in the scene have been updated. + + + + + + Connects the game object to the prefab that it was last connected to. + + + + + + Force record property modifications by comparing against the parent prefab. + + Object to process + + + + Replaces the targetPrefab with a copy of the game object hierarchy go. + + + + + + + + Replaces the targetPrefab with a copy of the game object hierarchy go. + + + + + + + + Resets the properties of the component or game object to the parent prefab state. + + + + + + Resets the properties of all objects in the prefab, including child game objects and components that were added to the prefab instance. + + + + + + Assigns all modifications that are applied to the prefab instance compared to the parent prefab. + + + + + + + The PreferenceItem attribute allows you to add preferences sections to the Preferences Window. + + + + + Creates a section in the Preferences Window called name and invokes the static function following it for the section's GUI. + + + + + + Base class to derive custom property drawers from. Use this to create custom drawers for your own Serializable classes or for script variables with custom PropertyAttributes. + + + + + The PropertyAttribute for the property. Not applicable for custom class drawers. (Read Only) + + + + + The reflection FieldInfo for the member this property represents. (Read Only) + + + + + Override this method to specify how tall the GUI for this field is in pixels. + + The SerializedProperty to make the custom GUI for. + The label of this property. + + The height in pixels. + + + + + Override this method to make your own GUI for the property. + + Rectangle on the screen to use for the property GUI. + The SerializedProperty to make the custom GUI for. + The label of this property. + + + + Defines a single modified property. + + + + + The value being applied when it is a object reference (which can not be represented as a string). + + + + + Property path of the property being modified (Matches as SerializedProperty.propertyPath). + + + + + Object that will be modified. + + + + + The value being applied. + + + + + Type of build to generate. + + + + + Package build for installation on either a dev or test kit. + + + + + Build hosted on a PC, for file serving to a dev or test kit. + + + + + Target PS Vita build type. + + + + + For building a PS Vita package that can be installed on a PS Vita memory card. + + + + + For general development, creates a build stored on the host PC which the Vita reads from. + + + + + Editor API for the Unity Services editor feature. Normally Purchasing is enabled from the Services window, but if writing your own editor extension, this API can be used. + + + + + This Boolean field will cause the Purchasing feature in Unity to be enabled if true, or disabled if false. + + + + + Options for removing assets + + + + + Delete the asset without moving it to the trash. + + + + + The asset should be moved to trash. + + + + + Editor-specific script interface for. + + + + + Will return PlatformShaderSettings for given platform and shader hardware tier. + + + + + + + Will return TierSettings for given platform and shader hardware tier. + + + + + + + Allows you to set the PlatformShaderSettings for the specified platform and shader hardware tier. + + + + + + + + Allows you to set the PlatformShaderSettings for the specified platform and shader hardware tier. + + + + + + + + Used to set up shader settings, per-platorm and per-shader-hardware-tier. + + + + + Allows you to specify whether cascaded shadow maps should be used. + + + + + Allows you to specify whether Reflection Probes Blending should be enabled. + + + + + Allows you to specify whether Reflection Probes Box Projection should be used. + + + + + Allows you to select Standard Shader Quality. + + + + + Shader quality preset. + + + + + High quality shader preset. + + + + + Low quality shader preset. + + + + + Medium quality shader preset. + + + + + Used to set up per-platorm per-shader-hardware-tier graphics settings. + + + + + Allows you to specify whether cascaded shadow maps should be used. + + + + + Allows you to specify whether Reflection Probes Blending should be enabled. + + + + + Allows you to specify whether Reflection Probes Box Projection should be used. + + + + + The rendering path that should be used. + + + + + Allows you to select Standard Shader Quality. + + + + + Flags for the PrefabUtility.ReplacePrefab function. + + + + + Connects the passed objects to the prefab after uploading the prefab. + + + + + Replaces prefabs by matching pre-existing connections to the prefab. + + + + + Replaces the prefab using name based lookup in the transform hierarchy. + + + + + Resolution dialog setting. + + + + + Never show the resolution dialog. + + + + + Show the resolution dialog on first launch. + + + + + Hide the resolution dialog on first launch. + + + + + SceneAsset is used to reference scene objects in the Editor. + + + + + Constructor. + + + + + Scene management in the Editor. + + + + + The number of loaded Scenes. + + + + + Controls whether cross-Scene references are allowed in the Editor. + + + + + Close the Scene. If removeScene flag is true, the closed Scene is also removed from EditorSceneManager. + + The Scene to be closed/removed. + Bool flag to indicate if the Scene should be removed after closing. + + Returns true if the Scene is closed/removed. + + + + + Checks for cross-Scene references in the specified Scene. + + Scene to check for cross-Scene references. + + Whether any cross-Scene references were found. + + + + + Returns the current setup of the SceneManager. + + + An array of SceneSetup classes - one item for each Scene. + + + + + Mark all the loaded Scenes as modified. + + + + + Mark the specified Scene as modified. + + The Scene to be marked as modified. + + Whether the Scene was successfully marked as dirty. + + + + + Allows you to reorder the Scenes currently open in the Hierarchy window. Moves the source Scene so it comes after the destination Scene. + + The Scene to move. + The Scene which should come directly before the source Scene in the hierarchy. + + + + Allows you to reorder the Scenes currently open in the Hierarchy window. Moves the source Scene so it comes before the destination Scene. + + The Scene to move. + The Scene which should come directly after the source Scene in the hierarchy. + + + + Create a new Scene. + + Whether the new Scene should use the default set of GameObjects. + Whether to keep existing Scenes open. + + A reference to the new Scene. + + + + + Open a Scene in the Editor. + + The path of the Scene. This should be relative to the Project folder; for example, "AssetsMyScenesMyScene.unity". + Allows you to select how to open the specified Scene, and whether to keep existing Scenes in the Hierarchy. See SceneManagement.OpenSceneMode for more information about the options. + + A reference to the opened Scene. + + + + + Restore the setup of the SceneManager. + + In this array, at least one Scene should be loaded, and there must be one active Scene. + + + + Asks you if you want to save the modified Scene or Scenes. + + + This returns true if you chose to save the Scene or Scenes, and returns false if you pressed Cancel. + + + + + Asks whether the modfied input Scenes should be saved. + + Scenes that should be saved if they are modified. + + Your choice of whether to save or not save the Scenes. + + + + + Save all open Scenes. + + + Returns true if all open Scenes are successfully saved. + + + + + Save a Scene. + + The Scene to be saved. + The file path to save the Scene to. If the path is not empty, the current open Scene is overwritten. If it has not yet been saved at all, a save dialog is shown. + If set to true, the Scene is saved without changing the current Scene, and without clearing the unsaved changes marker. + + True if the save succeeded, otherwise false. + + + + + Save a list of Scenes. + + List of Scenes that should be saved. + + True if the save succeeded. Otherwise false. + + + + + Used when creating a new scene in the Editor. + + + + + The newly created scene is added to the current open scenes. + + + + + All current open scenes are closed and the newly created scene are opened. + + + + + Used when creating a new scene in the Editor. + + + + + Adds default game objects to the new scene (a light and camera). + + + + + No game objects are added to the new scene. + + + + + Used when opening a scene in the Editor to specify how a scene should be opened. + + + + + Adds a scene to the current open scenes and loads it. + + + + + Adds a scene to the current open scenes without loading it. It will show up as 'unloaded' in the Hierarchy Window. + + + + + Closes all current open scenes and loads a scene. + + + + + The setup information for a scene in the SceneManager. + + + + + If the scene is active. + + + + + If the scene is loaded. + + + + + Path of the scene. Should be relative to the project folder. Like: "AssetsMyScenesMyScene.unity". + + + + + Derive from this class to create an editor wizard. + + + + + Allows you to set the text shown on the create button of the wizard. + + + + + Allows you to set the error text of the wizard. + + + + + Allows you to set the help text of the wizard. + + + + + Allows you to enable and disable the wizard create button, so that the user can not click it. + + + + + Allows you to set the text shown on the optional other button of the wizard. Leave this parameter out to leave the button out. + + + + + Creates a wizard. + + The title shown at the top of the wizard window. + + The wizard. + + + + + Creates a wizard. + + The title shown at the top of the wizard window. + The text shown on the create button. + The text shown on the optional other button. Leave this parameter out to leave the button out. + + The wizard. + + + + + Creates a wizard. + + The title shown at the top of the wizard window. + The text shown on the create button. + The text shown on the optional other button. Leave this parameter out to leave the button out. + + The wizard. + + + + + Creates a wizard. + + The title shown at the top of the wizard window. + The class implementing the wizard. It has to derive from ScriptableWizard. + The text shown on the create button. + The text shown on the optional other button. Leave this parameter out to leave the button out. + + The wizard. + + + + + Will be called for drawing contents when the ScriptableWizard needs to update its GUI. + + + Returns true if any property has been modified. + + + + + Script call optimization level. + + + + + Script method call overhead decreased at the expense of limited compatibility. + + + + + Default setting. + + + + + Scripting implementation (backend). + + + + + Unity's .NET runtime. + + + + + The standard Mono 2.6 runtime. + + + + + Microsoft's .NET runtime. + + + + + Access to the selection in the editor. + + + + + Returns the active game object. (The one shown in the inspector). + + + + + Returns the instanceID of the actual object selection. Includes prefabs, non-modifyable objects. + + + + + Returns the actual object selection. Includes prefabs, non-modifyable objects. + + + + + Returns the active transform. (The one shown in the inspector). + + + + + Returns the guids of the selected assets. + + + + + Returns the actual game object selection. Includes prefabs, non-modifyable objects. + + + + + The actual unfiltered selection from the Scene returned as instance ids instead of objects. + + + + + The actual unfiltered selection from the Scene. + + + + + Delegate callback triggered when currently active/selected item has changed. + + + + + Returns the top level selection, excluding prefabs. + + + + + Returns whether an object is contained in the current selection. + + + + + + + Returns whether an object is contained in the current selection. + + + + + + + Returns the current selection filtered by type and mode. + + Only objects of this type will be retrieved. + Further options to refine the selection. + + + + Allows for fine grained control of the selection type using the SelectionMode bitmask. + + Options for refining the selection. + + + + SelectionMode can be used to tweak the selection returned by Selection.GetTransforms. + + + + + Only return objects that are assets in the Asset directory. + + + + + Return the selection and all child transforms of the selection. + + + + + If the selection contains folders, also include all assets and subfolders within that folder in the file hierarchy. + + + + + Excludes any objects which shall not be modified. + + + + + Excludes any prefabs from the selection. + + + + + Only return the topmost selected transform. A selected child of another selected transform will be filtered out. + + + + + Return the whole selection. + + + + + Behavior of semantic merge. + + + + + Disable use of semantic merging. + + + + + SerializedObject and SerializedProperty are classes for editing properties on objects in a completely generic way that automatically handles undo and styling UI for prefabs. + + + + + Does the serialized object represents multiple objects due to multi-object editing? (Read Only) + + + + + Defines the maximum size beyond which arrays cannot be edited when multiple objects are selected. + + + + + The inspected object (Read Only). + + + + + The inspected objects (Read Only). + + + + + Apply property modifications. + + + + + Applies property modifications without registering an undo operation. + + + + + Copies a value from a SerializedProperty to the same serialized property on this serialized object. + + + + + + Create SerializedObject for inspected object. + + + + + + Create SerializedObject for inspected object. + + + + + + Find serialized property by name. + + + + + + Get the first serialized property. + + + + + Update hasMultipleDifferentValues cache on the next Update() call. + + + + + Update serialized object's representation. + + + + + Update serialized object's representation, only if the object has been modified since the last call to Update or if it is a script. + + + + + SerializedProperty and SerializedObject are classes for editing properties on objects in a completely generic way that automatically handles undo and styling UI for prefabs. + + + + + Value of a animation curve property. + + + + + The number of elements in the array. If the SerializedObject contains multiple objects it will return the smallest number of elements. So it is always possible to iterate through the SerializedObject and only get properties found in all objects. + + + + + Value of a boolean property. + + + + + Value of bounds property. + + + + + Value of a color property. + + + + + Nesting depth of the property. (Read Only) + + + + + Nice display name of the property. (Read Only) + + + + + Value of a float property as a double. + + + + + Is this property editable? (Read Only) + + + + + Display-friendly names of enumeration of an enum property. + + + + + Names of enumeration of an enum property. + + + + + Enum index of an enum property. + + + + + Value of a float property. + + + + + Does it have child properties? (Read Only) + + + + + Does this property represent multiple different values due to multi-object editing? (Read Only) + + + + + Does it have visible child properties? (Read Only) + + + + + Value of an integer property. + + + + + Is this property an array? (Read Only) + + + + + Is this property expanded in the inspector? + + + + + Is property part of a prefab instance? (Read Only) + + + + + Value of a integer property as a long. + + + + + Name of the property. (Read Only) + + + + + Value of an object reference property. + + + + + Is property's value different from the prefab it belongs to? + + + + + Full path of the property. (Read Only) + + + + + Type of this property (Read Only). + + + + + Value of a quaternion property. + + + + + Value of a rectangle property. + + + + + SerializedObject this property belongs to (Read Only). + + + + + Value of a string property. + + + + + Tooltip of the property. (Read Only) + + + + + Type name of the property. (Read Only) + + + + + Value of a 2D vector property. + + + + + Value of a 3D vector property. + + + + + Value of a 4D vector property. + + + + + Remove all elements from the array. + + + + + Returns a copy of the SerializedProperty iterator in its current state. This is useful if you want to keep a reference to the current property but continue with the iteration. + + + + + Count visible children of this property, including this property itself. + + + + + Count remaining visible properties. + + + + + Delete the element at the specified index in the array. + + + + + + Deletes the serialized property. + + + + + Duplicates the serialized property. + + + + + See if contained serialized properties are equal. + + + + + + + Retrieves the SerializedProperty at a relative path to the current property. + + + + + + Returns the element at the specified index in the array. + + + + + + Retrieves the SerializedProperty that defines the end range of this property. + + + + + + Retrieves the SerializedProperty that defines the end range of this property. + + + + + + Retrieves an iterator that allows you to iterator over the current nexting of a serialized property. + + + + + Insert an empty element at the specified index in the array. + + + + + + Move an array element from srcIndex to dstIndex. + + + + + + + Move to next property. + + + + + + Move to next visible property. + + + + + + Move to first property of the object. + + + + + Type of a SerializedProperty. + + + + + AnimationCurve property. + + + + + Array size property. + + + + + Boolean property. + + + + + Bounds property. + + + + + Character property. + + + + + Color property. + + + + + Enumeration property. + + + + + Float property. + + + + + Gradient property. + + + + + Integer property. + + + + + LayerMask property. + + + + + Reference to another object. + + + + + Quaternion property. + + + + + Rectangle property. + + + + + String property. + + + + + 2D vector property. + + + + + 3D vector property. + + + + + 4D vector property. + + + + + Abstract class to derive from for defining custom GUI for shader properties and for extending the material preview. + + + + + This method is called when a new shader has been selected for a Material. + + The material the newShader should be assigned to. + Previous shader. + New shader to assign to the material. + + + + Find shader properties. + + Name of the material property. + The array of available properties. + If true then this method will throw an exception if a property with propertyName was not found. + + The material property found, otherwise null. + + + + + Find shader properties. + + Name of the material property. + The array of available properties. + If true then this method will throw an exception if a property with propertyName was not found. + + The material property found, otherwise null. + + + + + To define a custom shader GUI use the methods of materialEditor to render controls for the properties array. + + The MaterialEditor that are calling this OnGUI (the 'owner'). + Material properties of the current selected shader. + + + + Override for extending the rendering of the Preview area or completly replace the preview (by not calling base.OnMaterialPreviewGUI). + + The MaterialEditor that are calling this method (the 'owner'). + Preview rect. + Style for the background. + + + + Override for extending the functionality of the toolbar of the preview area or completly replace the toolbar by not calling base.OnMaterialPreviewSettingsGUI. + + The MaterialEditor that are calling this method (the 'owner'). + + + + Utility functions to assist with working with shaders from the editor. + + + + + Does the current hardware support render textues. + + + + + Get the number of properties in Shader s. + + The shader to check against. + + + + Get the description of the shader propery at index propertyIdx of Shader s. + + The shader to check against. + The property index to use. + + + + Get the name of the shader propery at index propertyIdx of Shader s. + + The shader to check against. + The property index to use. + + + + Get the ShaderProperyType of the shader propery at index propertyIdx of Shader s. + + The shader to check against. + The property index to use. + + + + Get Limits for a range property at index propertyIdx of Shader s. + + Which value to get: 0 = default, 1 = min, 2 = max. + The shader to check against. + The property index to use. + + + + Gets texture dimension of a shader property. + + The shader to get the property from. + The property index to use. + + Texture dimension. + + + + + Is the shader propery at index propertyIdx of Shader s hidden? + + The shader to check against. + The property index to use. + + + + Type of a given texture property. + + + + + Color Property. + + + + + Float Property. + + + + + Range Property. + + + + + Texture Property. + + + + + Vector Property. + + + + + Structure to hold camera data extracted from a SketchUp file. + + + + + Aspect ratio of the camera. + + + + + Field of view of the camera. + + + + + Indicate if the camera is using a perspective or orthogonal projection. + + + + + The position the camera is looking at. + + + + + The orthogonal projection size of the camera. This value only make sense if SketchUpImportCamera.isPerspective is false. + + + + + The position of the camera. + + + + + Up vector of the camera. + + + + + Derives from AssetImporter to handle importing of SketchUp files. + + + + + Retrieves the latitude Geo Coordinate imported from the SketchUp file. + + + + + Retrieves the longitude Geo Coordinate imported from the SketchUp file. + + + + + Retrieves the north correction value imported from the SketchUp file. + + + + + The default camera or the camera of the active scene which the SketchUp file was saved with. + + + The default camera. + + + + + The method returns an array of SketchUpImportScene which represents SketchUp scenes. + + + Array of scenes extracted from a SketchUp file. + + + + + Structure to hold scene data extracted from a SketchUp file. + + + + + The camera data of the SketchUp scene. + + + + + The name of the SketchUp scene. + + + + + AssetImportor for importing SpeedTree model assets. + + + + + Gets and sets a default alpha test reference values. + + + + + Indicates if the cross-fade LOD transition, applied to the last mesh LOD and the billboard, should be animated. + + + + + Returns the best-possible wind quality on this asset (configured in SpeedTree modeler). + + + + + Proportion of the last 3D mesh LOD region width which is used for cross-fading to billboard tree. + + + + + Gets and sets an array of booleans to enable shadow casting for each LOD. + + + + + Gets and sets an array of booleans to enable normal mapping for each LOD. + + + + + Gets and sets an array of booleans to enable Hue variation effect for each LOD. + + + + + Enables smooth LOD transitions. + + + + + Proportion of the billboard LOD region width which is used for fading out the billboard. + + + + + Tells if there is a billboard LOD. + + + + + Tells if the SPM file has been previously imported. + + + + + Gets and sets a default Hue variation color and amount (in alpha). + + + + + Gets and sets a default main color. + + + + + Returns the folder path where generated materials will be placed in. + + + + + Gets and sets an array of booleans to enable shadow receiving for each LOD. + + + + + Gets and sets an array of Reflection Probe usages for each LOD. + + + + + How much to scale the tree model compared to what is in the .spm file. + + + + + Gets and sets a default Shininess value. + + + + + Gets and sets a default specular color. + + + + + Gets and sets an array of booleans to enable Light Probe lighting for each LOD. + + + + + Gets and sets an array of integers of the wind qualities on each LOD. Values will be clampped by BestWindQuality internally. + + + + + Gets an array of name strings for wind quality value. + + + + + Construct a new SpeedTreeImporter object. + + + + + Generates all necessary materials under materialFolderPath. If Version Control is enabled please first check out the folder. + + + + + Gets and sets an array of floats of each LOD's screen height value. + + + + + The style of builtin splash screen to use. + + + + + Dark background with light logo and text. + + + + + White background with dark logo and text. + + + + + Texture importer modes for Sprite import. + + + + + Sprites are multiple image sections extracted from the texture. + + + + + Graphic is not a Sprite. + + + + + Sprite has it own mesh outline defined. + + + + + Sprite is a single image section extracted automatically from the texture. + + + + + Editor data used in producing a Sprite. + + + + + Edge-relative alignment of the sprite graphic. + + + + + Edge border size for a sprite (in pixels). + + + + + Name of the Sprite. + + + + + The pivot point of the Sprite, relative to its bounding rectangle. + + + + + Bounding rectangle of the sprite's graphic within the atlas image. + + + + + Sprite Packer mode for the current project. + + + + + Always maintain an up-to-date sprite atlas cache. + + + + + Updates sprite atlas cache when building player/bundles. + + + + + Doesn't pack sprites. + + + + + Describes the final atlas texture. + + + + + Marks this atlas so that it contains textures that have been flagged for Alpha splitting when needed (for example ETC1 compression for textures with transparency). + + + + + Anisotropic filtering level of the atlas texture. + + + + + Desired color space of the atlas. + + + + + Quality of atlas texture compression in the range [0..100]. + + + + + Allows Sprite Packer to rotate/flip the Sprite to ensure optimal Packing. + + + + + Filtering mode of the atlas texture. + + + + + The format of the atlas texture. + + + + + Should sprite atlas textures generate mip maps? + + + + + Maximum height of the atlas texture. + + + + + Maximum width of the atlas texture. + + + + + The amount of extra padding between packed sprites. + + + + + Sprite packing policy interface. Provide a custom implementation to control which Sprites go into which atlases. + + + + + Return the version of your policy. Sprite Packer needs to know if atlas grouping logic changed. + + + + + Implement custom atlas grouping here. + + + + + + + + Sprite Packer helpers. + + + + + Array of Sprite atlas names found in the current atlas cache. + + + + + Name of the default Sprite Packer policy. + + + + + Sprite Packer execution mode. + + + + + Will always trigger IPackerPolicy.OnGroupAtlases. + + + + + Normal execution. Will not trigger IPackerPolicy.OnGroupAtlases unless IPackerPolicy, IPackerPolicy version or TextureImporter settings have changed. + + + + + Returns all alpha atlas textures generated for the specified atlas. + + Name of the atlas. + + + + Returns atlasing data for the specified Sprite. + + Sprite to query. + Gets set to the name of the atlas containing the specified Sprite. + Gets set to the Texture containing the specified Sprite. + + + + Returns all atlas textures generated for the specified atlas. + + Atlas name. + + + + Available Sprite Packer policies for this project. + + + + + Rebuilds the Sprite atlas cache. + + + + + + + + The active Sprite Packer policy for this project. + + + + + Current Sprite Packer job definition. + + + + + Registers a new atlas. + + + + + + + Assigns a Sprite to an already registered atlas. + + + + + + + + + Helper utilities for accessing Sprite data. + + + + + Returns the generated Sprite mesh indices. + + If Sprite is packed, it is possible to access data as if it was on the atlas texture. + + + + + Returns the generated Sprite mesh positions. + + If Sprite is packed, it is possible to access data as if it was on the atlas texture. + + + + + Returns the generated Sprite texture. If Sprite is packed, it is possible to query for both source and atlas textures. + + If Sprite is packed, it is possible to access data as if it was on the atlas texture. + + + + + Returns the generated Sprite mesh uvs. + + If Sprite is packed, it is possible to access data as if it was on the atlas texture. + + + + + Static Editor Flags. + + + + + Consider for static batching. + + + + + Considered static for lightmapping. + + + + + Considered static for navigation. + + + + + Considered static for occlusion. + + + + + Considered static for occlusion. + + + + + Auto-generate OffMeshLink. + + + + + Consider static for reflection probe. + + + + + StaticOcclusionCulling lets you perform static occlusion culling operations. + + + + + Does the scene contain any occlusion portals that were added manually rather than automatically? + + + + + Used to check if asynchronous generation of static occlusion culling data is still running. + + + + + Returns the size in bytes that the PVS data is currently taking up in this scene on disk. + + + + + Used to cancel asynchronous generation of static occlusion culling data. + + + + + Clears the PVS of the opened scene. + + + + + Used to generate static occlusion culling data. + + + + + Used to compute static occlusion culling data asynchronously. + + + + + Used to compute static occlusion culling data asynchronously. + + + + + Used to visualize static occlusion culling at development time in scene view. + + + + + If set to true, culling of geometry is enabled. + + + + + If set to true, visualization of target volumes is enabled. + + + + + If set to true, visualization of portals is enabled. + + + + + If set to true, the visualization lines of the PVS volumes will show all cells rather than cells after culling. + + + + + If set to true, visualization of view volumes is enabled. + + + + + If set to true, visualization of portals is enabled. + + + + + Enum used to specify what stereo rendering path to use. + + + + + The scene graph is traversed only once and there will be only one draw call issued for each render node. The main render target has to be an array render target. This is an optimization of the StereoRenderingPath.SinglePass mode. Special hardware support is required for this to run. + + + + + The scene graph is traversed twice, rendering one eye at a time. This is the slowest path and should only be used for reference. + + + + + The scene graph is traversed only once and two draw calls will be issued for each render node. The main render target has to be a double wide render target. This is considerable faster than MultiPass mode. + + + + + Managed code stripping level. + + + + + Managed code stripping is disabled. + + + + + Unused parts of managed code are stripped away. + + + + + Managed method bodies are stripped away. AOT platforms only. + + + + + Lightweight mscorlib version will be used at expense of limited compatibility. + + + + + Class for Substance Archive handling. + + + + + The SubstanceImporter class lets you access the imported ProceduralMaterial instances. + + + + + Clone an existing ProceduralMaterial instance. + + + + + + Destroy an existing ProceduralMaterial instance. + + + + + + Export the bitmaps generated by a ProceduralMaterial as TGA files. + + The ProceduralMaterial whose output textures will be saved. + Path to a folder where the output bitmaps will be saved. The folder will be created if it doesn't already exist. + Indicates whether alpha channel remapping should be performed. + + + + Export a XML preset string with the value of all parameters of a given ProceduralMaterial to the specified folder. + + The ProceduralMaterial whose preset string will be saved. + Path to a folder where the preset file will be saved. The folder will be created if it doesn't already exist. + + + + Get the ProceduralMaterial animation update rate in millisecond. + + + + + + Check if the ProceduralMaterial needs to force generation of all its outputs. + + + + + + Return true if the mipmaps are generated for this ProceduralMaterial. + + + + + + Get the number of ProceduralMaterial instances. + + + + + Get the material offset, which is used for all the textures that are part of this ProceduralMaterial. + + + + + + Get an array with the ProceduralMaterial instances. + + + + + Get the material scale, which is used for all the textures that are part of this ProceduralMaterial. + + + + + + Get the import settings for a given ProceduralMaterial for a given platform (width and height, RAW/Compressed format, loading behavior). + + The name of the ProceduralMaterial. + The name of the platform (can be empty). + The maximum texture width for this ProceduralMaterial (output value). + The maximum texture height for this ProceduralMaterial (output value). + The texture format (0=Compressed, 1=RAW) for this ProceduralMaterial (output value). + The load behavior for this ProceduralMaterial (output value). +Values match the ProceduralMaterial::ProceduralLoadingBehavior enum. + + + + Get a list of the names of the ProceduralMaterial prototypes in the package. + + + + + Get the alpha source of the given texture in the ProceduralMaterial. + + + + + + + Instantiate a new ProceduralMaterial instance from a prototype. + + + + + + After modifying the shader of a ProceduralMaterial, call this function to apply the changes to the importer. + + + + + + Rename an existing ProceduralMaterial instance. + + + + + + + Reset the ProceduralMaterial to its default values. + + + + + + Set the ProceduralMaterial animation update rate in millisecond. + + + + + + + Specify if the ProceduralMaterial needs to force generation of all its outputs. + + + + + + + Force the generation of mipmaps for this ProceduralMaterial. + + + + + + + Set the material offset, which is used for all the textures that are part of this ProceduralMaterial. + + + + + + + Set the material scale, which is used for all the textures that are part of this ProceduralMaterial. + + + + + + + Set the import settings for the input ProceduralMaterial for the input platform. + + The name of the Procedural Material. + The name of the platform (can be empty). + The maximum texture width for this Procedural Material. + The maximum texture height for this Procedural Material. + The texture format (0=Compressed, 1=RAW) for this Procedural Material. + The load behavior for this Procedural Material. +Values match the ProceduralMaterial::ProceduralLoadingBehavior enum. + + + + Set the alpha source of the given texture in the ProceduralMaterial. + + + + + + + + A Takeinfo object contains all the information needed to describe a take. + + + + + Start time in second. + + + + + Stop time in second. + + + + + This is the default clip name for the clip generated for this take. + + + + + Take name as define from imported file. + + + + + Sample rate of the take. + + + + + Start time in second. + + + + + Stop time in second. + + + + + Texture importer lets you modify Texture2D import settings from editor scripts. + + + + + Allows alpha splitting on relevant platforms for this texture. + + + + + If the provided alpha channel is transparency, enable this to prefilter the color to avoid filtering artifacts. + + + + + Select how the alpha of the imported texture is generated. + + + + + Anisotropic filtering level of the texture. + + + + + Keep texture borders the same when generating mipmaps? + + + + + Quality of Texture Compression in the range [0..100]. + + + + + Convert heightmap to normal map? + + + + + Use crunched compression when available. + + + + + Fade out mip levels to gray color? + + + + + Filtering mode of the texture. + + + + + Cubemap generation mode. + + + + + Should mip maps be generated with gamma correction? + + + + + Generate alpha channel from intensity? + + + + + Amount of bumpyness in the heightmap. + + + + + Set this to true if you want texture data to be readable from scripts. Set it to false to prevent scripts from reading texture data. + + + + + Is this texture a lightmap? + + + + + Is texture storing non-color data? + + + + + Maximum texture size. + + + + + Mip map bias of the texture. + + + + + Generate Mip Maps. + + + + + Mip level where texture is faded out completely. + + + + + Mip level where texture begins to fade out. + + + + + Mipmap filtering mode. + + + + + Is this texture a normal map? + + + + + Normal map filtering mode. + + + + + Scaling mode for non power of two textures. + + + + + Returns true if this TextureImporter is setup for Sprite packing. + + + + + Border sizes of the generated sprites. + + + + + Selects Single or Manual import mode for Sprite textures. + + + + + Selects the Sprite packing tag. + + + + + The point in the Sprite object's coordinate space where the graphic is located. + + + + + The number of pixels in the sprite that correspond to one unit in world space. + + + + + Scale factor for mapping pixels in the graphic to units in world space. + + + + + Array representing the sections of the atlas corresponding to individual sprite graphics. + + + + + Is texture storing color data? + + + + + Compression of imported texture. + + + + + Format of imported texture. + + + + + Shape of imported texture. + + + + + Which type of texture are we dealing with here. + + + + + Wrap mode (Repeat or Clamp) of the texture. + + + + + Clear specific target platform settings. + + The platform whose settings are to be cleared (see below). + + + + Does textures source image have alpha channel. + + + + + Does textures source image have RGB channels. + + + + + Getter for the flag that allows Alpha splitting on the imported texture when needed (for example ETC1 compression for textures with transparency). + + + True if the importer allows alpha split on the imported texture, False otherwise. + + + + + TODO. + + + + + + Get the default platform specific texture settings. + + + A TextureImporterPlatformSettings structure containing the default platform parameters. + + + + + Get platform specific texture settings. + + The platform for which settings are required (see options below). + Maximum texture width/height in pixels. + Format of the texture for the given platform. + Value from 0..100, equivalent to the standard JPEG quality setting. + Status of the ETC1 and alpha split flag. + + True if the platform override was found, false if no override was found. + + + + + Get platform specific texture settings. + + The platform whose settings are required (see below). + Maximum texture width/height in pixels. + Format of the texture. + Value from 0..100, equivalent to the standard JPEG quality setting. + + True if the platform override was found, false if no override was found. + + + + + Get platform specific texture settings. + + The platform whose settings are required (see below). + Maximum texture width/height in pixels. + Format of the texture. + + True if the platform override was found, false if no override was found. + + + + + Get platform specific texture settings. + + The platform whose settings are required (see below). + + A TextureImporterPlatformSettings structure containing the platform parameters. + + + + + Reads the active texture output instructions of this TextureImporter. + + + + + Read texture settings into TextureImporterSettings class. + + + + + + Setter for the flag that allows Alpha splitting on the imported texture when needed (for example ETC1 compression for textures with transparency). + + + + + + Set specific target platform settings. + + The platforms whose settings are to be changed (see below). + Maximum texture width/height in pixels. + Data format for the texture. + Value from 0..100, with 0, 50 and 100 being respectively Fast, Normal, Best quality options in the texture importer UI. For Crunch texture formats, this roughly corresponds to JPEG quality levels. + Allows splitting of imported texture into RGB+A so that ETC1 compression can be applied (Android only, and works only on textures that are a part of some atlas). + + + + Set specific target platform settings. + + The platforms whose settings are to be changed (see below). + Maximum texture width/height in pixels. + Data format for the texture. + Value from 0..100, with 0, 50 and 100 being respectively Fast, Normal, Best quality options in the texture importer UI. For Crunch texture formats, this roughly corresponds to JPEG quality levels. + Allows splitting of imported texture into RGB+A so that ETC1 compression can be applied (Android only, and works only on textures that are a part of some atlas). + + + + Set specific target platform settings. + + Structure containing the platform settings. + + + + Set texture importers settings from TextureImporterSettings class. + + + + + + Select how the alpha of the imported texture is generated. + + + + + Generate Alpha from image gray scale. + + + + + Use Alpha from the input texture if one is provided. + + + + + No Alpha will be used. + + + + + Select the kind of compression you want for your texture. + + + + + Texture will be compressed using a standard format depending on the platform (DXT, ASTC, ...). + + + + + Texture will be compressed using a high quality format depending on the platform and availability (BC7, ASTC4x4, ...). + + + + + Texture will be compressed using a low quality but high performance, high compression format depending on the platform and availability (2bpp PVRTC, ASTC8x8, ...). + + + + + Texture will not be compressed. + + + + + Defines Cubemap convolution mode. + + + + + Diffuse convolution (aka irradiance Cubemap). + + + + + No convolution needed. This Cubemap texture represents mirror reflection or Skybox. + + + + + Specular convolution (aka Prefiltered Environment Map). + + + + + Imported texture format for TextureImporter. + + + + + TextureFormat.Alpha8 texture format. + + + + + TextureFormat.ARGB4444 texture format. + + + + + TextureFormat.ARGB32 texture format. + + + + + ASTC compressed RGB texture format, 10x10 block size. + + + + + ASTC compressed RGB texture format, 12x12 block size. + + + + + ASTC compressed RGB texture format, 4x4 block size. + + + + + ASTC compressed RGB texture format, 5x5 block size. + + + + + ASTC compressed RGB texture format, 6x6 block size. + + + + + ASTC compressed RGB texture format, 8x8 block size. + + + + + ASTC compressed RGBA texture format, 10x10 block size. + + + + + ASTC compressed RGBA texture format, 12x12 block size. + + + + + ASTC compressed RGBA texture format, 4x4 block size. + + + + + ASTC compressed RGBA texture format, 5x5 block size. + + + + + ASTC compressed RGBA texture format, 6x6 block size. + + + + + ASTC compressed RGBA texture format, 8x8 block size. + + + + + ATC (Android) 4 bits/pixel compressed RGB texture format. + + + + + ATC (Android) 8 bits/pixel compressed RGBA texture format. + + + + + Choose texture format automatically based on the texture parameters. + + + + + Choose a 16 bit format automatically. + + + + + Choose a compressed format automatically. + + + + + Choose a compressed HDR format automatically. + + + + + Choose a crunched format automatically. + + + + + Choose an HDR format automatically. + + + + + Choose a Truecolor format automatically. + + + + + TextureFormat.BC4 compressed texture format. + + + + + TextureFormat.BC5 compressed texture format. + + + + + TextureFormat.BC6H compressed HDR texture format. + + + + + TextureFormat.BC7 compressed texture format. + + + + + TextureFormat.DXT1 compressed texture format. + + + + + DXT1 compressed texture format with Crunch compression for small storage sizes. + + + + + TextureFormat.DXT5 compressed texture format. + + + + + DXT5 compressed texture format with Crunch compression for small storage sizes. + + + + + ETC2EAC compressed 4 bits pixel unsigned R texture format. + + + + + ETC2EAC compressed 4 bits pixel signed R texture format. + + + + + ETC2EAC compressed 8 bits pixel unsigned RG texture format. + + + + + ETC2EAC compressed 4 bits pixel signed RG texture format. + + + + + ETC (GLES2.0) 4 bits/pixel compressed RGB texture format. + + + + + ETC2 compressed 4 bits / pixel RGB texture format. + + + + + ETC2 compressed 4 bits / pixel RGB + 1-bit alpha texture format. + + + + + ETC2 compressed 8 bits / pixel RGBA texture format. + + + + + PowerVR/iOS TextureFormat.PVRTC_RGB2 compressed texture format. + + + + + PowerVR/iOS TextureFormat.PVRTC_RGB4 compressed texture format. + + + + + PowerVR/iOS TextureFormat.PVRTC_RGBA2 compressed texture format. + + + + + PowerVR/iOS TextureFormat.PVRTC_RGBA4 compressed texture format. + + + + + TextureFormat.RGB565 texture format. + + + + + TextureFormat.RGB24 texture format. + + + + + TextureFormat.RGBA4444 texture format. + + + + + TextureFormat.RGBA32 texture format. + + + + + TextureFormat.RGBAHalf floating point texture format. + + + + + Cubemap generation mode for TextureImporter. + + + + + Automatically determine type of cubemap generation from the source image. + + + + + Generate cubemap from cylindrical texture. + + + + + Generate cubemap from vertical or horizontal cross texture. + + + + + Do not generate cubemap (default). + + + + + Generate cubemap from spheremap texture. + + + + + Mip map filter for TextureImporter. + + + + + Box mipmap filter. + + + + + Kaiser mipmap filter. + + + + + Normal map filtering mode for TextureImporter. + + + + + Sobel normal map filter. + + + + + Standard normal map filter. + + + + + Scaling mode for non power of two textures in TextureImporter. + + + + + Keep non power of two textures as is. + + + + + Scale to larger power of two. + + + + + Scale to nearest power of two. + + + + + Scale to smaller power of two. + + + + + Stores platform specifics settings of a TextureImporter. + + + + + Allows Alpha splitting on the imported texture when needed (for example ETC1 compression for textures with transparency). + + + + + Quality of texture compression in the range [0..100]. + + + + + Use crunch compression when available. + + + + + Format of imported texture. + + + + + Maximum texture size. + + + + + Name of the build target. + + + + + Set to true in order to override the Default platform parameters by those provided in the TextureImporterPlatformSettings structure. + + + + + Compression of imported texture. + + + + + Copy parameters into another TextureImporterPlatformSettings object. + + TextureImporterPlatformSettings object to copy settings to. + + + + RGBM encoding mode for HDR textures in TextureImporter. + + + + + Do RGBM encoding when source data is HDR in TextureImporter. + + + + + Source texture is already RGBM encoded in TextureImporter. + + + + + Do not perform RGBM encoding in TextureImporter. + + + + + Do RGBM encoding in TextureImporter. + + + + + Stores settings of a TextureImporter. + + + + + If the provided alpha channel is transparency, enable this to dilate the color to avoid filtering artifacts on the edges. + + + + + Select how the alpha of the imported texture is generated. + + + + + Anisotropic filtering level of the texture. + + + + + Enable this to avoid colors seeping out to the edge of the lower Mip levels. Used for light cookies. + + + + + Convert heightmap to normal map? + + + + + Convolution mode. + + + + + Defines how fast Phong exponent wears off in mip maps. Higher value will apply less blur to high resolution mip maps. + + + + + Defines how many different Phong exponents to store in mip maps. Higher value will give better transition between glossy and rough reflections, but will need higher texture resolution. + + + + + Fade out mip levels to gray color? + + + + + Filtering mode of the texture. + + + + + Cubemap generation mode. + + + + + Generate alpha channel from intensity? + + + + + Amount of bumpyness in the heightmap. + + + + + Mip map bias of the texture. + + + + + Generate mip maps for the texture? + + + + + Mip level where texture is faded out to gray completely. + + + + + Mip level where texture begins to fade out to gray. + + + + + Mipmap filtering mode. + + + + + Normal map filtering mode. + + + + + Scaling mode for non power of two textures. + + + + + Is texture data readable from scripts. + + + + + RGBM encoding mode for HDR textures in TextureImporter. + + + + + Edge-relative alignment of the sprite graphic. + + + + + Border sizes of the generated sprites. + + + + + The number of blank pixels to leave between the edge of the graphic and the mesh. + + + + + Sprite texture import mode. + + + + + Pivot point of the Sprite relative to its graphic's rectangle. + + + + + The number of pixels in the sprite that correspond to one unit in world space. + + + + + Scale factor between pixels in the sprite graphic and world space units. + + + + + The tessellation detail to be used for generating the mesh for the associated sprite if the SpriteMode is set to Single. For Multiple sprites, use the SpriteEditor to specify the value per sprite. +Valid values are in the range [0-1], with higher values generating a tighter mesh. A default of -1 will allow Unity to determine the value automatically. + + + + + Is texture storing color data? + + + + + Shape of imported texture. + + + + + Which type of texture are we dealing with here. + + + + + Wrap mode (Repeat or Clamp) of the texture. + + + + + Configure parameters to import a texture for a purpose of type, as described TextureImporterType|here. + + Texture type. See TextureImporterType. + If false, change only specific properties. Exactly which, depends on type. + + + + Copy parameters into another TextureImporterSettings object. + + TextureImporterSettings object to copy settings to. + + + + Test texture importer settings for equality. + + + + + + + Select the kind of shape of your texture. + + + + + Texture is 2D. + + + + + Texture is a Cubemap. + + + + + Select this to set basic parameters depending on the purpose of your texture. + + + + + This sets up your texture with the basic parameters used for the Cookies of your lights. + + + + + Use this if your texture is going to be used as a cursor. + + + + + This is the most common setting used for all the textures in general. + + + + + Use this if your texture is going to be used on any HUD/GUI Controls. + + + + + This is the most common setting used for all the textures in general. + + + + + This sets up your texture with the parameters used by the lightmap. + + + + + Select this to turn the color channels into a format suitable for real-time normal mapping. + + + + + Use this for texture containing a single channel. + + + + + Select this if you will be using your texture for Sprite graphics. + + + + + Tizen OS compatibility. + + + + + + + + + + + + + + + Enumerator list of different activity indicators your game can show when loading. + + + + + Sets your game to not show any indicator while loading. + + + + + The loading indicator size is large and rotates counterclockwise. + + + + + The loading indicator size is small and rotates counterclockwise. + + + + + The loading indicator size is large and rotates clockwise. + + + + + The loading indicator size is small and rotates clockwise. + + + + + Which tool is active in the editor. + + + + + The move tool is active. + + + + + No tool is active. Set this to implement your own in-inspector toolbar (like the terrain editor does). + + + + + The rect tool is active. + + + + + The rotate tool is active. + + + + + The scale tool is active. + + + + + The view tool is active - Use Tools.viewTool to find out which view tool we're talking about. + + + + + Class used to manipulate the tools used in Unity's Scene View. + + + + + The tool that is currently selected for the Scene View. + + + + + The position of the tool handle in world space. + + + + + The rectangle used for the rect tool. + + + + + The rotation of the rect tool handle in world space. + + + + + The rotation of the tool handle in world space. + + + + + Hides the Tools(Move, Rotate, Resize) on the Scene view. + + + + + Are we in Center or Pivot mode. + + + + + What's the rotation of the tool handle. + + + + + Is the rect handle in blueprint mode? + + + + + The option that is currently active for the View tool in the Scene view. + + + + + Which layers are visible in the scene view. + + + + + Is the default sorting method used by the hierarchy. + + + + + Content to visualize the transform sorting method. + + + + + AssetImporter for importing Fonts. + + + + + Calculation mode for determining font's ascent. + + + + + Border pixels added to character images for padding. This is useful if you want to render text using a shader which needs to render outside of the character area (like an outline shader). + + + + + Spacing between character images in the generated texture in pixels. This is useful if you want to render text using a shader which samples pixels outside of the character area (like an outline shader). + + + + + A custom set of characters to be included in the Font Texture. + + + + + An array of font names, to be used when includeFontData is set to false. + + + + + References to other fonts to be used looking for fallbacks. + + + + + Font rendering mode to use for this font. + + + + + Font size to use for importing the characters. + + + + + Use this to adjust which characters should be imported. + + + + + The internal font name of the TTF file. + + + + + If this is enabled, the actual font will be embedded into the asset for Dynamic fonts. + + + + + Create an editable copy of the font asset at path. + + + + + + Supported tvOS SDK versions. + + + + + Device SDK. + + + + + Simulator SDK. + + + + + Supported tvOS deployment versions. + + + + + Target tvOS 9.0. + + + + + Target tvOS 9.1. + + + + + Unknown tvOS version, managed by user. + + + + + Default mobile device orientation. + + + + + Auto Rotation Enabled. + + + + + Landscape : counter-clockwise from Portrait. + + + + + Landscape: clockwise from Portrait. + + + + + Portrait. + + + + + Portrait upside down. + + + + + Lets you register undo operations on specific objects you are about to perform changes on. + + + + + Callback that is triggered after an undo or redo was executed. + + + + + Invoked before the Undo system performs a flush. + + + + + Adds a component to the game object and registers an undo operation for this action. + + The game object you want to add the component to. + The type of component you want to add. + + The newly added component. + + + + + Generic version. + + The game object you want to add the component to. + + The newly added component. + + + + + Removes all Undo operation for the identifier object registered using Undo.RegisterCompleteObjectUndo from the undo stack. + + + + + + Collapses all undo operation up to group index together into one step. + + + + + + Destroys the object and records an undo operation so that it can be recreated. + + The object that will be destroyed. + + + + Ensure objects recorded using RecordObject or ::ref:RecordObjects are registered as an undoable action. In most cases there is no reason to invoke FlushUndoRecordObjects since it's automatically done right after mouse-up and certain other events that conventionally marks the end of an action. + + + + + Unity automatically groups undo operations by the current group index. + + + + + Get the name that will be shown in the UI for the current undo group. + + + Name of the current group or an empty string if the current group is empty. + + + + + Unity automatically groups undo operations by the current group index. + + + + + Move a GameObject from its current scene to a new scene. +It is required that the GameObject is at the root of its current scene. + + GameObject to move. + Scene to move the GameObject into. + Name of the undo action. + + + + Perform an Redo operation. + + + + + Perform an Undo operation. + + + + + Records any changes done on the object after the RecordObject function. + + The reference to the object that you will be modifying. + The title of the action to appear in the undo history (i.e. visible in the undo menu). + + + + Records multiple undoable objects in a single call. This is the same as calling Undo.RecordObject multiple times. + + + + + + + Stores a copy of the object states on the undo stack. + + The object whose state changes need to be undone. + The name of the undo operation. + + + + This is equivalent to calling the first overload mutiple times, save for the fact that only one undo operation will be generated for this one. + + An array of objects whose state changes need to be undone. + The name of the undo operation. + + + + Register an undo operations for a newly created object. + + The object that was created. + The name of the action to undo. Think "Undo ...." in the main menu. + + + + Copy the states of a hierarchy of objects onto the undo stack. + + The object used to determine a hierarchy of objects whose state changes need to be undone. + The name of the undo operation. + + + + This overload is deprecated. Use Undo.RegisterFullObjectHierarchyUndo(Object, string) instead. + + + + + + Performs all undo operations up to the group index without storing a redo operation in the process. + + + + + + Performs the last undo operation but does not record a redo operation. + + + + + Set the name of the current undo group. + + New name of the current undo group. + + + + Sets the parent of transform to the new parent and records an undo operation. + + + + + + + + Delegate used for undoRedoPerformed. + + + + + Delegate used for willFlushUndoRecord. + + + + + See Also: Undo.postprocessModifications. + + + + + Unwrapping settings. + + + + + Maximum allowed angle distortion (0..1). + + + + + Maximum allowed area distortion (0..1). + + + + + This angle (in degrees) or greater between triangles will cause seam to be created. + + + + + How much uv-islands will be padded. + + + + + Will set default values for params. + + + + + + This class holds everything you may need in regard to uv-unwrapping. + + + + + Will generate per-triangle uv (3 UVs for each triangle) with default settings. + + The source mesh to generate UVs for. + + The list of UVs generated. + + + + + Will generate per-triangle uv (3 UVs for each triangle) with provided settings. + + The source mesh to generate UVs for. + Allows you to specify custom parameters to control the unwrapping. + + The list of UVs generated. + + + + + Will auto generate uv2 with default settings for provided mesh, and fill them in. + + + + + + Will auto generate uv2 with provided settings for provided mesh, and fill them in. + + + + + + + This class containes information about the version control state of an asset. + + + + + Gets the full name of the asset including extension. + + + + + Returns true if the asset is a folder. + + + + + Returns true if the assets is in the current project. + + + + + Returns true if the instance of the Asset class actually refers to a .meta file. + + + + + Returns true if the asset is locked by the version control system. + + + + + Get the name of the asset. + + + + + Gets the path of the asset. + + + + + Returns true is the asset is read only. + + + + + Gets the version control state of the asset. + + + + + Opens the assets in an associated editor. + + + + + Returns true if the version control state of the assets is one of the input states. + + Array of states to test for. + + + + Returns true if the version control state of the asset exactly matches the input state. + + State to check for. + + + + Loads the asset to memory. + + + + + Describes the various version control states an asset can have. + + + + + The was locally added to version control. + + + + + Remotely this asset was added to version control. + + + + + The asset has been checked out on the local machine. + + + + + The asset has been checked out on a remote machine. + + + + + There is a conflict with the asset that needs to be resolved. + + + + + The asset has been deleted locally. + + + + + The asset has been deleted on a remote machine. + + + + + The asset is not under version control. + + + + + The asset is locked by the local machine. + + + + + The asset is locked by a remote machine. + + + + + This instance of the class actaully refers to a .meta file. + + + + + The asset exists in version control but is missing on the local machine. + + + + + The version control state is unknown. + + + + + A newer version of the asset is available on the version control server. + + + + + The asset is read only. + + + + + The asset is up to date. + + + + + The state of the asset is currently being queried from the version control server. + + + + + A list of version control information about assets. + + + + + Based on the current list and the states a new list is returned which only contains the assets with the requested states. + + Whether or not folders should be included. + Which states to filter by. + + + + Create an optimised list of assets by removing children of folders in the same list. + + + + + Count the list of assets by given a set of states. + + Whether or not to include folders. + Which states to include in the count. + + + + Wrapper around a changeset description and ID. + + + + + The ID of the default changeset. + + + + + Description of a changeset. + + + + + Version control specific ID of a changeset. + + + + + Simply a list of changetsets. + + + + + What to checkout when starting the Checkout task through the version control Provider. + + + + + Checkout the asset only. + + + + + Checkout both asset and .meta file. + + + + + Checkout. + + + + + Checkout .meta file only. + + + + + Different actions a version control task can do upon completion. + + + + + Refresh windows upon task completion. + + + + + Update the content of a pending changeset with the result of the task upon completion. + + + + + Update the pending changesets with the result of the task upon completion. + + + + + Show or update the checkout failure window. + + + + + Refreshes the incoming and pensing changes window upon task completion. + + + + + Update incoming changes window with the result of the task upon completion. + + + + + Refresh the submit window with the result of the task upon completion. + + + + + Update the list of pending changes when a task completes. + + + + + This class describes the. + + + + + Descrition of the configuration field. + + + + + This is true if the configuration field is a password field. + + + + + This is true if the configuration field is required for the version control plugin to function correctly. + + + + + Label that is displayed next to the configuration field in the editor. + + + + + Name of the configuration field. + + + + + Mode of the file. + + + + + Binary file. + + + + + No mode set. + + + + + Text file. + + + + + Which method to use when merging. + + + + + Merge all changes. + + + + + Merge non-conflicting changes. + + + + + Don't merge any changes. + + + + + Messages from the version control system. + + + + + The message text. + + + + + The severity of the message. + + + + + Severity of a version control message. + + + + + Error message. + + + + + Informational message. + + + + + Verbose message. + + + + + Warning message. + + + + + Write the message to the console. + + + + + Represent the connection state of the version control provider. + + + + + Connection to the version control server could not be established. + + + + + Connection to the version control server has been established. + + + + + The version control provider is currently trying to connect to the version control server. + + + + + The plugin class describes a version control plugin and which configuratin options it has. + + + + + Configuration fields of the plugin. + + + + + This class provides acces to the version control API. + + + + + Gets the currently executing task. + + + + + Returns true if the version control provider is enabled and a valid Unity Pro License was found. + + + + + Returns true if a version control plugin has been selected and configured correctly. + + + + + Returns the reason for the version control provider being offline (if it is offline). + + + + + Returns the OnlineState of the version control provider. + + + + + This is true if a network connection is required by the currently selected version control plugin to perform any action. + + + + + Adds an assets or list of assets to version control. + + List of assets to add to version control system. + Set this true if adding should be done recursively into subfolders. + Single asset to add to version control system. + + + + Adds an assets or list of assets to version control. + + List of assets to add to version control system. + Set this true if adding should be done recursively into subfolders. + Single asset to add to version control system. + + + + Given a list of assets this function returns true if Add is a valid task to perform. + + List of assets to test. + + + + Given a changeset only containing the changeset ID, this will start a task for quering the description of the changeset. + + Changeset to query description of. + + + + Move an asset or list of assets from their current changeset to a new changeset. + + List of asset to move to changeset. + Changeset to move asset to. + Asset to move to changeset. + ChangesetID to move asset to. + + + + Move an asset or list of assets from their current changeset to a new changeset. + + List of asset to move to changeset. + Changeset to move asset to. + Asset to move to changeset. + ChangesetID to move asset to. + + + + Move an asset or list of assets from their current changeset to a new changeset. + + List of asset to move to changeset. + Changeset to move asset to. + Asset to move to changeset. + ChangesetID to move asset to. + + + + Move an asset or list of assets from their current changeset to a new changeset. + + List of asset to move to changeset. + Changeset to move asset to. + Asset to move to changeset. + ChangesetID to move asset to. + + + + Get a list of pending changesets owned by the current user. + + + + + Retrieves the list of assets belonging to a changeset. + + Changeset to query for assets. + ChangesetID to query for assets. + + + + Retrieves the list of assets belonging to a changeset. + + Changeset to query for assets. + ChangesetID to query for assets. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Checkout an asset or list of asset from the version control system. + + List of assets to checkout. + Tell the Provider to checkout the asset, the .meta file or both. + Asset to checkout. + + + + Given an asset or a list of assets this function returns true if Checkout is a valid task to perform. + + List of assets. + Single asset. + + + + Given an asset or a list of assets this function returns true if Checkout is a valid task to perform. + + List of assets. + Single asset. + + + + This will invalidate the cached state information for all assets. + + + + + This will statt a task for deleting an asset or assets both from disk and from version control system. + + Project path of asset. + List of assets to delete. + Asset to delete. + + + + This will statt a task for deleting an asset or assets both from disk and from version control system. + + Project path of asset. + List of assets to delete. + Asset to delete. + + + + This will statt a task for deleting an asset or assets both from disk and from version control system. + + Project path of asset. + List of assets to delete. + Asset to delete. + + + + Starts a task that will attempt to delete the given changeset. + + List of changetsets. + + + + Test if deleting a changeset is a valid task to perform. + + Changeset to test. + + + + Starts a task for showing a diff of the given assest versus their head revision. + + List of assets. + Whether or not to include .meta. + + + + Return true is starting a Diff task is a valid operation. + + List of assets. + + + + Returns the configuration fields for the currently active version control plugin. + + + + + Gets the currently user selected verson control plugin. + + + + + Returns version control information about an asset. + + GUID of asset. + + + + Returns version control information about an asset. + + Path to asset. + + + + Return version control information about the currently selected assets. + + + + + Start a task for getting the latest version of an asset from the version control server. + + List of assets to update. + Asset to update. + + + + Start a task for getting the latest version of an asset from the version control server. + + List of assets to update. + Asset to update. + + + + Returns true if getting the latest version of an asset is a valid operation. + + List of assets to test. + Asset to test. + + + + Returns true if getting the latest version of an asset is a valid operation. + + List of assets to test. + Asset to test. + + + + Start a task for quering the version control server for incoming changes. + + + + + Given an incoming changeset this will start a task to query the version control server for which assets are part of the changeset. + + Incoming changeset. + Incoming changesetid. + + + + Given an incoming changeset this will start a task to query the version control server for which assets are part of the changeset. + + Incoming changeset. + Incoming changesetid. + + + + Returns true if an asset can be edited. + + Asset to test. + + + + Attempt to lock an asset for exclusive editing. + + List of assets to lock/unlock. + True to lock assets, false to unlock assets. + Asset to lock/unlock. + + + + Attempt to lock an asset for exclusive editing. + + List of assets to lock/unlock. + True to lock assets, false to unlock assets. + Asset to lock/unlock. + + + + Return true if the task can be executed. + + List of assets to test. + Asset to test. + + + + Return true if the task can be executed. + + List of assets to test. + Asset to test. + + + + This method will initiate a merge task handle merging of the conflicting assets. + + The list of conflicting assets to be merged. + How to merge the assets. + + + + Uses the version control plugin to move an asset from one path to another. + + Path to source asset. + Path to destination. + + + + Start a task that will resolve conflicting assets in version control. + + The list of asset to mark as resolved. + How the assets should be resolved. + + + + Tests if any of the assets in the list is resolvable. + + The list of asset to be resolved. + + + + Reverts the specified assets by undoing any changes done since last time you synced. + + The list of assets to be reverted. + How to revert the assets. + The asset to be reverted. + + + + Reverts the specified assets by undoing any changes done since last time you synced. + + The list of assets to be reverted. + How to revert the assets. + The asset to be reverted. + + + + Return true if Revert is a valid task to perform. + + List of assets to test. + Revert mode to test for. + Asset to test. + + + + Return true if Revert is a valid task to perform. + + List of assets to test. + Revert mode to test for. + Asset to test. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that will fetch the most recent status from revision control system. + + The assets fetch new state for. + The asset path to fetch new state for. + If any assets specified are folders this flag will get status for all descendants of the folder as well. + + + + Start a task that submits the assets to version control. + + The changeset to submit. + The list of assets to submit. + The description of the changeset. + If true then only save the changeset to be submitted later. + + + + Returns true if submitting the assets is a valid operation. + + The changeset to submit. + The asset to submit. + + + + Returns true if locking the assets is a valid operation. + + The assets to lock. + The asset to lock. + + + + Returns true if locking the assets is a valid operation. + + The assets to lock. + The asset to lock. + + + + Start a task that sends the version control settings to the version control system. + + + + + How assets should be resolved. + + + + + Use merged version. + + + + + Use "mine" (local version). + + + + + Use "theirs" (other/remote version). + + + + + Defines the behaviour of the version control revert methods. + + + + + Revert files but keep locally changed ones. + + + + + Use the version control regular revert approach. + + + + + Revert only unchanged files. + + + + + The status of an operation returned by the VCS. + + + + + Files conflicted. + + + + + An error was returned. + + + + + Submission worked. + + + + + Files were unable to be added. + + + + + A UnityEditor.VersionControl.Task is created almost everytime UnityEditor.VersionControl.Provider is ask to perform an action. + + + + + The result of some types of tasks. + + + + + List of changesets returned by some tasks. + + + + + A short description of the current task. + + + + + May contain messages from the version control plugins. + + + + + Progress of current task in precent. + + + + + Some task return result codes, these are stored here. + + + + + Total time spent in task since the task was started. + + + + + Get whether or not the task was completed succesfully. + + + + + Will contain the result of the Provider.ChangeSetDescription task. + + + + + Upon completion of a task a completion task will be performed if it is set. + + Which completion action to perform. + + + + A blocking wait for the task to complete. + + + + + This enum is used to build a bitmask for controlling per-channel vertex compression. + + + + + Vertex color. + + + + + Vertex normal. + + + + + Position. + + + + + Tangent. + + + + + Texture coordinate channel 0. Usually used for Albedo texture. + + + + + Texture coordinate channel 1. Usually used for baked lightmap. + + + + + Texture coordinate channel 2. Usually used for realtime GI. + + + + + Texture coordinate channel 3. + + + + + Enum for Tools.viewTool. + + + + + The FPS tool is selected. + + + + + View tool is not selected. + + + + + The orbit tool is selected. + + + + + The pan tool is selected. + + + + + The zoom tool is selected. + + + + + An enum containing different compression types. + + + + + WebGL resources are stored using Brotli compression. + + + + + WebGL resources are uncompressed. + + + + + WebGL resources are stored using Gzip compression. + + + + + Options for Exception support in WebGL. + + + + + Enable throw support. + + + + + Enable exception support for all exceptions. + + + + + Disable exception support. + + + + + Wii U Player debugging level. + + + + + Asserts enabled, memory profiling enabled, Nintendo Wii U profiler linked, no optimizations. + + + + + Asserts enabled, memory profiling enabled, Nintendo Wii U profiler linked, optimized build. + + + + + Memory profiling enabled, Nintendo Wii U profiler linked, optimizations enabled. + + + + + Optimizations enabled. + + + + + Player packaging. + + + + + Download image. + + + + + Unpacked. + + + + + WUMAD package. + + + + + Resolution setting for TV output. + + + + + 1920×1080 (Full HD). + + + + + 1280×720 pixels. + + + + + Build configurations for Windows Store Visual Studio solutions. + + + + + Debug configuation. +No optimizations, profiler code enabled. + + + + + Master configuation. +Optimizations enabled, profiler code disabled. This configuration is used when submitting the application to Windows Store. + + + + + Release configuration. +Optimization enabled, profiler code enabled. + + + + + Specifies Windows SDK which used when building Windows Store Apps. + + + + + Target device type for a Windows Store application to run on. + + + + + The application targets all devices that run Windows Store applications. + + + + + The application targets HoloLens. + + + + + Application targets mobile devices. + + + + + Application targets PCs. + + + + + Target Xbox build type. + + + + + Debug player (for building with source code). + + + + + Development player. + + + + + Master player (submission-proof). + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.dll new file mode 100644 index 0000000..831b2bc Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.xml new file mode 100644 index 0000000..6414449 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.Advertisements.xml @@ -0,0 +1,266 @@ + + + + + UnityEngine.Advertisements + + + + Unity Ads. + + + + + Controls the amount of logging output from the advertisement system. + + + + + Controls the amount of logging output from the advertisement system. + + + + + Returns the game identifier for the current platform. + + + + + Returns whether the advertisement system is initialized successfully. + + + + + Returns whether an advertisement is currently being shown. + + + + + Returns if the current platform is supported by the advertisement system. + + + + + Returns whether the testing mode is enabled. + + + + + Returns the current Unity Ads version. + + + + + Player debug message level. + + + + + Prints all debugging messages. + + + + + Prints all error messages. + + + + + Prints all informational messages. + + + + + Prints out no debugging output. + + + + + Prints out warnings. + + + + + Returns the placement state. + + Placement identifier. + + Placement state. + + + + + Returns the placement state. + + Placement identifier. + + Placement state. + + + + + Manually initializes the advertisement system. Normally this is done from editor, and you should only call this method if you are using UnityAds with automatic initialization disabled. + + Your game id. You can see a list of your registered games at the UnityAds admin site. + In test mode, you will see test advertisement. Can be overruled by settings in the admin site for game. + + + + Manually initializes the advertisement system. Normally this is done from editor, and you should only call this method if you are using UnityAds with automatic initialization disabled. + + Your game id. You can see a list of your registered games at the UnityAds admin site. + In test mode, you will see test advertisement. Can be overruled by settings in the admin site for game. + + + + Returns whether an advertisement is ready to be shown. Placements are configured per game in the UnityAds admin site, where you can also set your default placement. + + Optional placement identifier. If not specified, your default placement specified in UnityAds server-side admin settings will be used. + + If the placement is ready. + + + + + Returns whether an advertisement is ready to be shown. Placements are configured per game in the UnityAds admin site, where you can also set your default placement. + + Optional placement identifier. If not specified, your default placement specified in UnityAds server-side admin settings will be used. + + If the placement is ready. + + + + + Sets various metadata for Unity Ads. + + MetaData to be set. + + + + Show an advertisement in your project. + + Optional placement identifier. If not specified, your default placement specified in the admin settings will be used. + Specify e.g. callback handler to be called when video has finished. + + + + Show an advertisement in your project. + + Optional placement identifier. If not specified, your default placement specified in the admin settings will be used. + Specify e.g. callback handler to be called when video has finished. + + + + Show an advertisement in your project. + + Optional placement identifier. If not specified, your default placement specified in the admin settings will be used. + Specify e.g. callback handler to be called when video has finished. + + + + Show an advertisement in your project. + + Optional placement identifier. If not specified, your default placement specified in the admin settings will be used. + Specify e.g. callback handler to be called when video has finished. + + + + Class for sending various metadata to UnityAds. + + + + + Metadata category. + + + + + + + Metadata key. + + Stored metadata. + + + + + Sets new metadata fields. + + Metadata key. + Metadata value, needs to be JSON serializable. + + + + + + + Stored metadata dictionary. + + + + + Various states that Unity Ads placements can be in. + + + + + Placement has been disabled. + + + + + Placement has no advertisements to show. + + + + + Placement is not available. + + + + + Placement is ready to be shown an advertisement from. + + + + + Placement is waiting to be ready. + + + + + Collection of options that can be passed to Advertisements.Show to modify advertisement behaviour. + + + + + Add a string to specify an identifier for a specific user in the game. + + + + + Callback to recieve the result of the advertisement. + + + + + ShowResult is passed to ShowOptions.resultCallback after the advertisement has completed. + + + + + Indicates that the advertisement failed to complete. + + + + + Indicates that the advertisement completed successfully. + + + + + Indicates that the advertisement was skipped. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.dll new file mode 100644 index 0000000..450ea68 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.xml new file mode 100644 index 0000000..2714ca3 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.Analytics.xml @@ -0,0 +1,18 @@ + + + + + UnityEngine.Analytics + + + + Name of the event. + + + + + Trigger the instrumented event. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.dll new file mode 100644 index 0000000..35182e0 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.xml new file mode 100644 index 0000000..6495c34 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.HoloLens.xml @@ -0,0 +1,219 @@ + + + + + UnityEngine.HoloLens + + + + This component enables control over properties attached to AudioSource components for spatial sound in Unity. + + + + + Describes room size to for audio effects. + + + + + Describes room size to for audio effects. + + + + + A BaseInputModule designed for HoloLens input. + + + + + Defines the number of pixels of emulated mouse movement when a value of positive or negative 1 is reported by the device for a navigation gesture. + + + + + Controls the number of seconds that taps (emulated mouse clicks) will leave any tapped UI object in the Pressed state for better user feedback. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + + + The base class for all spatial mapping components. + + + + + This property specifies whether or not collision data will be generated when computing the surface mesh's triangulation. (Read Only) + + + + + Specifies if the component should listen and respond to spatial surface changes. + + + + + The half extents of the bounding box from its center. + + + + + The level of detail that should be used when generating surface meshes. + + + + + The number of frames to keep a surface mesh alive for before destroying it after the system has determined that its real world counterpart has been removed. + + + + + The time in seconds between system queries for changes in physical space. + + + + + The radius of the bounding sphere volume. + + + + + The GameObject that should be the parent of all the component's surface mesh game objects. + + + + + The surface observer volume to use when querying the system for changes in physical space. + + + + + The number of triangles per cubic meter or level of detail that should be used when creating a surface mesh. + + + + + Generates surface meshes with the maximum amount of triangles. + + + + + Generates surface meshes with as few triangles as possible. + + + + + Generates a medium quality surface mesh. + + + + + This method is called when the system notifies the spatial mapping component that a surface has been removed. + + + + + + + This method will be called by the system when the surface data has been generated. + + + + + + + + + The surface observer volume type to use when querying the system for changes in physical space. + + + + + An axis aligned bounding box volume. + + + + + A sphere bounding volume. + + + + + Creates and manages the GameObjects that represent spatial surfaces. A MeshFilter and MeshCollider will automatically be added to these game objects so that holograms can interact with physical surfaces. + + + + + Enables/Disables MeshCollider components on all spatial surfaces associated with the SpatialMappingCollider component instance. + + + + + Sets the layer on all spatial surfaces associated with the SpatialMappingCollider component instance. + + + + + Sets the PhysicMaterial on all spatial surfaces associated with the SpatialMappingCollider component instance. + + + + + Creates and manages the GameObjects that represent spatial surfaces. A MeshFilter, MeshRenderer, and material will automatically be added to these GameObjects so that the spatial surface can be visualized. + + + + + A Material applied to all surface meshes to enable occlusion of holograms by real world objects. + + + + + Controls which Material will be used when rendering a surface mesh. + + + + + A material that can be used to visualize the spatial surface. + + + + + Specifies how to render the spatial surfaces associated with the SpatialMappingRenderer component instance. + + + + + Disables all MeshRenderer components associated with the SpatialMappingRenderer component instance. + + + + + Indicates that the Occlusion material should be used to render the surfaces. + + + + + Indicates that the Visualization material should be used to render the surfaces. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.dll new file mode 100644 index 0000000..fe579af Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.xml new file mode 100644 index 0000000..14968dc --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.Networking.xml @@ -0,0 +1,5097 @@ + + + + + UnityEngine.Networking + + + + An enumeration of the options that can be set on a network channel. + + + + + The option to allow packet fragmentation for a channel. + + + + + The option to set the maximum packet size allowed for a channel. + + + + + The option to set the number of pending buffers for a channel. + + + + + Class containing constants for default network channels. + + + + + The id of the default reliable channel used by the UNet HLAPI, This channel is used for state updates and spawning. + + + + + The id of the default unreliable channel used for the UNet HLAPI. This channel is used for movement updates. + + + + + A Custom Attribute that can be added to member functions of NetworkBehaviour scripts, to make them only run on clients. + + + + + A Custom Attribute that can be added to member functions of NetworkBehaviour scripts, to make them only run on clients, but not generate warnings. + + + + + This is an attribute that can be put on methods of NetworkBehaviour classes to allow them to be invoked on clients from a server. + + + + + The channel ID which this RPC transmission will use. + + + + + A client manager which contains static client information and functions. + + + + + A list of all players added to the game. + + + + + This is a dictionary of networked objects that have been spawned on the client. + + + + + This is a dictionary of the prefabs that are registered on the client with ClientScene.RegisterPrefab(). + + + + + Returns true when a client's connection has been set to ready. + + + + + The NetworkConnection object that is currently "ready". This is the connection to the server where objects are spawned from. + + + + + The reconnectId to use when a client reconnects to the new host of a game after the old host was lost. + + + + + This is dictionary of the disabled NetworkIdentity objects in the scene that could be spawned by messages from the server. + + + + + This adds a player GameObject for this client. This causes an AddPlayer message to be sent to the server, and NetworkManager.OnServerAddPlayer is called. If an extra message was passed to AddPlayer, then OnServerAddPlayer will be called with a NetworkReader that contains the contents of the message. + + The connection to become ready for this client. + The local player ID number. + An extra message object that can be passed to the server for this player. + + True if player was added. + + + + + This adds a player GameObject for this client. This causes an AddPlayer message to be sent to the server, and NetworkManager.OnServerAddPlayer is called. If an extra message was passed to AddPlayer, then OnServerAddPlayer will be called with a NetworkReader that contains the contents of the message. + + The connection to become ready for this client. + The local player ID number. + An extra message object that can be passed to the server for this player. + + True if player was added. + + + + + This adds a player GameObject for this client. This causes an AddPlayer message to be sent to the server, and NetworkManager.OnServerAddPlayer is called. If an extra message was passed to AddPlayer, then OnServerAddPlayer will be called with a NetworkReader that contains the contents of the message. + + The connection to become ready for this client. + The local player ID number. + An extra message object that can be passed to the server for this player. + + True if player was added. + + + + + This clears the registered spawn prefabs and spawn handler functions for this client. + + + + + Create and connect a local client instance to the local server. This makes the client into a "host" - a client and server in the same process. + + + A client object for communicating with the local server. + + + + + Destroys all networked objects on the client. + + + + + This finds the local NetworkIdentity object with the specified network Id. + + The id of the networked object. + + The game object that matches the netId. + + + + + Signal that the client connection is ready to enter the game. + + The client connection which is ready. + + + + A constant ID used by the old host when it reconnects to the new host. + + + + + An invalid reconnect Id. + + + + + Registers a prefab with the UNET spawning system. + + A Prefab that will be spawned. + A method to use as a custom spawnhandler on clients. + A method to use as a custom un-spawnhandler on clients. + An assetId to be assigned to this prefab. This allows a dynamically created game object to be registered for an already known asset Id. + + + + Registers a prefab with the UNET spawning system. + + A Prefab that will be spawned. + A method to use as a custom spawnhandler on clients. + A method to use as a custom un-spawnhandler on clients. + An assetId to be assigned to this prefab. This allows a dynamically created game object to be registered for an already known asset Id. + + + + Registers a prefab with the UNET spawning system. + + A Prefab that will be spawned. + A method to use as a custom spawnhandler on clients. + A method to use as a custom un-spawnhandler on clients. + An assetId to be assigned to this prefab. This allows a dynamically created game object to be registered for an already known asset Id. + + + + This is an advanced spawning function that registers a custom assetId with the UNET spawning system. + + Custom assetId string. + A method to use as a custom spawnhandler on clients. + A method to use as a custom un-spawnhandler on clients. + + + + Removes the specified player ID from the game. + + The local playerControllerId number to be removed. + + Returns true if the player was successfully destoyed and removed. + + + + + NetId is a unique number assigned to all objects with NetworkIdentity components in a game. + + NetId of object. + Networked object. + + + + Sets the Id that the ClientScene will use when reconnecting to a new host after host migration. + + The Id to use when reconnecting to a game. + The set of known peers in the game. This may be null. + + + + Removes a registered spawn prefab that was setup with ClientScene.RegisterPrefab. + + The prefab to be removed from registration. + + + + Removes a registered spawn handler function that was registered with ClientScene.RegisterHandler(). + + The assetId for the handler to be removed for. + + + + This is an attribute that can be put on methods of NetworkBehaviour classes to allow them to be invoked on the server by sending a command from a client. + + + + + The QoS channel to use to send this command on, see Networking.QosType. + + + + + FilterLog is a utility class that controls the level of logging generated by UNET clients and servers. + + + + + The current logging level that UNET is running with. + + + + + The current logging level that UNET is running with. + + + + + Checks if debug logging is enabled. + + + + + Checks if error logging is enabled. + + + + + Checks if info level logging is enabled. + + + + + Checks if wanring level logging is enabled. + + + + + Setting LogFilter.currentLogLevel to this will enable verbose debug logging. + + + + + Setting LogFilter.currentLogLevel to this will error and above messages. + + + + + Control how verbose the network log messages are. + + + + + Show log messages with priority Debug and higher. + + + + + Show log messages with priority Developer and higher, this it the most verbose setting. + + + + + Show log messages with priority Error and higher. + + + + + Show log messages with priority Fatal and higher. this is the least verbose setting. + + + + + Show log messages with priority Info and higher. This is the default setting. + + + + + Show log messages with priority Warning and higher. + + + + + Setting LogFilter.currentLogLevel to this will log only info and above messages. This is the default level. + + + + + Setting LogFilter.currentLogLevel to this will log wanring and above messages. + + + + + Network message classes should be derived from this class. These message classes can then be sent using the various Send functions of NetworkConnection, NetworkClient and NetworkServer. + + + + + This method is used to populate a message object from a NetworkReader stream. + + Stream to read from. + + + + The method is used to populate a NetworkWriter stream from a message object. + + Stream to write to. + + + + Container class for networking system built-in message types. + + + + + Internal networking system message for adding player objects to client instances. + + + + + Internal networking system message for sending synchronizing animation state. + + + + + Internal networking system message for sending synchronizing animation parameter state. + + + + + Internal networking system message for sending animation triggers. + + + + + Internal networking system message for sending a command from client to server. + + + + + Internal networking system message for communicating a connection has occurred. + + + + + Internal networking system message for HLAPI CRC checking. + + + + + Internal networking system message for communicating a disconnect has occurred,. + + + + + Internal networking system message for communicating an error. + + + + + Internal networking system message for identifying fragmented packets. + + + + + The highest value of built-in networking system message ids. User messages must be above this value. + + + + + The highest value of internal networking system message ids. User messages must be above this value. User code cannot replace these handlers. + + + + + Internal networking system message for communicating failing to add lobby player. + + + + + Internal networking system message for communicating a player is ready in the lobby. + + + + + Internal networking system messages used to return the game to the lobby scene. + + + + + Internal networking system message for communicating a lobby player has loaded the game scene. + + + + + Internal networking system message for sending tranforms for client object from client to server. + + + + + Internal networking system message for setting authority to a client for an object. + + + + + Internal networking system message for sending tranforms from client to server. + + + + + Returns the name of internal message types by their id. + + A internal message id value. + + The name of the internal message. + + + + + Internal networking system message for sending information about network peers to clients. + + + + + Internal networking system message for server to tell clients they are no longer ready. + + + + + Internal networking system message for destroying objects. + + + + + Internal networking system message for hiding objects. + + + + + Internal networking system message for spawning objects. + + + + + Internal networking system message for spawning scene objects. + + + + + Internal networking system message for telling clients they own a player object. + + + + + Internal networking system message for sending information about changes in authority for non-player objects to clients. + + + + + Internal networking system message for clients to tell server they are ready. + + + + + Internal networking system message used when a client connects to the new host of a game. + + + + + Internal networking system message for removing a player object which was spawned for a client. + + + + + Internal networking system message for sending a ClientRPC from server to client. + + + + + Internal networking system message that tells clients which scene to load when they connect to a server. + + + + + Internal networking system messages used to tell when the initial contents of a scene is being spawned. + + + + + Internal networking system message for sending a SyncEvent from server to client. + + + + + Internal networking system message for sending a USyncList generic list. + + + + + Internal networking system message for updating SyncVars on a client from a server. + + + + + A component to synchronize Mecanim animation states for networked objects. + + + + + The animator component to synchronize. + + + + + Gets whether an animation parameter should be auto sent. + + Index of the parameter in the Animator. + + True if the parameter should be sent. + + + + + Sets whether an animation parameter should be auto sent. + + Index of the parameter in the Animator. + The new value. + + + + Causes an animation trigger to be invoked for a networked object. + + Name of trigger. + Hash id of trigger (from the Animator). + + + + + Causes an animation trigger to be invoked for a networked object. + + Name of trigger. + Hash id of trigger (from the Animator). + + + + + Base class which should be inherited by scripts which contain networking functionality. + + + + + The NetworkConnection associated with this NetworkIdentity. This is only valid for player objects on the server. + + + + + The NetworkConnection associated with this NetworkIdentity. This is only valid for player objects on the server. + + + + + This returns true if this object is the authoritative version of the object in the distributed network application. + + + + + Returns true if running as a client and this object was spawned by a server. + + + + + This returns true if this object is the one that represents the player on the local machine. + + + + + Returns true if this object is active on an active server. + + + + + This value is set on the NetworkIdentity and is accessible here for convenient access for scripts. + + + + + The unique network Id of this object. + + + + + The id of the player associated with the behaviour. + + + + + This clears all the dirty bits that were set on this script by SetDirtyBits(); + + + + + Delegate for Command functions. + + + + + + + Delegate for Event functions. + + + + + + + This virtual function is used to specify the QoS channel to use for SyncVar updates for this script. + + + The QoS channel for this script. + + + + + This virtual function is used to specify the send interval to use for SyncVar updates for this script. + + + The time in seconds between updates. + + + + + Manually invoke a Command. + + Hash of the Command name. + Parameters to pass to the command. + + Returns true if successful. + + + + + Manually invoke an RPC function. + + Hash of the RPC name. + Parameters to pass to the RPC function. + + Returns true if successful. + + + + + Manually invoke a SyncEvent. + + Hash of the SyncEvent name. + Parameters to pass to the SyncEvent. + + Returns true if successful. + + + + + Callback used by the visibility system to determine if an observer (player) can see this object. + + Network connection of a player. + + True if the player can see this object. + + + + + Virtual function to override to receive custom serialization data. The corresponding function to send serialization data is OnSerialize(). + + Reader to read from the stream. + True if being sent initial state. + + + + This is invoked on clients when the server has caused this object to be destroyed. + + + + + Callback used by the visibility system to (re)construct the set of observers that can see this object. + + The new set of observers for this object. + True if the set of observers is being built for the first time. + + Return true if this function did work. + + + + + Virtual function to override to send custom serialization data. The corresponding function to send serialization data is OnDeserialize(). + + Writer to use to write to the stream. + If this is being called to send initial state. + + True if data was written. + + + + + Callback used by the visibility system for objects on a host. + + New visibility state. + + + + This is invoked on behaviours that have authority, based on context and NetworkIdentity.localPlayerAuthority. + + + + + Called on every NetworkBehaviour when it is activated on a client. + + + + + Called when the local player object has been set up. + + + + + This is invoked for NetworkBehaviour objects when they become active on the server. + + + + + This is invoked on behaviours when authority is removed. + + + + + An internal method called on client objects to resolve GameObject references. + + + + + Used to set the behaviour as dirty, so that a network update will be sent for the object. + + Bit mask to set. + + + + A structure that contains data from a NetworkDiscovery server broadcast. + + + + + The data broadcast by the server. + + + + + The IP address of the server that broadcasts this data. + + + + + This is a network client class used by the networking system. It contains a NetworkConnection that is used to connection to a network server. + + + + + True if a network client is currently active. + + + + + A list of all the active network clients in the current process. + + + + + The NetworkConnection object this client is using. + + + + + The registered network message handlers. + + + + + The host topology that this client is using. + + + + + This gives the current connection status of the client. + + + + + The class to use when creating new NetworkConnections. + + + + + The number of QoS channels currently configured for this client. + + + + + This is obsolete. This information is now in the NetworkMigrationManager. + + + + + The IP address of the server that this client is connected to. + + + + + The port of the server that this client is connected to. + + + + + This configures the transport layer settings for a client. + + Transport layer configuration object. + The maximum number of connections to allow. + Transport layer topology object. + + True if the configuration was successful. + + + + + This configures the transport layer settings for a client. + + Transport layer configuration object. + The maximum number of connections to allow. + Transport layer topology object. + + True if the configuration was successful. + + + + + Connect client to a NetworkServer instance. + + Target IP address or hostname. + Target port number. + + + + Connect client to a NetworkServer instance with simulated latency and packet loss. + + Target IP address or hostname. + Target port number. + Simulated latency in milliseconds. + Simulated packet loss percentage. + + + + Creates a new NetworkClient instance. + + + + + Disconnect from server. + + + + + Retrieves statistics about the network packets sent on this connection. + + + Dictionary of packet statistics for the client's connection. + + + + + Gets the Return Trip Time for this connection. + + + Return trip time in milliseconds. + + + + + Get inbound network statistics for the client. + + Number of messages received so far. + Number of bytes received so far. + + + + Get outbound network statistics for the client. + + Number of messages sent so far (including collated messages send through buffer). + Number of messages sent through buffer. + Number of bytes sent so far. + Number of messages buffered for sending per second. + + + + Retrieves statistics about the network packets sent on all connections. + + + Dictionary of stats. + + + + + This is used by a client that has lost the connection to the old host, to reconnect to the new host of a game. + + The IP address of the new host. + The port of the new host. + + True if able to reconnect. + + + + + Register a handler for a particular message type. + + Message type number. + Function handler which will be invoked for when this message type is received. + + + + Resets the statistics return by NetworkClient.GetConnectionStats() to zero values. + + + + + This sends a network message with a message Id to the server. This message is sent on channel zero, which by default is the reliable channel. + + The id of the message to send. + A message instance to send. + + True if message was sent. + + + + + This sends a network message with a message Id to the server on a specific channel. + + The id of the message to send. + The message to send. + The channel to send the message on. + + True if the message was sent. + + + + + This sends the data in an array of bytes to the server that the client is connected to. + + Data to send. + Number of bytes of data. + The QoS channel to send data on. + + True if successfully sent. + + + + + This sends a network message with a message Id to the server on channel one, which by default is the unreliable channel. + + The message id to send. + The message to send. + + True if the message was sent. + + + + + This sends the contents of the NetworkWriter's buffer to the connected server on the specified channel. + + Writer object containing data to send. + QoS channel to send data on. + + True if data successfully sent. + + + + + Set the maximum amount of time that can pass for transmitting the send buffer. + + Delay in seconds. + + + + This sets the class that is used when creating new network connections. + + + + + Shut down a client. + + + + + Shuts down all network clients. + + + + + Unregisters a network message handler. + + The message type to unregister. + + + + A High level network connection. This is used for connections from client-to-server and for connection from server-to-client. + + + + + The IP address associated with the connection. + + + + + A list of the NetworkIdentity objects owned by this connection. + + + + + Unique identifier for this connection that is assigned by the transport layer. + + + + + Transport level host ID for this connection. + + + + + True if the connection is connected to a remote end-point. + + + + + Flag that tells if the connection has been marked as "ready" by a client calling ClientScene.Ready(). + + + + + The last error associated with this connection. + + + + + The last time that a message was received on this connection. + + + + + Setting this to true will log the contents of network message to the console. + + + + + The list of players for this connection. + + + + + This function checks if there is a message handler registered for the message ID. + + The message ID of the handler to look for. + + True if a handler function was found. + + + + + Disconnects this connection. + + + + + Disposes of this connection, releasing channel buffers that it holds. + + + + + This causes the channels of the network connection to flush their data to the transport layer. + + + + + Get statistics for incoming traffic. + + Number of messages received. + Number of bytes received. + + + + Get statistics for outgoing traffic. + + Number of messages sent. + Number of messages currently buffered for sending. + Number of bytes sent. + How many messages were buffered in the last second. + + + + This makes the connection process the data contained in the buffer, and call handler functions. + + Data to process. + Size of the data to process. + Channel the data was recieved on. + + + + This makes the connection process the data contained in the stream, and call handler functions. + + Stream that contains data. + Size of the data. + Channel the data was received on. + + + + This inializes the internal data structures of a NetworkConnection object, including channel buffers. + + The topology to be used. + The host or IP connected to. + The transport hostId for the connection. + The transport connectionId for the connection. + + + + This function invokes the registered handler function for a message. + + The message type of the handler to use. + The stream to read the contents of the message from. + The channel that the message arrived on. + The message object to process. + + True if a handler function was found and invoked. + + + + + This function invokes the registered handler function for a message. + + The message type of the handler to use. + The stream to read the contents of the message from. + The channel that the message arrived on. + The message object to process. + + True if a handler function was found and invoked. + + + + + This function invokes the registered handler function for a message, without any message data. + + The message ID of the handler to invoke. + + True if a handler function was found and invoked. + + + + + Structure used to track the number and size of packets of each packets type. + + + + + Total bytes of all messages of this type. + + + + + The total number of messages of this type. + + + + + The message type these stats are for. + + + + + This registers a handler function for a message Id. + + The message ID to register. + The handler function to register. + + + + Resets the statistics that are returned from NetworkClient.GetConnectionStats(). + + + + + This sends a network message with a message ID on the connection. This message is sent on channel zero, which by default is the reliable channel. + + The ID of the message to send. + The message to send. + + True if the message was sent. + + + + + This sends a network message on the connection using a specific transport layer channel. + + The message ID to send. + The message to send. + The transport layer channel to send on. + + True if the message was sent. + + + + + This sends an array of bytes on the connection. + + The array of data to be sent. + The number of bytes in the array to be sent. + The transport channel to send on. + + Success if data was sent. + + + + + This sends a network message with a message ID on the connection. This message is sent on channel one, which by default is the unreliable channel. + + The message ID to send. + The message to send. + + True if the message was sent. + + + + + This sends the contents of a NetworkWriter object on the connection. + + A writer object containing data to send. + The transport channel to send on. + + True if the data was sent. + + + + + This sets an option on the network channel. + + The channel the option will be set on. + The option to set. + The value for the option. + + True if the option was set. + + + + + The maximum time in seconds that messages are buffered before being sent. + + Time in seconds. + + + + Returns a string representation of the NetworkConnection object state. + + + + + This virtual function allows custom network connection classes to process data from the network before it is passed to the application. + + The data recieved. + The size of the data recieved. + The channel that the data was received on. + + + + This virtual function allows custom network connection classes to process data send by the application before it goes to the network transport layer. + + Data to send. + Size of data to send. + Channel to send data on. + Error code for send. + + True if data was sent. + + + + + This removes the handler registered for a message Id. + + The message ID to unregister. + + + + This class holds information about which networked scripts use which QoS channels for updates. + + + + + Enables a CRC check between server and client that ensures the NetworkBehaviour scripts match. + + + + + A dictionary of script QoS channels. + + + + + This is used to setup script network settings CRC data. + + Script name. + QoS Channel. + + + + This can be used to reinitialize the set of script CRCs. + + + + + The NetworkDiscovery component allows Unity games to find each other on a local network. It can broadcast presence and listen for broadcasts, and optionally join matching games using the NetworkManager. + + + + + The data to include in the broadcast message when running as a server. + + + + + How often in milliseconds to broadcast when running as a server. + + + + + A key to identify this application in broadcasts. + + + + + The network port to broadcast on and listen to. + + + + + A dictionary of broadcasts received from servers. + + + + + The sub-version of the application to broadcast. This is used to match versions of the same application. + + + + + The version of the application to broadcast. This is used to match versions of the same application. + + + + + The TransportLayer hostId being used (read-only). + + + + + True if running in client mode (read-only). + + + + + True if running in server mode (read-only). + + + + + The horizontal offset of the GUI if active. + + + + + The vertical offset of the GUI if active. + + + + + True is broadcasting or listening (read-only). + + + + + True to draw the default Broacast control UI. + + + + + True to integrate with the NetworkManager. + + + + + Initializes the NetworkDiscovery component. + + + Return true if the network port was available. + + + + + This is a virtual function that can be implemented to handle broadcast messages when running as a client. + + The IP address of the server. + The data broadcast by the server. + + + + Starts listening for broadcasts messages. + + + True is able to listen. + + + + + Starts sending broadcast messages. + + + True is able to broadcast. + + + + + Stops listening and broadcasting. + + + + + A 128 bit number used to represent assets in a networking context. + + + + + A valid NetworkHash has a non-zero value. + + + True if the value is non-zero. + + + + + This parses the string representation of a NetworkHash into a binary object. + + A hex string to parse. + + A 128 bit network hash object. + + + + + Resets the value of a NetworkHash to zero (invalid). + + + + + Returns a string representation of a NetworkHash object. + + + A hex asset string. + + + + + The NetworkIdentity identifies objects across the network, between server and clients. Its primary data is a NetworkInstanceId which is allocated by the server and then set on clients. This is used in network communications to be able to lookup game objects on different machines. + + + + + Unique identifier used to find the source assets when server spawns the on clients. + + + + + A callback that can be populated to be notified when the client-authority state of objects changes. + + + + + The client that has authority for this object. This will be null if no client has authority. + + + + + The connection associated with this NetworkIdentity. This is only valid for player objects on the server. + + + + + The UConnection associated with this NetworkIdentity. This is only valid for player objects on a local client. + + + + + This returns true if this object is the authoritative version of the object in the distributed network application. + + + + + Returns true if running as a client and this object was spawned by a server. + + + + + This returns true if this object is the one that represents the player on the local machine. + + + + + Returns true if running as a server, which spawned the object. + + + + + .localPlayerAuthority means that the client of the "owning" player has authority over their own player object. + + + + + Unique identifier for this particular object instance, used for tracking objects between networked clients and the server. + + + + + The set of network connections (players) that can see this object. + + + + + The id of the player associated with this GameObject. + + + + + A unique identifier for NetworkIdentity objects within a scene. + + + + + Flag to make this object only exist when the game is running as a server (or host). + + + + + This assigns control of an object to a client via the client's NetworkConnection. + + The connection of the client to assign authority to. + + True if authority was assigned. + + + + + The delegate type for the clientAuthorityCallback. + + The network connection that is gaining or losing authority. + The object whose client authority status is being changed. + The new state of client authority of the object for the connection. + + + + Force the scene ID to a specific value. + + The new scene ID. + + + + + This causes the set of players that can see this object to be rebuild. The OnRebuildObservers callback function will be invoked on each NetworkBehaviour. + + True if this is the first time. + + + + Removes ownership for an object for a client by its conneciton. + + The connection of the client to remove authority for. + + True if authority is removed. + + + + + This is used to identify networked objects across all participants of a network. It is assigned at runtime by the server when an object is spawned. + + + + + A static invalid NetworkInstanceId that can be used for comparisons. + + + + + Returns true if the value of the NetworkInstanceId is zero. + + + True if zero. + + + + + Returns a string of "NetID:value". + + + String representation of this object. + + + + + The internal value of this identifier. + + + + + This is a specialized NetworkManager that includes a networked lobby. + + + + + This is the prefab of the player to be created in the PlayScene. + + + + + This is the prefab of the player to be created in the LobbyScene. + + + + + The scene to use for the lobby. This is similar to the offlineScene of the NetworkManager. + + + + + These slots track players that enter the lobby. + + + + + The maximum number of players allowed in the game. + + + + + The maximum number of players per connection. + + + + + The minimum number of players required to be ready for the game to start. + + + + + The scene to use for the playing the game from the lobby. This is similar to the onlineScene of the NetworkManager. + + + + + This flag enables display of the default lobby UI. + + + + + CheckReadyToBegin checks all of the players in the lobby to see if their readyToBegin flag is set. + + + + + Called on the client when adding a player to the lobby fails. + + + + + This is called on the client when it connects to server. + + The connection that connected. + + + + This is called on the client when disconnected from a server. + + The connection that disconnected. + + + + This is a hook to allow custom behaviour when the game client enters the lobby. + + + + + This is a hook to allow custom behaviour when the game client exits the lobby. + + + + + This is called on the client when the client is finished loading a new networked scene. + + + + + + This is called on the server when a new client connects to the server. + + The new connection. + + + + This allows customization of the creation of the GamePlayer object on the server. + + The connection the player object is for. + The controllerId of the player on the connnection. + + A new GamePlayer object. + + + + + This allows customization of the creation of the lobby-player object on the server. + + The connection the player object is for. + The controllerId of the player. + + The new lobby-player object. + + + + + This is called on the server when a client disconnects. + + The connection that disconnected. + + + + This is called on the server when a player is removed. + + + + + + + This is called on the server when all the players in the lobby are ready. + + + + + This is called on the server when a networked scene finishes loading. + + Name of the new scene. + + + + This is called on the server when it is told that a client has finished switching from the lobby scene to a game player scene. + + The lobby player object. + The game player object. + + False to not allow this player to replace the lobby player. + + + + + This is called on the client when a client is started. + + + + + + This is called on the host when a host is started. + + + + + This is called on the server when the server is started - including when a host is started. + + + + + This is called on the client when the client stops. + + + + + This is called on the host when the host is stopped. + + + + + Sends a message to the server to make the game return to the lobby scene. + + + True if message was sent. + + + + + Calling this causes the server to switch back to the lobby scene. + + + + + This is used on clients to attempt to add a player to the game. + + + + + This component works in conjunction with the NetworkLobbyManager to make up the multiplayer lobby system. + + + + + This is a flag that control whether this player is ready for the game to begin. + + + + + The slot within the lobby that this player inhabits. + + + + + This is a hook that is invoked on all player objects when entering the lobby. + + + + + This is a hook that is invoked on all player objects when exiting the lobby. + + + + + This is a hook that is invoked on clients when a LobbyPlayer switches between ready or not ready. + + Whether the player is ready or not. + + + + This removes this player from the lobby. + + + + + This is used on clients to tell the server that this player is not ready for the game to begin. + + + + + This is used on clients to tell the server that this player is ready for the game to begin. + + + + + This is used on clients to tell the server that the client has switched from the lobby to the GameScene and is ready to play. + + + + + This flag controls whether the default UI is shown for the lobby player. + + + + + The NetworkManager is a convenience class for the HLAPI for managing networking systems. + + + + + A flag to control whether or not player objects are automatically created on connect, and on scene change. + + + + + The Quality-of-Service channels to use for the network transport layer. + + + + + The current NetworkClient being used by the manager. + + + + + This is true if the client loaded a new scene when connecting to the server. + + + + + The custom network configuration to use. + + + + + Flag to enable custom network configuration. + + + + + A flag to control whether the NetworkManager object is destroyed when the scene changes. + + + + + The transport layer global configuration to be used. + + + + + True if the NetworkServer or NetworkClient isactive. + + + + + The log level specifically to user for network log messages. + + + + + The list of matches that are available to join. + + + + + The hostname of the matchmaking server. + + + + + A MatchInfo instance that will be used when StartServer() or StartClient() are called. + + + + + The UMatch MatchMaker object. + + + + + The name of the current match. + + + + + The port of the matchmaking service. + + + + + The maximum number of players in the current match. + + + + + The maximum number of concurrent network connections to support. + + + + + The maximum delay before sending packets on connections. + + + + + The migration manager being used with the NetworkManager. + + + + + The network address currently in use. + + + + + The network port currently in use. + + + + + The name of the current network scene. + + + + + NumPlayers is the number of active player objects across all connections on the server. + + + + + The scene to switch to when offline. + + + + + The scene to switch to when online. + + + + + The percentage of incoming and outgoing packets to be dropped for clients. + + + + + The default prefab to be used to create player objects on the server. + + + + + The current method of spawning players used by the NetworkManager. + + + + + Controls whether the program runs when it is in the background. + + + + + Flag for using the script CRC check between server and clients. + + + + + Allows you to specify an EndPoint object instead of setting networkAddress and networkPort (required for some platforms such as Xbox One). + + + + + A flag to control sending the network information about every peer to all members of a match. + + + + + The IP address to bind the server to. + + + + + Flag to tell the server whether to bind to a specific IP address. + + + + + The delay in milliseconds to be added to incoming and outgoing packets for clients. + + + + + The NetworkManager singleton object. + + + + + List of prefabs that will be registered with the spawning system. + + + + + The list of currently registered player start positions for the current scene. + + + + + Flag that control whether clients started by this NetworkManager will use simulated latency and packet loss. + + + + + This makes the NetworkServer listen for WebSockets connections instead of normal transport layer connections. + + + + + This finds a spawn position based on NetworkStartPosition objects in the scene. + + + Returns the transform to spawn a player at, or null. + + + + + This checks if the NetworkManager has a client and that it is connected to a server. + + + True if the NetworkManagers client is connected to a server. + + + + + Called on the client when connected to a server. + + Connection to the server. + + + + Called on clients when disconnected from a server. + + Connection to the server. + + + + Called on clients when a network error occurs. + + Connection to a server. + Error code. + + + + Called on clients when a servers tells the client it is no longer ready. + + Connection to a server. + + + + Called on clients when a scene has completed loaded, when the scene load was initiated by the server. + + The network connection that the scene change message arrived on. + + + + Callback that happens when a NetworkMatch.DestroyMatch request has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + + + + Callback that happens when a NetworkMatch.DropConnection match request has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + + + + Callback that happens when a NetworkMatch.CreateMatch request has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + The information about the newly created match. + + + + Callback that happens when a NetworkMatch.JoinMatch request has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + The info for the newly joined match. + + + + Callback that happens when a NetworkMatch.ListMatches request has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + A list of matches corresponding to the filters set in the initial list request. + + + + Called on the server when a client adds a new player with ClientScene.AddPlayer. + + Connection from client. + Id of the new player. + An extra message object passed for the new player. + + + + Called on the server when a new client connects. + + Connection from client. + + + + Called on the server when a client disconnects. + + Connection from client. + + + + Called on the server when a network error occurs for a client connection. + + Connection from client. + Error code. + + + + Called on the server when a client is ready. + + Connection from client. + + + + Called on the server when a client removes a player. + + The connection to remove the player from. + The player controller to remove. + + + + Called on the server when a scene is completed loaded, when the scene load was initiated by the server with ServerChangeScene(). + + The name of the new scene. + + + + Callback that happens when a NetworkMatch.SetMatchAttributes has been processed on the server. + + Indicates if the request succeeded. + A text description for the error if success is false. + + + + This is a hook that is invoked when the client is started. + + The NetworkClient object that was started. + + + + This hook is invoked when a host is started. + + + + + This hook is invoked when a server is started - including when a host is started. + + + + + This hook is called when a client is stopped. + + + + + This hook is called when a host is stopped. + + + + + This hook is called when a server is stopped - including when a host is stopped. + + + + + Registers the transform of a game object as a player spawn location. + + Transform to register. + + + + This causes the server to switch scenes and sets the networkSceneName. + + The name of the scene to change to. The server will change scene immediately, and a message will be sent to connected clients to ask them to change scene also. + + + + This sets the address of the MatchMaker service. + + Hostname of MatchMaker service. + Port of MatchMaker service. + Protocol used by MatchMaker service. + + + + This sets up a NetworkMigrationManager object to work with this NetworkManager. + + The migration manager object to use with the NetworkManager. + + + + Shuts down the NetworkManager completely and destroy the singleton. + + + + + This starts a network client. It uses the networkAddress and networkPort properties as the address to connect to. + + + The client object created. + + + + + This starts a network "host" - a server and client in the same application. + + + The client object created - this is a "local client". + + + + + This starts MatchMaker for the NetworkManager. + + + + + This starts a new server. + + + True is the server was started. + + + + + Stops the client that the manager is using. + + + + + This stops both the client and the server that the manager is using. + + + + + Stops the MatchMaker that the NetworkManager is using. + + + + + Stops the server that the manager is using. + + + + + Unregisters the transform of a game object as a player spawn location. + + + + + + This allows the NetworkManager to use a client object created externally to the NetworkManager instead of using StartClient(). + + The NetworkClient object to use. + + + + An extension for the NetworkManager that displays a default HUD for controlling the network state of the game. + + + + + The NetworkManager associated with this HUD. + + + + + The horizontal offset in pixels to draw the HUD runtime GUI at. + + + + + The vertical offset in pixels to draw the HUD runtime GUI at. + + + + + Whether to show the default control HUD at runtime. + + + + + The details of a network message received by a client or server on a network connection. + + + + + The transport layer channel the message was sent on. + + + + + The connection the message was recieved on. + + + + + The id of the message type of the message. + + + + + A NetworkReader object that contains the contents of the message. + + + + + Returns a string with the numeric representation of each byte in the payload. + + Network message payload to dump. + Length of payload in bytes. + + Dumped info from payload. + + + + + The size of the largest message in bytes that can be sent on a NetworkConnection. + + + + + ReadMessage is used to extract a typed network message from the NetworkReader of a NetworkMessage object. + + + The type of the Network Message, must be derived from MessageBase. + + + + + The callback delegate used in message handler functions. + + Network message for the message callback. + + + + A component that manages the process of a new host taking over a game when the old host is lost. This is referred to as "host migration". The migration manager sends information about each peer in the game to all the clients, and when the host is lost because of a crash or network outage, the clients are able to choose a new host, and continue the game. + +The old host is able to rejoin the new game on the new host. + +The state of SyncVars and SyncLists on all objects with NetworkIdentities in the scene is maintained during a host migration. This also applies to custom serialized data for objects. + +All of the player objects in the game are disabled when the host is lost. Then, when the other clients rejoin the new game on the new host, the corresponding players for those clients are re-enabled on the host, and respawned on the other clients. No player state data is lost during a host migration. + + + + + The client instance that is being used to connect to the host. + + + + + True is this is a client that has been disconnected from a host. + + + + + Controls whether host migration is active. + + + + + True if this was the host and the host has been shut down. + + + + + Information about the match. This may be null if there is no match. + + + + + The IP address of the new host to connect to. + + + + + The X offset in pixels of the migration manager default GUI. + + + + + The Y offset in pixels of the migration manager default GUI. + + + + + The connectionId that this client was assign on the old host. + + + + + The set of peers involved in the game. This includes the host and this client. + + + + + The player objects that have been disabled, and are waiting for their corresponding clients to reconnect. + + + + + Flag to toggle display of the default UI. + + + + + True if this is a client that was disconnected from the host and is now waiting to reconnect to the new host. + + + + + True if this is a client that was disconnected from the host, and was chosen as the new host. + + + + + This causes a client that has been disconnected from the host to become the new host of the game. + + The network port to listen on. + + True if able to become the new host. + + + + + The player objects for connections to the old host. + + + + + The list of players for a connection. + + + + + This causes objects for known players to be disabled. + + + + + This is a utility function to pick one of the peers in the game as the new host. + + Information about the new host, including the IP address. + True if this client is to be the new host. + + True if able to pick a new host. + + + + + Used to initialize the migration manager with client and match information. + + The NetworkClient being used to connect to the host. + Information about the match being used. This may be null if there is no match. + + + + This should be called on a client when it has lost its connection to the host. + + The connection of the client that was connected to the host. + + True if the client should stay in the on-line scene. + + + + + This should be called on a host when it has has been shutdown. + + + + + A virtual function that is called when the authority of a non-player object changes. + + The game object whose authority has changed. + The id of the connection whose authority changed for this object. + The new authority state for the object. + + + + A virtual function that is called when the client is disconnected from the host. + + The connection to the old host. + How to handle scene changes. + + + + A virtual function that is called when the set of peers in the game changes. + + The set of peers in the game. + + + + A virtual function that is called when the host is shutdown. + + + + + A virtual function that is called for non-player objects with client authority on the new host when a client from the old host reconnects to the new host. + + The connection of the new client. + The object with authority that is being reconnected. + The connectionId of this client on the old host. + + + + A virtual function that is called on the new host when a client from the old host reconnects to the new host. + + The connection of the new client. + The player object associated with this client. + The connectionId of this client on the old host. + The playerControllerId of the player that is re-joining. + Additional message data (optional). + + + + A virtual function that is called on the new host when a client from the old host reconnects to the new host. + + The connection of the new client. + The player object associated with this client. + The connectionId of this client on the old host. + The playerControllerId of the player that is re-joining. + Additional message data (optional). + + + + Information about a player object from another peer. + + + + + The networkId of the player object. + + + + + The gameObject for the player. + + + + + The playerControllerId of the player GameObject. + + + + + This re-establishes a non-player object with client authority with a client that is reconnected. It is similar to NetworkServer.SpawnWithClientAuthority(). + + The connection of the new client. + The object with client authority that is being reconnected. + This client's connectionId on the old host. + + True if the object was reconnected. + + + + + This re-establishes a player object with a client that is reconnected. It is similar to NetworkServer.AddPlayerForConnection(). The player game object will become the player object for the new connection. + + The connection of the new client. + The player object. + This client's connectionId on the old host. + The playerControllerId of the player that is rejoining. + + True if able to re-add this player. + + + + + Resets the migration manager, and sets the ClientScene's ReconnectId. + + The connectionId for the ClientScene to use when reconnecting. + + + + An enumeration of how to handle scene changes when the connection to the host is lost. + + + + + The client should stay in the online scene. + + + + + The client should return to the offline scene. + + + + + This sends the set of peers in the game to all the peers in the game. + + + + + Component that controls visibility of networked objects for players. + + + + + Which method to use for checking proximity of players. + + + + + Flag to force this object to be hidden for players. + + + + + The maximim range that objects will be visible at. + + + + + How often (in seconds) that this object should update the set of players that can see it. + + + + + Enumeration of methods to use to check proximity. + + + + + Use 2D physics to determine proximity. + + + + + Use 3D physics to determine proximity. + + + + + General purpose serializer for UNET (for reading byte arrays). + + + + + Creates a new NetworkReader object. + + A buffer to construct the reader with, this buffer is NOT copied. + + + + Creates a new NetworkReader object. + + A buffer to construct the reader with, this buffer is NOT copied. + + + + The current length of the buffer. + + + + + The current position within the buffer. + + + + + Reads a boolean from the stream. + + + The value read. + + + + + Reads a byte from the stream. + + + The value read. + + + + + Reads a number of bytes from the stream. + + Number of bytes to read. + + Bytes read. (this is a copy). + + + + + This read a 16-bit byte count and a array of bytes of that size from the stream. + + + The bytes read from the stream. + + + + + Reads a char from the stream. + + + Value read. + + + + + Reads a unity Color objects. + + + The color read from the stream. + + + + + Reads a unity color32 objects. + + + The colo read from the stream. + + + + + Reads a decimal from the stream. + + + Value read. + + + + + Reads a double from the stream. + + + Value read. + + + + + Reads a reference to a GameObject from the stream. + + + The GameObject referenced. + + + + + Reads a signed 16 bit integer from the stream. + + + Value read. + + + + + Reads a signed 32bit integer from the stream. + + + Value read. + + + + + Reads a signed 64 bit integer from the stream. + + + Value read. + + + + + Reads a unity Matrix4x4 object. + + + The matrix read from the stream. + + + + + This is a utility function to read a typed network message from the stream. + + + The type of the Network Message, must be derived from MessageBase. + + + + + Reads a NetworkHash128 assetId. + + + The assetId object read from the stream. + + + + + Reads a NetworkInstanceId from the stream. + + + The NetworkInstanceId read. + + + + + Reads a reference to a NetworkIdentity from the stream. + + + The NetworkIdentity object read. + + + + + Reads a 32-bit variable-length-encoded value. + + + The 32 bit value read. + + + + + Reads a 64-bit variable-length-encoded value. + + + The 64 bit value read. + + + + + Reads a unity Plane object. + + + The plane read from the stream. + + + + + Reads a Unity Quaternion object. + + + The quaternion read from the stream. + + + + + Reads a Unity Ray object. + + + The ray read from the stream. + + + + + Reads a Unity Rect object. + + + The rect read from the stream. + + + + + Reads a signed byte from the stream. + + + Value read. + + + + + Reads a NetworkSceneId from the stream. + + + The NetworkSceneId read. + + + + + Reads a float from the stream. + + + Value read. + + + + + Reads a string from the stream. (max of 32k bytes). + + + Value read. + + + + + Reads a reference to a Transform from the stream. + + + The transform object read. + + + + + Reads an unsigned 16 bit integer from the stream. + + + Value read. + + + + + Reads an unsigned 32 bit integer from the stream. + + + Value read. + + + + + Reads an unsigned 64 bit integer from the stream. + + + Value read. + + + + + Reads a Unity Vector2 object. + + + The vector read from the stream. + + + + + Reads a Unity Vector3 objects. + + + The vector read from the stream. + + + + + Reads a Unity Vector4 object. + + + The vector read from the stream. + + + + + Sets the current position of the reader's stream to the start of the stream. + + + + + Returns a string representation of the reader's buffer. + + + Buffer contents. + + + + + This is used to identify networked objects in a scene. These values are allocated in the editor and are persistent for the lifetime of the object in the scene. + + + + + Returns true if the value is zero. Non-scene objects - ones which are spawned at runtime will have a sceneId of zero. + + + True if zero. + + + + + Returns a string like SceneId:value. + + + String representation of this object. + + + + + The internal value for this object. + + + + + The NetworkServer uses a NetworkServerSimple for basic network functionality and adds more game-like functionality. + + + + + Checks if the server has been started. + + + + + A list of all the current connections from clients. + + + + + If you enable this, the server will not listen for incoming connections on the regular network port. + + + + + Dictionary of the message handlers registered with the server. + + + + + The host topology that the server is using. + + + + + The port that the server is listening on. + + + + + True is a local client is currently active on the server. + + + + + A list of local connections on the server. + + + + + The maximum delay before sending packets on connections. + + + + + The class to be used when creating new network connections. + + + + + The number of channels the network is configure with. + + + + + This is a dictionary of networked objects that have been spawned on the server. + + + + + Setting this true will make the server send peer info to all participants of the network. + + + + + The transport layer hostId used by this server. + + + + + This makes the server listen for WebSockets connections instead of normal transport layer connections. + + + + + This accepts a network connection from another external source and adds it to the server. + + Network connection to add. + + True if added. + + + + + When an AddPlayer message handler has received a request from a player, the server calls this to associate the player object with the connection. + + Connection which is adding the player. + Player object spawned for the player. + The player controller ID number as specified by client. + + True if player was added. + + + + + When an AddPlayer message handler has received a request from a player, the server calls this to associate the player object with the connection. + + Connection which is adding the player. + Player object spawned for the player. + The player controller ID number as specified by client. + + True if player was added. + + + + + This allows a client that has been disconnected from a server, to become the host of a new version of the game. + + The client that was connected to the old host. + The port to listen on. + Match information (may be null). + + The local client connected to the new host. + + + + + Clear all registered callback handlers. + + + + + This clears all of the networked objects that the server is aware of. This can be required if a scene change deleted all of the objects without destroying them in the normal manner. + + + + + Clears all registered spawn prefab and spawn handler functions for this server. + + + + + This configures the transport layer settings for the server. + + Transport layer confuration object. + The maximum number of client connections to allow. + Transport layer topology object to use. + + True if successfully configured. + + + + + This configures the transport layer settings for the server. + + Transport layer confuration object. + The maximum number of client connections to allow. + Transport layer topology object to use. + + True if successfully configured. + + + + + Destroys this object and corresponding objects on all clients. + + Game object to destroy. + + + + This destroys all the player objects associated with a NetworkConnections on a server. + + The connections object to clean up for. + + + + Disconnect all currently connected clients. + + + + + This finds the local NetworkIdentity object with the specified network Id. + + The netId of the NetworkIdentity object to find. + + The game object that matches the netId. + + + + + Gets aggregate packet stats for all connections. + + + Dictionary of msg types and packet statistics. + + + + + Get inbound network statistics for the server. + + Number of messages received so far. + Number of bytes received so far. + + + + Get outbound network statistics for the client. + + Number of messages sent so far (including collated messages send through buffer). + Number of messages sent through buffer. + Number of bytes sent so far. + Number of messages buffered for sending per second. + + + + Start the server on the given port number. Note that if a match has been created, this will listen using the Relay server instead of a local socket. + + The IP address to bind to (optional). + Listen port number. + + True if listen succeeded. + + + + + Start the server on the given port number. Note that if a match has been created, this will listen using the Relay server instead of a local socket. + + The IP address to bind to (optional). + Listen port number. + + True if listen succeeded. + + + + + Starts a server using a Relay server. This is the manual way of using the Relay server, as the regular NetworkServer.Connect() will automatically use the Relay server if a match exists. + + Relay server IP Address. + Relay server port. + GUID of the network to create. + This server's sourceId. + The node to join the network with. + + + + Register a handler for a particular message type. + + Message type number. + Function handler which will be invoked for when this message type is received. + + + + This removes an external connection added with AddExternalConnection(). + + The id of the connection to remove. + + + + This replaces the player object for a connection with a different player object. The old player object is not destroyed. + + Connection which is adding the player. + Player object spawned for the player. + The player controller ID number as specified by client. + + True if player was replaced. + + + + + This replaces the player object for a connection with a different player object. The old player object is not destroyed. + + Connection which is adding the player. + Player object spawned for the player. + The player controller ID number as specified by client. + + True if player was replaced. + + + + + Reset the NetworkServer singleton. + + + + + Resets the packet stats on all connections. + + + + + Sends a network message to all connected clients on a specified transport layer QoS channel. + + The message id. + The message to send. + The transport layer channel to use. + + True if the message was sent. + + + + + Sends a network message to all connected clients that are "ready" on a specified transport layer QoS channel. + + An object to use for context when calculating object visibility. If null, then the message is sent to all ready clients. + The message id. + The message to send. + The transport layer channel to send on. + + True if the message was sent. + + + + + This sends an array of bytes to a specific player. + + The player to send the bytes to. + Array of bytes to send. + Size of array. + Transport layer channel id to send bytes on. + + + + This sends an array of bytes to all ready players. + + Array of bytes to send. + Size of array. + Transport layer channel id to send bytes on. + + + + This is obsolete. This functionality is now part of the NetworkMigrationManager. + + Connection to send peer info to. + + + + Send a message structure with the given type number to all connected clients. + + Message structure. + Message type. + + Success if message is sent. + + + + + Send a message to the client which owns the given connection ID. + + Client connection ID. + Message struct to send. + Message type. + + + + Send a message to the client which owns the given player object instance. + + The players game object. + Message struct. + Message type. + + + + Send a message structure with the given type number to only clients which are ready. + + Message structure. + Message type. + + Success if message is sent. + + + + + Send given message structure as an unreliable message to all connected clients. + + Message structure. + Message type. + + Success if message is sent. + + + + + Send given message structure as an unreliable message only to ready clients. + + Message structure. + Message type. + + Success if message is sent. + + + + + Sends the contents of a NetworkWriter object to the ready players. + + The writer object to send. + The QoS channel to send the data on. + + + + Marks all connected clients as no longer ready. + + + + + Sets the client of the connection to be not-ready. + + The connection of the client to make not ready. + + + + Sets the client to be ready. + + The connection of the client to make ready. + + + + This sets the class used when creating new network connections. + + + + + This shuts down the server and disconnects all clients. + + + + + Spawn the given game object on all clients which are ready. + + Game object with NetworkIdentity to spawn. + + + + Spawn the given game object on all clients which are ready. + + Game object with NetworkIdentity to spawn. + + + + This causes NetworkIdentity objects in a scene to be spawned on a server. + + + Success if objects where spawned. + + + + + This spawns an object like NetworkServer.Spawn() but also assigns Client Authority to the specified client. + + The object to spawn. + The player object to set Client Authority to. + The assetId of the object to spawn. Used for custom spawn handlers. + The connection to set Client Authority to. + + True if the object was spawned. + + + + + This spawns an object like NetworkServer.Spawn() but also assigns Client Authority to the specified client. + + The object to spawn. + The player object to set Client Authority to. + The assetId of the object to spawn. Used for custom spawn handlers. + The connection to set Client Authority to. + + True if the object was spawned. + + + + + This spawns an object like NetworkServer.Spawn() but also assigns Client Authority to the specified client. + + The object to spawn. + The player object to set Client Authority to. + The assetId of the object to spawn. Used for custom spawn handlers. + The connection to set Client Authority to. + + True if the object was spawned. + + + + + Unregisters a handler for a particular message type. + + The message type to remove the handler for. + + + + This takes an object that has been spawned and un-spawns it. + + The spawned object to be unspawned. + + + + The NetworkServerSimple is a basic server class without the "game" related functionality that the NetworkServer class has. + + + + + A read-only list of the current connections being managed. + + + + + The message handler functions that are registered. + + + + + The transport layer host-topology that the server is configured with. + + + + + The network port that the server is listening on. + + + + + The internal buffer that the server reads data from the network into. This will contain the most recent data read from the network when OnData() is called. + + + + + A NetworkReader object that is bound to the server's messageBuffer. + + + + + The type of class to be created for new network connections from clients. + + + + + The transport layer hostId of the server. + + + + + This causes the server to listen for WebSocket connections instead of regular transport layer connections. + + + + + Clears the message handlers that are registered. + + + + + This configures the network transport layer of the server. + + The transport layer configuration to use. + Maximum number of network connections to allow. + The transport layer host topology to use. + + True if configured. + + + + + This configures the network transport layer of the server. + + The transport layer configuration to use. + Maximum number of network connections to allow. + The transport layer host topology to use. + + True if configured. + + + + + This disconnects the connection of the corresponding connection id. + + The id of the connection to disconnect. + + + + This disconnects all of the active connections. + + + + + This looks up the network connection object for the specified connection Id. + + The connection id to look up. + + A NetworkConnection objects, or null if no connection found. + + + + + Initialization function that is invoked when the server starts listening. This can be overridden to perform custom initialization such as setting the NetworkConnectionClass. + + + + + This starts the server listening for connections on the specified port. + + The port to listen on. + The transport layer host toplogy to configure with. + + True if able to listen. + + + + + This starts the server listening for connections on the specified port. + + The port to listen on. + The transport layer host toplogy to configure with. + + True if able to listen. + + + + + Starts a server using a Relay server. This is the manual way of using the Relay server, as the regular NetworkServer.Connect() will automatically use the Relay server if a match exists. + + Relay server IP Address. + Relay server port. + GUID of the network to create. + This server's sourceId. + The node to join the network with. + + + + This virtual function can be overridden to perform custom functionality for new network connections. + + The new connection object. + + + + A virtual function that is invoked when there is a connection error. + + The id of the connection with the error. + The error code. + + + + This virtual function can be overridden to perform custom functionality when data is received for a connection. + + The connection that data was received on. + The channel that data was received on. + The amount of data received. + + + + A virtual function that is called when a data error occurs on a connection. + + The connection object that the error occured on. + The error code. + + + + This virtual function can be overridden to perform custom functionality for disconnected network connections. + + + + + + A virtual function that is called when a disconnect error happens. + + The connection object that the error occured on. + The error code. + + + + This registers a handler function for a message Id. + + Message Id to register handler for. + Handler function. + + + + This removes a connection object from the server's list of connections. + + The id of the connection to remove. + + True if removed. + + + + + This sends the data in an array of bytes to the connected client. + + The id of the connection to send on. + The data to send. + The size of the data to send. + The channel to send the data on. + + + + This sends the contents of a NetworkWriter object to the connected client. + + The id of the connection to send on. + The writer object to send. + The channel to send the data on. + + + + This adds a connection created by external code to the server's list of connections, at the connection's connectionId index. + + A new connection object. + + True if added. + + + + + This sets the class that is used when creating new network connections. + + + + + This stops a server from listening. + + + + + This unregisters a registered message handler function. + + The message id to unregister. + + + + This function pumps the server causing incoming network data to be processed, and pending outgoing data to be sent. + + + + + This function causes pending outgoing data on connections to be sent, but unlike Update() it works when the server is not listening. + + + + + This attribute is used to configure the network settings of scripts that are derived from the NetworkBehaviour base class. + + + + + The QoS channel to use for updates for this script. + + + + + The sendInterval control how frequently updates are sent for this script. + + + + + This component is used to make a gameObject a starting position for spawning player objects in multiplayer games. + + + + + This is passed to handler funtions registered for the AddPlayer built-in message. + + + + + The extra message data included in the AddPlayerMessage. + + + + + The size of the extra message data included in the AddPlayerMessage. + + + + + The playerId of the new player. + + + + + A utility class to send a network message with no contents. + + + + + This is passed to handler functions registered for the SYSTEM_ERROR built-in message. + + + + + The error code. + + + + + A utility class to send simple network messages that only contain an integer. + + + + + The integer value to serialize. + + + + + This is passed to handler funtions registered for the SYSTEM_NOT_READY built-in message. + + + + + Information about a change in authority of a non-player in the same network game. + + + + + The new state of authority for the object referenced by this message. + + + + + The connection Id (on the server) of the peer whose authority is changing for the object. + + + + + The network id of the object whose authority state changed. + + + + + Information about another participant in the same network game. + + + + + The IP address of the peer. + + + + + The id of the NetworkConnection associated with the peer. + + + + + True if this peer is the host of the network game. + + + + + True if the peer if the same as the current client. + + + + + The players for this peer. + + + + + The network port being used by the peer. + + + + + A structure used to identify player object on other peers for host migration. + + + + + The networkId of the player object. + + + + + The playerControllerId of the player GameObject. + + + + + Internal UNET message for sending information about network peers to clients. + + + + + The connectionId of this client on the old host. + + + + + The list of participants in a networked game. + + + + + This is passed to handler funtions registered for the SYSTEM_READY built-in message. + + + + + This network message is used when a client reconnect to the new host of a game. + + + + + Additional data. + + + + + Size of additional data. + + + + + The networkId of this player on the old host. + + + + + This client's connectionId on the old host. + + + + + The playerControllerId of the player that is rejoining. + + + + + This is passed to handler funtions registered for the SYSTEM_REMOVE_PLAYER built-in message. + + + + + The player ID of the player GameObject which should be removed. + + + + + This is a utility class for simple network messages that contain only a string. + + + + + The string that will be serialized. + + + + + A component to synchronize the position and rotation of networked objects. + + + + + Cached CharacterController. + + + + + A callback that can be used to validate on the server, the movement of client authoritative objects. + + + + + A callback that can be used to validate on the server, the movement of client authoritative objects. + + + + + Tells the NetworkTransform that it is on a surface (this is the default). + + + + + Enables interpolation of the synchronized movement. + + + + + Enables interpolation of the synchronized rotation. + + + + + The most recent time when a movement synchronization packet arrived for this object. + + + + + The distance that an object can move without sending a movement synchronization update. + + + + + Cached Rigidbody2D. + + + + + Cached Rigidbody. + + + + + How much to compress rotation sync updates. + + + + + The sendInterval controls how often state updates are sent for this object. + + + + + If a movement update puts an object further from its current position that this value, it will snap to the position instead of moving smoothly. + + + + + Which axis should rotation by synchronized for. + + + + + The target position interpolating towards. + + + + + The target rotation interpolating towards. + + + + + The target position interpolating towards. + + + + + The velocity send for synchronization. + + + + + What method to use to sync the object's position. + + + + + An axis or set of axis. + + + + + Only x axis. + + + + + The x and y axis. + + + + + The x, y and z axis. + + + + + The x and z axis. + + + + + Only the y axis. + + + + + The y and z axis. + + + + + Only the z axis. + + + + + Do not sync. + + + + + This is the delegate use for the movement validation callback function clientMoveCallback2D on NetworkTransforms. + + The new position from the client. + The new velocity from the client. + The new rotation from the client. + + + + This is the delegate use for the movement validation callback function clientMoveCallback3D on NetworkTransforms. + + The new position from the client. + The new velocity from the client. + The new rotation from the client. + + + + How much to compress sync data. + + + + + High Compression - sacrificing accuracy. + + + + + A low amount of compression that preserves accuracy. + + + + + Do not compress. + + + + + How to synchronize an object's position. + + + + + Sync using the CharacterController component. + + + + + Dont synchronize. + + + + + Sync using the Rigidbody2D component. + + + + + Sync using the Rigidbody component. + + + + + Sync using the game object's base transform. + + + + + A component to synchronize the position of child transforms of networked objects. + + + + + A unique Identifier for this NetworkTransformChild component on this root object. + + + + + A callback function to allow server side validation of the movement of the child object. + + + + + The rate to interpolate towards the target position. + + + + + The rate to interpolate to the target rotation. + + + + + The most recent time when a movement synchronization packet arrived for this object. + + + + + The distance that an object can move without sending a movement synchronization update. + + + + + How much to compress rotation sync updates. + + + + + The sendInterval controls how often state updates are sent for this object. + + + + + Which axis should rotation by synchronized for. + + + + + The child transform to be synchronized. + + + + + The target position interpolating towards. + + + + + The target rotation interpolating towards. + + + + + This is a helper component to help understand and debug networked movement synchronization with the NetworkTransform component. + + + + + The prefab to use for the visualization object. + + + + + General purpose serializer for UNET (for serializing data to byte arrays). + + + + + Returns the internal array of bytes the writer is using. This is NOT a copy. + + + Internal buffer. + + + + + Creates a new NetworkWriter object. + + A buffer to write into. This is not copied. + + + + Creates a new NetworkWriter object. + + A buffer to write into. This is not copied. + + + + This fills out the size header of a message begun with StartMessage(), so that it can be send using Send() functions. + + + + + The current position of the internal buffer. + + + + + Seeks to the start of the internal buffer. + + + + + This begins a new message, which should be completed with FinishMessage() once the payload has been written. + + Message type. + + + + Returns a copy of internal array of bytes the writer is using, it copies only the bytes used. + + + Copy of data used by the writer. + + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a reference to an object, value, buffer or network message, together with a NetworkIdentity component to the stream. + + The object to write. + The byte buffer to write. + The number of bytes in the byte buffer to write. + The byte buffer array element to start writing from. + The network message to write. + + + + This writes a 16-bit count and a array of bytes of that length to the stream. + + Array of bytes to write. + Number of bytes from the array to write. + + + + This writes a 16-bit count and an array of bytes of that size to the stream. + + Bytes to write. + + + + This writes the 32-bit value to the stream using variable-length-encoding. + + Value to write. + + + + This writes the 64-bit value to the stream using variable-length-encoding. + + Value to write. + + + + This represents a networked player. + + + + + The game object for this player. + + + + + The local player ID number of this player. + + + + + The NetworkIdentity component of the player. + + + + + Checks if this PlayerController has an actual player attached to it. + + + + + The maximum number of local players that a client connection can have. + + + + + String representation of the player objects state. + + + String with the object state. + + + + + Enumeration of methods of where to spawn player objects in multiplayer games. + + + + + Spawn players at a randomly chosen starting position. + + + + + Spawn players at the next start position. + + + + + A Custom Attribute that can be added to member functions of NetworkBehaviour scripts, to make them only run on servers. + + + + + A Custom Attribute that can be added to member functions of NetworkBehaviour scripts, to make them only run on servers, but not generate warnings. + + + + + Signature of spawn functions that are passed to NetworkClient.RegisterSpawnFunction(). This is optional, as in most cases RegisterPrefab will be used instead. + + + + + + + This is an attribute that can be put on events in NetworkBehaviour classes to allow them to be invoked on client when the event is called on the sserver. + + + + + The UNET QoS channel that this event should be sent on. + + + + + This is the base class for type-specific SyncList classes. + + + + + Same as List:Add() but the item is added on clients. + + Item to add. + + + + The delegate type used for SyncListChanged. + + + + + Same as List:Clear() but the list is cleared on clients. + + + + + Determines whether the list contains item item. + + Item to search for. + + + + Copies the elements of the SyncList<T> to an Array, starting at a particular Array index. + + Array to copy elements to. + The zero-based index in array at which copying begins. + + + + Returns the number of elements in this SyncList<T>. + + + + + This method is used when deserializing SyncList items from a stream. + + Stream to read from. + + New instance of the SyncList value type. + + + + + Marks an item in the list as dirty, so it will be updated on clients. + + Index of item to dirty. + + + + Returns an enumerator that iterates through the SyncList<T>. + + + + + Internal function used for remote list operations. + + List operation. + The index of the item being operated on. + The item being operated on. + + + + Determines the index of a specific item in the SyncList<T>. + + The item to return the index for. + + + + Internal function. + + The behaviour the list belongs to. + Identifies this list. + + + + Same as List::Insert() but also inserts into list on clients. + + Where to insert the item. + Item to insert. + + + + Reports whether the SyncList<T> is read-only. + + + + + The types of operations that can occur for SyncLists. + + + + + Item was added to the list. + + + + + The list was cleared. + + + + + An item in the list was manually marked dirty. + + + + + An item was inserted into the list. + + + + + An item was removed from the list. + + + + + An item was removed at an index from the list. + + + + + An item was set to a new value in the list. + + + + + Same as List:Remove except removes on clients also. + + Item to remove. + + Success if removed. + + + + + Same as List:Remove except it removes the index on clients also. + + Index to remove. + + + + This is used to write a value object from a SyncList to a stream. + + Stream to write to. + Item to write. + + + + A delegate that can be populated to recieve callbacks when the list changes. + + The operation that occurred. + The index of the item that was effected. + + + + A list of booleans that will be synchronized from server to clients. + + + + + An internal function used for serializing SyncList member variables. + + + + + + + A list of floats that will be synchronized from server to clients. + + + + + An internal function used for serializing SyncList member variables. + + + + + + + A list of integers that will be synchronized from server to clients. + + + + + An internal function used for serializing SyncList member variables. + + + + + + + This is a list of strings that will be synchronized from the server to clients. + + + + + An internal function used for serializing SyncList member variables. + + + + + + + This class is used for lists of structs that are synchronized from the server to clients. + + + + + A list of unsigned integers that will be synchronized from server to clients. + + + + + An internal function used for serializing SyncList member variables. + + + + + + + [SyncVar] is an attribute that can be put on member variables of NetworkBehaviour classes. These variables will have their values sychronized from the server to clients in the game that are in the ready state. + + + + + The hook attribute can be used to specify a function to be called when the sync var changes value on the client. + + + + + This is an attribute that can be put on methods of NetworkBehaviour classes to allow them to be invoked on clients from a server. Unlike the ClientRpc attribute, these functions are invoked on one individual target client, not all of the ready clients. + + + + + The channel ID which this RPC transmission will use. + + + + + Delegate for a function which will handle destruction of objects created with NetworkServer.Spawn. + + + + + + Enumeration of Networking versions. + + + + + The current UNET version. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.dll new file mode 100644 index 0000000..2115e0f Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.xml new file mode 100644 index 0000000..14835e7 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.PlaymodeTestsRunner.xml @@ -0,0 +1,8 @@ + + + + + UnityEngine.PlaymodeTestsRunner + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.dll new file mode 100644 index 0000000..0e14b5f Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.xml new file mode 100644 index 0000000..56de9db --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.Purchasing.xml @@ -0,0 +1,805 @@ + + + + + UnityEngine.Purchasing + + + + Builds configurations for Unity IAP. + + + + + The products built so far. + + + + + If set Unity IAP will retrieve your product catalog from Unity cloud services, allowing you to change your catalog dynamically without updating your App. + + + + + Add a product with a Unity IAP ID, type and optional set of store-specific IDs. + + The store independent ID. + The product type. + An optional set of store-specific identifiers, for when your product has different IDs on different stores. + + The referenced instance. Suitable for chaining. + + + + + Add a product with a Unity IAP ID, type and optional set of store-specific IDs. + + The store independent ID. + The product type. + An optional set of store-specific identifiers, for when your product has different IDs on different stores. + + The referenced instance. Suitable for chaining. + + + + + Add a collection of ProductDefinitions. + + Products to add. + + The referenced instance. Suitable for chaining. + + + + + Access store-specific Configuration settings. + + + An IStoreConfiguration known to the. + + + + + Get an instance of ConfigurationBuilder. + + The IAP module. + Any additional modules. + + New instance. + + + + + Helper base class for IAP Modules. + + + + + Bind a store-specific configuration type to a concrete instance. + + The instance to be bound. + + + + Bind a store-specific extension type to a concrete instance. + + The instance to be bound. + + + + Called when your module is loaded by Unity. + + Used to register store implementations, extensions and configuration. + + + + Called when your module is loaded by Unity. + + Used to register store implementations, extensions and configuration. + + + + Register a store implementation along with its name. + + The store's name, eg 'AppleAppStore'. + The store implementation, or null if running on an unsupported platform. + + + + Extension point for purchasing plugins. + + + + + Called when Unity IAP has finished processing a purchase. + + The transaction ID for the purchase. + The product that was purchased. + + + + Called when Unity IAP is initializing. + + Callback for stores to interact with Unity IAP. + + + + Called when a user wants to buy the specified Product. + + Any additional developer-supplied data. + The product to purchase. + + + + Fetch product metadata and purchase state for the set of ProductDefinitions. + + The products to retrieve descriptions for. + + + + Configures Unity IAP with one or more store implementations. + + + + + Informs Unity IAP that extended Configuration is available. + + The IStoreConfiguration instance. + + + + Informs Unity IAP that a store extension is available. + + The extension instance. + + + + Informs Unity IAP that a store implementation exists, specifying its name. + + The store's name, eg 'AppleAppStore'. + The store instance. + + + + A Unity IAP configuration of one or more stores. + + + + + Called when Unity IAP is loading your module. Register stores and associated extensions using the IPurchasingBinder. + + Used to register store implementations, extensions and configuration. + + + + The public interface of an underlying store system (e.g. Google Play or Apple App Store) typically exposed to Unity IAP extending its in-app purchasing platform support. + + + + + Called by Unity IAP when a transaction has been recorded. + + + + + + + Initialize the store. + + Used by stores to interact with Unity Purchasing. + + + + Handle a purchase request from a user. + + Any additional developer-supplied data. + The product to purchase. + + + + Fetch the latest product metadata, including purchase receipts, asynchronously with results returned via IStoreCallback. + + The products to retrieve. + + + + Callback used by store implementations to interact with Unity IAP. + + + + + Gets the item with local identifier. + + + + + Toggle use of Unity IAP's transaction log. + + + + + Complete setup by providing a list of available products, complete with metadata and any associated purchase receipts and transaction IDs. + + Available products, their metadata and purchase state. + + + + Call to indicate to Unity IAP that a purchase failed. + + Details of the purchase failure. + + + + Inform Unity IAP of a purchase. + + Product that was purchased. + Purchase receipt. + Transaction ID. + + + + Indicate that IAP is unavailable for a specific reason, such as IAP being disabled in device settings. + + The reason purchasing is unavailable. + + + + Common interface for all extended configuration of stores. + + + + + A common format which store subsystems use to describe available products. + + + + + Localized metadata retrieved from the Store. + + + + + A purchase receipt, if owned. Otherwise null. + + + + + The store-specific ID. + + + + + The purchase transaction ID, if owned. Otherwise null. + + + + + The ProductType. + + + + + Create a ProductDescription. + + The store-specific ID. + Localized metadata retrieved from the Store. + A purchase receipt, if owned. Otherwise null. + The purchase transaction ID, if owned. Otherwise null. + The product type (optional for products queried by Unity IAP). + + + + Create a ProductDescription. + + The store-specific ID. + Localized metadata retrieved from the Store. + A purchase receipt, if owned. Otherwise null. + The purchase transaction ID, if owned. Otherwise null. + The product type (optional for products queried by Unity IAP). + + + + Create a ProductDescription. + + The store-specific ID. + Localized metadata retrieved from the Store. + A purchase receipt, if owned. Otherwise null. + The purchase transaction ID, if owned. Otherwise null. + The product type (optional for products queried by Unity IAP). + + + + Represents a failed purchase as described by a purchasing service. + + + + + More information about the purchase failure from Unity IAP or the platform store, if available. + + + + + The store-specific product ID which failed to purchase. + + + + + The reason for the purchase failure. + + + + + Creates a PurchaseFailureDescription. + + The store-specific product ID which failed to purchase. + The reason for the purchase failure. + More information about the failure from Unity IAP or the platform store, if available. + + + + Maps store-specific product identifiers to one or more store names. + + + + + Add a product ID which is supported by a list of store platform names. + + Platform specific Product ID. + Array of platform names using this Product ID. + + + + Add a product ID which is supported by a list of store platform names. + + Platform specific Product ID. + Array of platform names using this Product ID. + + + + Create a new mapping of store identifiers to store names. + + + + + Enumerator for IDs. + + + The first string of the pair is the store-specific product ID. The second is one of the mapped store names. + + + + + Provides access to store-specific extended functionality. + + + + + Get the store-specific extension of specified type. + + + The Extension type. + + + + + The various reasons Unity IAP initialization can fail. + + + + + The store reported the app as unknown. + + + + + No products available for purchase. + + + + + In-App Purchases disabled in device settings. + + + + + Used by Applications to control Unity IAP. + + + + + Store products including metadata and purchase receipts. + + + + + Confirm a pending purchase. + + The product to confirm the conclusion of its purchase transaction. + + + + This method may be used to fetch additional products for purchasing, or to refresh metadata on existing products. + + The additional products to fetch or existing products to refresh. + Callback invoked when products are retrieved successfully. + Callback invoked when the fetch fails for unrecoverable reasons. + + + + Initiate a purchase for a specific product. + + The product to purchase. + Any additional developer information to associate with the purchase. + The identifier for the product to purchase. This may differ from the store-specific product ID. + + + + Initiate a purchase for a specific product. + + The product to purchase. + Any additional developer information to associate with the purchase. + The identifier for the product to purchase. This may differ from the store-specific product ID. + + + + Initiate a purchase for a specific product. + + The product to purchase. + Any additional developer information to associate with the purchase. + The identifier for the product to purchase. This may differ from the store-specific product ID. + + + + Initiate a purchase for a specific product. + + The product to purchase. + Any additional developer information to associate with the purchase. + The identifier for the product to purchase. This may differ from the store-specific product ID. + + + + Common interface for all purchasing extensions. + + + + + Notifies your Application of purchasing related events. + + + + + Called when Unity IAP has retrieved all product metadata and is ready to make purchases. + + Access cross-platform Unity IAP functionality. + Access store-specific Unity IAP functionality. + + + + Note that Unity IAP will not call this method if the device is offline, but continually attempt initialization until online. + + The reason IAP cannot initialize. + + + + Called when a purchase fails. + + The product the purchase relates to. + The reason for the failure. + + + + Called when a purchase succeeds. + + The purchase details. + + Applications should only return PurchaseProcessingResult.Complete when a permanent record of the purchase has been made. If PurchaseProcessingResult.Pending is returned Unity IAP will continue to notify the app of the purchase on startup, also via ProcessPurchase. + + + + + Represents a product that may be purchased as an In-App Purchase. + + + + + Determine if this product is available to purchase according to the store subsystem. + + + + + Fundamental immutable product properties. + + + + + Owned Non Consumables and Subscriptions should always have receipts. + + + + + Localized metadata provided by the store system. + + + + + The purchase receipt for this product, if owned. Otherwise null. + + + + + A unique identifier for this product's transaction, if available. Otherwise null. + + + + + Equality defined for use in collections. + + + + + + GetHashCode defined for use in collections. + + + Hashcode. + + + + + Provides helper methods to retrieve products by ID. + + + + + All products. + + + + + The set of products. + + + + + Get the product with store-independent Unity IAP ID. + + The store-independent ID. + + A product reference, if found. Otherwise null. + + + + + Get the product with the store-specific ID. + + Get the product with store-specific ID. + + A product reference, if found. Otherwise null. + + + + + Minimal product definition, used by apps declaring products for sale. + + + + + Unity IAP product ID. Potentially independent of store IDs. + + + + + The ID this product has on a store. + + + + + The product type. + + + + + Create a ProductDefinition with different Store-independent ID and Store-specific ID. Use this when you need to two IDs to be different. + + Store-independent ID. + Store-specific ID. + Product type. + + + + Create a ProductDefinition where the Store-independent ID is the same as the store-specific ID. Use this when you don't need the two IDs to be different. + + Store-independent ID and store-specific ID. + Product type. + + + + Compares id properties. Requires obj be a ProductDefinition. + + A ProductDefinition instance. + + true if this is equal to obj per the equality rules, false otherwise. + + + + + Gets the application-domain-specific hash code of id. + + + Hash code of id. + + + + + Localized information about a product, retrieved from a store. + + + + + Product currency in ISO 4217 format; e.g. GBP or USD. + + + + + Localized product description as retrieved from the store subsystem; e.g. Apple or Google. + + + + + Decimal product price denominated in the currency indicated by isoCurrencySymbol. + + + + + Localized price string. + + + + + Localized product title as retrieved from the store subsystem; e.g. Apple or Google. + + + + + Create a ProductMetadata. + + Formatted product price with currency symbols suitable for display to the user. + Localized product title. + Localized product description. + ISO 4217 currency code. + Numeric localized price. + + + + Create a ProductMetadata. + + Formatted product price with currency symbols suitable for display to the user. + Localized product title. + Localized product description. + ISO 4217 currency code. + Numeric localized price. + + + + Categories of purchasable product. + + + + + Can be purchased repeatedly. Suitable for consumable products such as virtual currencies. + + + + + Can only be purchased once. Suitable for one-off purchases such as extra levels. + + + + + Can be purchased repeatedly and restored. Durable but with a finite duration of validity. + + + + + A purchase that succeeded, including the purchased product along with its purchase receipt. + + + + + The Product that was purchased. + + + + + A purchase failed event containing diagnostic data. + + + + + More information about the purchase failure, if available. Otherwise null. + + + + + The product that failed to purchase. + + + + + The reason for the purchase failure. + + + + + The various reasons a purchase can fail. + + + + + A purchase was already in progress when a new purchase was requested. + + + + + There was a problem with the payment. + + + + + The product is not available to purchase on the store. + + + + + The system purchasing feature is unavailable. + + + + + Signature validation of the purchase's receipt failed. + + + + + A catch-all for unrecognized purchase problems. + + + + + The user opted to cancel rather than proceed with the purchase. + + + + + Informs Unity IAP as to whether an Application has finished processing a purchase. + + + + + The application has finished processing the purchase. + + + + + The application has not finished processing the purchase, e.g. it is pushing it to a server asynchronously. + + + + + Entry point for Applications using Unity IAP. + + + + + Clears Unity IAP's internal transaction log. + + + + + Initialize Unity IAP with the specified listener and configuration. + + Your Application's listener that processes purchasing related events. + Unity IAP configuration. + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.UI.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.UI.dll new file mode 100644 index 0000000..57a8c5a Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.UI.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.UI.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.UI.xml new file mode 100644 index 0000000..e1ff928 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.UI.xml @@ -0,0 +1,6096 @@ + + + + + UnityEngine.UI + + + + A class that can be used for sending simple events via the event system. + + + + + Is the event used? + + + + + Reset the event. + + + + + Use the event. + + + + + Event Data associated with Axis Events (Controller / Keyboard). + + + + + MoveDirection for this event. + + + + + Raw input vector associated with this event. + + + + + A class that contains the base event data that is common to all event types in the new EventSystem. + + + + + A reference to the BaseInputModule that sent this event. + + + + + The object currently considered selected by the EventSystem. + + + + + Construct a BaseEventData tied to the passed EventSystem. + + + + + + Interface to the Input system used by the BaseInputModule. With this it is possible to bypass the Input system with your own but still use the same InputModule. For example this can be used to feed fake input into the UI or interface with a different input system. + + + + + Interface to Input.compositionCursorPos. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.compositionString. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.imeCompositionMode. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.mousePosition. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.mousePresent. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.mouseScrollDelta. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.touchCount. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.touchSupported. Can be overridden to provide custom input instead of using the Input class. + + + + + Interface to Input.GetAxisRaw. Can be overridden to provide custom input instead of using the Input class. + + + + + + Interface to Input.GetButtonDown. Can be overridden to provide custom input instead of using the Input class. + + + + + + Interface to Input.GetMouseButton. Can be overridden to provide custom input instead of using the Input class. + + + + + + Interface to Input.GetMouseButtonDown. Can be overridden to provide custom input instead of using the Input class. + + + + + + Interface to Input.GetMouseButtonUp. Can be overridden to provide custom input instead of using the Input class. + + + + + + Interface to Input.GetTouch. Can be overridden to provide custom input instead of using the Input class. + + + + + + A base module that raises events and sends them to GameObjects. + + + + + The current BaseInput being used by the input module. + + + + + Called when the module is activated. Override this if you want custom code to execute when you activate your module. + + + + + Called when the module is deactivated. Override this if you want custom code to execute when you deactivate your module. + + + + + Given an input movement, determine the best MoveDirection. + + X movement. + Y movement. + Dead zone. + + + + Given an input movement, determine the best MoveDirection. + + X movement. + Y movement. + Dead zone. + + + + Given 2 GameObjects, return a common root GameObject (or null). + + + + + + + Return the first valid RaycastResult. + + + + + + Given some input data generate an AxisEventData that can be used by the event system. + + X movement. + Y movement. + Dead Zone. + + + + Generate a BaseEventData that can be used by the EventSystem. + + + + + Handle sending enter and exit events when a new enter targer is found. + + + + + + + Check to see if the module is supported. Override this if you have a platfrom specific module (eg. TouchInputModule that you do not want to activate on standalone. + + + Is the module supported. + + + + + Is the pointer with the given ID over an EventSystem object? + + Pointer ID. + + + + See MonoBehaviour.OnDisable. + + + + + See MonoBehaviour.OnEnable. + + + + + Process the current tick for the module. + + + + + Should be activated. + + + Should the module be activated. + + + + + Update the internal state of the Module. + + + + + Base class for any RayCaster. + + + + + The camera that will generate rays for this raycaster. + + + + + Priority of the caster relative to other casters. + + + + + Priority of the raycaster based upon render order. + + + + + Priority of the raycaster based upon sort order. + + + + + See MonoBehaviour.OnDisable. + + + + + Raycast against the scene. + + Current event data. + List of hit Objects. + + + + Enum that tracks event State. + + + + + Unused. + + + + + Used. + + + + + Handles input, raycasting, and sending events. + + + + + Returns true if the EventSystem is already in a SetSelectedGameObject. + + + + + Return the current EventSystem. + + + + + The currently active EventSystems.BaseInputModule. + + + + + The GameObject currently considered active by the EventSystem. + + + + + The GameObject that was selected first. + + + + + The soft area for dragging in pixels. + + + + + Should the EventSystem allow navigation events (move submit cancel). + + + + + Is the pointer with the given ID over an EventSystem object? + + Pointer (touch / mouse) ID. + + + + Is the pointer with the given ID over an EventSystem object? + + Pointer (touch / mouse) ID. + + + + See MonoBehaviour.OnDisable. + + + + + Raycast into the scene using all configured BaseRaycasters. + + Current pointer data. + List of 'hits' to populate. + + + + Set the object as selected. Will send an OnDeselect the the old selected object and OnSelect to the new selected object. + + GameObject to select. + Associated EventData. + + + + Recalculate the internal list of BaseInputModules. + + + + + Receives events from the EventSystem and calls registered functions for each event. + + + + + All the functions registered in this EventTrigger (deprecated). + + + + + All the functions registered in this EventTrigger. + + + + + An Entry in the EventSystem delegates list. + + + + + The desired TriggerEvent to be Invoked. + + + + + What type of event is the associated callback listening for. + + + + + Called before a drag is started. + + Current event data. + + + + Called by the EventSystem when a Cancel event occurs. + + Current event data. + + + + Called by the EventSystem when a new object is being selected. + + Current event data. + + + + Called by the EventSystem every time the pointer is moved during dragging. + + Current event data. + + + + Called by the EventSystem when an object accepts a drop. + + Current event data. + + + + Called by the EventSystem once dragging ends. + + Current event data. + + + + Called by the EventSystem when a drag has been found, but before it is valid to begin the drag. + + Current event data. + + + + Called by the EventSystem when a Move event occurs. + + Current event data. + + + + Called by the EventSystem when a Click event occurs. + + Current event data. + + + + Called by the EventSystem when a PointerDown event occurs. + + Current event data. + + + + Called by the EventSystem when the pointer enters the object associated with this EventTrigger. + + Current event data. + + + + Called by the EventSystem when the pointer exits the object associated with this EventTrigger. + + Current event data. + + + + Called by the EventSystem when a PointerUp event occurs. + + Current event data. + + + + Called by the EventSystem when a Scroll event occurs. + + Current event data. + + + + Called by the EventSystem when a Select event occurs. + + Current event data. + + + + Called by the EventSystem when a Submit event occurs. + + Current event data. + + + + Called by the EventSystem when the object associated with this EventTrigger is updated. + + Current event data. + + + + UnityEvent class for Triggers. + + + + + The type of event the TriggerEvent is intercepting. + + + + + Intercepts IBeginDragHandler.OnBeginDrag. + + + + + Intercepts ICancelHandler.OnCancel. + + + + + Intercepts a IDeselectHandler.OnDeselect. + + + + + Intercepts a IDragHandler.OnDrag. + + + + + Intercepts a IDropHandler.OnDrop. + + + + + Intercepts IEndDragHandler.OnEndDrag. + + + + + Intercepts IInitializePotentialDrag.InitializePotentialDrag. + + + + + Intercepts a IMoveHandler.OnMove. + + + + + Intercepts a IPointerClickHandler.OnPointerClick. + + + + + Intercepts a IPointerDownHandler.OnPointerDown. + + + + + Intercepts a IPointerEnterHandler.OnPointerEnter. + + + + + Intercepts a IPointerExitHandler.OnPointerExit. + + + + + Intercepts a IPointerUpHandler.OnPointerUp. + + + + + Intercepts a IScrollHandler.OnScroll. + + + + + Intercepts a ISelectHandler.OnSelect. + + + + + Intercepts ISubmitHandler.Submit. + + + + + Intercepts a IUpdateSelectedHandler.OnUpdateSelected. + + + + + Helper class that can be used to send IEventSystemHandler events to GameObjects. + + + + + IBeginDragHandler execute helper function. + + + + + ICancelHandler execute helper function. + + + + + IDeselectHandler execute helper function. + + + + + IDragHandler execute helper function. + + + + + IDropHandler execute helper function. + + + + + IEndDragHandler execute helper function. + + + + + IInitializePotentialDragHandler execute helper function. + + + + + IMoveHandler execute helper function. + + + + + IPointerClickHandler execute helper function. + + + + + IPointerDownHandler execute helper function. + + + + + IPointerEnterHandler execute helper function. + + + + + IPointerExitHandler execute helper function. + + + + + IPointerUpHandler execute helper function. + + + + + IScrollHandler execute helper function. + + + + + ISelectHandler execute helper function. + + + + + ISubmitHandler execute helper function. + + + + + IUpdateSelectedHandler execute helper function. + + + + + Can the given GameObject handle the IEventSystemHandler of type T. + + GameObject. + + Can Handle. + + + + + Funtion definition for an EventFunction that is used to map a given EventInterface into a specific event call. + + + + + + + Execute the event of type T : IEventSystemHandler on GameObject. + + Target GameObject. + Data associated with the Executing event. + Function to execute on the gameObject components. + + Was there a handler for the event. + + + + + Recurse up the hierarchy calling Execute<T> until there is a GameObject that can handle the event. + + Start GameObject. + Data associated with the Executing event. + Function to execute on the gameObject components. + + GameObject that handled the event. + + + + + Traverse the object hierarchy starting at root, and return the GameObject which implements the event handler of type <T>. + + Root GameObject. + + Handling GameObject. + + + + + Attempt to convert the data to type T. If conversion fails an ArgumentException is thrown. + + Data to validate. + + Data as T. + + + + + Interface to implement if you wish to receive OnBeginDrag callbacks. + + + + + Called by a BaseInputModule before a drag is started. + + Current event data. + + + + Interface to implement if you wish to receive OnCancel callbacks. + + + + + Called by a BaseInputModule when a Cancel event occurs. + + Current event data. + + + + Interface to implement if you wish to receive OnDeselect callbacks. + + + + + Called by the EventSystem when a new object is being selected. + + Current event data. + + + + Interface to implement if you wish to receive OnDrag callbacks. + + + + + When draging is occuring this will be called every time the cursor is moved. + + Current event data. + + + + Interface to implement if you wish to receive OnDrop callbacks. + + + + + Called by a BaseInputModule on a target that can accept a drop. + + Current event data. + + + + Interface to implement if you wish to receive OnEndDrag callbacks. + + + + + Called by a BaseInputModule when a drag is ended. + + Current event data. + + + + Base class that all EventSystem events inherit from. + + + + + Interface to implement if you wish to receive OnInitializePotentialDrag callbacks. + + + + + Called by a BaseInputModule when a drag has been found but before it is valid to begin the drag. + + + + + + Interface to implement if you wish to receive OnMove callbacks. + + + + + Called by a BaseInputModule when a move event occurs. + + Current event data. + + + + Interface to implement if you wish to receive OnPointerClick callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnPointerDown callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnPointerEnter callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnPointerExit callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnPointerUp callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnScroll callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnSelect callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnSubmit callbacks. + + + + + + + Current event data. + + + + Interface to implement if you wish to receive OnUpdateSelected callbacks. + + + + + Called by the EventSystem when the object associated with this EventTrigger is updated. + + Current event data. + + + + 8 direction movement enum. + + + + + Down. + + + + + Left. + + + + + None. + + + + + Right. + + + + + Up. + + + + + Raycaster for casting against 2D Physics components. + + + + + See: BaseRaycaster. + + + + + + + Raycaster for casting against 3D Physics components. + + + + + Get the depth of the configured camera. + + + + + Get the camera that is used for this module. + + + + + Mask of allowed raycast events. + + + + + Logical and of Camera mask and eventMask. + + + + + See: BaseRaycaster. + + + + + + + Event payload associated with pointer (mouse / touch) events. + + + + + The EventSystems.PointerEventData.InputButton for this event. + + + + + Number of clicks in a row. + + + + + The last time a click event was sent. + + + + + Pointer delta since last update. + + + + + Is a drag operation currently occuring. + + + + + The camera associated with the last OnPointerEnter event. + + + + + List of objects in the hover stack. + + + + + The GameObject for the last press event. + + + + + RaycastResult associated with the current event. + + + + + The object that is receiving 'OnDrag'. + + + + + The object that received 'OnPointerEnter'. + + + + + Id of the pointer (touch id). + + + + + The GameObject that received the OnPointerDown. + + + + + RaycastResult associated with the pointer press. + + + + + Current pointer position. + + + + + The camera associated with the last OnPointerPress event. + + + + + Position of the press. + + + + + The object that the press happened on even if it can not handle the press event. + + + + + The amount of scroll since the last update. + + + + + Should a drag threshold be used? + + + + + The state of a press for the given frame. + + + + + Same as last frame. + + + + + Button was pressed this frame. + + + + + Button was pressed and released this frame. + + + + + Button was released this frame. + + + + + Input press tracking. + + + + + Left button. + + + + + Middle button. + + + + + Right button. + + + + + Is the pointer moving. + + + Moving. + + + + + Is scroll being used on the input device. + + + Scrolling. + + + + + A BaseInputModule for pointer input. + + + + + Touch id for when simulating touches on a non touch device. + + + + + Id of the cached left mouse pointer event. + + + + + Id of the cached middle mouse pointer event. + + + + + Id of the cached right mouse pointer event. + + + + + Clear all pointers and deselect any selected objects in the EventSystem. + + + + + Copy one PointerEventData to another. + + + + + + + Deselect the current selected GameObject if the currently pointed-at GameObject is different. + + The GameObject the pointer is currently over. + Current event data. + + + + Return the last PointerEventData for the given touch / mouse id. + + + + + + Return the current MouseState. + + + + + + Return the current MouseState. + + + + + + Search the cache for currently active pointers, return true if found. + + Touch ID. + Found data. + If not found should it be created. + + True if a pointer is found. + + + + + Given a touch populate the PointerEventData and return if we are pressed or released. + + Processing Touch. + Are we pressed. + Are we released. + + + + Information about a mouse button event. + + + + + Pointer data associated with the mouse event. + + + + + The state of the button this frame. + + + + + Was the button pressed this frame? + + + + + Was the button released this frame? + + + + + Process the drag for the current frame with the given pointer event. + + + + + + Process movement for the current frame with the given pointer event. + + + + + + Remove the PointerEventData from the cache. + + + + + + Given a mouse button return the current state for the frame. + + Mouse Button id. + + + + A hit result from a BaseRaycaster. + + + + + The relative depth of the element. + + + + + Distance to the hit. + + + + + The GameObject that was hit by the raycast. + + + + + Hit index. + + + + + Is there an associated module and a hit GameObject. + + + + + BaseInputModule that raised the hit. + + + + + The screen position from which the raycast was generated. + + + + + The SortingLayer of the hit object. + + + + + The SortingOrder for the hit object. + + + + + The normal at the hit location of the raycast. + + + + + The world position of the where the raycast has hit. + + + + + Reset the result. + + + + + A BaseInputModule designed for mouse keyboard controller input. + + + + + Is this module allowed to be activated if you are on mobile. + + + + + Input manager name for the 'cancel' button. + + + + + Force this module to be active. + + + + + Input manager name for the horizontal axis button. + + + + + Number of keyboard / controller inputs allowed per second. + + + + + Delay in seconds before the input actions per second repeat rate takes effect. + + + + + Maximum number of input events handled per second. + + + + + Input manager name for the vertical axis. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + Supported. + + + + + See BaseInputModule. + + + + + Iterate through all the different mouse events. + + The mouse pointer Event data id to get. + + + + Iterate through all the different mouse events. + + The mouse pointer Event data id to get. + + + + Calculate and process any mouse button state changes. + + The data pertaining to the current mouse state. + + + + How should the touch press be processed. + + The data to be passed to the final object. + If the touch was pressed this frame. + If the touch was released this frame. + + + + Calculate and send a move event to the current selected object. + + + If the move event was used by the selected object. + + + + + Calculate and send a submit event to the current selected object. + + + If the submit event was used by the selected object. + + + + + Send a update event to the currently selected object. + + + If the update event was used by the selected object. + + + + + See BaseInputModule. + + + Should activate. + + + + + See BaseInputModule. + + + + + Input module used for touch based input. + + + + + Can this module be activated on a standalone platform? + + + + + Force this module to be active. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + Supported. + + + + + See BaseInputModule. + + + + + See BaseInputModule. + + + Should activate. + + + + + See BaseInputModule. + + + + + Base behaviour that has protected implementations of Unity lifecycle functions. + + + + + See MonoBehaviour.Awake. + + + + + Returns true if the GameObject and the Component are active. + + + Active. + + + + + Returns true if the native representation of the behaviour has been destroyed. + + + True if Destroyed. + + + + + See MonoBehaviour.OnBeforeTransformParentChanged. + + + + + See MonoBehaviour.OnCanvasGroupChanged. + + + + + Called when the state of the parent Canvas is changed. + + + + + See MonoBehaviour.OnDestroy. + + + + + See UI.LayoutGroup.OnDidApplyAnimationProperties. + + + + + See MonoBehaviour.OnDisable. + + + + + See MonoBehaviour.OnEnable. + + + + + This callback is called if an associated RectTransform has its dimensions changed. The call is also made to all child rect transforms, even if the child transform itself doesn't change - as it could have, depending on its anchoring. + + + + + See MonoBehaviour.OnRectTransformParentChanged. + + + + + See MonoBehaviour.OnValidate. + + + + + See MonoBehaviour.Reset. + + + + + See MonoBehaviour.Start. + + + + + Structure to store the state of an animation transition on a Selectable. + + + + + Trigger to send to animator when entering disabled state. + + + + + Trigger to send to animator when entering highlighted state. + + + + + Trigger to send to animator when entering normal state. + + + + + Trigger to send to animator when entering pressed state. + + + + + Resizes a RectTransform to fit a specified aspect ratio. + + + + + The mode to use to enforce the aspect ratio. + + + + + The aspect ratio to enforce. This means width divided by height. + + + + + Specifies a mode to use to enforce an aspect ratio. + + + + + Sizes the rectangle such that the parent rectangle is fully contained within. + + + + + Sizes the rectangle such that it's fully contained within the parent rectangle. + + + + + Changes the width of the rectangle to match the aspect ratio. + + + + + The aspect ratio is not enforced. + + + + + Changes the height of the rectangle to match the aspect ratio. + + + + + See MonoBehaviour.OnDisable. + + + + + Mark the AspectRatioFitter as dirty. + + + + + Method called by the layout system. + + + + + Method called by the layout system. + + + + + Base class for effects that modify the generated Mesh. + + + + + See:IMeshModifier. + + + + + + See MonoBehaviour.OnDisable. + + + + + Base class for effects that modify the the generated Vertex Buffers. + + + + + See:IVertexModifier. + + + + + + A standard button that can be clicked in order to trigger an event. + + + + + UnityEvent that is triggered when the button is pressed. + + + + + Function definition for a button click event. + + + + + Registered IPointerClickHandler callback. + + Data passed in (Typically by the event system). + + + + Registered ISubmitHandler callback. + + Data passed in (Typically by the event system). + + + + The Canvas Scaler component is used for controlling the overall scale and pixel density of UI elements in the Canvas. This scaling affects everything under the Canvas, including font sizes and image borders. + + + + + The pixels per inch to use for sprites that have a 'Pixels Per Unit' setting that matches the 'Reference Pixels Per Unit' setting. + + + + + The amount of pixels per unit to use for dynamically created bitmaps in the UI, such as Text. + + + + + The DPI to assume if the screen DPI is not known. + + + + + Setting to scale the Canvas to match the width or height of the reference resolution, or a combination. + + + + + The physical unit to specify positions and sizes in. + + + + + If a sprite has this 'Pixels Per Unit' setting, then one pixel in the sprite will cover one unit in the UI. + + + + + The resolution the UI layout is designed for. + + + + + Scales all UI elements in the Canvas by this factor. + + + + + A mode used to scale the canvas area if the aspect ratio of the current resolution doesn't fit the reference resolution. + + + + + Determines how UI elements in the Canvas are scaled. + + + + + Method that handles calculations of canvas scaling. + + + + + Handles canvas scaling for a constant physical size. + + + + + Handles canvas scaling for a constant pixel size. + + + + + Handles canvas scaling that scales with the screen size. + + + + + Handles canvas scaling for world canvas. + + + + + See MonoBehaviour.OnDisable. + + + + + Determines how UI elements in the Canvas are scaled. + + + + + Using the Constant Physical Size mode, positions and sizes of UI elements are specified in physical units, such as millimeters, points, or picas. + + + + + Using the Constant Pixel Size mode, positions and sizes of UI elements are specified in pixels on the screen. + + + + + Using the Scale With Screen Size mode, positions and sizes can be specified according to the pixels of a specified reference resolution. +If the current screen resolution is larger then the reference resolution, the Canvas will keep having only the resolution of the reference resolution, but will scale up in order to fit the screen. If the current screen resolution is smaller than the reference resolution, the Canvas will similarly be scaled down to fit. + + + + + Scale the canvas area with the width as reference, the height as reference, or something in between. + + + + + Expand the canvas area either horizontally or vertically, so the size of the canvas will never be smaller than the reference. + + + + + Scale the canvas area with the width as reference, the height as reference, or something in between. + + + + + Crop the canvas area either horizontally or vertically, so the size of the canvas will never be larger than the reference. + + + + + Sets the referencePixelsPerUnit on the Canvas. + + + + + + Sets the scale factor on the canvas. + + The scale factor to use. + + + + Settings used to specify a physical unit. + + + + + Use centimeters. +A centimeter is 1/100 of a meter. + + + + + Use inches. + + + + + Use millimeters. +A millimeter is 110 of a centimeter, and 11000 of a meter. + + + + + Use picas. +One pica is 1/6 of an inch. + + + + + Use points. +One point is 112 of a pica, and 172 of an inch. + + + + + Handles per-frame checking if the canvas scaling needs to be updated. + + + + + Values of 'update' called on a Canvas update. + + + + + Called late, before render. + + + + + Called for layout. + + + + + Max enum value. + + + + + Called after layout. + + + + + Called before layout. + + + + + Called before rendering. + + + + + A place where CanvasElements can register themselves for rebuilding. + + + + + Get the singleton registry. + + + + + Are graphics being rebuild. + + + Rebuilding graphics. + + + + + Is layout being rebuilt? + + + Rebuilding layout. + + + + + Rebuild the graphics of the given element. + + Element to rebuild. + + + + Rebuild the layout of the given element. + + Element to rebuild. + + + + Rebuild the layout of the given element. + + Element to rebuild. + + Was the element scheduled. + + + + + Was the element scheduled. + + Element to rebuild. + + Was the element scheduled. + + + + + Remove the given element from rebuild. + + Element to remove. + + + + Registry class to keep track of all IClippers that exist in the scene. + + + + + Singleton instance. + + + + + Perform the clipping on all registered IClipper. + + + + + Register an IClipper. + + + + + + Unregister an IClipper. + + + + + + Utility class to help when clipping using IClipper. + + + + + Find the Rect to use for clipping. + + RectMasks to build the overlap rect from. + Was there a valid Rect found. + + The compound Rect. + + + + + Structure to store the state of a color transition on a Selectable. + + + + + Multiplier applied to colors (allows brightening greater then base color). + + + + + Simple getter for the default ColorBlock. + + + + + Disabled Color. + + + + + How long a color transition should take. + + + + + Highlighted Color. + + + + + Normal Color. + + + + + Pressed Color. + + + + + Resizes a RectTransform to fit the size of its content. + + + + + The fit mode to use to determine the width. + + + + + The fit mode to use to determine the height. + + + + + The size fit mode to use. + + + + + Resize to the minimum size of the content. + + + + + Resize to the preferred size of the content. + + + + + Don't perform any resizing. + + + + + See MonoBehaviour.OnDisable. + + + + + Mark the ContentSizeFitter as dirty. + + + + + Method called by the layout system. + + + + + Method called by the layout system. + + + + + Utility class for creating default implementations of builtin UI controls. + + + + + Create a button. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a dropdown. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create an image. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create an input field. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a panel. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a raw image. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a scrollbar. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a scroll view. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a slider. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Create a text object. + + C. + + The root GameObject of the created element. + + + + + Create a toggle. + + Object with resources to use. + + The root GameObject of the created element. + + + + + Object used to pass resources to use for the default controls. + + + + + Sprite used for background elements. + + + + + Sprite used for representation of an "on" state when present, such as a checkmark. + + + + + Sprite used to indicate that a button will open a dropdown when clicked. + + + + + Sprite used as background for input fields. + + + + + Sprite used for knobs that can be dragged, such as on a slider. + + + + + Sprite used for masking purposes, for example to be used for the viewport of a scroll view. + + + + + The primary sprite to be used for graphical UI elements, used by the button, toggle, and dropdown controls, among others. + + + + + A standard dropdown that presents a list of options when clicked, of which one can be chosen. + + + + + The Image component to hold the image of the currently selected option. + + + + + The Text component to hold the text of the currently selected option. + + + + + The Image component to hold the image of the item. + + + + + The Text component to hold the text of the item. + + + + + A UnityEvent that is invoked when when a user has clicked one of the options in the dropdown list. + + + + + The list of possible options. A text string and an image can be specified for each option. + + + + + The Rect Transform of the template for the dropdown list. + + + + + The index of the currently selected option. 0 is the first option, 1 is the second, and so on. + + + + + Add multiple options to the options of the Dropdown based on a list of OptionData objects. + + The list of OptionData to add. + + + + Add multiple text-only options to the options of the Dropdown based on a list of strings. + + The list of text strings to add. + + + + Add multiple image-only options to the options of the Dropdown based on a list of Sprites. + + The list of Sprites to add. + + + + Clear the list of options in the Dropdown. + + + + + Override this method to implement a different way to obtain a blocker GameObject. + + The root canvas the dropdown is under. + + The obtained blocker. + + + + + Override this method to implement a different way to obtain a dropdown list GameObject. + + The template to create the dropdown list from. + + The obtained dropdown list. + + + + + Override this method to implement a different way to obtain an option item. + + The template to create the option item from. + + The obtained option item. + + + + + Override this method to implement a different way to dispose of a blocker GameObject that blocks clicks to other controls while the dropdown list is open. + + The blocker to dispose of. + + + + Override this method to implement a different way to dispose of a dropdown list GameObject. + + The dropdown list to dispose of. + + + + Override this method to implement a different way to dispose of an option item. + + The option item to dispose of. + + + + UnityEvent callback for when a dropdown current option is changed. + + + + + Hide the dropdown list. + + + + + Called by a BaseInputModule when a Cancel event occurs. + + + + + + Handling for when the dropdown is 'clicked'. + + Current event. + + + + What to do when the event system sends a submit Event. + + Current event. + + + + Class to store the text and/or image of a single option in the dropdown list. + + + + + The image associated with the option. + + + + + The text associated with the option. + + + + + Create an object representing a single option for the dropdown list. + + Optional text for the option. + Optional image for the option. + + + + Create an object representing a single option for the dropdown list. + + Optional text for the option. + Optional image for the option. + + + + Create an object representing a single option for the dropdown list. + + Optional text for the option. + Optional image for the option. + + + + Create an object representing a single option for the dropdown list. + + Optional text for the option. + Optional image for the option. + + + + Class used internally to store the list of options for the dropdown list. + + + + + The list of options for the dropdown list. + + + + + Refreshes the text and image (if available) of the currently selected option. + +If you have modified the list of options, you should call this method afterwards to ensure that the visual state of the dropdown corresponds to the updated options. + + + + + Show the dropdown list. + + + + + Struct for storing Text generation settings. + + + + + Use the extents of glyph geometry to perform horizontal alignment rather than glyph metrics. + + + + + How is the text aligned. + + + + + Is best fit used. + + + + + Get a font data with sensible defaults. + + + + + Font to use. + + + + + Font size. + + + + + Font Style. + + + + + Horizontal overflow mode. + + + + + Line spacing. + + + + + Maximum text size. + + + + + Minimum text size. + + + + + Should RichText be used? + + + + + Vertical overflow mode. + + + + + Utility class that is used to help with Text update. + + + + + Register a Text element for receiving texture atlas rebuild calls. + + + + + + Deregister a Text element from receiving texture atlas rebuild calls. + + + + + + Base class for all visual UI Component. + + + + + A reference to the Canvas this Graphic is rendering to. + + + + + The CanvasRenderer used by this Graphic. + + + + + Base color of the Graphic. + + + + + Default material used to draw UI elements if no explicit material was specified. + + + + + Returns the default material for the graphic. + + + + + Absolute depth of the graphic in the hierarchy, used by rendering and events. + + + + + The graphic's texture. (Read Only). + + + + + The Material set by the user. + + + + + The material that will be sent for Rendering (Read only). + + + + + Should this graphic be considered a target for raycasting? + + + + + The RectTransform component used by the Graphic. + + + + + Tweens the alpha of the CanvasRenderer color associated with this Graphic. + + Target alpha. + Duration of the tween in seconds. + Should ignore Time.scale? + + + + Tweens the CanvasRenderer color associated with this Graphic. + + Target color. + Tween duration. + Should ignore Time.scale? + Should also Tween the alpha channel? + + + + Returns a pixel perfect Rect closest to the Graphic RectTransform. + + + Pixel perfect Rect. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + See ICanvasElement.LayoutComplete. + + + + + See MonoBehaviour.OnDisable. + + + + + Callback function when a UI element needs to generate vertices. + + Mesh to populate with UI data. + VertexHelper utility. + + + + Callback function when a UI element needs to generate vertices. + + Mesh to populate with UI data. + VertexHelper utility. + + + + Editor-only callback that is issued by Unity if a rebuild of the Graphic is required. + + + + + Adjusts the given pixel to be pixel perfect. + + Local space point. + + Pixel perfect adjusted point. + + + + + When a GraphicRaycaster is raycasting into the scene it does two things. First it filters the elements using their RectTransform rect. Then it uses this Raycast function to determine the elements hit by the raycast. + + Screen point. + Camera. + + True if the provided point is a valid location for GraphicRaycaster raycasts. + + + + + Rebuilds the graphic geometry and its material on the PreRender cycle. + + The current step of the rendering CanvasUpdate cycle. + + + + Add a listener to receive notification when the graphics layout is dirtied. + + + + + + Add a listener to receive notification when the graphics material is dirtied. + + + + + + Add a listener to receive notification when the graphics vertices are dirtied. + + + + + + Mark the Graphic as dirty. + + + + + Mark the layout as dirty. + + + + + Mark the Material as dirty. + + + + + Adjusts the graphic size to make it pixel-perfect. + + + + + Mark the vertices as dirty. + + + + + Remove a listener from receiving notifications when the graphics layout is dirtied. + + + + + + Remove a listener from receiving notifications when the graphics material is dirtied. + + + + + + Remove a listener from receiving notifications when the graphics vertices are dirtied. + + The delegate function to remove. + + + + Call to update the geometry of the Graphic onto the CanvasRenderer. + + + + + Call to update the Material of the graphic onto the CanvasRenderer. + + + + + A BaseRaycaster to raycast against Graphic elements. + + + + + Type of objects that will block graphic raycasts. + + + + + See: BaseRaycaster. + + + + + Should graphics facing away from the raycaster be considered? + + + + + List of Raycasters to check for canvas blocking elements. + + + + + Blocked by 2D and 3D. + + + + + Not blocked. + + + + + 3D physics blocking. + + + + + 2D physics blocking. + + + + + See: BaseRaycaster. + + + + + + + EditorOnly class for tracking all Graphics. + + + + + Track a Graphic. + + + + + + Untrack a Graphic. + + + + + + Registry which maps a Graphic to the canvas it belongs to. + + + + + Singleton instance. + + + + + Return a list of Graphics that are registered on the Canvas. + + Input canvas. + + Graphics on the input canvas. + + + + + Store a link between the given canvas and graphic in the registry. + + Canvas to register. + Graphic to register. + + + + Deregister the given Graphic from a Canvas. + + Canvas. + Graphic to deregister. + + + + Layout child layout elements in a grid. + + + + + The size to use for each cell in the grid. + + + + + Which constraint to use for the GridLayoutGroup. + + + + + How many cells there should be along the constrained axis. + + + + + The spacing to use between layout elements in the grid. + + + + + Which axis should cells be placed along first? + + + + + Which corner should the first cell be placed in? + + + + + An axis that can be horizontal or vertical. + + + + + Horizontal. + + + + + Vertical. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + A constraint on either the number of columns or rows. + + + + + Constraint the number of columns to a specified number. + + + + + Constraint the number of rows to a specified number. + + + + + Don't constrain the number of rows or columns. + + + + + One of the four corners in a rectangle. + + + + + Lower left. + + + + + Lower right. + + + + + Upper left. + + + + + Upper right. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Layout child layout elements side by side. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Abstract base class for HorizontalLayoutGroup and VerticalLayoutGroup. + + + + + Should the layout group control the heights of the children? + + + + + Should the layout group control the widths of the children? + + + + + Whether to force the children to expand to fill additional available vertical space. + + + + + Whether to force the children to expand to fill additional available horizontal space. + + + + + The spacing to use between layout elements in the layout group. + + + + + Calculate the layout element properties for this layout element along the given axis. + + The axis to calculate for. 0 is horizontal and 1 is vertical. + Is this group a vertical group? + + + + Set the positions and sizes of the child layout elements for the given axis. + + The axis to handle. 0 is horizontal and 1 is vertical. + Is this group a vertical group? + + + + This is an element that can live on a Canvas. + + + + + Get the transform associated with the ICanvasElement. + + + + + Callback sent when this ICanvasElement has completed Graphic rebuild. + + + + + Return true if the element is considered destroyed. +Used if the native representation has been destroyed. + + + + + Callback sent when this ICanvasElement has completed layout. + + + + + Rebuild the element for the given stage. + + Stage being rebuild. + + + + Interface for elements that can be clipped if they are under an [[IClipper]. + + + + + GameObject of the IClippable. + + + + + RectTransform of the clippable. + + + + + Clip and cull the IClippable given the clipRect. + + Rectangle to clip against. + Is the Rect valid. If not then the rect has 0 size. + + + + Called when the state of a parent IClippable changes. + + + + + Set the clip rect for the IClippable. + + + + + + + Interface that can be used to recieve clipping callbacks as part of the canvas update loop. + + + + + Called after layout and before Graphic update of the Canvas update loop. + + + + + Base interface to implement by componets that control the layout of RectTransforms. + + + + + Callback invoked by the auto layout system which handles horizontal aspects of the layout. + + + + + Callback invoked by the auto layout system which handles vertical aspects of the layout. + + + + + A component is treated as a layout element by the auto layout system if it implements ILayoutElement. + + + + + The extra relative height this layout element should be allocated if there is additional available space. + + + + + The extra relative width this layout element should be allocated if there is additional available space. + + + + + The layout priority of this component. + + + + + The minimum height this layout element may be allocated. + + + + + The minimum width this layout element may be allocated. + + + + + The preferred height this layout element should be allocated if there is sufficient space. + + + + + The preferred width this layout element should be allocated if there is sufficient space. + + + + + The minWidth, preferredWidth, and flexibleWidth values may be calculated in this callback. + + + + + The minHeight, preferredHeight, and flexibleHeight values may be calculated in this callback. + + + + + ILayoutGroup is an ILayoutController that should drive the RectTransforms of its children. + + + + + A RectTransform will be ignored by the layout system if it has a component which implements ILayoutIgnorer. + + + + + Should this RectTransform be ignored bvy the layout system? + + + + + ILayoutSelfController is an ILayoutController that should drive its own RectTransform. + + + + + Displays a Sprite for the UI System. + + + + + The alpha threshold specifies the minimum alpha a pixel must have for the event to considered a "hit" on the Image. + + + + + Cache of the default Canvas Ericsson Texture Compression 1 (ETC1) and alpha Material. + + + + + The alpha threshold specifies the minimum alpha a pixel must have for the event to considered a "hit" on the Image. + + + + + Amount of the Image shown when the Image.type is set to Image.Type.Filled. + + + + + Whether or not to render the center of a Tiled or Sliced image. + + + + + Whether the Image should be filled clockwise (true) or counter-clockwise (false). + + + + + What type of fill method to use. + + + + + Controls the origin point of the Fill process. Value means different things with each fill method. + + + + + See ILayoutElement.flexibleHeight. + + + + + See ILayoutElement.flexibleWidth. + + + + + True if the sprite used has borders. + + + + + See ILayoutElement.layoutPriority. + + + + + The image's texture. (ReadOnly). + + + + + The specified Material used by this Image. The default Material is used instead if one wasn't specified. + + + + + See ILayoutElement.minHeight. + + + + + See ILayoutElement.minWidth. + + + + + Set an override sprite to be used for rendering. + + + + + See ILayoutElement.preferredHeight. + + + + + See ILayoutElement.preferredWidth. + + + + + Whether this image should preserve its Sprite aspect ratio. + + + + + The sprite that is used to render this image. + + + + + How to display the image. + + + + + See ILayoutElement.CalculateLayoutInputHorizontal. + + + + + See ILayoutElement.CalculateLayoutInputVertical. + + + + + Fill method to be used by the Image. + + + + + The Image will be filled Horizontally. + + + + + The Image will be filled Radially with the radial center in one of the edges. + + + + + The Image will be filled Radially with the radial center at the center. + + + + + The Image will be filled Radially with the radial center in one of the corners. + + + + + The Image will be filled Vertically. + + + + + See:ICanvasRaycastFilter. + + + + + + + Serialization Callback. + + + + + Serialization Callback. + + + + + Origin for the Image.FillMethod.Radial180. + + + + + Center of the radial at the center of the Bottom edge. + + + + + Center of the radial at the center of the Left edge. + + + + + Center of the radial at the center of the Right edge. + + + + + Center of the radial at the center of the Top edge. + + + + + One of the points of the Arc for the Image.FillMethod.Radial360. + + + + + Arc starting at the center of the Bottom edge. + + + + + Arc starting at the center of the Left edge. + + + + + Arc starting at the center of the Right edge. + + + + + Arc starting at the center of the Top edge. + + + + + Origin for the Image.FillMethod.Radial90. + + + + + Radial starting at the Bottom Left corner. + + + + + Radial starting at the Bottom Right corner. + + + + + Radial starting at the Top Left corner. + + + + + Radial starting at the Top Right corner. + + + + + Origin for the Image.FillMethod.Horizontal. + + + + + Origin at the Left side. + + + + + Origin at the Right side. + + + + + Origin for the Image.FillMethod.Vertical. + + + + + Origin at the Bottom edge. + + + + + Origin at the Top edge. + + + + + Adjusts the image size to make it pixel-perfect. + + + + + Image Type. + + + + + Displays only a portion of the Image. + + + + + Displays the full Image. + + + + + Displays the Image as a 9-sliced graphic. + + + + + Displays a sliced Sprite with its resizable sections tiled instead of stretched. + + + + + Is this element a mask. + + + + + Return the RectTransform associated with this mask. + + + + + Is the mask enabled. + + + + + This element is capable of being masked out. + + + + + Recalculate masking for this element and all children elements. + + + + + Interface which allows for the modification of the Material used to render a Graphic before they are passed to the CanvasRenderer. + + + + + Perform material modification in this function. + + Configured Material. + + Modified material. + + + + + Interface which allows for the modification of verticies in a Graphic before they are passed to the CanvasRenderer. + + + + + Call used to modify mesh. + + + + + + Turn a simple label into a interactable input field. + + + + + The character used for password fields. + + + + + The blinking rate of the input caret, defined as the number of times the blink cycle occurs per second. + + + + + The custom caret color used if customCaretColor is set. + + + + + Current InputField caret position (also selection tail). + + + + + Current InputField selection head. + + + + + The width of the caret in pixels. + + + + + How many characters the input field is limited to. 0 = infinite. + + + + + The type of validation to perform on a character. + + + + + Specifies the type of the input text content. + + + + + Should a custom caret color be used or should the textComponent.color be used. + + + + + The type of input expected. See InputField.InputType. + + + + + Does the InputField currently have focus and is able to process events. + + + + + They type of mobile keyboard that will be used. + + + + + The LineType used by the InputField. + + + + + If the input field supports multiple lines. + + + + + The Unity Event to call when editing has ended. + + + + + The function to call to validate the input characters. + + + + + Accessor to the OnChangeEvent. + + + + + Accessor to the OnChangeEvent. + + + + + This is an optional ‘empty’ graphic to show that the InputField text field is empty. Note that this ‘empty' graphic still displays even when the InputField is selected (that is; when there is focus on it). + +A placeholder graphic can be used to show subtle hints or make it more obvious that the control is an InputField. + + + + + Set the InputField to be read only. + + + + + The beginning point of the selection. + + + + + The color of the highlight to show which characters are selected. + + + + + The end point of the selection. + + + + + Should the mobile keyboard input be hidden. + + + + + The current value of the input field. + + + + + The Text component that is going to be used to render the text to screen. + + + + + If the UI.InputField was canceled and will revert back to the original text upon DeactivateInputField. + + + + + Function to activate the InputField to begin processing Events. + + + + + Append a character to the input field. + + Character / string to append. + + + + Append a character to the input field. + + Character / string to append. + + + + The type of characters that are allowed to be added to the string. + + + + + Allows letters A-Z, a-z and numbers 0-9. + + + + + Allows decimal numbers (positive or negative). +Characters 0-9, . (dot), and - (dash / minus sign) are allowed. The dash is only allowed as the first character. Only one dot in the string is allowed. + + + + + Allows the characters that are allowed in an email address. + + + + + Allow whole numbers (positive or negative). + + + + + Only allow names and enforces capitalization. + + + + + No validation. Any input is valid. + + + + + Clamp a value (by reference) between 0 and the current text length. + + The value to be clamped. + + + + Specifies the type of the input text content. + + + + + Allows letters A-Z, a-z and numbers 0-9. + + + + + Allows all input and performs auto-correction on platforms that support it. + + + + + Custom types that allows user-defined settings. + + + + + Allows decimal numbers (positive or negative). + + + + + The input is used for typing in an email address. + + + + + Allow whole numbers (positive or negative). + + + + + The InputField is used for typing in a name and enforces capitalization. + + + + + Allows all input and hides the typed characters by showing them as asterisks characters. + + + + + Allows integer numbers and hides the typed characters by showing them as asterisks characters. + + + + + Allows all input. + + + + + Function to deactivate the InputField to stop the processing of Events and send OnSubmit if not canceled. + + + + + Force the label to update immediatly. This will recalculate the positioning of the caret and the visible text. + + + + + The character that is under the mouse. + + Mouse position. + + Character index with in value. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + Type of data expected by the input field. + + + + + The mobile autocorrect keyboard. + + + + + The mobile password keyboard. + + + + + The standard mobile keyboard. + + + + + Process the Event and perform the appropriate action for that key. + + The Event that is currently being processed. + + If we should continue processing events or we have hit an end condition. + + + + + See ICanvasElement.LayoutComplete. + + + + + The LineType is used to describe the behavior of the InputField. + + + + + Is a multiline InputField with vertical scrolling and overflow. Pressing the return key will insert a new line character. + + + + + Is a multiline InputField with vertical scrolling and overflow. Pressing the return key will submit. + + + + + Only allows 1 line to be entered. Has horizontal scrolling and no word wrap. Pressing enter will submit the InputField. + + + + + Move the caret index to end of text. + + Only move the selectionPosition. + + + + Move the caret index to start of text. + + Only move the selectionPosition. + + + + Capture the OnBeginDrag callback from the EventSystem and ensure we should listen to the drag events to follow. + + The data passed by the EventSystem. + + + + The callback sent anytime the Inputfield is updated. + + + + + What to do when the event system sends a Deselect Event. + + + + + + See MonoBehaviour.OnDisable. + + + + + What to do when the event system sends a Drag Event. + + + + + + Capture the OnEndDrag callback from the EventSystem and cancel the listening of drag events. + + The eventData sent by the EventSystem. + + + + Focus the input field initializing properties. + + + + + What to do when the event system sends a pointer click Event. + + + + + + What to do when the event system sends a pointer down Event. + + + + + + What to do when the event system sends a submit Event. + + + + + + What to do when the event system sends a Update selected Event. + + + + + + Custom validation callback. + + + + + + + + Helper function to allow separate events to be processed by the InputField. + + The Event to be processed. + + + + Rebuild the input fields geometry. (caret and highlight). + + + + + + Convert screen space into input field local space. + + + + + + Highlight the whole InputField. + + + + + Convenience function to make functionality to send the SubmitEvent easier. + + + + + Unity Event with a inputfield as a param. + + + + + Update the Text associated with this input field. + + + + + Predefined validation functionality for different characterValidation types. + + The whole text string to validate. + The position at which the current character is being inserted. + The character that is being inserted. + + The character that should be inserted. + + + + + Interface which allows for the modification of verticies in a Graphic before they are passed to the CanvasRenderer. + + + + + Call used to modify vertices. + + To modify. + + + + Add this component to a GameObject to make it into a layout element or override values on an existing layout element. + + + + + The extra relative height this layout element should be allocated if there is additional available space. + + + + + The extra relative width this layout element should be allocated if there is additional available space. + + + + + Should this RectTransform be ignored by the layout system? + + + + + Called by the layout system. + + + + + The minimum height this layout element may be allocated. + + + + + The minimum width this layout element may be allocated. + + + + + The preferred height this layout element should be allocated if there is sufficient space. + + + + + The preferred width this layout element should be allocated if there is sufficient space. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + See MonoBehaviour.OnDisable. + + + + + Mark the LayoutElement as dirty. + + + + + Abstract base class to use for layout groups. + + + + + The alignment to use for the child layout elements in the layout group. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + The padding to add around the child layout elements. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Returns the alignment on the specified axis as a fraction where 0 is lefttop, 0.5 is middle, and 1 is rightbottom. + + The axis to get alignment along. 0 is horizontal and 1 is vertical. + + The alignment as a fraction where 0 is lefttop, 0.5 is middle, and 1 is rightbottom. + + + + + Returns the calculated position of the first child layout element along the given axis. + + The axis index. 0 is horizontal and 1 is vertical. + The total space required on the given axis for all the layout elements including spacing and excluding padding. + + The position of the first child along the given axis. + + + + + The flexible size for the layout group on the given axis. + + The axis index. 0 is horizontal and 1 is vertical. + + The flexible size. + + + + + The min size for the layout group on the given axis. + + The axis index. 0 is horizontal and 1 is vertical. + + The min size. + + + + + The preferred size for the layout group on the given axis. + + The axis index. 0 is horizontal and 1 is vertical. + + The preferred size. + + + + + Callback for when properties have been changed by animation. + + + + + See MonoBehaviour.OnDisable. + + + + + Set the position and size of a child layout element along the given axis. + + The RectTransform of the child layout element. + The axis to set the position and size along. 0 is horizontal and 1 is vertical. + The position from the left side or top. + The size. + + + + Mark the LayoutGroup as dirty. + + + + + Called by the layout system. + + + + + Used to set the calculated layout properties for the given axis. + + The min size for the layout group. + The preferred size for the layout group. + The flexible size for the layout group. + The axis to set sizes for. 0 is horizontal and 1 is vertical. + + + + Called by the layout system. + + + + + Helper method used to set a given property if it has changed. + + A reference to the member value. + The new value. + + + + Wrapper class for managing layout rebuilding of CanvasElement. + + + + + See ICanvasElement. + + + + + Does the passed rebuilder point to the same CanvasElement. + + Other. + + Equal. + + + + + Forces an immediate rebuild of the layout element and child layout elements affected by the calculations. + + The layout element to perform the layout rebuild on. + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + Has the native representation of this LayoutRebuilder been destroyed? + + + + + See ICanvasElement.LayoutComplete. + + + + + Mark the given RectTransform as needing it's layout to be recalculated during the next layout pass. + + Rect to rebuild. + + + + See ICanvasElement.Rebuild. + + + + + + Utility functions for querying layout elements for their minimum, preferred, and flexible sizes. + + + + + Returns the flexible height of the layout element. + + The RectTransform of the layout element to query. + + + + Returns the flexible size of the layout element. + + The RectTransform of the layout element to query. + The axis to query. This can be 0 or 1. + + + + Returns the flexible width of the layout element. + + The RectTransform of the layout element to query. + + + + Gets a calculated layout property for the layout element with the given RectTransform. + + The RectTransform of the layout element to get a property for. + The property to calculate. + The default value to use if no component on the layout element supplies the given property. + Optional out parameter to get the component that supplied the calculated value. + + The calculated value of the layout property. + + + + + Gets a calculated layout property for the layout element with the given RectTransform. + + The RectTransform of the layout element to get a property for. + The property to calculate. + The default value to use if no component on the layout element supplies the given property. + Optional out parameter to get the component that supplied the calculated value. + + The calculated value of the layout property. + + + + + Returns the minimum height of the layout element. + + The RectTransform of the layout element to query. + + + + Returns the minimum size of the layout element. + + The RectTransform of the layout element to query. + The axis to query. This can be 0 or 1. + + + + Returns the minimum width of the layout element. + + The RectTransform of the layout element to query. + + + + Returns the preferred height of the layout element. + + The RectTransform of the layout element to query. + + + + Returns the preferred size of the layout element. + + The RectTransform of the layout element to query. + The axis to query. This can be 0 or 1. + + + + Returns the preferred width of the layout element. + + The RectTransform of the layout element to query. + + + + A component for masking children elements. + + + + + The graphic associated with the Mask. + + + + + Cached RectTransform. + + + + + Show the graphic that is associated with the Mask render area. + + + + + See: IMaterialModifier. + + + + + + See:ICanvasRaycastFilter. + + + + + + + See:IMask. + + + + + See MonoBehaviour.OnDisable. + + + + + See:IGraphicEnabledDisabled. + + + + + A Graphic that is capable of being masked out. + + + + + Does this graphic allow masking. + + + + + Callback issued when culling changes. + + + + + See IClippable.Cull. + + + + + + + See IMaterialModifier.GetModifiedMaterial. + + + + + + See MonoBehaviour.OnDisable. + + + + + See: IMaskable. + + + + + See: IClippable.RecalculateClipping. + + + + + See: IMaskable.RecalculateMasking. + + + + + See IClippable.SetClipRect. + + + + + + + Mask related utility class. + + + + + Find a root Canvas. + + Search start. + + Canvas transform. + + + + + Find the correct RectMask2D for a given IClippable. + + Clippable to search from. + + + + + Search for all RectMask2D that apply to the given RectMask2D (includes self). + + + + + + + Find the stencil depth for a given element. + + + + + + + Helper function to determine if the child is a descendant of father or is father. + + The transform to compare against. + The starting transform to search up the hierarchy. + + Is child equal to father or is a descendant. + + + + + Notify all IClippables under the given component that they need to recalculate clipping. + + + + + + Notify all IMaskable under the given component that they need to recalculate masking. + + + + + + Structure storing details related to navigation. + + + + + Return a Navigation with sensible default values. + + + + + Navigation mode. + + + + + Specify a Selectable UI GameObject to highlight when the down arrow key is pressed. + + + + + Specify a Selectable UI GameObject to highlight when the left arrow key is pressed. + + + + + Specify a Selectable UI GameObject to highlight when the right arrow key is pressed. + + + + + Specify a Selectable UI GameObject to highlight when the Up arrow key is pressed. + + + + + Navigation mode. Used by Selectable. + + + + + Automatic navigation. + + + + + Explicit navigaion. + + + + + Horizontal Navigation. + + + + + No navigation. + + + + + Vertical navigation. + + + + + Adds an outline to a graphic using IVertexModifier. + + + + + An IVertexModifier which sets the raw vertex position into UV1 of the generated verts. + + + + + Displays a Texture2D for the UI System. + + + + + The RawImage's texture. (ReadOnly). + + + + + The RawImage's texture. + + + + + The RawImage texture coordinates. + + + + + Adjusts the raw image size to make it pixel-perfect. + + + + + A 2D rectangular mask that allows for clipping / masking of areas outside the mask. + + + + + Get the Rect for the mask in canvas space. + + + + + Get the RectTransform for the mask. + + + + + Add a [IClippable]] to be tracked by the mask. + + + + + + See:ICanvasRaycastFilter. + + + + + + + See: IClipper.PerformClipping. + + + + + Remove an IClippable from being tracked by the mask. + + + + + + A standard scrollbar with a variable sized handle that can be dragged between 0 and 1. + + + + + The direction of the scrollbar from minimum to maximum value. + + + + + The RectTransform to use for the handle. + + + + + The number of steps to use for the value. A value of 0 disables use of steps. + + + + + Handling for when the scrollbar value is changed. + + + + + The size of the scrollbar handle where 1 means it fills the entire scrollbar. + + + + + The current value of the scrollbar, between 0 and 1. + + + + + Coroutine function for handling continual press during Scrollbar.OnPointerDown. + + + + + + Setting that indicates one of four directions. + + + + + From bottom to top. + + + + + From left to right. + + + + + From right to left. + + + + + From top to bottom. + + + + + See member in base class. + + + + + See member in base class. + + + + + See member in base class. + + + + + See member in base class. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + See ICanvasElement.LayoutComplete. + + + + + Handling for when the scrollbar value is begin being dragged. + + + + + + See MonoBehaviour.OnDisable. + + + + + Handling for when the scrollbar value is dragged. + + + + + + See: IInitializePotentialDragHandler.OnInitializePotentialDrag. + + + + + + Handling for movement events. + + + + + + Event triggered when pointer is pressed down on the scrollbar. + + + + + + Event triggered when pointer is released after pressing on the scrollbar. + + + + + + Handling for when the canvas is rebuilt. + + + + + + UnityEvent callback for when a scrollbar is scrolled. + + + + + Set the direction of the scrollbar, optionally setting the layout as well. + + The direction of the scrollbar. + Should the layout be flipped together with the direction? + + + + A component for making a child RectTransform scroll. + + + + + The content that can be scrolled. It should be a child of the GameObject with ScrollRect on it. + + + + + The rate at which movement slows down. + + + + + The amount of elasticity to use when the content moves beyond the scroll rect. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Should horizontal scrolling be enabled? + + + + + The horizontal scroll position as a value between 0 and 1, with 0 being at the left. + + + + + Optional Scrollbar object linked to the horizontal scrolling of the ScrollRect. + + + + + The space between the scrollbar and the viewport. + + + + + The mode of visibility for the horizontal scrollbar. + + + + + Should movement inertia be enabled? + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + The behavior to use when the content moves beyond the scroll rect. + + + + + The scroll position as a Vector2 between (0,0) and (1,1) with (0,0) being the lower left corner. + + + + + Callback executed when the scroll position of the slider is changed. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + The sensitivity to scroll wheel and track pad scroll events. + + + + + The current velocity of the content. + + + + + Should vertical scrolling be enabled? + + + + + The vertical scroll position as a value between 0 and 1, with 0 being at the bottom. + + + + + Optional Scrollbar object linked to the vertical scrolling of the ScrollRect. + + + + + The space between the scrollbar and the viewport. + + + + + The mode of visibility for the vertical scrollbar. + + + + + Reference to the viewport RectTransform that is the parent of the content RectTransform. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + See member in base class. + + + + + See ICanvasElement.LayoutComplete. + + + + + A setting for which behavior to use when content moves beyond the confines of its container. + + + + + Clamped movement. The content can not be moved beyond its container. + + + + + Elastic movement. The content is allowed to temporarily move beyond the container, but is pulled back elastically. + + + + + Unrestricted movement. The content can move forever. + + + + + Handling for when the content is beging being dragged. + + + + + + See MonoBehaviour.OnDisable. + + + + + Handling for when the content is dragged. + + + + + + Handling for when the content has finished being dragged. + + + + + + See: IInitializePotentialDragHandler.OnInitializePotentialDrag. + + + + + + See IScrollHandler.OnScroll. + + + + + + Rebuilds the scroll rect data after initialization. + + The current step of the rendering CanvasUpdate cycle. + + + + Enum for which behavior to use for scrollbar visibility. + + + + + Automatically hide the scrollbar when no scrolling is needed on this axis. The viewport rect will not be changed. + + + + + Automatically hide the scrollbar when no scrolling is needed on this axis, and expand the viewport rect accordingly. + + + + + Always show the scrollbar. + + + + + Event type used by the ScrollRect. + + + + + Sets the anchored position of the content. + + + + + + Override to alter or add to the code that keeps the appearance of the scroll rect synced with its data. + + + + + Override to alter or add to the code that caches data to avoid repeated heavy operations. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Sets the velocity to zero on both axes so the content stops moving. + + + + + Calculate the bounds the ScrollRect should be using. + + + + + Helper function to update the previous data fields on a ScrollRect. + + + + + Simple selectable object - derived from to create a selectable control. + + + + + List of all the selectable objects currently active in the scene. + + + + + The AnimationTriggers for this selectable object. + + + + + Convenience function to get the Animator component on the GameObject. + + + + + The ColorBlock for this selectable object. + + + + + Convenience function that converts the referenced Graphic to a Image, if possible. + + + + + UI.Selectable.interactable. + + + + + The Navigation setting for this selectable object. + + + + + The SpriteState for this selectable object. + + + + + Graphic that will be transitioned upon. + + + + + The type of transition that will be applied to the targetGraphic when the state changes. + + + + + Transition the Selectable to the entered state. + + State to transition to. + Should the transition occur instantly. + + + + Finds the selectable object next to this one. + + The direction in which to search for a neighbouring Selectable object. + + The neighbouring Selectable object. Null if none found. + + + + + Find the selectable object below this one. + + + The Selectable object below current. + + + + + Find the selectable object to the left of this one. + + + The Selectable object to the left of current. + + + + + Find the selectable object to the right of this one. + + + The Selectable object to the right of current. + + + + + Find the selectable object above this one. + + + The Selectable object above current. + + + + + Clear any internal state from the Selectable (used when disabling). + + + + + Is the selectable currently 'highlighted'. + + + + + + UI.Selectable.IsInteractable. + + + + + Whether the current selectable is being pressed. + + + + + + Whether the current selectable is being pressed. + + + + + + Unset selection and transition to appropriate state. + + The eventData usually sent by the EventSystem. + + + + See MonoBehaviour.OnDisable. + + + + + Determine in which of the 4 move directions the next selectable object should be found. + + The EventData usually sent by the EventSystem. + + + + Evaluate current state and transition to pressed state. + + The EventData usually sent by the EventSystem. + + + + Evaluate current state and transition to appropriate state. + + The EventData usually sent by the EventSystem. + + + + Evaluate current state and transition to normal state. + + The EventData usually sent by the EventSystem. + + + + Evaluate eventData and transition to appropriate state. + + The EventData usually sent by the EventSystem. + + + + Set selection and transition to appropriate state. + + The EventData usually sent by the EventSystem. + + + + Selects this Selectable. + + + + + Transition mode for a Selectable. + + + + + Use an animation transition. + + + + + Use an color tint transition. + + + + + No Transition. + + + + + Use a sprite swap transition. + + + + + Internally update the selection state of the Selectable. + + + + + + Adds an outline to a graphic using IVertexModifier. + + + + + Color for the effect. + + + + + How far is the shadow from the graphic. + + + + + Should the shadow inherit the alpha from the graphic? + + + + + Duplicate vertices from start to end and turn them into shadows with the given offset. + + Verts List. + Shadow Color. + Start Index. + End Index. + Shadow x offset. + Shadow y offset. + + + + See: IMeshModifier. + + + + + A standard slider that can be moved between a minimum and maximum value. + + + + + The direction of the slider, from minimum to maximum value. + + + + + Optional RectTransform to use as fill for the slider. + + + + + Optional RectTransform to use as a handle for the slider. + + + + + The maximum allowed value of the slider. + + + + + The minimum allowed value of the slider. + + + + + The current value of the slider normalized into a value between 0 and 1. + + + + + Callback executed when the value of the slider is changed. + + + + + The current value of the slider. + + + + + Should the value only be allowed to be whole numbers? + + + + + Setting that indicates one of four directions. + + + + + From bottom to top. + + + + + From left to right. + + + + + From right to left. + + + + + From top to bottom. + + + + + See member in base class. + + + + + See member in base class. + + + + + See member in base class. + + + + + See member in base class. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + See ICanvasElement.LayoutComplete. + + + + + See MonoBehaviour.OnDisable. + + + + + Handling for when the slider is dragged. + + + + + + See: IInitializePotentialDragHandler.OnInitializePotentialDrag. + + + + + + Handling for movement events. + + + + + + Handling for when the canvas is rebuilt. + + + + + + Set the value of the slider. + + The new value for the slider. + If the OnValueChanged callback should be invoked. + + + + Sets the direction of this slider, optionally changing the layout as well. + + The direction of the slider. + Should the layout be flipped together with the slider direction? + + + + Event type used by the Slider. + + + + + Structure to store the state of a sprite transition on a Selectable. + + + + + Disabled sprite. + + + + + Highlighted sprite. + + + + + Pressed sprite. + + + + + The default Graphic to draw font data to screen. + + + + + Use the extents of glyph geometry to perform horizontal alignment rather than glyph metrics. + + + + + The positioning of the text reliative to its RectTransform. + + + + + The cached TextGenerator used when generating visible Text. + + + + + The cached TextGenerator used when determine Layout. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + The Font used by the text. + + + + + The size that the Font should render at. + + + + + FontStyle used by the text. + + + + + Horizontal overflow mode. + + + + + Called by the layout system. + + + + + Line spacing, specified as a factor of font line height. A value of 1 will produce normal line spacing. + + + + + The Texture that comes from the Font. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + (Read Only) Provides information about how fonts are scale to the screen. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Should the text be allowed to auto resized. + + + + + The maximum size the text is allowed to be. 1 = infinitly large. + + + + + The minimum size the text is allowed to be. + + + + + Whether this Text will support rich text. + + + + + The string value this text will display. + + + + + Vertical overflow mode. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the [FontUpdateTracker] when the texture associated with a font is modified. + + + + + Convenience function to populate the generation setting for the text. + + The extents the text can draw in. + + Generated settings. + + + + + Convenience function to determine the vector offset of the anchor. + + + + + + See MonoBehaviour.OnDisable. + + + + + A standard toggle that has an on / off state. + + + + + Graphic affected by the toggle. + + + + + Group the toggle belongs to. + + + + + Is the toggle on. + + + + + Callback executed when the value of the toggle is changed. + + + + + Transition mode for the toggle. + + + + + See ICanvasElement.GraphicUpdateComplete. + + + + + See ICanvasElement.LayoutComplete. + + + + + See MonoBehaviour.OnDisable. + + + + + Handling for when the toggle is 'clicked'. + + Current event. + + + + Handling for when the submit key is pressed. + + Current event. + + + + Handling for when the canvas is rebuilt. + + + + + + UnityEvent callback for when a toggle is toggled. + + + + + Display settings for when a toggle is activated or deactivated. + + + + + Fade the toggle in / out. + + + + + Show / hide the toggle instantly. + + + + + A component that represents a group of Toggles. + + + + + Is it allowed that no toggle is switched on? + + + + + Returns the toggles in this group that are active. + + + The active toggles in the group. + + + + + Are any of the toggles on? + + + + + Notify the group that the given toggle is enabled. + + + + + + Register a toggle with the group. + + To register. + + + + Switch all toggles off. + + + + + Toggle to unregister. + + Unregister toggle. + + + + A utility class that can aid in the generation of meshes for the UI. + + + + + Get the number of indices set on the VertexHelper. + + + + + Current number of vertices in the buffer. + + + + + Add a triangle to the buffer. + + Index 0. + Index 1. + Index 2. + + + + Add a quad to the stream. + + 4 Vertices representing the quad. + + + + Add a stream of custom UIVertex and corrisponding indices. + + The custom stream of verts to add to the helpers internal data. + The custom stream of indices to add to the helpers internal data. + + + + Add a list of triangles to the stream. + + Vertices to add. Length should be divisible by 3. + + + + Add a single vertex to the stream. + + + + + + + + + + + + Add a single vertex to the stream. + + + + + + + + + + + + Add a single vertex to the stream. + + + + + + + + + + + + Clear all vertices from the stream. + + + + + Cleanup allocated memory. + + + + + Fill the given mesh with the stream data. + + + + + + Create a stream of UI vertex (in triangles) from the stream. + + + + + + Fill a UIVertex with data from index i of the stream. + + Vertex to populate. + Index to populate from. + + + + Set a UIVertex at the given index. + + + + + + + Layout child layout elements below each other. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + + Called by the layout system. + + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.VR.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.VR.dll new file mode 100644 index 0000000..55e7d6c Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.VR.dll differ diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.VR.xml b/HoloBot/Library/UnityAssemblies/UnityEngine.VR.xml new file mode 100644 index 0000000..31746cf --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/UnityEngine.VR.xml @@ -0,0 +1,8 @@ + + + + + UnityEngine.VR + + + diff --git a/HoloBot/Library/UnityAssemblies/UnityEngine.dll b/HoloBot/Library/UnityAssemblies/UnityEngine.dll new file mode 100644 index 0000000..e73f5d5 Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/UnityEngine.dll differ diff --git a/HoloBot/Library/UnityAssemblies/nunit.framework.dll b/HoloBot/Library/UnityAssemblies/nunit.framework.dll new file mode 100644 index 0000000..d8748ae Binary files /dev/null and b/HoloBot/Library/UnityAssemblies/nunit.framework.dll differ diff --git a/HoloBot/Library/UnityAssemblies/nunit.framework.xml b/HoloBot/Library/UnityAssemblies/nunit.framework.xml new file mode 100644 index 0000000..d79975c --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/nunit.framework.xml @@ -0,0 +1,10984 @@ + + + + nunit.framework + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + + This method is provided for use by VB developers needing to test + the value of properties with private setters. + + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestDelegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestDelegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned ints are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two unsigned longs are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two decimals are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two floats are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two doubles are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + The message to be displayed in case of failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + The actual value to test + A Constraint to be applied + The message to be displayed in case of failure + Arguments to use in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The actual value to test + A Constraint to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + The different targets a test action attribute can be applied to + + + + + Default target, which is determined by where the action attribute is attached + + + + + Target a individual test case + + + + + Target a suite of test cases + + + + + Waits for pending asynchronous operations to complete, if appropriate, + and returns a proper result of the invocation by unwrapping task results + + The raw result of the method invocation + The unwrapped result, if necessary + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + SetUpAttribute is used in a TestFixture to identify a method + that is called immediately before each test is run. It is + also used in a SetUpFixture to identify the method that is + called once, before any of the subordinate tests are run. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used in a TestFixture to identify a method that is + called immediately after each test is run. It is also used + in a SetUpFixture to identify the method that is called once, + after all subordinate tests have run. In either case, the method + is guaranteed to be called, even if an exception is thrown. + + + + + Provide actions to execute before and after tests. + + + + + When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. + + + + + Executed before each test is run + + Provides details about the test that is going to be run. + + + + Executed after each test is run + + Provides details about the test that has just been run. + + + + Provides the target for the action attribute + + The target for the action attribute + + + + Method called before each test + + Info about the test to be run + + + + Method called after each test + + Info about the test that was just run + + + + Gets or sets the ActionTargets for this attribute + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Indicates whether a result has been specified. + This is necessary because the result may be + null, so it's value cannot be checked. + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. Use + ExpectedResult by preference. + + The result. + + + + Gets or sets the expected result. + + The result. + + + + Gets a flag indicating whether an expected + result has been set. + + + + + Gets a list of categories associated with this test; + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the explicit status of the test + + + + + Gets or sets the reason for not running the test + + + + + Gets or sets the reason for not running the test. + Set has the side effect of marking the test as ignored. + + The ignore reason. + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the data source, which must + be a property, field or method of the test class itself. + + An array of the names of the factories that will provide data + + + + Construct with a Type, which must implement IEnumerable + + The Type that will provide data + + + + Construct with a Type and name. + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + Gets a list of categories for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Used on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Abstract base class used for prefixes + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + AndConstraint succeeds only if both members succeed. + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied EqualityAdapter. + NOTE: For internal use only. + + The EqualityAdapter to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. This class supplies the Using modifiers. + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is separate because the + ConstraintExpression class was generated in earlier + versions of NUnit. The two classes may be combined + in a future version. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to ignore case and return self. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by a given string + + The string to be tested + True for success, false for failure + + + + Modify the constraint to ignore case in matching. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual enumerations, collections or arrays. If both are identical, + the value is only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Display the failure information for two IEnumerables that did not match. + + The MessageWriter on which to display + The expected enumeration. + The actual enumeration + The depth of this failure in a set of nested collections + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + + EqualityAdapter that wraps an IComparer. + + + + + Returns true if the two objects can be compared by this adapter. + Generic adapter requires objects of the specified type. + + + + + EqualityAdapter that wraps an IComparer. + + + + + EqualityAdapterList represents a list of EqualityAdapters + in a common class across platforms. + + + + + ExactCountConstraint applies another constraint to each + item in a collection, succeeding only if a specified + number of items succeed. + + + + + Construct an ExactCountConstraint on top of an existing constraint + + + + + + + Apply the item constraint to each item in the collection, + succeeding only if the expected number of items pass. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + ExceptionTypeConstraint is a special version of ExactTypeConstraint + used to provided detailed info about the exception thrown in + an error message. + + + + + Constructs an ExceptionTypeConstraint + + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overriden to write additional information + in the case of an Exception. + + The MessageWriter to use + + + + FailurePoint class represents one point of failure + in an equality test. + + + + + The location of the failure + + + + + The expected value + + + + + The actual value + + + + + Indicates whether the expected value is valid + + + + + Indicates whether the actual value is valid + + + + + FailurePointList represents a set of FailurePoints + in a cross-platform way. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + Tests whether a value is less than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a enumerable, + collection or array corresponding to a single int index into the + collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a NoItemConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + Generic version of NUnitComparer + + + + + + Compare two objects of the same type + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + + + + + + Compares two objects for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + Comparison objects used in comparisons for some constraints. + + + + + List of points at which a failure occured. + + + + + RecursionDetector used to check for recursion when + evaluating self-referencing enumerables. + + + + + Compares two objects for equality within a tolerance, setting + the tolerance to the actual tolerance used if an empty + tolerance is supplied. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets the list of external comparers to be used to + test for equality. They are applied to members of + collections, in place of NUnit's own logic. + + + + + Gets the list of failure points for the last Match performed. + The list consists of objects to be interpreted by the caller. + This generally means that the caller may only make use of + objects it has placed on the list at a particular depthy. + + + + + RecursionDetector detects when a comparison + between two enumerables has reached a point + where the same objects that were previously + compared are again being compared. This allows + the caller to stop the comparison if desired. + + + + + Check whether two objects have previously + been compared, returning true if they have. + The two objects are remembered, so that a + second call will always return true. + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Constructs a CollectionOperator + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Operator that requires both it's arguments to succeed + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + Represents a constraint that succeeds if the specified + count of members of a collection match a base constraint. + + + + + Construct an ExactCountOperator for a specified count + + The expected count + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns true if the expected path and actual path match + + + + + Returns the string representation of this constraint + + + + + Transform the provided path to its canonical form so that it + may be more easily be compared with other paths. + + The original path + The path in canonical form + + + + Test whether one path in canonical form is under another. + + The first path - supposed to be the parent path + The second path - supposed to be the child path + Indicates whether case should be ignored + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + RangeConstraint tests whether two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + ReusableConstraint wraps a constraint expression after + resolving it so that it can be reused consistently. + + + + + Construct a ReusableConstraint from a constraint expression + + The expression to be resolved and reused + + + + Converts a constraint to a ReusableConstraint + + The constraint to be converted + A ReusableConstraint + + + + Returns the string representation of the constraint. + + A string representing the constraint + + + + Resolves the ReusableConstraint by returning the constraint + that it originally wrapped. + + A resolved constraint + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Test whether the constraint is satisfied by a given delegate + + Delegate returning the value to be tested + True if no exception is thrown, otherwise false + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overridden in ThrowsNothingConstraint to write + information about the exception that was actually caught. + + The writer on which the actual value is displayed + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying no tolerance. In most cases, it results + in an exact match but for floats and doubles a + default tolerance may be used. + + + + + Returns a zero Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + Modes in which the tolerance value for a comparison can be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + XmlSerializableConstraint tests whether + an object is serializable in XML format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Thrown when an assertion failed. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Class used to guard against unexpected argument values + by throwing an appropriate exception. + + + + + Throws an exception if an argument is null + + The value to be tested + The name of the argument + + + + Throws an exception if a string argument is null or empty + + The value to be tested + The name of the argument + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + + + + + + + Compares two objects of a given Type for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + Provides details about a test + + + + + Creates an instance of TestDetails + + The fixture that the test is a member of, if available. + The method that implements the test, if available. + The full name of the test. + A string representing the type of test, e.g. "Test Case". + Indicates if the test represents a suite of tests. + + + + The fixture that the test is a member of, if available. + + + + + The method that implements the test, if available. + + + + + The full name of the test. + + + + + A string representing the type of test, e.g. "Test Case". + + + + + Indicates if the test represents a suite of tests. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attribute under .NET 1.x + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + Set to true if this has an expected result + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + If true, indicates that the test case is marked explicit + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Marks this TestCase as Explicit + + + + + + Marks this TestCase as Explicit, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Returns true if the result has been set + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Provide the context information of the current test + + + + + Constructs a TestContext using the provided context dictionary + + A context dictionary + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TestAdapter representing the currently executing test in this context. + + + + + Gets a ResultAdapter representing the current result for the test + executing in this context. + + + + + Gets the directory containing the current test assembly. + + + + + Gets the directory to be used for outputing files created + by this test run. + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Constructs a TestAdapter for this context + + The context dictionary + + + + The name of the test. + + + + + The FullName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a context + + The context holding the result + + + + The TestState of current test. This maps to the ResultState + used in nunit.core and is subject to change in the future. + + + + + The TestStatus of current test. This enum will be used + in future versions of NUnit and so is to be preferred + to the TestState value. + + + + + The ResultState enum indicates the result of running a test + + + + + The result is inconclusive + + + + + The test was not runnable. + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + diff --git a/HoloBot/Library/UnityAssemblies/version.txt b/HoloBot/Library/UnityAssemblies/version.txt new file mode 100644 index 0000000..57676c1 --- /dev/null +++ b/HoloBot/Library/UnityAssemblies/version.txt @@ -0,0 +1,28 @@ +5.5.0f3:2.8.2.0 +WSAPlayer +D:/Program Files/Unity/Editor/Data/PlaybackEngines/MetroSupport/Tools/UnityEngine.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/Advertisements/UnityEngine.Advertisements.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/PlaymodeTestsRunner/UnityEngine.PlaymodeTestsRunner.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityAnalytics/UnityEngine.Analytics.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityPurchasing/UnityEngine.Purchasing.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityVR/RuntimeEditor/UnityEngine.VR.dll +D:/Program Files/Unity/Editor/Data/Managed/UnityEditor.dll +D:/Program Files/Unity/Editor/Data/Managed/Mono.Cecil.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/Advertisements/Editor/UnityEditor.Advertisements.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/EditorTestsRunner/Editor/nunit.framework.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/EditorTestsRunner/Editor/UnityEditor.EditorTestsRunner.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/PlaymodeTestsRunner/Editor/UnityEditor.PlaymodeTestsRunner.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityAnalytics/Editor/UnityEditor.Analytics.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll +D:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll +D:/Program Files/Unity/Editor/Data/Managed/UnityEditor.Graphs.dll +D:/Program Files/Unity/Editor/Data/PlaybackEngines/MetroSupport/UnityEditor.WSA.Extensions.dll +D:/Program Files/Unity/Editor/Data/PlaybackEngines/WebGLSupport/UnityEditor.WebGL.Extensions.dll +D:/Program Files/Unity/Editor/Data/PlaybackEngines/windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll +C:/Program Files (x86)/Microsoft Visual Studio Tools for Unity/2015/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll \ No newline at end of file diff --git a/HoloBot/Library/assetDatabase3 b/HoloBot/Library/assetDatabase3 new file mode 100644 index 0000000..624606c Binary files /dev/null and b/HoloBot/Library/assetDatabase3 differ diff --git a/HoloBot/Library/expandedItems b/HoloBot/Library/expandedItems new file mode 100644 index 0000000..65bf533 Binary files /dev/null and b/HoloBot/Library/expandedItems differ diff --git a/HoloBot/Library/metadata/00/00000000000000001000000000000000 b/HoloBot/Library/metadata/00/00000000000000001000000000000000 new file mode 100644 index 0000000..cc56aa5 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000001000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000001000000000000000.info b/HoloBot/Library/metadata/00/00000000000000001000000000000000.info new file mode 100644 index 0000000..0a194ff Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000001000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000002000000000000000 b/HoloBot/Library/metadata/00/00000000000000002000000000000000 new file mode 100644 index 0000000..0fe1d52 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000002000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000002000000000000000.info b/HoloBot/Library/metadata/00/00000000000000002000000000000000.info new file mode 100644 index 0000000..650a329 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000002000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000003000000000000000 b/HoloBot/Library/metadata/00/00000000000000003000000000000000 new file mode 100644 index 0000000..63776d2 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000003000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000003000000000000000.info b/HoloBot/Library/metadata/00/00000000000000003000000000000000.info new file mode 100644 index 0000000..6f1239c Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000003000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000004000000000000000 b/HoloBot/Library/metadata/00/00000000000000004000000000000000 new file mode 100644 index 0000000..c569a02 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000004000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000004000000000000000.info b/HoloBot/Library/metadata/00/00000000000000004000000000000000.info new file mode 100644 index 0000000..963c9de Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000004000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000004100000000000000 b/HoloBot/Library/metadata/00/00000000000000004100000000000000 new file mode 100644 index 0000000..9c074a9 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000004100000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000004100000000000000.info b/HoloBot/Library/metadata/00/00000000000000004100000000000000.info new file mode 100644 index 0000000..98a4ff9 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000004100000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000005000000000000000 b/HoloBot/Library/metadata/00/00000000000000005000000000000000 new file mode 100644 index 0000000..5a133ce Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000005000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000005000000000000000.info b/HoloBot/Library/metadata/00/00000000000000005000000000000000.info new file mode 100644 index 0000000..fade0c9 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000005000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000005100000000000000 b/HoloBot/Library/metadata/00/00000000000000005100000000000000 new file mode 100644 index 0000000..f7b679a Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000005100000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000005100000000000000.info b/HoloBot/Library/metadata/00/00000000000000005100000000000000.info new file mode 100644 index 0000000..baae292 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000005100000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000006000000000000000 b/HoloBot/Library/metadata/00/00000000000000006000000000000000 new file mode 100644 index 0000000..cb59bc6 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000006000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000006000000000000000.info b/HoloBot/Library/metadata/00/00000000000000006000000000000000.info new file mode 100644 index 0000000..020e772 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000006000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000006100000000000000 b/HoloBot/Library/metadata/00/00000000000000006100000000000000 new file mode 100644 index 0000000..4273418 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000006100000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000006100000000000000.info b/HoloBot/Library/metadata/00/00000000000000006100000000000000.info new file mode 100644 index 0000000..b58d6a3 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000006100000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000007000000000000000 b/HoloBot/Library/metadata/00/00000000000000007000000000000000 new file mode 100644 index 0000000..54b6eca Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000007000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000007000000000000000.info b/HoloBot/Library/metadata/00/00000000000000007000000000000000.info new file mode 100644 index 0000000..5289be6 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000007000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000007100000000000000 b/HoloBot/Library/metadata/00/00000000000000007100000000000000 new file mode 100644 index 0000000..29124ba Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000007100000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000007100000000000000.info b/HoloBot/Library/metadata/00/00000000000000007100000000000000.info new file mode 100644 index 0000000..a0a78b5 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000007100000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000008000000000000000 b/HoloBot/Library/metadata/00/00000000000000008000000000000000 new file mode 100644 index 0000000..61329b0 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000008000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000008000000000000000.info b/HoloBot/Library/metadata/00/00000000000000008000000000000000.info new file mode 100644 index 0000000..94385d4 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000008000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/00000000000000009000000000000000 b/HoloBot/Library/metadata/00/00000000000000009000000000000000 new file mode 100644 index 0000000..792cad6 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000009000000000000000 differ diff --git a/HoloBot/Library/metadata/00/00000000000000009000000000000000.info b/HoloBot/Library/metadata/00/00000000000000009000000000000000.info new file mode 100644 index 0000000..5347fb6 Binary files /dev/null and b/HoloBot/Library/metadata/00/00000000000000009000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/0000000000000000a000000000000000 b/HoloBot/Library/metadata/00/0000000000000000a000000000000000 new file mode 100644 index 0000000..d0e9337 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000a000000000000000 differ diff --git a/HoloBot/Library/metadata/00/0000000000000000a000000000000000.info b/HoloBot/Library/metadata/00/0000000000000000a000000000000000.info new file mode 100644 index 0000000..32a7c62 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000a000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/0000000000000000a100000000000000 b/HoloBot/Library/metadata/00/0000000000000000a100000000000000 new file mode 100644 index 0000000..a3afc02 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000a100000000000000 differ diff --git a/HoloBot/Library/metadata/00/0000000000000000a100000000000000.info b/HoloBot/Library/metadata/00/0000000000000000a100000000000000.info new file mode 100644 index 0000000..0827fee Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000a100000000000000.info differ diff --git a/HoloBot/Library/metadata/00/0000000000000000b000000000000000 b/HoloBot/Library/metadata/00/0000000000000000b000000000000000 new file mode 100644 index 0000000..c51e076 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000b000000000000000 differ diff --git a/HoloBot/Library/metadata/00/0000000000000000b000000000000000.info b/HoloBot/Library/metadata/00/0000000000000000b000000000000000.info new file mode 100644 index 0000000..54067b1 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000b000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/0000000000000000c000000000000000 b/HoloBot/Library/metadata/00/0000000000000000c000000000000000 new file mode 100644 index 0000000..ab2f1d2 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000c000000000000000 differ diff --git a/HoloBot/Library/metadata/00/0000000000000000c000000000000000.info b/HoloBot/Library/metadata/00/0000000000000000c000000000000000.info new file mode 100644 index 0000000..e71d9d3 Binary files /dev/null and b/HoloBot/Library/metadata/00/0000000000000000c000000000000000.info differ diff --git a/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83 b/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83 new file mode 100644 index 0000000..3366f69 Binary files /dev/null and b/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83 differ diff --git a/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83.info b/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83.info new file mode 100644 index 0000000..bffbd8d Binary files /dev/null and b/HoloBot/Library/metadata/00/007c74dfb2f47d54cb03722769c30a83.info differ diff --git a/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e b/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e new file mode 100644 index 0000000..5d112de Binary files /dev/null and b/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e differ diff --git a/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e.info b/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e.info new file mode 100644 index 0000000..f950d4f Binary files /dev/null and b/HoloBot/Library/metadata/00/00b1b81cca4d57b4a96c0073ab02641e.info differ diff --git a/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589 b/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589 new file mode 100644 index 0000000..7926c74 Binary files /dev/null and b/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589 differ diff --git a/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589.info b/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589.info new file mode 100644 index 0000000..4207291 Binary files /dev/null and b/HoloBot/Library/metadata/00/00eb2a0ee0d6a9f4ea1f7897e23e1589.info differ diff --git a/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644 b/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644 new file mode 100644 index 0000000..c3020ca Binary files /dev/null and b/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644 differ diff --git a/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644.info b/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644.info new file mode 100644 index 0000000..e371d9d Binary files /dev/null and b/HoloBot/Library/metadata/01/0118fa4f1c88b4640b193eca2c181644.info differ diff --git a/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc b/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc new file mode 100644 index 0000000..385d4ea Binary files /dev/null and b/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc differ diff --git a/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc.info b/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc.info new file mode 100644 index 0000000..fa32e8f Binary files /dev/null and b/HoloBot/Library/metadata/01/012e902635965e648a446fdb85fbc0bc.info differ diff --git a/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862 b/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862 new file mode 100644 index 0000000..ca4d645 Binary files /dev/null and b/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862 differ diff --git a/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862.info b/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862.info new file mode 100644 index 0000000..79d72d6 Binary files /dev/null and b/HoloBot/Library/metadata/01/019bc2c61963f164f881b0dfbb4c4862.info differ diff --git a/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8 b/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8 new file mode 100644 index 0000000..3d4e863 Binary files /dev/null and b/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8 differ diff --git a/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8.info b/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8.info new file mode 100644 index 0000000..b9ebc3c Binary files /dev/null and b/HoloBot/Library/metadata/02/022450106439a8946ae18a9e20cc92d8.info differ diff --git a/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f b/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f new file mode 100644 index 0000000..23958e1 Binary files /dev/null and b/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f differ diff --git a/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f.info b/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f.info new file mode 100644 index 0000000..67bdf24 Binary files /dev/null and b/HoloBot/Library/metadata/02/026247228427a694eae4fa19eb6ae09f.info differ diff --git a/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63 b/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63 new file mode 100644 index 0000000..e2bfd7f Binary files /dev/null and b/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63 differ diff --git a/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63.info b/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63.info new file mode 100644 index 0000000..ada610c Binary files /dev/null and b/HoloBot/Library/metadata/02/029ac67c65e8d7d428e72c96a230fe63.info differ diff --git a/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4 b/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4 new file mode 100644 index 0000000..27bf127 Binary files /dev/null and b/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4 differ diff --git a/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4.info b/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4.info new file mode 100644 index 0000000..77e4f1c Binary files /dev/null and b/HoloBot/Library/metadata/02/02ef53b3a93625840aa0bdadd41119c4.info differ diff --git a/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433 b/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433 new file mode 100644 index 0000000..c7368f5 Binary files /dev/null and b/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433 differ diff --git a/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433.info b/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433.info new file mode 100644 index 0000000..cfaac33 Binary files /dev/null and b/HoloBot/Library/metadata/04/04160e0c231a5714c982df6de2d09433.info differ diff --git a/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6 b/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6 new file mode 100644 index 0000000..77050de Binary files /dev/null and b/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6 differ diff --git a/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6.info b/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6.info new file mode 100644 index 0000000..3744653 Binary files /dev/null and b/HoloBot/Library/metadata/04/04428b85e80f24744866d700e45435e6.info differ diff --git a/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746 b/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746 new file mode 100644 index 0000000..22c39a0 Binary files /dev/null and b/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746 differ diff --git a/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746.info b/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746.info new file mode 100644 index 0000000..d19659e Binary files /dev/null and b/HoloBot/Library/metadata/04/04c537c71d256594a951d2b914a48746.info differ diff --git a/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111 b/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111 new file mode 100644 index 0000000..b6d36b2 Binary files /dev/null and b/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111 differ diff --git a/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111.info b/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111.info new file mode 100644 index 0000000..16994e0 Binary files /dev/null and b/HoloBot/Library/metadata/05/0568eec7b4b96714a9b3e3616d2c4111.info differ diff --git a/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92 b/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92 new file mode 100644 index 0000000..6879129 Binary files /dev/null and b/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92 differ diff --git a/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92.info b/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92.info new file mode 100644 index 0000000..b79a8e0 Binary files /dev/null and b/HoloBot/Library/metadata/05/057493d169444074387c9a5ca1c99e92.info differ diff --git a/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf b/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf new file mode 100644 index 0000000..d47336d Binary files /dev/null and b/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf differ diff --git a/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf.info b/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf.info new file mode 100644 index 0000000..8fa5923 Binary files /dev/null and b/HoloBot/Library/metadata/05/05d1324a6d6a0d248848b4042ad6d6bf.info differ diff --git a/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e b/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e new file mode 100644 index 0000000..7129dd1 Binary files /dev/null and b/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e differ diff --git a/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e.info b/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e.info new file mode 100644 index 0000000..3dea64a Binary files /dev/null and b/HoloBot/Library/metadata/06/0624081163014824eb575250d78c791e.info differ diff --git a/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431 b/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431 new file mode 100644 index 0000000..f690577 Binary files /dev/null and b/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431 differ diff --git a/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431.info b/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431.info new file mode 100644 index 0000000..a57f999 Binary files /dev/null and b/HoloBot/Library/metadata/06/066461858c98cfa4f84fadee8ef21431.info differ diff --git a/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810 b/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810 new file mode 100644 index 0000000..544ff9d Binary files /dev/null and b/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810 differ diff --git a/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810.info b/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810.info new file mode 100644 index 0000000..3f51f90 Binary files /dev/null and b/HoloBot/Library/metadata/06/06790e211e4a6df409b1e04bc91c4810.info differ diff --git a/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac b/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac new file mode 100644 index 0000000..462ca57 Binary files /dev/null and b/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac differ diff --git a/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac.info b/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac.info new file mode 100644 index 0000000..96fe153 Binary files /dev/null and b/HoloBot/Library/metadata/07/075e3abbbf0bde044bb4bf8382bb45ac.info differ diff --git a/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a b/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a new file mode 100644 index 0000000..5a78d1c Binary files /dev/null and b/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a differ diff --git a/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a.info b/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a.info new file mode 100644 index 0000000..322c003 Binary files /dev/null and b/HoloBot/Library/metadata/08/0803619fdf239e145a93a8523d180b3a.info differ diff --git a/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db b/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db new file mode 100644 index 0000000..7c16734 Binary files /dev/null and b/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db differ diff --git a/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db.info b/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db.info new file mode 100644 index 0000000..1182e0b Binary files /dev/null and b/HoloBot/Library/metadata/08/084b4f8c431905d4cac0e4b5f2a3b6db.info differ diff --git a/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709 b/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709 new file mode 100644 index 0000000..3779d65 Binary files /dev/null and b/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709 differ diff --git a/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709.info b/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709.info new file mode 100644 index 0000000..4efcf15 Binary files /dev/null and b/HoloBot/Library/metadata/08/088ad37b7824ce1449ef005936680709.info differ diff --git a/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9 b/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9 new file mode 100644 index 0000000..c30ed87 Binary files /dev/null and b/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9 differ diff --git a/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9.info b/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9.info new file mode 100644 index 0000000..e9326ef Binary files /dev/null and b/HoloBot/Library/metadata/09/090295e36901c94458160cd1893003e9.info differ diff --git a/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6 b/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6 new file mode 100644 index 0000000..3629e1c Binary files /dev/null and b/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6 differ diff --git a/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6.info b/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6.info new file mode 100644 index 0000000..4f6511d Binary files /dev/null and b/HoloBot/Library/metadata/09/09a4040d7f60bb74695ce2df9099f6c6.info differ diff --git a/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe b/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe new file mode 100644 index 0000000..7072399 Binary files /dev/null and b/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe differ diff --git a/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe.info b/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe.info new file mode 100644 index 0000000..ab17859 Binary files /dev/null and b/HoloBot/Library/metadata/09/09ea77b2be8b62b4a9c86c123cd5ddbe.info differ diff --git a/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702 b/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702 new file mode 100644 index 0000000..0aca140 Binary files /dev/null and b/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702 differ diff --git a/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702.info b/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702.info new file mode 100644 index 0000000..8078286 Binary files /dev/null and b/HoloBot/Library/metadata/0b/0b08288019c3f0540a624e2c82302702.info differ diff --git a/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89 b/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89 new file mode 100644 index 0000000..b97f5a4 Binary files /dev/null and b/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89 differ diff --git a/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89.info b/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89.info new file mode 100644 index 0000000..c289e1f Binary files /dev/null and b/HoloBot/Library/metadata/0b/0ba440176c08a3c4ebeb59f52a092c89.info differ diff --git a/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89 b/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89 new file mode 100644 index 0000000..7f95527 Binary files /dev/null and b/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89 differ diff --git a/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89.info b/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89.info new file mode 100644 index 0000000..65a7f28 Binary files /dev/null and b/HoloBot/Library/metadata/0c/0c043c1caff935c4ab375545540e6f89.info differ diff --git a/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d b/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d new file mode 100644 index 0000000..b49565e Binary files /dev/null and b/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d differ diff --git a/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d.info b/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d.info new file mode 100644 index 0000000..9fc5940 Binary files /dev/null and b/HoloBot/Library/metadata/0c/0c7446f1018a0e34fbf50d7ef2098a9d.info differ diff --git a/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2 b/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2 new file mode 100644 index 0000000..217f1e0 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2 differ diff --git a/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2.info b/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2.info new file mode 100644 index 0000000..4430491 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d08dd59087697b44a68a02cc9a7c3a2.info differ diff --git a/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3 b/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3 new file mode 100644 index 0000000..a2424f7 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3 differ diff --git a/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3.info b/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3.info new file mode 100644 index 0000000..f731b36 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d24e90a445079545850f6654903acb3.info differ diff --git a/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a b/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a new file mode 100644 index 0000000..bd1d1e4 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a differ diff --git a/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info b/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info new file mode 100644 index 0000000..4b71158 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info differ diff --git a/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e b/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e new file mode 100644 index 0000000..bcee942 Binary files /dev/null and b/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e differ diff --git a/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e.info b/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e.info new file mode 100644 index 0000000..de0c04c Binary files /dev/null and b/HoloBot/Library/metadata/0d/0decd33ba8702954885a62b5bc1a778e.info differ diff --git a/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067 b/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067 new file mode 100644 index 0000000..b73a3ec Binary files /dev/null and b/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067 differ diff --git a/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067.info b/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067.info new file mode 100644 index 0000000..c647eaf Binary files /dev/null and b/HoloBot/Library/metadata/0d/0df4832d89bd70c48b288941e8182067.info differ diff --git a/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03 b/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03 new file mode 100644 index 0000000..e9eac7a Binary files /dev/null and b/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03 differ diff --git a/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03.info b/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03.info new file mode 100644 index 0000000..58ef36c Binary files /dev/null and b/HoloBot/Library/metadata/0e/0e5fab096886797478a02d8021f8ee03.info differ diff --git a/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0 b/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0 new file mode 100644 index 0000000..3d08acf Binary files /dev/null and b/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0 differ diff --git a/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0.info b/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0.info new file mode 100644 index 0000000..99f4a4a Binary files /dev/null and b/HoloBot/Library/metadata/0e/0e8512d51bf9aa144a036c6305dd66c0.info differ diff --git a/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b b/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b new file mode 100644 index 0000000..4171916 Binary files /dev/null and b/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b differ diff --git a/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b.info b/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b.info new file mode 100644 index 0000000..65c9e62 Binary files /dev/null and b/HoloBot/Library/metadata/0e/0ec6bdfc4a3a14f43bf2f7c01a6b6b6b.info differ diff --git a/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53 b/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53 new file mode 100644 index 0000000..edbf521 Binary files /dev/null and b/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53 differ diff --git a/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53.info b/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53.info new file mode 100644 index 0000000..0e292a6 Binary files /dev/null and b/HoloBot/Library/metadata/0f/0fc614944e525ec4e9d20d19bf6c3f53.info differ diff --git a/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300 b/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300 new file mode 100644 index 0000000..3bb854b Binary files /dev/null and b/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300 differ diff --git a/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300.info b/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300.info new file mode 100644 index 0000000..39b73fc Binary files /dev/null and b/HoloBot/Library/metadata/0f/0fe38ed55fd84d548aadc453d4485300.info differ diff --git a/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3 b/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3 new file mode 100644 index 0000000..20dbe4a Binary files /dev/null and b/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3 differ diff --git a/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3.info b/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3.info new file mode 100644 index 0000000..a39f63d Binary files /dev/null and b/HoloBot/Library/metadata/10/1017ef825d041c749bab30bf03aca0d3.info differ diff --git a/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578 b/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578 new file mode 100644 index 0000000..b43abe2 Binary files /dev/null and b/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578 differ diff --git a/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578.info b/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578.info new file mode 100644 index 0000000..65f657e Binary files /dev/null and b/HoloBot/Library/metadata/11/11f25bddcb4fa2849ab8e795ecb63578.info differ diff --git a/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078 b/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078 new file mode 100644 index 0000000..f454dff Binary files /dev/null and b/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078 differ diff --git a/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078.info b/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078.info new file mode 100644 index 0000000..ec15aa3 Binary files /dev/null and b/HoloBot/Library/metadata/12/1240e6ed74b88ff4fa549db17c4a7078.info differ diff --git a/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c b/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c new file mode 100644 index 0000000..c8c3127 Binary files /dev/null and b/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c differ diff --git a/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c.info b/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c.info new file mode 100644 index 0000000..50c9ea6 Binary files /dev/null and b/HoloBot/Library/metadata/12/128255248c91cb141a6d3c07f93ef90c.info differ diff --git a/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4 b/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4 new file mode 100644 index 0000000..f6187cf Binary files /dev/null and b/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4 differ diff --git a/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4.info b/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4.info new file mode 100644 index 0000000..51c1916 Binary files /dev/null and b/HoloBot/Library/metadata/12/12c91ca558f50a14aac6b7157c71d2f4.info differ diff --git a/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320 b/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320 new file mode 100644 index 0000000..77a3c31 Binary files /dev/null and b/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320 differ diff --git a/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320.info b/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320.info new file mode 100644 index 0000000..a2879a1 Binary files /dev/null and b/HoloBot/Library/metadata/12/12e2218b44bb5d046b63543ecbec9320.info differ diff --git a/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 b/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 new file mode 100644 index 0000000..93c3d23 Binary files /dev/null and b/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 differ diff --git a/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info b/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info new file mode 100644 index 0000000..a0875a0 Binary files /dev/null and b/HoloBot/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info differ diff --git a/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62 b/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62 new file mode 100644 index 0000000..8c23859 Binary files /dev/null and b/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62 differ diff --git a/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62.info b/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62.info new file mode 100644 index 0000000..9e833f2 Binary files /dev/null and b/HoloBot/Library/metadata/13/1350e83623c005741ad0d1b09834ed62.info differ diff --git a/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916 b/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916 new file mode 100644 index 0000000..90f6f63 Binary files /dev/null and b/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916 differ diff --git a/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916.info b/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916.info new file mode 100644 index 0000000..93c7d2e Binary files /dev/null and b/HoloBot/Library/metadata/13/13d883c0118351e4890753200e0ac916.info differ diff --git a/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679 b/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679 new file mode 100644 index 0000000..f77a78f Binary files /dev/null and b/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679 differ diff --git a/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679.info b/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679.info new file mode 100644 index 0000000..17233a2 Binary files /dev/null and b/HoloBot/Library/metadata/16/1609394dd4b2b524b9bc218ecb053679.info differ diff --git a/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f b/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f new file mode 100644 index 0000000..81ec9f6 Binary files /dev/null and b/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f differ diff --git a/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f.info b/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f.info new file mode 100644 index 0000000..d8d0cc4 Binary files /dev/null and b/HoloBot/Library/metadata/17/17173c08a15a85a4ca42fe8d17e9c94f.info differ diff --git a/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4 b/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4 new file mode 100644 index 0000000..6e84dd1 Binary files /dev/null and b/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4 differ diff --git a/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4.info b/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4.info new file mode 100644 index 0000000..3a9a46d Binary files /dev/null and b/HoloBot/Library/metadata/17/17aa48f2d64d22c4d8a6c63e08a13cd4.info differ diff --git a/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497 b/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497 new file mode 100644 index 0000000..e532da1 Binary files /dev/null and b/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497 differ diff --git a/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497.info b/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497.info new file mode 100644 index 0000000..975736b Binary files /dev/null and b/HoloBot/Library/metadata/17/17b35d8a8e5e92d4ebcf1933bf853497.info differ diff --git a/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999 b/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999 new file mode 100644 index 0000000..fee8282 Binary files /dev/null and b/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999 differ diff --git a/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999.info b/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999.info new file mode 100644 index 0000000..ca41306 Binary files /dev/null and b/HoloBot/Library/metadata/18/182f095ff0116ff46ac2a23cb3587999.info differ diff --git a/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83 b/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83 new file mode 100644 index 0000000..290ad83 Binary files /dev/null and b/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83 differ diff --git a/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83.info b/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83.info new file mode 100644 index 0000000..1ca3b12 Binary files /dev/null and b/HoloBot/Library/metadata/18/184d6e9ce2d89844489583805253eb83.info differ diff --git a/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5 b/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5 new file mode 100644 index 0000000..4dac7bd Binary files /dev/null and b/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5 differ diff --git a/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5.info b/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5.info new file mode 100644 index 0000000..72cc826 Binary files /dev/null and b/HoloBot/Library/metadata/18/185fe78bcbc5dd54386f1bdd51c449b5.info differ diff --git a/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc b/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc new file mode 100644 index 0000000..edf9b4d Binary files /dev/null and b/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc differ diff --git a/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc.info b/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc.info new file mode 100644 index 0000000..b8c9295 Binary files /dev/null and b/HoloBot/Library/metadata/19/193034ff4e72d6441b8b2bf64e5050bc.info differ diff --git a/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d b/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d new file mode 100644 index 0000000..a9c6018 Binary files /dev/null and b/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d differ diff --git a/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d.info b/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d.info new file mode 100644 index 0000000..b280d46 Binary files /dev/null and b/HoloBot/Library/metadata/19/19bbf18da0424824c80f866d003d3c2d.info differ diff --git a/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af b/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af new file mode 100644 index 0000000..02496b7 Binary files /dev/null and b/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af differ diff --git a/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af.info b/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af.info new file mode 100644 index 0000000..e3da62b Binary files /dev/null and b/HoloBot/Library/metadata/1a/1a454c1fc56751649ab5a76175b205af.info differ diff --git a/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b b/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b new file mode 100644 index 0000000..90d4813 Binary files /dev/null and b/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b differ diff --git a/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b.info b/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b.info new file mode 100644 index 0000000..273b383 Binary files /dev/null and b/HoloBot/Library/metadata/1a/1a7918d6f0f76154c987b014399c7e1b.info differ diff --git a/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404 b/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404 new file mode 100644 index 0000000..54b9af9 Binary files /dev/null and b/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404 differ diff --git a/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404.info b/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404.info new file mode 100644 index 0000000..f1fface Binary files /dev/null and b/HoloBot/Library/metadata/1b/1bd28f662c870fd4a9b7ce081e2d7404.info differ diff --git a/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17 b/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17 new file mode 100644 index 0000000..8de92de Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17 differ diff --git a/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17.info b/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17.info new file mode 100644 index 0000000..6acab50 Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c655338633f4544180b3d90a593ac17.info differ diff --git a/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 b/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 new file mode 100644 index 0000000..92a9f48 Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 differ diff --git a/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info b/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info new file mode 100644 index 0000000..5700bba Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info differ diff --git a/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988 b/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988 new file mode 100644 index 0000000..4df159b Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988 differ diff --git a/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988.info b/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988.info new file mode 100644 index 0000000..74c07ba Binary files /dev/null and b/HoloBot/Library/metadata/1c/1c78697a7c77f7a49873eb4602b26988.info differ diff --git a/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79 b/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79 new file mode 100644 index 0000000..04ec830 Binary files /dev/null and b/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79 differ diff --git a/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79.info b/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79.info new file mode 100644 index 0000000..81ae699 Binary files /dev/null and b/HoloBot/Library/metadata/1e/1e1644ee9122f0947bb1a04f2da54d79.info differ diff --git a/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95 b/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95 new file mode 100644 index 0000000..e52fe04 Binary files /dev/null and b/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95 differ diff --git a/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95.info b/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95.info new file mode 100644 index 0000000..936385b Binary files /dev/null and b/HoloBot/Library/metadata/1e/1e18cc5955663234eac0b82dbb83df95.info differ diff --git a/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f b/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f new file mode 100644 index 0000000..2de0b20 Binary files /dev/null and b/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f differ diff --git a/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f.info b/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f.info new file mode 100644 index 0000000..34c83b5 Binary files /dev/null and b/HoloBot/Library/metadata/1e/1ef5f7f70af31a94086ff3d7f0a1719f.info differ diff --git a/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2 b/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2 new file mode 100644 index 0000000..8527a2b Binary files /dev/null and b/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2 differ diff --git a/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2.info b/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2.info new file mode 100644 index 0000000..c82d8cc Binary files /dev/null and b/HoloBot/Library/metadata/1f/1f494bd132b39f443afdf5e8ecf1edd2.info differ diff --git a/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c b/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c new file mode 100644 index 0000000..34166bf Binary files /dev/null and b/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c differ diff --git a/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c.info b/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c.info new file mode 100644 index 0000000..61a75c9 Binary files /dev/null and b/HoloBot/Library/metadata/20/2023971f1b5b1804487cddbd72a9fd8c.info differ diff --git a/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a b/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a new file mode 100644 index 0000000..2eb1de6 Binary files /dev/null and b/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a differ diff --git a/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a.info b/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a.info new file mode 100644 index 0000000..9b08ac4 Binary files /dev/null and b/HoloBot/Library/metadata/20/2025d691196b79c439c9dc12d7544d6a.info differ diff --git a/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc b/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc new file mode 100644 index 0000000..625e0b0 Binary files /dev/null and b/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc differ diff --git a/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc.info b/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc.info new file mode 100644 index 0000000..bbc7fb0 Binary files /dev/null and b/HoloBot/Library/metadata/20/20553dcf305b52a4e84f5e4f56e5afdc.info differ diff --git a/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43 b/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43 new file mode 100644 index 0000000..ffeaea0 Binary files /dev/null and b/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43 differ diff --git a/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43.info b/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43.info new file mode 100644 index 0000000..c50b57f Binary files /dev/null and b/HoloBot/Library/metadata/21/2149d2c0c0e35f64b8c902c21f099b43.info differ diff --git a/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1 b/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1 new file mode 100644 index 0000000..a1d5d1a Binary files /dev/null and b/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1 differ diff --git a/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1.info b/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1.info new file mode 100644 index 0000000..9bc2240 Binary files /dev/null and b/HoloBot/Library/metadata/21/21534efce7a96fa4fb4f37f1778223f1.info differ diff --git a/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 b/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 new file mode 100644 index 0000000..09073dc Binary files /dev/null and b/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 differ diff --git a/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info b/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info new file mode 100644 index 0000000..084273e Binary files /dev/null and b/HoloBot/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info differ diff --git a/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31 b/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31 new file mode 100644 index 0000000..c6758fd Binary files /dev/null and b/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31 differ diff --git a/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31.info b/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31.info new file mode 100644 index 0000000..9a07d1c Binary files /dev/null and b/HoloBot/Library/metadata/21/21fa6729dce79604cb2e68a4e4975f31.info differ diff --git a/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe b/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe new file mode 100644 index 0000000..7eb695d Binary files /dev/null and b/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe differ diff --git a/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe.info b/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe.info new file mode 100644 index 0000000..ad62e12 Binary files /dev/null and b/HoloBot/Library/metadata/22/2205462c259b0af4c911d6da99c833fe.info differ diff --git a/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1 b/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1 new file mode 100644 index 0000000..2bfefe6 Binary files /dev/null and b/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1 differ diff --git a/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1.info b/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1.info new file mode 100644 index 0000000..41b387b Binary files /dev/null and b/HoloBot/Library/metadata/23/230967124dee9a3448af0e8cd24335a1.info differ diff --git a/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33 b/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33 new file mode 100644 index 0000000..aa2dd8f Binary files /dev/null and b/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33 differ diff --git a/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33.info b/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33.info new file mode 100644 index 0000000..9bc033f Binary files /dev/null and b/HoloBot/Library/metadata/23/23ade7c375098aa4aa6f34f6a8b9df33.info differ diff --git a/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11 b/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11 new file mode 100644 index 0000000..a974851 Binary files /dev/null and b/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11 differ diff --git a/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11.info b/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11.info new file mode 100644 index 0000000..6e77155 Binary files /dev/null and b/HoloBot/Library/metadata/23/23beda61782381042848d512379b9e11.info differ diff --git a/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320 b/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320 new file mode 100644 index 0000000..b7c4c27 Binary files /dev/null and b/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320 differ diff --git a/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320.info b/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320.info new file mode 100644 index 0000000..2f8466c Binary files /dev/null and b/HoloBot/Library/metadata/24/248028be8e1c62249af53fb6f7285320.info differ diff --git a/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869 b/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869 new file mode 100644 index 0000000..38316f3 Binary files /dev/null and b/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869 differ diff --git a/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869.info b/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869.info new file mode 100644 index 0000000..99f35ef Binary files /dev/null and b/HoloBot/Library/metadata/25/2518ccd0b2421954794513944e3a6869.info differ diff --git a/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464 b/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464 new file mode 100644 index 0000000..f977b8f Binary files /dev/null and b/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464 differ diff --git a/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464.info b/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464.info new file mode 100644 index 0000000..180d570 Binary files /dev/null and b/HoloBot/Library/metadata/26/262cbdd7913bbc84fb307a7e7d990464.info differ diff --git a/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 b/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 new file mode 100644 index 0000000..1c6c02c Binary files /dev/null and b/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 differ diff --git a/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info b/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info new file mode 100644 index 0000000..e9959ab Binary files /dev/null and b/HoloBot/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info differ diff --git a/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243 b/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243 new file mode 100644 index 0000000..650865c Binary files /dev/null and b/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243 differ diff --git a/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243.info b/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243.info new file mode 100644 index 0000000..a9af90e Binary files /dev/null and b/HoloBot/Library/metadata/26/26bc989fcb4ecec448e14a7e563ef243.info differ diff --git a/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d b/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d new file mode 100644 index 0000000..e75389f Binary files /dev/null and b/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d differ diff --git a/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d.info b/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d.info new file mode 100644 index 0000000..2056e10 Binary files /dev/null and b/HoloBot/Library/metadata/28/2839abb4143744c42a5a03638402bf3d.info differ diff --git a/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523 b/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523 new file mode 100644 index 0000000..8be5174 Binary files /dev/null and b/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523 differ diff --git a/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523.info b/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523.info new file mode 100644 index 0000000..a17cf7a Binary files /dev/null and b/HoloBot/Library/metadata/28/2871ca123c6a7e74288fbe655c491523.info differ diff --git a/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2 b/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2 new file mode 100644 index 0000000..cd98f1e Binary files /dev/null and b/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2 differ diff --git a/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2.info b/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2.info new file mode 100644 index 0000000..a715256 Binary files /dev/null and b/HoloBot/Library/metadata/28/28c9a4d28874d1e4ba2e1e8829d617e2.info differ diff --git a/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210 b/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210 new file mode 100644 index 0000000..f456c3d Binary files /dev/null and b/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210 differ diff --git a/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210.info b/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210.info new file mode 100644 index 0000000..fb1355f Binary files /dev/null and b/HoloBot/Library/metadata/29/294730f65392a4646bd60a17686da210.info differ diff --git a/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc b/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc new file mode 100644 index 0000000..80a3a87 Binary files /dev/null and b/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc differ diff --git a/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc.info b/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc.info new file mode 100644 index 0000000..a9cd8da Binary files /dev/null and b/HoloBot/Library/metadata/2a/2a056e2bb89e0134daaf49e5f183e5dc.info differ diff --git a/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42 b/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42 new file mode 100644 index 0000000..8ab5c50 Binary files /dev/null and b/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42 differ diff --git a/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42.info b/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42.info new file mode 100644 index 0000000..452c193 Binary files /dev/null and b/HoloBot/Library/metadata/2a/2a13e2bc9949e6a468ae6b0a20d8bb42.info differ diff --git a/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375 b/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375 new file mode 100644 index 0000000..d6fce4d Binary files /dev/null and b/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375 differ diff --git a/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375.info b/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375.info new file mode 100644 index 0000000..f25c318 Binary files /dev/null and b/HoloBot/Library/metadata/2a/2ac869b7c13e5a542b695b17a48d0375.info differ diff --git a/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee b/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee new file mode 100644 index 0000000..ae2c6f1 Binary files /dev/null and b/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee differ diff --git a/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee.info b/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee.info new file mode 100644 index 0000000..e5f6eef Binary files /dev/null and b/HoloBot/Library/metadata/2b/2be8bd2ebd8277c448d6d81c75517fee.info differ diff --git a/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a b/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a new file mode 100644 index 0000000..2bdb9a7 Binary files /dev/null and b/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a differ diff --git a/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a.info b/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a.info new file mode 100644 index 0000000..4bd070b Binary files /dev/null and b/HoloBot/Library/metadata/2d/2d5ae279fed5a7144b60f28f84e0879a.info differ diff --git a/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4 b/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4 new file mode 100644 index 0000000..1b0f778 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4 differ diff --git a/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4.info b/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4.info new file mode 100644 index 0000000..de27db4 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2e3fe1de8ee419a4fb5485ac62ee16a4.info differ diff --git a/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113 b/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113 new file mode 100644 index 0000000..95b0b83 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113 differ diff --git a/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113.info b/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113.info new file mode 100644 index 0000000..2e6422e Binary files /dev/null and b/HoloBot/Library/metadata/2e/2e96a9402590e304b8655c7ad7962113.info differ diff --git a/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928 b/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928 new file mode 100644 index 0000000..f247457 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928 differ diff --git a/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928.info b/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928.info new file mode 100644 index 0000000..1d3cdc0 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ed75ffdf9031c94e8bce4b3d17b9928.info differ diff --git a/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c b/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c new file mode 100644 index 0000000..b671a72 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c differ diff --git a/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c.info b/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c.info new file mode 100644 index 0000000..bab5336 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ee40a8c19496a74d900d015f16f4d8c.info differ diff --git a/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e b/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e new file mode 100644 index 0000000..648f904 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e differ diff --git a/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e.info b/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e.info new file mode 100644 index 0000000..fe01fd1 Binary files /dev/null and b/HoloBot/Library/metadata/2e/2ee5b4b9363ca7b4b82104bda998b64e.info differ diff --git a/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e b/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e new file mode 100644 index 0000000..a7a8ed0 Binary files /dev/null and b/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e differ diff --git a/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e.info b/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e.info new file mode 100644 index 0000000..a012a2f Binary files /dev/null and b/HoloBot/Library/metadata/2f/2f2c4c2163986d1418d8447c2d9ae90e.info differ diff --git a/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 b/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 new file mode 100644 index 0000000..77f838e Binary files /dev/null and b/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 differ diff --git a/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info b/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info new file mode 100644 index 0000000..b7d8e89 Binary files /dev/null and b/HoloBot/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info differ diff --git a/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 b/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 new file mode 100644 index 0000000..bcface1 Binary files /dev/null and b/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 differ diff --git a/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info b/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info new file mode 100644 index 0000000..2548157 Binary files /dev/null and b/HoloBot/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info differ diff --git a/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2 b/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2 new file mode 100644 index 0000000..80b24f9 Binary files /dev/null and b/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2 differ diff --git a/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2.info b/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2.info new file mode 100644 index 0000000..072ab85 Binary files /dev/null and b/HoloBot/Library/metadata/30/30a212a88e1063a428c85e50b1e427f2.info differ diff --git a/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 b/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 new file mode 100644 index 0000000..cf8eb7b Binary files /dev/null and b/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 differ diff --git a/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info b/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info new file mode 100644 index 0000000..f353132 Binary files /dev/null and b/HoloBot/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info differ diff --git a/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 b/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 new file mode 100644 index 0000000..f5fc866 Binary files /dev/null and b/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 differ diff --git a/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info b/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info new file mode 100644 index 0000000..65d5010 Binary files /dev/null and b/HoloBot/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info differ diff --git a/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97 b/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97 new file mode 100644 index 0000000..37273aa Binary files /dev/null and b/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97 differ diff --git a/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97.info b/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97.info new file mode 100644 index 0000000..48d1304 Binary files /dev/null and b/HoloBot/Library/metadata/33/3374bcd48d8266b41b7b441750847e97.info differ diff --git a/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c b/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c new file mode 100644 index 0000000..be68b91 Binary files /dev/null and b/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c differ diff --git a/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c.info b/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c.info new file mode 100644 index 0000000..3b052ff Binary files /dev/null and b/HoloBot/Library/metadata/34/346ba241716cdef4bafa77d74f3b4f9c.info differ diff --git a/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca b/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca new file mode 100644 index 0000000..45648d1 Binary files /dev/null and b/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca differ diff --git a/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca.info b/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca.info new file mode 100644 index 0000000..c9b31d0 Binary files /dev/null and b/HoloBot/Library/metadata/35/3561a5b48dcc4db428b1678be90a07ca.info differ diff --git a/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363 b/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363 new file mode 100644 index 0000000..2c96615 Binary files /dev/null and b/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363 differ diff --git a/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363.info b/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363.info new file mode 100644 index 0000000..4a7f655 Binary files /dev/null and b/HoloBot/Library/metadata/35/35860c998c21740428c71f14e4d1c363.info differ diff --git a/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b b/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b new file mode 100644 index 0000000..f88fbf2 Binary files /dev/null and b/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b differ diff --git a/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b.info b/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b.info new file mode 100644 index 0000000..fe8119a Binary files /dev/null and b/HoloBot/Library/metadata/36/36553f0bb12305447b639cf2d682cf1b.info differ diff --git a/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e b/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e new file mode 100644 index 0000000..faba2a8 Binary files /dev/null and b/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e differ diff --git a/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e.info b/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e.info new file mode 100644 index 0000000..5dcaebc Binary files /dev/null and b/HoloBot/Library/metadata/36/36bb423d5e763fe4a98e55fef096b59e.info differ diff --git a/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2 b/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2 new file mode 100644 index 0000000..635e08e Binary files /dev/null and b/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2 differ diff --git a/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2.info b/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2.info new file mode 100644 index 0000000..43a4383 Binary files /dev/null and b/HoloBot/Library/metadata/37/37870ab7a81bfb74b9fa277cf45b06d2.info differ diff --git a/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1 b/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1 new file mode 100644 index 0000000..b5ae838 Binary files /dev/null and b/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1 differ diff --git a/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1.info b/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1.info new file mode 100644 index 0000000..587a036 Binary files /dev/null and b/HoloBot/Library/metadata/37/37fbbbfbb0a44c64094402bdf4aff2a1.info differ diff --git a/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85 b/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85 new file mode 100644 index 0000000..6398f20 Binary files /dev/null and b/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85 differ diff --git a/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85.info b/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85.info new file mode 100644 index 0000000..341a86b Binary files /dev/null and b/HoloBot/Library/metadata/38/389a31a0565854340ba5168ea20afd85.info differ diff --git a/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002 b/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002 new file mode 100644 index 0000000..4a43d2a Binary files /dev/null and b/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002 differ diff --git a/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002.info b/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002.info new file mode 100644 index 0000000..0ab2a71 Binary files /dev/null and b/HoloBot/Library/metadata/3a/3a7b79af5d4490448b433db89ffd9002.info differ diff --git a/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac b/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac new file mode 100644 index 0000000..7ca9072 Binary files /dev/null and b/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac differ diff --git a/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac.info b/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac.info new file mode 100644 index 0000000..1a72b2e Binary files /dev/null and b/HoloBot/Library/metadata/3a/3a8c0e8906321224aa2f41c82ecab9ac.info differ diff --git a/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d b/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d new file mode 100644 index 0000000..4af296c Binary files /dev/null and b/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d differ diff --git a/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d.info b/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d.info new file mode 100644 index 0000000..9531fb8 Binary files /dev/null and b/HoloBot/Library/metadata/3b/3b495c812f1ec77408d360727b6f0a9d.info differ diff --git a/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 b/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 new file mode 100644 index 0000000..5a469c8 Binary files /dev/null and b/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 differ diff --git a/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info b/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info new file mode 100644 index 0000000..7ba4904 Binary files /dev/null and b/HoloBot/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info differ diff --git a/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00 b/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00 new file mode 100644 index 0000000..cbc963a Binary files /dev/null and b/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00 differ diff --git a/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00.info b/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00.info new file mode 100644 index 0000000..8843340 Binary files /dev/null and b/HoloBot/Library/metadata/3d/3d5c88d150a2b95459b4ac57c7e33d00.info differ diff --git a/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b b/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b new file mode 100644 index 0000000..30bc711 Binary files /dev/null and b/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b differ diff --git a/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b.info b/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b.info new file mode 100644 index 0000000..482902c Binary files /dev/null and b/HoloBot/Library/metadata/3d/3d81668a4e43f244086c21406427364b.info differ diff --git a/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9 b/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9 new file mode 100644 index 0000000..7d53b03 Binary files /dev/null and b/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9 differ diff --git a/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9.info b/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9.info new file mode 100644 index 0000000..f562f9d Binary files /dev/null and b/HoloBot/Library/metadata/3e/3e15d252e1e01c340a9b88dd7b4c04e9.info differ diff --git a/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab b/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab new file mode 100644 index 0000000..723a920 Binary files /dev/null and b/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab differ diff --git a/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab.info b/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab.info new file mode 100644 index 0000000..d09c087 Binary files /dev/null and b/HoloBot/Library/metadata/3e/3eddd1c29199313478dd3f912bfab2ab.info differ diff --git a/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f b/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f new file mode 100644 index 0000000..1eeadba Binary files /dev/null and b/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f differ diff --git a/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f.info b/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f.info new file mode 100644 index 0000000..3084b54 Binary files /dev/null and b/HoloBot/Library/metadata/3f/3f2795b3e072e1745a4f8c670d64284f.info differ diff --git a/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c b/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c new file mode 100644 index 0000000..49364f6 Binary files /dev/null and b/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c differ diff --git a/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c.info b/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c.info new file mode 100644 index 0000000..4054d13 Binary files /dev/null and b/HoloBot/Library/metadata/3f/3f41b1c17f75cab40b11bb814443f19c.info differ diff --git a/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c b/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c new file mode 100644 index 0000000..f77a6d2 Binary files /dev/null and b/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c differ diff --git a/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c.info b/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c.info new file mode 100644 index 0000000..f3840f6 Binary files /dev/null and b/HoloBot/Library/metadata/3f/3fca56ff17adf954590a8c00b2dc532c.info differ diff --git a/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5 b/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5 new file mode 100644 index 0000000..6c3cf91 Binary files /dev/null and b/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5 differ diff --git a/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5.info b/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5.info new file mode 100644 index 0000000..df4c71f Binary files /dev/null and b/HoloBot/Library/metadata/40/4096e205d20cef04cbed99cee8d82ee5.info differ diff --git a/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 b/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 new file mode 100644 index 0000000..84f0f14 Binary files /dev/null and b/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 differ diff --git a/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info b/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info new file mode 100644 index 0000000..3745e96 Binary files /dev/null and b/HoloBot/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info differ diff --git a/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2 b/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2 new file mode 100644 index 0000000..3bdc0f0 Binary files /dev/null and b/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2 differ diff --git a/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2.info b/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2.info new file mode 100644 index 0000000..0287cb9 Binary files /dev/null and b/HoloBot/Library/metadata/41/41253f298e1435a4d800b5e5b349fcd2.info differ diff --git a/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1 b/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1 new file mode 100644 index 0000000..0ada2c9 Binary files /dev/null and b/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1 differ diff --git a/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1.info b/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1.info new file mode 100644 index 0000000..bcc091e Binary files /dev/null and b/HoloBot/Library/metadata/41/41489accbb481284383749868a7cdbe1.info differ diff --git a/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4 b/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4 new file mode 100644 index 0000000..799e2a0 Binary files /dev/null and b/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4 differ diff --git a/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4.info b/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4.info new file mode 100644 index 0000000..e9a37b3 Binary files /dev/null and b/HoloBot/Library/metadata/42/424ed4f5f5e3c2f49acdb321905bdbb4.info differ diff --git a/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933 b/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933 new file mode 100644 index 0000000..f94b87f Binary files /dev/null and b/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933 differ diff --git a/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933.info b/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933.info new file mode 100644 index 0000000..4a22b72 Binary files /dev/null and b/HoloBot/Library/metadata/43/43d418ff51ba3544b804b6b3183d5933.info differ diff --git a/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff b/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff new file mode 100644 index 0000000..db778e5 Binary files /dev/null and b/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff differ diff --git a/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff.info b/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff.info new file mode 100644 index 0000000..36a0da2 Binary files /dev/null and b/HoloBot/Library/metadata/44/44f5d303f60f1d14a8fe83f324ff52ff.info differ diff --git a/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9 b/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9 new file mode 100644 index 0000000..82aa5e3 Binary files /dev/null and b/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9 differ diff --git a/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9.info b/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9.info new file mode 100644 index 0000000..e7fd2c3 Binary files /dev/null and b/HoloBot/Library/metadata/45/4501c5374e4f11845bb517c3af2779c9.info differ diff --git a/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070 b/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070 new file mode 100644 index 0000000..94f2754 Binary files /dev/null and b/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070 differ diff --git a/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070.info b/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070.info new file mode 100644 index 0000000..25901df Binary files /dev/null and b/HoloBot/Library/metadata/45/45118da20cb0d3d46b72b9fe0868f070.info differ diff --git a/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c b/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c new file mode 100644 index 0000000..08a199d Binary files /dev/null and b/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c differ diff --git a/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c.info b/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c.info new file mode 100644 index 0000000..6336474 Binary files /dev/null and b/HoloBot/Library/metadata/45/456e326222b190b488e8477b00145f3c.info differ diff --git a/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd b/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd new file mode 100644 index 0000000..dfbd0bb Binary files /dev/null and b/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd differ diff --git a/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd.info b/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd.info new file mode 100644 index 0000000..51c8513 Binary files /dev/null and b/HoloBot/Library/metadata/45/456eda422e1dc4c4cb4fd6c25cbc2fbd.info differ diff --git a/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa b/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa new file mode 100644 index 0000000..1aecf57 Binary files /dev/null and b/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa differ diff --git a/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa.info b/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa.info new file mode 100644 index 0000000..c116089 Binary files /dev/null and b/HoloBot/Library/metadata/45/458fac8a303a9a64f8873829f1fe1daa.info differ diff --git a/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5 b/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5 new file mode 100644 index 0000000..bd6da2e Binary files /dev/null and b/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5 differ diff --git a/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5.info b/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5.info new file mode 100644 index 0000000..6236795 Binary files /dev/null and b/HoloBot/Library/metadata/45/45aeb9dbd6db38b438fb3a33a19f90d5.info differ diff --git a/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77 b/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77 new file mode 100644 index 0000000..4c2ca70 Binary files /dev/null and b/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77 differ diff --git a/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77.info b/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77.info new file mode 100644 index 0000000..4e2bb7b Binary files /dev/null and b/HoloBot/Library/metadata/45/45f64dce67875f5428204a19bdb31a77.info differ diff --git a/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97 b/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97 new file mode 100644 index 0000000..04bc863 Binary files /dev/null and b/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97 differ diff --git a/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97.info b/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97.info new file mode 100644 index 0000000..5bd2910 Binary files /dev/null and b/HoloBot/Library/metadata/46/46c9b1f2e4d0d69499aeb84457f55e97.info differ diff --git a/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a b/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a new file mode 100644 index 0000000..3eaccab Binary files /dev/null and b/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a differ diff --git a/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a.info b/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a.info new file mode 100644 index 0000000..103d0d2 Binary files /dev/null and b/HoloBot/Library/metadata/47/474f0e0481d4aa14e92a5ada98042f3a.info differ diff --git a/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af b/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af new file mode 100644 index 0000000..9d95703 Binary files /dev/null and b/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af differ diff --git a/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af.info b/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af.info new file mode 100644 index 0000000..66be76f Binary files /dev/null and b/HoloBot/Library/metadata/47/47b537eba84b0c3449305d8669a8b1af.info differ diff --git a/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc b/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc new file mode 100644 index 0000000..ff8964f Binary files /dev/null and b/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc differ diff --git a/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc.info b/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc.info new file mode 100644 index 0000000..eea213b Binary files /dev/null and b/HoloBot/Library/metadata/49/491c8f41cb5f4ad469d53b03bcb9b1fc.info differ diff --git a/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea b/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea new file mode 100644 index 0000000..2cec792 Binary files /dev/null and b/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea differ diff --git a/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea.info b/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea.info new file mode 100644 index 0000000..e74c1c4 Binary files /dev/null and b/HoloBot/Library/metadata/49/49cc0b39b5dc81b48b54e235206745ea.info differ diff --git a/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 b/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 new file mode 100644 index 0000000..3d85bc1 Binary files /dev/null and b/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 differ diff --git a/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info b/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info new file mode 100644 index 0000000..d77eade Binary files /dev/null and b/HoloBot/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info differ diff --git a/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f b/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f new file mode 100644 index 0000000..af13b20 Binary files /dev/null and b/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f differ diff --git a/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f.info b/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f.info new file mode 100644 index 0000000..9f09bdf Binary files /dev/null and b/HoloBot/Library/metadata/4a/4ac5ecface4399542974797bd73a3d5f.info differ diff --git a/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d b/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d new file mode 100644 index 0000000..f46cc45 Binary files /dev/null and b/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d differ diff --git a/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d.info b/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d.info new file mode 100644 index 0000000..0de511e Binary files /dev/null and b/HoloBot/Library/metadata/4b/4b1346964b1669842b425d5dce5b360d.info differ diff --git a/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68 b/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68 new file mode 100644 index 0000000..cf76206 Binary files /dev/null and b/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68 differ diff --git a/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68.info b/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68.info new file mode 100644 index 0000000..b9bee2a Binary files /dev/null and b/HoloBot/Library/metadata/4b/4b1f9b83c8baba6408da5fd968d97d68.info differ diff --git a/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f b/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f new file mode 100644 index 0000000..1b5f93d Binary files /dev/null and b/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f differ diff --git a/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info b/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info new file mode 100644 index 0000000..20ea559 Binary files /dev/null and b/HoloBot/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info differ diff --git a/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987 b/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987 new file mode 100644 index 0000000..355c9e5 Binary files /dev/null and b/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987 differ diff --git a/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987.info b/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987.info new file mode 100644 index 0000000..dc02f80 Binary files /dev/null and b/HoloBot/Library/metadata/4b/4bb9a692e2fe3694c8a241389195c987.info differ diff --git a/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc b/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc new file mode 100644 index 0000000..9513e76 Binary files /dev/null and b/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc differ diff --git a/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc.info b/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc.info new file mode 100644 index 0000000..fbf9cd5 Binary files /dev/null and b/HoloBot/Library/metadata/4c/4c2b96480b1495240abdd386973208bc.info differ diff --git a/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8 b/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8 new file mode 100644 index 0000000..90208c2 Binary files /dev/null and b/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8 differ diff --git a/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8.info b/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8.info new file mode 100644 index 0000000..2354e0a Binary files /dev/null and b/HoloBot/Library/metadata/4c/4cab0e6832c2fbd4eb7947505ccaa3e8.info differ diff --git a/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19 b/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19 new file mode 100644 index 0000000..ba51635 Binary files /dev/null and b/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19 differ diff --git a/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19.info b/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19.info new file mode 100644 index 0000000..03eba33 Binary files /dev/null and b/HoloBot/Library/metadata/4c/4cbe741e569c9694287c5ba32a03ff19.info differ diff --git a/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001 b/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001 new file mode 100644 index 0000000..146238b Binary files /dev/null and b/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001 differ diff --git a/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001.info b/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001.info new file mode 100644 index 0000000..bab5deb Binary files /dev/null and b/HoloBot/Library/metadata/4d/4d1a2a33ffcac354298137001635a001.info differ diff --git a/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035 b/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035 new file mode 100644 index 0000000..b4e048e Binary files /dev/null and b/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035 differ diff --git a/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035.info b/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035.info new file mode 100644 index 0000000..1e5a22e Binary files /dev/null and b/HoloBot/Library/metadata/4e/4e0e39f4c4cf0314ea7459835e596035.info differ diff --git a/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a b/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a new file mode 100644 index 0000000..3701814 Binary files /dev/null and b/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a differ diff --git a/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a.info b/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a.info new file mode 100644 index 0000000..eda12a9 Binary files /dev/null and b/HoloBot/Library/metadata/4f/4f106707aefa5e44591b0c72cab2b44a.info differ diff --git a/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a b/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a new file mode 100644 index 0000000..e8b3959 Binary files /dev/null and b/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a differ diff --git a/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a.info b/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a.info new file mode 100644 index 0000000..1078dfd Binary files /dev/null and b/HoloBot/Library/metadata/50/500e1009ee758464a99d024a7119653a.info differ diff --git a/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f b/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f new file mode 100644 index 0000000..7bf3266 Binary files /dev/null and b/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f differ diff --git a/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f.info b/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f.info new file mode 100644 index 0000000..2ee58c7 Binary files /dev/null and b/HoloBot/Library/metadata/50/50ea9b56756ce4549ac9331b03af784f.info differ diff --git a/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 b/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 new file mode 100644 index 0000000..9525ff9 Binary files /dev/null and b/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 differ diff --git a/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info b/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info new file mode 100644 index 0000000..b9a37c2 Binary files /dev/null and b/HoloBot/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info differ diff --git a/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7 b/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7 new file mode 100644 index 0000000..1cafca1 Binary files /dev/null and b/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7 differ diff --git a/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7.info b/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7.info new file mode 100644 index 0000000..2e1f0a0 Binary files /dev/null and b/HoloBot/Library/metadata/51/51c87b08c4bd5cd4eabce20953fbe2e7.info differ diff --git a/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d b/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d new file mode 100644 index 0000000..3e01b2d Binary files /dev/null and b/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d differ diff --git a/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d.info b/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d.info new file mode 100644 index 0000000..1f9a281 Binary files /dev/null and b/HoloBot/Library/metadata/52/5238ed24c9726a1459b60cb16df01a9d.info differ diff --git a/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c b/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c new file mode 100644 index 0000000..0023e01 Binary files /dev/null and b/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c differ diff --git a/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c.info b/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c.info new file mode 100644 index 0000000..8e99efa Binary files /dev/null and b/HoloBot/Library/metadata/52/524bc2fa88e9e2249a3bace97aee437c.info differ diff --git a/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19 b/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19 new file mode 100644 index 0000000..c1ce837 Binary files /dev/null and b/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19 differ diff --git a/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19.info b/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19.info new file mode 100644 index 0000000..97cc9f7 Binary files /dev/null and b/HoloBot/Library/metadata/52/52a206b72a8f4f749c28d8b18b42dd19.info differ diff --git a/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7 b/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7 new file mode 100644 index 0000000..2950dae Binary files /dev/null and b/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7 differ diff --git a/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7.info b/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7.info new file mode 100644 index 0000000..2c8d26e Binary files /dev/null and b/HoloBot/Library/metadata/52/52a291a08fef3064eac0386055cd5bd7.info differ diff --git a/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b b/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b new file mode 100644 index 0000000..1b4cb65 Binary files /dev/null and b/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b differ diff --git a/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b.info b/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b.info new file mode 100644 index 0000000..8932816 Binary files /dev/null and b/HoloBot/Library/metadata/52/52a72bdb251e5ce488e5c51f0a9c657b.info differ diff --git a/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964 b/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964 new file mode 100644 index 0000000..f4124aa Binary files /dev/null and b/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964 differ diff --git a/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964.info b/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964.info new file mode 100644 index 0000000..f418cc4 Binary files /dev/null and b/HoloBot/Library/metadata/53/534566cd964265f48a9001473d406964.info differ diff --git a/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 b/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 new file mode 100644 index 0000000..e674567 Binary files /dev/null and b/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 differ diff --git a/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info b/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info new file mode 100644 index 0000000..cd53daa Binary files /dev/null and b/HoloBot/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info differ diff --git a/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305 b/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305 new file mode 100644 index 0000000..0a6d457 Binary files /dev/null and b/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305 differ diff --git a/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305.info b/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305.info new file mode 100644 index 0000000..05a9e6a Binary files /dev/null and b/HoloBot/Library/metadata/54/5482069df07338140b883d8ce2cf3305.info differ diff --git a/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4 b/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4 new file mode 100644 index 0000000..3edf2cf Binary files /dev/null and b/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4 differ diff --git a/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4.info b/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4.info new file mode 100644 index 0000000..141e7d6 Binary files /dev/null and b/HoloBot/Library/metadata/56/567263514c68df24a8aa456a5dc6c8f4.info differ diff --git a/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc b/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc new file mode 100644 index 0000000..3440ecd Binary files /dev/null and b/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc differ diff --git a/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info b/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info new file mode 100644 index 0000000..2f38d58 Binary files /dev/null and b/HoloBot/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info differ diff --git a/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885 b/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885 new file mode 100644 index 0000000..0783780 Binary files /dev/null and b/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885 differ diff --git a/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885.info b/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885.info new file mode 100644 index 0000000..977dc62 Binary files /dev/null and b/HoloBot/Library/metadata/57/57bc52a903dabb343acd31f45390b885.info differ diff --git a/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982 b/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982 new file mode 100644 index 0000000..074b46e Binary files /dev/null and b/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982 differ diff --git a/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982.info b/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982.info new file mode 100644 index 0000000..6ac3642 Binary files /dev/null and b/HoloBot/Library/metadata/58/586bf14c7c7de5b418595eec11505982.info differ diff --git a/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4 b/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4 new file mode 100644 index 0000000..32667f6 Binary files /dev/null and b/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4 differ diff --git a/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4.info b/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4.info new file mode 100644 index 0000000..3d27c01 Binary files /dev/null and b/HoloBot/Library/metadata/59/59152950bc6d9574d9bc9bdc407f76f4.info differ diff --git a/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31 b/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31 new file mode 100644 index 0000000..d613228 Binary files /dev/null and b/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31 differ diff --git a/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31.info b/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31.info new file mode 100644 index 0000000..3d960b9 Binary files /dev/null and b/HoloBot/Library/metadata/5a/5a03e90953147cf4e948462c10c01b31.info differ diff --git a/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36 b/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36 new file mode 100644 index 0000000..6025961 Binary files /dev/null and b/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36 differ diff --git a/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36.info b/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36.info new file mode 100644 index 0000000..fc9d109 Binary files /dev/null and b/HoloBot/Library/metadata/5a/5a7c0a4f12cac724ebe0214e2392fb36.info differ diff --git a/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5 b/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5 new file mode 100644 index 0000000..f518af0 Binary files /dev/null and b/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5 differ diff --git a/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5.info b/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5.info new file mode 100644 index 0000000..10d64ca Binary files /dev/null and b/HoloBot/Library/metadata/5a/5adc4b89c1810d14cb90502e0a2741f5.info differ diff --git a/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b b/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b new file mode 100644 index 0000000..0ba13f3 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b differ diff --git a/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b.info b/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b.info new file mode 100644 index 0000000..606e277 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5c0d8f694e5a75649a838e3a1a4e122b.info differ diff --git a/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a b/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a new file mode 100644 index 0000000..a0cf814 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a differ diff --git a/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a.info b/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a.info new file mode 100644 index 0000000..0bf9128 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5c2339e78c48ab14bb095cea2be5fb1a.info differ diff --git a/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4 b/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4 new file mode 100644 index 0000000..84c3230 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4 differ diff --git a/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4.info b/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4.info new file mode 100644 index 0000000..9a9d6b8 Binary files /dev/null and b/HoloBot/Library/metadata/5c/5cec88232c4c1054ca274e873da683a4.info differ diff --git a/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0 b/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0 new file mode 100644 index 0000000..e635f09 Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0 differ diff --git a/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0.info b/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0.info new file mode 100644 index 0000000..ffc7dd8 Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d3b6abb3904fc84784fc64e84b34ae0.info differ diff --git a/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355 b/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355 new file mode 100644 index 0000000..e6efe98 Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355 differ diff --git a/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355.info b/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355.info new file mode 100644 index 0000000..6d26525 Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d540aba5fbcc324ba58af008010b355.info differ diff --git a/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516 b/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516 new file mode 100644 index 0000000..deb70a9 Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516 differ diff --git a/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516.info b/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516.info new file mode 100644 index 0000000..4f23a1e Binary files /dev/null and b/HoloBot/Library/metadata/5d/5d877fc560a8f724fba6dd6e12386516.info differ diff --git a/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd b/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd new file mode 100644 index 0000000..b6bd529 Binary files /dev/null and b/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd differ diff --git a/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd.info b/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd.info new file mode 100644 index 0000000..5886c0a Binary files /dev/null and b/HoloBot/Library/metadata/5e/5e76e513cfbb87a4285cfa0abb05afbd.info differ diff --git a/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5 b/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5 new file mode 100644 index 0000000..1bae2a2 Binary files /dev/null and b/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5 differ diff --git a/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5.info b/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5.info new file mode 100644 index 0000000..0143e8e Binary files /dev/null and b/HoloBot/Library/metadata/5e/5eb422f8129123a4c86f3641f95b10c5.info differ diff --git a/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5 b/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5 new file mode 100644 index 0000000..6717877 Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5 differ diff --git a/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5.info b/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5.info new file mode 100644 index 0000000..9b23015 Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f2ca3e609a009d42a94ea2ff016c6d5.info differ diff --git a/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 b/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 new file mode 100644 index 0000000..e7e9f53 Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 differ diff --git a/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info b/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info new file mode 100644 index 0000000..12bc61d Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info differ diff --git a/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e b/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e new file mode 100644 index 0000000..2093c44 Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e differ diff --git a/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e.info b/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e.info new file mode 100644 index 0000000..36cf8a0 Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f788fe1ea017744fa7365052305669e.info differ diff --git a/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a b/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a new file mode 100644 index 0000000..25017da Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a differ diff --git a/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a.info b/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a.info new file mode 100644 index 0000000..6acba8d Binary files /dev/null and b/HoloBot/Library/metadata/5f/5f798bc89d23aaa43bc6d51e147b544a.info differ diff --git a/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b b/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b new file mode 100644 index 0000000..713a380 Binary files /dev/null and b/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b differ diff --git a/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b.info b/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b.info new file mode 100644 index 0000000..8622e4b Binary files /dev/null and b/HoloBot/Library/metadata/61/6145c0073e089ec44ade2d6ee028ae9b.info differ diff --git a/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2 b/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2 new file mode 100644 index 0000000..f3d0368 Binary files /dev/null and b/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2 differ diff --git a/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2.info b/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2.info new file mode 100644 index 0000000..aaa6137 Binary files /dev/null and b/HoloBot/Library/metadata/62/622d808cccb7d1e4caa5a0e3437c77b2.info differ diff --git a/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616 b/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616 new file mode 100644 index 0000000..c7b220f Binary files /dev/null and b/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616 differ diff --git a/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616.info b/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616.info new file mode 100644 index 0000000..2fe0ce5 Binary files /dev/null and b/HoloBot/Library/metadata/62/625f902511dda214e988a85f9566d616.info differ diff --git a/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea b/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea new file mode 100644 index 0000000..b3e0d65 Binary files /dev/null and b/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea differ diff --git a/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea.info b/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea.info new file mode 100644 index 0000000..b83a787 Binary files /dev/null and b/HoloBot/Library/metadata/62/6276975893803314dbc8b33ebb9334ea.info differ diff --git a/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a b/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a new file mode 100644 index 0000000..27bd84c Binary files /dev/null and b/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a differ diff --git a/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a.info b/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a.info new file mode 100644 index 0000000..a0ab7e2 Binary files /dev/null and b/HoloBot/Library/metadata/63/63b112b193820c9458f19fe4f0cc625a.info differ diff --git a/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e b/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e new file mode 100644 index 0000000..acac509 Binary files /dev/null and b/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e differ diff --git a/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e.info b/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e.info new file mode 100644 index 0000000..51d32c9 Binary files /dev/null and b/HoloBot/Library/metadata/65/65489362c11ca984a9e8f9b932da0a8e.info differ diff --git a/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f b/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f new file mode 100644 index 0000000..a156955 Binary files /dev/null and b/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f differ diff --git a/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f.info b/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f.info new file mode 100644 index 0000000..f62ceb4 Binary files /dev/null and b/HoloBot/Library/metadata/66/662ff03b4382d8b4c90794fc519a9a1f.info differ diff --git a/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7 b/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7 new file mode 100644 index 0000000..23335e5 Binary files /dev/null and b/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7 differ diff --git a/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7.info b/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7.info new file mode 100644 index 0000000..426b2e9 Binary files /dev/null and b/HoloBot/Library/metadata/67/673919c0d8a985c4090c8675ce04b6c7.info differ diff --git a/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0 b/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0 new file mode 100644 index 0000000..39d2d08 Binary files /dev/null and b/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0 differ diff --git a/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0.info b/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0.info new file mode 100644 index 0000000..feca924 Binary files /dev/null and b/HoloBot/Library/metadata/67/6762008b7153ae94ab1f370faf6bbca0.info differ diff --git a/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb b/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb new file mode 100644 index 0000000..643bbf0 Binary files /dev/null and b/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb differ diff --git a/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb.info b/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb.info new file mode 100644 index 0000000..2d4a3da Binary files /dev/null and b/HoloBot/Library/metadata/67/679d5c341eb44c34eab39d440498c0bb.info differ diff --git a/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38 b/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38 new file mode 100644 index 0000000..468caf9 Binary files /dev/null and b/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38 differ diff --git a/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38.info b/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38.info new file mode 100644 index 0000000..801af33 Binary files /dev/null and b/HoloBot/Library/metadata/67/67e9dad5654047ebbe623cce9dbf7b38.info differ diff --git a/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763 b/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763 new file mode 100644 index 0000000..c1f4902 Binary files /dev/null and b/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763 differ diff --git a/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763.info b/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763.info new file mode 100644 index 0000000..e8dc529 Binary files /dev/null and b/HoloBot/Library/metadata/68/683336f59c4e8154dabdb77e57f53763.info differ diff --git a/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5 b/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5 new file mode 100644 index 0000000..71c308c Binary files /dev/null and b/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5 differ diff --git a/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5.info b/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5.info new file mode 100644 index 0000000..784a0df Binary files /dev/null and b/HoloBot/Library/metadata/68/68471bd594667db46a10efbee4e188d5.info differ diff --git a/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc b/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc new file mode 100644 index 0000000..de0701a Binary files /dev/null and b/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc differ diff --git a/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc.info b/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc.info new file mode 100644 index 0000000..f7cd171 Binary files /dev/null and b/HoloBot/Library/metadata/69/691df9a706b797e46b321614e4c8fcfc.info differ diff --git a/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf b/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf new file mode 100644 index 0000000..ef7038d Binary files /dev/null and b/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf differ diff --git a/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf.info b/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf.info new file mode 100644 index 0000000..bbaad88 Binary files /dev/null and b/HoloBot/Library/metadata/69/6981461fe431401459211818212a29cf.info differ diff --git a/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d b/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d new file mode 100644 index 0000000..02201d9 Binary files /dev/null and b/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d differ diff --git a/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d.info b/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d.info new file mode 100644 index 0000000..55309d3 Binary files /dev/null and b/HoloBot/Library/metadata/69/69bc1f79e88dcf74e84ac71014b8959d.info differ diff --git a/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30 b/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30 new file mode 100644 index 0000000..cd19139 Binary files /dev/null and b/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30 differ diff --git a/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30.info b/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30.info new file mode 100644 index 0000000..ee606fd Binary files /dev/null and b/HoloBot/Library/metadata/69/69f4044a5eb7642468213a8e2c77ea30.info differ diff --git a/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a b/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a new file mode 100644 index 0000000..8c15981 Binary files /dev/null and b/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a differ diff --git a/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a.info b/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a.info new file mode 100644 index 0000000..ccc0b76 Binary files /dev/null and b/HoloBot/Library/metadata/6b/6b39013cb87c4bf47a8642ff75feb58a.info differ diff --git a/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831 b/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831 new file mode 100644 index 0000000..cf23a83 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831 differ diff --git a/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831.info b/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831.info new file mode 100644 index 0000000..f3b61be Binary files /dev/null and b/HoloBot/Library/metadata/6c/6c720c9d5cbee074fa9de28be77fd831.info differ diff --git a/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0 b/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0 new file mode 100644 index 0000000..e513021 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0 differ diff --git a/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0.info b/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0.info new file mode 100644 index 0000000..fb6ddb0 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cb6ac333da98c74facd3d4c621690e0.info differ diff --git a/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792 b/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792 new file mode 100644 index 0000000..8c9f2a4 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792 differ diff --git a/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792.info b/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792.info new file mode 100644 index 0000000..7a549c0 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cc925b5d51249645883c7938def8792.info differ diff --git a/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 b/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 new file mode 100644 index 0000000..271761f Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 differ diff --git a/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info b/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info new file mode 100644 index 0000000..836c869 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info differ diff --git a/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c b/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c new file mode 100644 index 0000000..a49a304 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c differ diff --git a/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c.info b/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c.info new file mode 100644 index 0000000..7079834 Binary files /dev/null and b/HoloBot/Library/metadata/6c/6cec46d5b336e2a4b9b2e1d3e8e3754c.info differ diff --git a/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58 b/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58 new file mode 100644 index 0000000..11adbc9 Binary files /dev/null and b/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58 differ diff --git a/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58.info b/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58.info new file mode 100644 index 0000000..fa41c30 Binary files /dev/null and b/HoloBot/Library/metadata/6d/6d49a768fbedaf14284696ffdf9a1a58.info differ diff --git a/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f b/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f new file mode 100644 index 0000000..2e1fcee Binary files /dev/null and b/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f differ diff --git a/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f.info b/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f.info new file mode 100644 index 0000000..8fab43c Binary files /dev/null and b/HoloBot/Library/metadata/6d/6d8b4a3eedcdf774bbc71cc2a08da79f.info differ diff --git a/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2 b/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2 new file mode 100644 index 0000000..16f1b1a Binary files /dev/null and b/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2 differ diff --git a/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2.info b/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2.info new file mode 100644 index 0000000..2bb0d89 Binary files /dev/null and b/HoloBot/Library/metadata/6d/6da69ac160e563c43a9e481a14a381c2.info differ diff --git a/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f b/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f new file mode 100644 index 0000000..dbac87f Binary files /dev/null and b/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f differ diff --git a/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f.info b/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f.info new file mode 100644 index 0000000..fa9bd6a Binary files /dev/null and b/HoloBot/Library/metadata/6e/6e38ae8cbe8702442a50188434a02a2f.info differ diff --git a/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7 b/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7 new file mode 100644 index 0000000..5e45171 Binary files /dev/null and b/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7 differ diff --git a/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7.info b/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7.info new file mode 100644 index 0000000..9fefaba Binary files /dev/null and b/HoloBot/Library/metadata/6e/6ed94313b5a29b64ababc59033c998e7.info differ diff --git a/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14 b/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14 new file mode 100644 index 0000000..7e93a97 Binary files /dev/null and b/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14 differ diff --git a/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14.info b/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14.info new file mode 100644 index 0000000..46ba489 Binary files /dev/null and b/HoloBot/Library/metadata/70/70b9e436777519e4ba940d25e15a1a14.info differ diff --git a/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7 b/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7 new file mode 100644 index 0000000..657d0bf Binary files /dev/null and b/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7 differ diff --git a/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7.info b/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7.info new file mode 100644 index 0000000..2b611ed Binary files /dev/null and b/HoloBot/Library/metadata/71/71335f9816182fe4e8b6c726e8b1ebc7.info differ diff --git a/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8 b/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8 new file mode 100644 index 0000000..ca3e05a Binary files /dev/null and b/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8 differ diff --git a/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8.info b/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8.info new file mode 100644 index 0000000..c9e32ab Binary files /dev/null and b/HoloBot/Library/metadata/71/7145c53c2fed227448e5df11c9b4f9d8.info differ diff --git a/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23 b/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23 new file mode 100644 index 0000000..7f3bac8 Binary files /dev/null and b/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23 differ diff --git a/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23.info b/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23.info new file mode 100644 index 0000000..d68143a Binary files /dev/null and b/HoloBot/Library/metadata/72/722717aa092cb4a4cb8cde6fb8168f23.info differ diff --git a/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d b/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d new file mode 100644 index 0000000..797b2fa Binary files /dev/null and b/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d differ diff --git a/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d.info b/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d.info new file mode 100644 index 0000000..6f56ba7 Binary files /dev/null and b/HoloBot/Library/metadata/72/72377af4415e4d44294be9a52547cb9d.info differ diff --git a/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12 b/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12 new file mode 100644 index 0000000..d60d4dd Binary files /dev/null and b/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12 differ diff --git a/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12.info b/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12.info new file mode 100644 index 0000000..d712b60 Binary files /dev/null and b/HoloBot/Library/metadata/72/723e3cf6cbe716d48a51b519af6c3d12.info differ diff --git a/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488 b/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488 new file mode 100644 index 0000000..bc9a8ff Binary files /dev/null and b/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488 differ diff --git a/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488.info b/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488.info new file mode 100644 index 0000000..7aff674 Binary files /dev/null and b/HoloBot/Library/metadata/73/732b1aaa8df9fbe429d8d78acc0d0488.info differ diff --git a/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4 b/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4 new file mode 100644 index 0000000..6fcef25 Binary files /dev/null and b/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4 differ diff --git a/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4.info b/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4.info new file mode 100644 index 0000000..8688145 Binary files /dev/null and b/HoloBot/Library/metadata/73/73383145d055bef478097c80c114d2a4.info differ diff --git a/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd b/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd new file mode 100644 index 0000000..d37d3ae Binary files /dev/null and b/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd differ diff --git a/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd.info b/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd.info new file mode 100644 index 0000000..74c23de Binary files /dev/null and b/HoloBot/Library/metadata/73/7367214f370c40b4ab6839eed78a74cd.info differ diff --git a/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8 b/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8 new file mode 100644 index 0000000..4f6ce79 Binary files /dev/null and b/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8 differ diff --git a/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8.info b/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8.info new file mode 100644 index 0000000..8850bd8 Binary files /dev/null and b/HoloBot/Library/metadata/73/736f119c38b2776458906b63cb4de7c8.info differ diff --git a/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef b/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef new file mode 100644 index 0000000..0201129 Binary files /dev/null and b/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef differ diff --git a/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info b/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info new file mode 100644 index 0000000..74e70e4 Binary files /dev/null and b/HoloBot/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info differ diff --git a/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a b/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a new file mode 100644 index 0000000..300cab7 Binary files /dev/null and b/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a differ diff --git a/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a.info b/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a.info new file mode 100644 index 0000000..71b5453 Binary files /dev/null and b/HoloBot/Library/metadata/74/74c5c89c08e228344aa9ffbad3dcf27a.info differ diff --git a/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427 b/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427 new file mode 100644 index 0000000..34f2514 Binary files /dev/null and b/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427 differ diff --git a/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427.info b/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427.info new file mode 100644 index 0000000..34bdf0b Binary files /dev/null and b/HoloBot/Library/metadata/74/74d56d87eb953dd4381a8a97bc379427.info differ diff --git a/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01 b/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01 new file mode 100644 index 0000000..99c59e7 Binary files /dev/null and b/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01 differ diff --git a/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01.info b/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01.info new file mode 100644 index 0000000..70b5c08 Binary files /dev/null and b/HoloBot/Library/metadata/75/75737e67271928f49a52005076d84d01.info differ diff --git a/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7 b/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7 new file mode 100644 index 0000000..f187166 Binary files /dev/null and b/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7 differ diff --git a/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7.info b/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7.info new file mode 100644 index 0000000..272ce44 Binary files /dev/null and b/HoloBot/Library/metadata/76/76a3b743227627e448c61652f54a44a7.info differ diff --git a/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3 b/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3 new file mode 100644 index 0000000..aa12fc5 Binary files /dev/null and b/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3 differ diff --git a/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3.info b/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3.info new file mode 100644 index 0000000..2392925 Binary files /dev/null and b/HoloBot/Library/metadata/77/778e02a60d620bb419088e692a3584d3.info differ diff --git a/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf b/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf new file mode 100644 index 0000000..249992c Binary files /dev/null and b/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf differ diff --git a/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf.info b/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf.info new file mode 100644 index 0000000..4746b48 Binary files /dev/null and b/HoloBot/Library/metadata/77/779ee1853fb999546801816de0d9d5cf.info differ diff --git a/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa b/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa new file mode 100644 index 0000000..ce70272 Binary files /dev/null and b/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa differ diff --git a/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa.info b/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa.info new file mode 100644 index 0000000..9c2b6e1 Binary files /dev/null and b/HoloBot/Library/metadata/78/780725e0c45da944182ca918718651fa.info differ diff --git a/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d b/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d new file mode 100644 index 0000000..2aa784d Binary files /dev/null and b/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d differ diff --git a/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d.info b/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d.info new file mode 100644 index 0000000..31972e8 Binary files /dev/null and b/HoloBot/Library/metadata/78/78277dad4965488439115fd540c7178d.info differ diff --git a/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3 b/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3 new file mode 100644 index 0000000..fda6284 Binary files /dev/null and b/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3 differ diff --git a/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3.info b/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3.info new file mode 100644 index 0000000..b065b3a Binary files /dev/null and b/HoloBot/Library/metadata/78/782849a517cd6b445bf06b38c442ccf3.info differ diff --git a/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269 b/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269 new file mode 100644 index 0000000..19851f1 Binary files /dev/null and b/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269 differ diff --git a/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269.info b/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269.info new file mode 100644 index 0000000..7693606 Binary files /dev/null and b/HoloBot/Library/metadata/79/79ab341a0a8c1e64a8656ce6f8e49269.info differ diff --git a/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5 b/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5 new file mode 100644 index 0000000..0a9f654 Binary files /dev/null and b/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5 differ diff --git a/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5.info b/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5.info new file mode 100644 index 0000000..ec7e5c2 Binary files /dev/null and b/HoloBot/Library/metadata/79/79bdbec5416f3444da4c0362c0b957a5.info differ diff --git a/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7 b/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7 new file mode 100644 index 0000000..e2c0582 Binary files /dev/null and b/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7 differ diff --git a/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7.info b/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7.info new file mode 100644 index 0000000..b08b859 Binary files /dev/null and b/HoloBot/Library/metadata/7a/7a2a3976109bde044bee1ea917f9e8b7.info differ diff --git a/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86 b/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86 new file mode 100644 index 0000000..d12334f Binary files /dev/null and b/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86 differ diff --git a/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86.info b/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86.info new file mode 100644 index 0000000..0b60215 Binary files /dev/null and b/HoloBot/Library/metadata/7a/7afdcff1c6cc423458b0d3e64adc8f86.info differ diff --git a/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04 b/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04 new file mode 100644 index 0000000..14659f7 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04 differ diff --git a/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04.info b/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04.info new file mode 100644 index 0000000..fced0a9 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7c44115b69e1e3648a462f0fb937de04.info differ diff --git a/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4 b/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4 new file mode 100644 index 0000000..a044db7 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4 differ diff --git a/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4.info b/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4.info new file mode 100644 index 0000000..f07ec73 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7ca2360a11146cc4cb740a0eab60b6b4.info differ diff --git a/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5 b/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5 new file mode 100644 index 0000000..5efa769 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5 differ diff --git a/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5.info b/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5.info new file mode 100644 index 0000000..b447a22 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7caf8d0b09b859b4ea5102f8bd5c21f5.info differ diff --git a/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e b/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e new file mode 100644 index 0000000..b83f413 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e differ diff --git a/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info b/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info new file mode 100644 index 0000000..2ad4725 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info differ diff --git a/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03 b/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03 new file mode 100644 index 0000000..d237058 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03 differ diff --git a/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03.info b/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03.info new file mode 100644 index 0000000..e4e26a8 Binary files /dev/null and b/HoloBot/Library/metadata/7c/7cff4ebc4a12209428687fb495563d03.info differ diff --git a/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6 b/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6 new file mode 100644 index 0000000..1fefdc4 Binary files /dev/null and b/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6 differ diff --git a/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6.info b/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6.info new file mode 100644 index 0000000..345123f Binary files /dev/null and b/HoloBot/Library/metadata/7d/7d5a0a60fbe897549ad0bfe2039f12b6.info differ diff --git a/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7 b/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7 new file mode 100644 index 0000000..bf81dc8 Binary files /dev/null and b/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7 differ diff --git a/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7.info b/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7.info new file mode 100644 index 0000000..b9c5a5d Binary files /dev/null and b/HoloBot/Library/metadata/7e/7e11a1dc59a9d784e88af9e92ea5bdf7.info differ diff --git a/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e b/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e new file mode 100644 index 0000000..11a9970 Binary files /dev/null and b/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e differ diff --git a/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e.info b/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e.info new file mode 100644 index 0000000..d9d6f7d Binary files /dev/null and b/HoloBot/Library/metadata/7e/7e192d56407205d448ea0611d3d9868e.info differ diff --git a/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d b/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d new file mode 100644 index 0000000..00ecb2a Binary files /dev/null and b/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d differ diff --git a/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d.info b/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d.info new file mode 100644 index 0000000..a8c50b5 Binary files /dev/null and b/HoloBot/Library/metadata/7f/7f3ef4ebb9c743b41af1acd5cc47188d.info differ diff --git a/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f b/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f new file mode 100644 index 0000000..3e15e63 Binary files /dev/null and b/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f differ diff --git a/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info b/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info new file mode 100644 index 0000000..beedd87 Binary files /dev/null and b/HoloBot/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info differ diff --git a/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200 b/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200 new file mode 100644 index 0000000..c39d4f4 Binary files /dev/null and b/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200 differ diff --git a/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200.info b/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200.info new file mode 100644 index 0000000..c2cffc1 Binary files /dev/null and b/HoloBot/Library/metadata/81/813b4dd5d1e4f08429c5dc26dc571200.info differ diff --git a/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5 b/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5 new file mode 100644 index 0000000..8ecbf8a Binary files /dev/null and b/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5 differ diff --git a/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5.info b/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5.info new file mode 100644 index 0000000..b41b9ae Binary files /dev/null and b/HoloBot/Library/metadata/82/822c0970b94b13a47801746b133830f5.info differ diff --git a/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a b/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a new file mode 100644 index 0000000..5a1feb6 Binary files /dev/null and b/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a differ diff --git a/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a.info b/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a.info new file mode 100644 index 0000000..96b8d56 Binary files /dev/null and b/HoloBot/Library/metadata/82/8238048e62b3fb047bc5dd12384f280a.info differ diff --git a/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae b/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae new file mode 100644 index 0000000..8d2af3e Binary files /dev/null and b/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae differ diff --git a/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae.info b/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae.info new file mode 100644 index 0000000..39db1e7 Binary files /dev/null and b/HoloBot/Library/metadata/82/8262c9fb55668ff4ab65697a089e64ae.info differ diff --git a/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b b/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b new file mode 100644 index 0000000..3eb8594 Binary files /dev/null and b/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b differ diff --git a/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b.info b/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b.info new file mode 100644 index 0000000..7758bf7 Binary files /dev/null and b/HoloBot/Library/metadata/83/8319a6fa4dcacfb4ea57e80961afa55b.info differ diff --git a/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0 b/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0 new file mode 100644 index 0000000..53b2649 Binary files /dev/null and b/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0 differ diff --git a/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0.info b/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0.info new file mode 100644 index 0000000..b83ced3 Binary files /dev/null and b/HoloBot/Library/metadata/83/83620a8802ef0c3409a5612d7efb56f0.info differ diff --git a/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968 b/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968 new file mode 100644 index 0000000..5ffcfdd Binary files /dev/null and b/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968 differ diff --git a/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968.info b/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968.info new file mode 100644 index 0000000..fe795cb Binary files /dev/null and b/HoloBot/Library/metadata/84/840d6133aa65d5b42b49811b95190968.info differ diff --git a/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212 b/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212 new file mode 100644 index 0000000..48f8d5d Binary files /dev/null and b/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212 differ diff --git a/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212.info b/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212.info new file mode 100644 index 0000000..b7f5054 Binary files /dev/null and b/HoloBot/Library/metadata/84/84c127400efd9854997fcde30864a212.info differ diff --git a/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 b/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 new file mode 100644 index 0000000..e79140a Binary files /dev/null and b/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 differ diff --git a/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info b/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info new file mode 100644 index 0000000..fe21083 Binary files /dev/null and b/HoloBot/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info differ diff --git a/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d b/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d new file mode 100644 index 0000000..168db02 Binary files /dev/null and b/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d differ diff --git a/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d.info b/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d.info new file mode 100644 index 0000000..c4e9586 Binary files /dev/null and b/HoloBot/Library/metadata/85/85059dffc84910e4993d5e1da0604b7d.info differ diff --git a/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d b/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d new file mode 100644 index 0000000..882af0e Binary files /dev/null and b/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d differ diff --git a/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d.info b/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d.info new file mode 100644 index 0000000..2b5ea99 Binary files /dev/null and b/HoloBot/Library/metadata/85/851c5df1d1918514ebd9f776dae6844d.info differ diff --git a/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0 b/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0 new file mode 100644 index 0000000..ceba517 Binary files /dev/null and b/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0 differ diff --git a/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0.info b/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0.info new file mode 100644 index 0000000..8c4d6a6 Binary files /dev/null and b/HoloBot/Library/metadata/85/852e56802eb941638acbb491814497b0.info differ diff --git a/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c b/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c new file mode 100644 index 0000000..8c65da7 Binary files /dev/null and b/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c differ diff --git a/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c.info b/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c.info new file mode 100644 index 0000000..f569619 Binary files /dev/null and b/HoloBot/Library/metadata/85/854bfe8b80975784a8f2e564f5fde33c.info differ diff --git a/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282 b/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282 new file mode 100644 index 0000000..12b5ab1 Binary files /dev/null and b/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282 differ diff --git a/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282.info b/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282.info new file mode 100644 index 0000000..566b14d Binary files /dev/null and b/HoloBot/Library/metadata/85/85636330e25a7ac4c81b19530c5b8282.info differ diff --git a/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1 b/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1 new file mode 100644 index 0000000..b6438e4 Binary files /dev/null and b/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1 differ diff --git a/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1.info b/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1.info new file mode 100644 index 0000000..c31f51e Binary files /dev/null and b/HoloBot/Library/metadata/85/859fd434eb3777f47b8211fd408bf2f1.info differ diff --git a/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b b/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b new file mode 100644 index 0000000..eeea522 Binary files /dev/null and b/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b differ diff --git a/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b.info b/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b.info new file mode 100644 index 0000000..059138c Binary files /dev/null and b/HoloBot/Library/metadata/86/86574c70442309b45be5a1c37a37a40b.info differ diff --git a/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240 b/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240 new file mode 100644 index 0000000..503bbc5 Binary files /dev/null and b/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240 differ diff --git a/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240.info b/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240.info new file mode 100644 index 0000000..15c19c5 Binary files /dev/null and b/HoloBot/Library/metadata/86/86a383aa28d6d9d438388de19d876240.info differ diff --git a/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a b/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a new file mode 100644 index 0000000..863a675 Binary files /dev/null and b/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a differ diff --git a/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info b/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info new file mode 100644 index 0000000..4f4fbea Binary files /dev/null and b/HoloBot/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info differ diff --git a/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7 b/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7 new file mode 100644 index 0000000..c19da81 Binary files /dev/null and b/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7 differ diff --git a/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7.info b/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7.info new file mode 100644 index 0000000..6853c36 Binary files /dev/null and b/HoloBot/Library/metadata/86/86f67b8d77be6ca459d9b07628135fc7.info differ diff --git a/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba b/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba new file mode 100644 index 0000000..9965131 Binary files /dev/null and b/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba differ diff --git a/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info b/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info new file mode 100644 index 0000000..a35de2a Binary files /dev/null and b/HoloBot/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info differ diff --git a/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108 b/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108 new file mode 100644 index 0000000..ddb68cd Binary files /dev/null and b/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108 differ diff --git a/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108.info b/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108.info new file mode 100644 index 0000000..e9e1bbf Binary files /dev/null and b/HoloBot/Library/metadata/88/88677946afc0e6943891549b177f0108.info differ diff --git a/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd b/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd new file mode 100644 index 0000000..ddbe4c7 Binary files /dev/null and b/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd differ diff --git a/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd.info b/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd.info new file mode 100644 index 0000000..6ff8891 Binary files /dev/null and b/HoloBot/Library/metadata/88/8867d1f86747b5d42a16e6d01bcd94fd.info differ diff --git a/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f b/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f new file mode 100644 index 0000000..21e4dd7 Binary files /dev/null and b/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f differ diff --git a/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f.info b/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f.info new file mode 100644 index 0000000..fe4ebbf Binary files /dev/null and b/HoloBot/Library/metadata/88/88e5a9c38f6989249b88204932d7884f.info differ diff --git a/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198 b/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198 new file mode 100644 index 0000000..96fe020 Binary files /dev/null and b/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198 differ diff --git a/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198.info b/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198.info new file mode 100644 index 0000000..3319f72 Binary files /dev/null and b/HoloBot/Library/metadata/89/89140e4798c8c0d4f9c3544ecbdfc198.info differ diff --git a/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628 b/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628 new file mode 100644 index 0000000..55e907b Binary files /dev/null and b/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628 differ diff --git a/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628.info b/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628.info new file mode 100644 index 0000000..b42fa40 Binary files /dev/null and b/HoloBot/Library/metadata/89/89991b23f71485c498eb3b0ac0ca6628.info differ diff --git a/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e b/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e new file mode 100644 index 0000000..fef5bf7 Binary files /dev/null and b/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e differ diff --git a/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e.info b/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e.info new file mode 100644 index 0000000..816a31b Binary files /dev/null and b/HoloBot/Library/metadata/8a/8a64c8871bf2c454c9426d5cc20d938e.info differ diff --git a/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3 b/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3 new file mode 100644 index 0000000..9581fba Binary files /dev/null and b/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3 differ diff --git a/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3.info b/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3.info new file mode 100644 index 0000000..f8de037 Binary files /dev/null and b/HoloBot/Library/metadata/8a/8aaf37823b26ee449bb3b3d7775965c3.info differ diff --git a/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3 b/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3 new file mode 100644 index 0000000..9b30502 Binary files /dev/null and b/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3 differ diff --git a/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3.info b/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3.info new file mode 100644 index 0000000..49cc743 Binary files /dev/null and b/HoloBot/Library/metadata/8b/8b34d86fb1285344f9f865590a0e7fa3.info differ diff --git a/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df b/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df new file mode 100644 index 0000000..b5ae2f9 Binary files /dev/null and b/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df differ diff --git a/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df.info b/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df.info new file mode 100644 index 0000000..e7e48be Binary files /dev/null and b/HoloBot/Library/metadata/8d/8d989070713c80b47a4b77c5a59cf7df.info differ diff --git a/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71 b/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71 new file mode 100644 index 0000000..b12bd04 Binary files /dev/null and b/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71 differ diff --git a/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71.info b/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71.info new file mode 100644 index 0000000..9baa7d6 Binary files /dev/null and b/HoloBot/Library/metadata/8d/8de00229316af434a98b5a44fad42b71.info differ diff --git a/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871 b/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871 new file mode 100644 index 0000000..ae46ee5 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871 differ diff --git a/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871.info b/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871.info new file mode 100644 index 0000000..f2e880e Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e030fe9817319d4fab480567eb92871.info differ diff --git a/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 b/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 new file mode 100644 index 0000000..27a7a7d Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 differ diff --git a/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info b/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info new file mode 100644 index 0000000..074026e Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info differ diff --git a/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe b/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe new file mode 100644 index 0000000..a4c9495 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe differ diff --git a/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info b/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info new file mode 100644 index 0000000..4a69639 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info differ diff --git a/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15 b/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15 new file mode 100644 index 0000000..3f33001 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15 differ diff --git a/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15.info b/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15.info new file mode 100644 index 0000000..3865f98 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8e7ff86547235d74d900689195c58f15.info differ diff --git a/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72 b/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72 new file mode 100644 index 0000000..b665927 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72 differ diff --git a/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72.info b/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72.info new file mode 100644 index 0000000..d26a058 Binary files /dev/null and b/HoloBot/Library/metadata/8e/8ed8def72dfb85348967b383883eab72.info differ diff --git a/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1 b/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1 new file mode 100644 index 0000000..ebc2589 Binary files /dev/null and b/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1 differ diff --git a/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1.info b/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1.info new file mode 100644 index 0000000..db76a7e Binary files /dev/null and b/HoloBot/Library/metadata/8f/8f7e1f5c1abbd334191ed4302b8d2bd1.info differ diff --git a/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6 b/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6 new file mode 100644 index 0000000..5155047 Binary files /dev/null and b/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6 differ diff --git a/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6.info b/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6.info new file mode 100644 index 0000000..f2e39e1 Binary files /dev/null and b/HoloBot/Library/metadata/8f/8fa5da1314a4aa745a5be3f0f6ab6bd6.info differ diff --git a/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f b/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f new file mode 100644 index 0000000..90181c9 Binary files /dev/null and b/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f differ diff --git a/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f.info b/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f.info new file mode 100644 index 0000000..1f3ab44 Binary files /dev/null and b/HoloBot/Library/metadata/8f/8fef36dec57996841a6a9009471a6d8f.info differ diff --git a/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03 b/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03 new file mode 100644 index 0000000..0cdbc7d Binary files /dev/null and b/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03 differ diff --git a/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03.info b/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03.info new file mode 100644 index 0000000..bed40c6 Binary files /dev/null and b/HoloBot/Library/metadata/90/900c184e3efb3864197d48dc1a418d03.info differ diff --git a/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131 b/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131 new file mode 100644 index 0000000..868c8dd Binary files /dev/null and b/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131 differ diff --git a/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131.info b/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131.info new file mode 100644 index 0000000..eb75d3c Binary files /dev/null and b/HoloBot/Library/metadata/90/900d99927577df241908a2508ef83131.info differ diff --git a/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5 b/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5 new file mode 100644 index 0000000..d646ff6 Binary files /dev/null and b/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5 differ diff --git a/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5.info b/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5.info new file mode 100644 index 0000000..2d18387 Binary files /dev/null and b/HoloBot/Library/metadata/90/907120ad70f1b9e468d249db24f0b1e5.info differ diff --git a/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4 b/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4 new file mode 100644 index 0000000..2183a67 Binary files /dev/null and b/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4 differ diff --git a/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4.info b/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4.info new file mode 100644 index 0000000..0f07a59 Binary files /dev/null and b/HoloBot/Library/metadata/90/90749889d87976143a9e21072d2434b4.info differ diff --git a/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05 b/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05 new file mode 100644 index 0000000..94bc0b9 Binary files /dev/null and b/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05 differ diff --git a/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05.info b/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05.info new file mode 100644 index 0000000..f8a5474 Binary files /dev/null and b/HoloBot/Library/metadata/91/9180a2fc480b69b4887ffef09fae1c05.info differ diff --git a/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f b/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f new file mode 100644 index 0000000..08cb84d Binary files /dev/null and b/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f differ diff --git a/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f.info b/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f.info new file mode 100644 index 0000000..1360e86 Binary files /dev/null and b/HoloBot/Library/metadata/92/9230b89c8eef3f94f98f6cbee39b500f.info differ diff --git a/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef b/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef new file mode 100644 index 0000000..12b6c5c Binary files /dev/null and b/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef differ diff --git a/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef.info b/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef.info new file mode 100644 index 0000000..16be3e4 Binary files /dev/null and b/HoloBot/Library/metadata/92/92d599c3060487d4493f33566bff57ef.info differ diff --git a/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb b/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb new file mode 100644 index 0000000..f6ed1c3 Binary files /dev/null and b/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb differ diff --git a/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb.info b/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb.info new file mode 100644 index 0000000..161bd67 Binary files /dev/null and b/HoloBot/Library/metadata/93/93c8b5a61c22fa44e9f96e3273afb6fb.info differ diff --git a/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e b/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e new file mode 100644 index 0000000..34d3e38 Binary files /dev/null and b/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e differ diff --git a/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e.info b/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e.info new file mode 100644 index 0000000..7697bd6 Binary files /dev/null and b/HoloBot/Library/metadata/94/94445f39cf0fd084386c1495b0e0cb5e.info differ diff --git a/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2 b/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2 new file mode 100644 index 0000000..f3cae61 Binary files /dev/null and b/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2 differ diff --git a/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2.info b/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2.info new file mode 100644 index 0000000..16b86ee Binary files /dev/null and b/HoloBot/Library/metadata/94/94564d840c7fb0442b70a8a6ee003ac2.info differ diff --git a/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899 b/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899 new file mode 100644 index 0000000..6f49374 Binary files /dev/null and b/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899 differ diff --git a/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899.info b/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899.info new file mode 100644 index 0000000..927d436 Binary files /dev/null and b/HoloBot/Library/metadata/95/95d2ce0a001b47e408d513b5017f2899.info differ diff --git a/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac b/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac new file mode 100644 index 0000000..31d6630 Binary files /dev/null and b/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac differ diff --git a/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac.info b/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac.info new file mode 100644 index 0000000..c0e301f Binary files /dev/null and b/HoloBot/Library/metadata/96/96002e6c3375b69438b84427abc094ac.info differ diff --git a/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011 b/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011 new file mode 100644 index 0000000..3100c1e Binary files /dev/null and b/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011 differ diff --git a/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011.info b/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011.info new file mode 100644 index 0000000..a55ce9e Binary files /dev/null and b/HoloBot/Library/metadata/96/96401c9744e9a8f4db74d255e81b2011.info differ diff --git a/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c b/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c new file mode 100644 index 0000000..f6b2067 Binary files /dev/null and b/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c differ diff --git a/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c.info b/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c.info new file mode 100644 index 0000000..31c7d0d Binary files /dev/null and b/HoloBot/Library/metadata/96/9660420db2c085246ad4af96397bd31c.info differ diff --git a/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6 b/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6 new file mode 100644 index 0000000..bfd6572 Binary files /dev/null and b/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6 differ diff --git a/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6.info b/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6.info new file mode 100644 index 0000000..5845490 Binary files /dev/null and b/HoloBot/Library/metadata/96/96faff5b959398e43bee4052ebf68df6.info differ diff --git a/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159 b/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159 new file mode 100644 index 0000000..df2addc Binary files /dev/null and b/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159 differ diff --git a/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159.info b/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159.info new file mode 100644 index 0000000..e77a110 Binary files /dev/null and b/HoloBot/Library/metadata/97/9727c082b70b9934a9136d337efb7159.info differ diff --git a/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257 b/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257 new file mode 100644 index 0000000..5e42964 Binary files /dev/null and b/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257 differ diff --git a/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257.info b/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257.info new file mode 100644 index 0000000..fe6431c Binary files /dev/null and b/HoloBot/Library/metadata/97/978345edff4a3ea4cb8ca1e56e7d3257.info differ diff --git a/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484 b/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484 new file mode 100644 index 0000000..2543675 Binary files /dev/null and b/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484 differ diff --git a/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484.info b/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484.info new file mode 100644 index 0000000..c6fc887 Binary files /dev/null and b/HoloBot/Library/metadata/97/978dacb7a2cc0fd45aba947d6d966484.info differ diff --git a/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead b/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead new file mode 100644 index 0000000..eca7718 Binary files /dev/null and b/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead differ diff --git a/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info b/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info new file mode 100644 index 0000000..fc19d4e Binary files /dev/null and b/HoloBot/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info differ diff --git a/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9 b/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9 new file mode 100644 index 0000000..3f61eae Binary files /dev/null and b/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9 differ diff --git a/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9.info b/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9.info new file mode 100644 index 0000000..98fdba3 Binary files /dev/null and b/HoloBot/Library/metadata/98/98d9db324dda3a44e93fbf3b7ce9eca9.info differ diff --git a/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee b/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee new file mode 100644 index 0000000..8bc9b21 Binary files /dev/null and b/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee differ diff --git a/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee.info b/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee.info new file mode 100644 index 0000000..5e0212f Binary files /dev/null and b/HoloBot/Library/metadata/98/98f68f59a0a9b4a4a999e3cb0f9214ee.info differ diff --git a/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679 b/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679 new file mode 100644 index 0000000..6bedf5f Binary files /dev/null and b/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679 differ diff --git a/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679.info b/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679.info new file mode 100644 index 0000000..301b9fd Binary files /dev/null and b/HoloBot/Library/metadata/9a/9a100833b0ac71f418b99081a6bdd679.info differ diff --git a/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3 b/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3 new file mode 100644 index 0000000..dc6ca59 Binary files /dev/null and b/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3 differ diff --git a/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3.info b/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3.info new file mode 100644 index 0000000..630c83e Binary files /dev/null and b/HoloBot/Library/metadata/9a/9af4ac91e9017f34c971bbf5e12948d3.info differ diff --git a/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699 b/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699 new file mode 100644 index 0000000..fa71592 Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699 differ diff --git a/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699.info b/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699.info new file mode 100644 index 0000000..dfc8de4 Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b6081f8a035176418480ef90a267699.info differ diff --git a/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f b/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f new file mode 100644 index 0000000..0874723 Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f differ diff --git a/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f.info b/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f.info new file mode 100644 index 0000000..5b4081a Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b993d330a4b0d14f92ac8d1b5cfa26f.info differ diff --git a/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3 b/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3 new file mode 100644 index 0000000..d04340a Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3 differ diff --git a/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3.info b/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3.info new file mode 100644 index 0000000..828f066 Binary files /dev/null and b/HoloBot/Library/metadata/9b/9b9c87aaa636d31488ddd2b3e3fe29e3.info differ diff --git a/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190 b/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190 new file mode 100644 index 0000000..88248b9 Binary files /dev/null and b/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190 differ diff --git a/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190.info b/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190.info new file mode 100644 index 0000000..d42b38d Binary files /dev/null and b/HoloBot/Library/metadata/9c/9c0c186978d78cd47b7b1ab5eebef190.info differ diff --git a/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d b/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d new file mode 100644 index 0000000..7f7def2 Binary files /dev/null and b/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d differ diff --git a/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d.info b/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d.info new file mode 100644 index 0000000..67283d3 Binary files /dev/null and b/HoloBot/Library/metadata/9c/9c951627c9d97da41a8eff3de939d13d.info differ diff --git a/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809 b/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809 new file mode 100644 index 0000000..7a902ff Binary files /dev/null and b/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809 differ diff --git a/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809.info b/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809.info new file mode 100644 index 0000000..4565ab1 Binary files /dev/null and b/HoloBot/Library/metadata/9c/9cf6ab24363b7a74da25766ea8ba6809.info differ diff --git a/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5 b/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5 new file mode 100644 index 0000000..0c08eea Binary files /dev/null and b/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5 differ diff --git a/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5.info b/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5.info new file mode 100644 index 0000000..3bb5a3f Binary files /dev/null and b/HoloBot/Library/metadata/9d/9d5919a75953fa3499d008309fb244c5.info differ diff --git a/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78 b/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78 new file mode 100644 index 0000000..35d0e09 Binary files /dev/null and b/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78 differ diff --git a/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78.info b/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78.info new file mode 100644 index 0000000..44097b0 Binary files /dev/null and b/HoloBot/Library/metadata/9f/9f6f54dee03b48c47b5d6fd906d49c78.info differ diff --git a/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e b/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e new file mode 100644 index 0000000..d4c7ae2 Binary files /dev/null and b/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e differ diff --git a/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e.info b/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e.info new file mode 100644 index 0000000..a549e09 Binary files /dev/null and b/HoloBot/Library/metadata/a0/a0fefe5244ec4a643b7939a25ffcb60e.info differ diff --git a/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4 b/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4 new file mode 100644 index 0000000..787dc93 Binary files /dev/null and b/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4 differ diff --git a/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4.info b/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4.info new file mode 100644 index 0000000..86c3a35 Binary files /dev/null and b/HoloBot/Library/metadata/a1/a1b63e0a8ff81124e98ad4e0f40a81d4.info differ diff --git a/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f b/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f new file mode 100644 index 0000000..8a43286 Binary files /dev/null and b/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f differ diff --git a/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f.info b/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f.info new file mode 100644 index 0000000..d26a2c0 Binary files /dev/null and b/HoloBot/Library/metadata/a1/a1c5d337c0c7a9d4ea6712d7150cd94f.info differ diff --git a/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f b/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f new file mode 100644 index 0000000..7bf0139 Binary files /dev/null and b/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f differ diff --git a/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f.info b/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f.info new file mode 100644 index 0000000..1e3ffed Binary files /dev/null and b/HoloBot/Library/metadata/a2/a21436697051b874fa00fdcca17c671f.info differ diff --git a/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f b/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f new file mode 100644 index 0000000..183b002 Binary files /dev/null and b/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f differ diff --git a/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f.info b/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f.info new file mode 100644 index 0000000..b0a9310 Binary files /dev/null and b/HoloBot/Library/metadata/a2/a259cd4797848ea429ec4375fd8bbc5f.info differ diff --git a/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7 b/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7 new file mode 100644 index 0000000..bf22031 Binary files /dev/null and b/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7 differ diff --git a/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7.info b/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7.info new file mode 100644 index 0000000..bccbcfc Binary files /dev/null and b/HoloBot/Library/metadata/a2/a2c9c4679b0c3cf47b3ba3a449c985d7.info differ diff --git a/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b b/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b new file mode 100644 index 0000000..f27b432 Binary files /dev/null and b/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b differ diff --git a/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b.info b/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b.info new file mode 100644 index 0000000..fcb923c Binary files /dev/null and b/HoloBot/Library/metadata/a2/a2eaeab7e0387ee4a87b9af8077a546b.info differ diff --git a/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1 b/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1 new file mode 100644 index 0000000..3ca3d18 Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1 differ diff --git a/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1.info b/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1.info new file mode 100644 index 0000000..ae9c362 Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4af844808c503d4dbe22d7d215745b1.info differ diff --git a/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53 b/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53 new file mode 100644 index 0000000..deb3e3a Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53 differ diff --git a/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53.info b/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53.info new file mode 100644 index 0000000..d7acb74 Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4d43a912ea5ac9408a3e9d407d36b53.info differ diff --git a/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4 b/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4 new file mode 100644 index 0000000..be7460a Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4 differ diff --git a/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4.info b/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4.info new file mode 100644 index 0000000..ccecb05 Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4ea461bc5294b149a25fd3a1e5e77b4.info differ diff --git a/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4 b/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4 new file mode 100644 index 0000000..f253906 Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4 differ diff --git a/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4.info b/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4.info new file mode 100644 index 0000000..ba7d1bc Binary files /dev/null and b/HoloBot/Library/metadata/a4/a4f8cd12149a6a44daed964307564cf4.info differ diff --git a/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342 b/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342 new file mode 100644 index 0000000..f225ebf Binary files /dev/null and b/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342 differ diff --git a/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342.info b/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342.info new file mode 100644 index 0000000..2bff7d1 Binary files /dev/null and b/HoloBot/Library/metadata/a5/a51f6f266d790c94294e3a2e4c9fa342.info differ diff --git a/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741 b/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741 new file mode 100644 index 0000000..55d331b Binary files /dev/null and b/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741 differ diff --git a/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741.info b/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741.info new file mode 100644 index 0000000..732a595 Binary files /dev/null and b/HoloBot/Library/metadata/a5/a52a050b94d6d8645a4fd8c551674741.info differ diff --git a/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9 b/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9 new file mode 100644 index 0000000..3649feb Binary files /dev/null and b/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9 differ diff --git a/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9.info b/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9.info new file mode 100644 index 0000000..8191ed2 Binary files /dev/null and b/HoloBot/Library/metadata/a5/a5376111b31305f4aa858ce47a5097b9.info differ diff --git a/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c b/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c new file mode 100644 index 0000000..fb2fe09 Binary files /dev/null and b/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c differ diff --git a/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c.info b/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c.info new file mode 100644 index 0000000..ea2367f Binary files /dev/null and b/HoloBot/Library/metadata/a6/a611e772ef8ddf64d8106a9cbb70f31c.info differ diff --git a/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261 b/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261 new file mode 100644 index 0000000..3301a6a Binary files /dev/null and b/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261 differ diff --git a/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261.info b/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261.info new file mode 100644 index 0000000..2652f06 Binary files /dev/null and b/HoloBot/Library/metadata/a6/a659c337a3d58c64bb6bddb1f8621261.info differ diff --git a/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f b/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f new file mode 100644 index 0000000..be4283c Binary files /dev/null and b/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f differ diff --git a/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f.info b/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f.info new file mode 100644 index 0000000..46d2d12 Binary files /dev/null and b/HoloBot/Library/metadata/a6/a6c8ebce1b5778243a2cf54e0783964f.info differ diff --git a/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b b/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b new file mode 100644 index 0000000..5c2ecd6 Binary files /dev/null and b/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b differ diff --git a/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b.info b/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b.info new file mode 100644 index 0000000..dfbbcdd Binary files /dev/null and b/HoloBot/Library/metadata/a6/a6cfe7b569c889143beffe1a1aa92b4b.info differ diff --git a/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36 b/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36 new file mode 100644 index 0000000..21b1176 Binary files /dev/null and b/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36 differ diff --git a/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36.info b/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36.info new file mode 100644 index 0000000..66c0e2f Binary files /dev/null and b/HoloBot/Library/metadata/a7/a769fd6bfdcce194f87a5bfee2495f36.info differ diff --git a/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0 b/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0 new file mode 100644 index 0000000..e34c5e6 Binary files /dev/null and b/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0 differ diff --git a/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0.info b/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0.info new file mode 100644 index 0000000..a657c55 Binary files /dev/null and b/HoloBot/Library/metadata/a7/a780ad3b7aa945548a27f98be252d2f0.info differ diff --git a/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80 b/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80 new file mode 100644 index 0000000..cc10764 Binary files /dev/null and b/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80 differ diff --git a/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80.info b/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80.info new file mode 100644 index 0000000..31a71e5 Binary files /dev/null and b/HoloBot/Library/metadata/a8/a8170d4829430944d9ce829c225d7e80.info differ diff --git a/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6 b/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6 new file mode 100644 index 0000000..a1f7210 Binary files /dev/null and b/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6 differ diff --git a/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6.info b/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6.info new file mode 100644 index 0000000..b38008a Binary files /dev/null and b/HoloBot/Library/metadata/a8/a82e601d90c076c458969fbd127780e6.info differ diff --git a/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0 b/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0 new file mode 100644 index 0000000..1678241 Binary files /dev/null and b/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0 differ diff --git a/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0.info b/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0.info new file mode 100644 index 0000000..4a69d49 Binary files /dev/null and b/HoloBot/Library/metadata/a9/a99d5ba76fdfa2b4bb8a84437b116eb0.info differ diff --git a/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8 b/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8 new file mode 100644 index 0000000..91075e2 Binary files /dev/null and b/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8 differ diff --git a/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8.info b/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8.info new file mode 100644 index 0000000..da23f5f Binary files /dev/null and b/HoloBot/Library/metadata/aa/aa5a1f5c296fe8c48a336bca1f65bef8.info differ diff --git a/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6 b/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6 new file mode 100644 index 0000000..c108865 Binary files /dev/null and b/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6 differ diff --git a/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6.info b/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6.info new file mode 100644 index 0000000..a8b0df8 Binary files /dev/null and b/HoloBot/Library/metadata/aa/aaeec22e4394fe84eb076f236e01b4f6.info differ diff --git a/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844 b/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844 new file mode 100644 index 0000000..ae92371 Binary files /dev/null and b/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844 differ diff --git a/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844.info b/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844.info new file mode 100644 index 0000000..244cf91 Binary files /dev/null and b/HoloBot/Library/metadata/aa/aaf540edf943b014c9b1cb13622dd844.info differ diff --git a/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637 b/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637 new file mode 100644 index 0000000..9bb5849 Binary files /dev/null and b/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637 differ diff --git a/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637.info b/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637.info new file mode 100644 index 0000000..fcbe708 Binary files /dev/null and b/HoloBot/Library/metadata/ac/ac8224f4a25f6fa45ba349edce232637.info differ diff --git a/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912 b/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912 new file mode 100644 index 0000000..f6e71ae Binary files /dev/null and b/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912 differ diff --git a/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912.info b/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912.info new file mode 100644 index 0000000..c2abd95 Binary files /dev/null and b/HoloBot/Library/metadata/ac/ac8d5b128a1d8204fb76c86f47b75912.info differ diff --git a/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248 b/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248 new file mode 100644 index 0000000..788a63b Binary files /dev/null and b/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248 differ diff --git a/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248.info b/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248.info new file mode 100644 index 0000000..d75c52c Binary files /dev/null and b/HoloBot/Library/metadata/ac/aca36d332a4c62a43b19ab4aa21d2248.info differ diff --git a/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa b/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa new file mode 100644 index 0000000..057107e Binary files /dev/null and b/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa differ diff --git a/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa.info b/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa.info new file mode 100644 index 0000000..b3869a5 Binary files /dev/null and b/HoloBot/Library/metadata/ac/acbc42345d6a90543ab66003022593fa.info differ diff --git a/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f b/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f new file mode 100644 index 0000000..820ade7 Binary files /dev/null and b/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f differ diff --git a/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info b/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info new file mode 100644 index 0000000..c70deee Binary files /dev/null and b/HoloBot/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info differ diff --git a/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc b/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc new file mode 100644 index 0000000..98e10ef Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc differ diff --git a/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc.info b/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc.info new file mode 100644 index 0000000..61157d7 Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae04686128a4f2d4980a2ee5eaf185cc.info differ diff --git a/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067 b/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067 new file mode 100644 index 0000000..f446fb6 Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067 differ diff --git a/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067.info b/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067.info new file mode 100644 index 0000000..25d311c Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae7bfcc0c4dac66448ba353258b4e067.info differ diff --git a/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7 b/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7 new file mode 100644 index 0000000..68195da Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7 differ diff --git a/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7.info b/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7.info new file mode 100644 index 0000000..02fc488 Binary files /dev/null and b/HoloBot/Library/metadata/ae/ae82d911aef56b0489802527281c3dc7.info differ diff --git a/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb b/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb new file mode 100644 index 0000000..4c26492 Binary files /dev/null and b/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb differ diff --git a/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb.info b/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb.info new file mode 100644 index 0000000..cc0e869 Binary files /dev/null and b/HoloBot/Library/metadata/af/af9459aa91259ae4e8255e96c78788cb.info differ diff --git a/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822 b/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822 new file mode 100644 index 0000000..1f4bce9 Binary files /dev/null and b/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822 differ diff --git a/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822.info b/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822.info new file mode 100644 index 0000000..fe7c4b6 Binary files /dev/null and b/HoloBot/Library/metadata/af/afa1ae235bc6cfa43addd1435e2fd822.info differ diff --git a/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e b/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e new file mode 100644 index 0000000..acede8e Binary files /dev/null and b/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e differ diff --git a/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e.info b/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e.info new file mode 100644 index 0000000..1e102a5 Binary files /dev/null and b/HoloBot/Library/metadata/b0/b062bce6a098ab74992080eb9f5b399e.info differ diff --git a/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559 b/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559 new file mode 100644 index 0000000..2859561 Binary files /dev/null and b/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559 differ diff --git a/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559.info b/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559.info new file mode 100644 index 0000000..0047503 Binary files /dev/null and b/HoloBot/Library/metadata/b0/b0aba8bbc779db14391ff2406b808559.info differ diff --git a/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423 b/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423 new file mode 100644 index 0000000..baaf38a Binary files /dev/null and b/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423 differ diff --git a/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423.info b/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423.info new file mode 100644 index 0000000..fb9d3db Binary files /dev/null and b/HoloBot/Library/metadata/b0/b0ed29a95096a25448535f8df9cf0423.info differ diff --git a/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac b/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac new file mode 100644 index 0000000..60d7065 Binary files /dev/null and b/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac differ diff --git a/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac.info b/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac.info new file mode 100644 index 0000000..89af2bd Binary files /dev/null and b/HoloBot/Library/metadata/b1/b160d197a8ca1894796ae263bafec0ac.info differ diff --git a/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532 b/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532 new file mode 100644 index 0000000..b1a5ae8 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532 differ diff --git a/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532.info b/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532.info new file mode 100644 index 0000000..ff366ca Binary files /dev/null and b/HoloBot/Library/metadata/b2/b21aa08825c93084cb4072b24fc90532.info differ diff --git a/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623 b/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623 new file mode 100644 index 0000000..bec1dc7 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623 differ diff --git a/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623.info b/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623.info new file mode 100644 index 0000000..6c119e8 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2a98b181acba5549af3d852c7664623.info differ diff --git a/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84 b/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84 new file mode 100644 index 0000000..ab0b851 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84 differ diff --git a/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84.info b/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84.info new file mode 100644 index 0000000..7b7a49f Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2be6d5d7e2e5e74a8edecf0ede9dc84.info differ diff --git a/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 b/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 new file mode 100644 index 0000000..1a93964 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 differ diff --git a/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info b/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info new file mode 100644 index 0000000..004c758 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info differ diff --git a/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243 b/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243 new file mode 100644 index 0000000..7bbfedf Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243 differ diff --git a/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243.info b/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243.info new file mode 100644 index 0000000..ab4f813 Binary files /dev/null and b/HoloBot/Library/metadata/b2/b2db04283121ca74495c2ee000fb4243.info differ diff --git a/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb b/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb new file mode 100644 index 0000000..0625eff Binary files /dev/null and b/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb differ diff --git a/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb.info b/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb.info new file mode 100644 index 0000000..456665b Binary files /dev/null and b/HoloBot/Library/metadata/b3/b304d3268ca1ec74aa0fd59559e3d8cb.info differ diff --git a/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac b/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac new file mode 100644 index 0000000..fc297e1 Binary files /dev/null and b/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac differ diff --git a/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac.info b/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac.info new file mode 100644 index 0000000..cc607f7 Binary files /dev/null and b/HoloBot/Library/metadata/b3/b3af9ec35c2752747acc7943104003ac.info differ diff --git a/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2 b/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2 new file mode 100644 index 0000000..bf39a78 Binary files /dev/null and b/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2 differ diff --git a/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2.info b/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2.info new file mode 100644 index 0000000..bf44970 Binary files /dev/null and b/HoloBot/Library/metadata/b3/b3b5e22dabcc1014aa626c08ed6573b2.info differ diff --git a/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b b/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b new file mode 100644 index 0000000..e8f5ae7 Binary files /dev/null and b/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b differ diff --git a/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b.info b/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b.info new file mode 100644 index 0000000..e4f1cb7 Binary files /dev/null and b/HoloBot/Library/metadata/b4/b404a9703a0c1784b9c8f2de897cae3b.info differ diff --git a/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde b/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde new file mode 100644 index 0000000..56e602f Binary files /dev/null and b/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde differ diff --git a/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde.info b/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde.info new file mode 100644 index 0000000..26238ff Binary files /dev/null and b/HoloBot/Library/metadata/b4/b474aba3141da224aa5a9100f8838cde.info differ diff --git a/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94 b/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94 new file mode 100644 index 0000000..578ee05 Binary files /dev/null and b/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94 differ diff --git a/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94.info b/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94.info new file mode 100644 index 0000000..d803703 Binary files /dev/null and b/HoloBot/Library/metadata/b4/b4776f41597d1274488d795eb0881c94.info differ diff --git a/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479 b/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479 new file mode 100644 index 0000000..6efc041 Binary files /dev/null and b/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479 differ diff --git a/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479.info b/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479.info new file mode 100644 index 0000000..43807b2 Binary files /dev/null and b/HoloBot/Library/metadata/b6/b605ec12fba0e1e4ca30af2b14874479.info differ diff --git a/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5 b/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5 new file mode 100644 index 0000000..99c6c11 Binary files /dev/null and b/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5 differ diff --git a/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5.info b/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5.info new file mode 100644 index 0000000..fa479fb Binary files /dev/null and b/HoloBot/Library/metadata/b6/b692ae4f7b48b624796ce8a9aa8611f5.info differ diff --git a/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc b/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc new file mode 100644 index 0000000..c09c9fe Binary files /dev/null and b/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc differ diff --git a/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc.info b/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc.info new file mode 100644 index 0000000..77a80d4 Binary files /dev/null and b/HoloBot/Library/metadata/b7/b79c91d1ffb021347a4135df5ddd1efc.info differ diff --git a/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091 b/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091 new file mode 100644 index 0000000..7a04834 Binary files /dev/null and b/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091 differ diff --git a/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091.info b/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091.info new file mode 100644 index 0000000..b785693 Binary files /dev/null and b/HoloBot/Library/metadata/b7/b7cea557c59ff6e4992ef89d5e6a8091.info differ diff --git a/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b b/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b new file mode 100644 index 0000000..e1728ff Binary files /dev/null and b/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b differ diff --git a/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b.info b/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b.info new file mode 100644 index 0000000..bcb5525 Binary files /dev/null and b/HoloBot/Library/metadata/b7/b7e7ac1cdf109fd4a921ab2ba712a48b.info differ diff --git a/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6 b/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6 new file mode 100644 index 0000000..874dea8 Binary files /dev/null and b/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6 differ diff --git a/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6.info b/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6.info new file mode 100644 index 0000000..34cd1c4 Binary files /dev/null and b/HoloBot/Library/metadata/b8/b81e3e700505863408cacaa0346cb1a6.info differ diff --git a/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed b/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed new file mode 100644 index 0000000..6f20df7 Binary files /dev/null and b/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed differ diff --git a/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed.info b/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed.info new file mode 100644 index 0000000..718aa63 Binary files /dev/null and b/HoloBot/Library/metadata/b8/b8a8324793a77d14fad6ef1dc06c55ed.info differ diff --git a/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4 b/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4 new file mode 100644 index 0000000..eeb757a Binary files /dev/null and b/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4 differ diff --git a/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4.info b/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4.info new file mode 100644 index 0000000..9e6ecd4 Binary files /dev/null and b/HoloBot/Library/metadata/b8/b8d4f41ccc5667c4a8bf2f57a56763d4.info differ diff --git a/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf b/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf new file mode 100644 index 0000000..1caa634 Binary files /dev/null and b/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf differ diff --git a/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf.info b/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf.info new file mode 100644 index 0000000..05180c7 Binary files /dev/null and b/HoloBot/Library/metadata/b9/b9cf9ba8dbd1c494d906717cc1fb8ccf.info differ diff --git a/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa b/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa new file mode 100644 index 0000000..2e1e62e Binary files /dev/null and b/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa differ diff --git a/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa.info b/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa.info new file mode 100644 index 0000000..e40e032 Binary files /dev/null and b/HoloBot/Library/metadata/ba/ba62e784cfa0c0145819cc7dfdcf8faa.info differ diff --git a/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f b/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f new file mode 100644 index 0000000..ccb0ba7 Binary files /dev/null and b/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f differ diff --git a/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f.info b/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f.info new file mode 100644 index 0000000..3b320de Binary files /dev/null and b/HoloBot/Library/metadata/bb/bb226cc31f45568428e450bb18e01d2f.info differ diff --git a/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160 b/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160 new file mode 100644 index 0000000..02ccb9f Binary files /dev/null and b/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160 differ diff --git a/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160.info b/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160.info new file mode 100644 index 0000000..18549cf Binary files /dev/null and b/HoloBot/Library/metadata/bc/bc185db46b00c9840b977f9e46183160.info differ diff --git a/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96 b/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96 new file mode 100644 index 0000000..8b0fd26 Binary files /dev/null and b/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96 differ diff --git a/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96.info b/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96.info new file mode 100644 index 0000000..d8f8bd1 Binary files /dev/null and b/HoloBot/Library/metadata/bc/bca5b310aad363f4da86850d2785aa96.info differ diff --git a/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7 b/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7 new file mode 100644 index 0000000..ce4fc7b Binary files /dev/null and b/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7 differ diff --git a/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7.info b/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7.info new file mode 100644 index 0000000..259e414 Binary files /dev/null and b/HoloBot/Library/metadata/bc/bcc7f229b101b9e449ec9126419f76a7.info differ diff --git a/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b b/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b new file mode 100644 index 0000000..f152d56 Binary files /dev/null and b/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b differ diff --git a/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b.info b/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b.info new file mode 100644 index 0000000..b03b996 Binary files /dev/null and b/HoloBot/Library/metadata/bc/bcf9bdf58e801514daf1ce7f10b88a7b.info differ diff --git a/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665 b/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665 new file mode 100644 index 0000000..70cbfc9 Binary files /dev/null and b/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665 differ diff --git a/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665.info b/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665.info new file mode 100644 index 0000000..b61ebb5 Binary files /dev/null and b/HoloBot/Library/metadata/bd/bdeaecb2c7be32b4189a79a9406b9665.info differ diff --git a/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399 b/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399 new file mode 100644 index 0000000..7020cdb Binary files /dev/null and b/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399 differ diff --git a/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399.info b/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399.info new file mode 100644 index 0000000..983cd18 Binary files /dev/null and b/HoloBot/Library/metadata/be/be171acc78cadf34f92c4e83e4b02399.info differ diff --git a/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20 b/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20 new file mode 100644 index 0000000..644937b Binary files /dev/null and b/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20 differ diff --git a/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20.info b/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20.info new file mode 100644 index 0000000..033a597 Binary files /dev/null and b/HoloBot/Library/metadata/be/be9a5b811786c044e8c9fd2d5b866a20.info differ diff --git a/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e b/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e new file mode 100644 index 0000000..eeabc3e Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e differ diff --git a/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e.info b/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e.info new file mode 100644 index 0000000..2f56e73 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf232d359eba35a438f02959ffc16a6e.info differ diff --git a/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880 b/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880 new file mode 100644 index 0000000..90a2082 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880 differ diff --git a/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880.info b/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880.info new file mode 100644 index 0000000..12256b9 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf27ff59d97cfeb4a9f82496059df880.info differ diff --git a/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479 b/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479 new file mode 100644 index 0000000..5cd3b0d Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479 differ diff --git a/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479.info b/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479.info new file mode 100644 index 0000000..a211d4b Binary files /dev/null and b/HoloBot/Library/metadata/bf/bf2a32f9ebc013148a3bb80b5c03d479.info differ diff --git a/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97 b/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97 new file mode 100644 index 0000000..5e022d6 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97 differ diff --git a/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97.info b/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97.info new file mode 100644 index 0000000..6606e12 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bfbdaf6dd4221fc4685b736c65216b97.info differ diff --git a/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60 b/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60 new file mode 100644 index 0000000..6bd8cef Binary files /dev/null and b/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60 differ diff --git a/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60.info b/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60.info new file mode 100644 index 0000000..db05db1 Binary files /dev/null and b/HoloBot/Library/metadata/bf/bfdc7f60d7205c84f82a4806a5352d60.info differ diff --git a/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233 b/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233 new file mode 100644 index 0000000..06838f6 Binary files /dev/null and b/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233 differ diff --git a/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233.info b/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233.info new file mode 100644 index 0000000..f691653 Binary files /dev/null and b/HoloBot/Library/metadata/c0/c02ef9356d3e1814e8c651f9856f5233.info differ diff --git a/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171 b/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171 new file mode 100644 index 0000000..ee8b10f Binary files /dev/null and b/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171 differ diff --git a/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171.info b/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171.info new file mode 100644 index 0000000..0ce3865 Binary files /dev/null and b/HoloBot/Library/metadata/c1/c1000081192be7347a0ad0c380ed6171.info differ diff --git a/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c b/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c new file mode 100644 index 0000000..659d4f8 Binary files /dev/null and b/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c differ diff --git a/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c.info b/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c.info new file mode 100644 index 0000000..210091b Binary files /dev/null and b/HoloBot/Library/metadata/c2/c21482d129e10ca4c9c1be9399f3a88c.info differ diff --git a/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f b/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f new file mode 100644 index 0000000..45534c1 Binary files /dev/null and b/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f differ diff --git a/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f.info b/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f.info new file mode 100644 index 0000000..901f996 Binary files /dev/null and b/HoloBot/Library/metadata/c4/c4274adbfd91e4a4dbc9b93da052ed4f.info differ diff --git a/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6 b/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6 new file mode 100644 index 0000000..7de03b9 Binary files /dev/null and b/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6 differ diff --git a/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6.info b/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6.info new file mode 100644 index 0000000..181773b Binary files /dev/null and b/HoloBot/Library/metadata/c5/c527ac8839879014ab405b6cb5ee39e6.info differ diff --git a/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a b/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a new file mode 100644 index 0000000..8d6291a Binary files /dev/null and b/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a differ diff --git a/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a.info b/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a.info new file mode 100644 index 0000000..5086b30 Binary files /dev/null and b/HoloBot/Library/metadata/c5/c54c43fae64ba1845a3579779818700a.info differ diff --git a/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa b/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa new file mode 100644 index 0000000..740482d Binary files /dev/null and b/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa differ diff --git a/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa.info b/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa.info new file mode 100644 index 0000000..514affc Binary files /dev/null and b/HoloBot/Library/metadata/c6/c60c270d8eeccb14f9368b571cb637aa.info differ diff --git a/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806 b/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806 new file mode 100644 index 0000000..c781012 Binary files /dev/null and b/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806 differ diff --git a/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806.info b/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806.info new file mode 100644 index 0000000..71f7c09 Binary files /dev/null and b/HoloBot/Library/metadata/c6/c62fd7a55ba7458499b69cae18f83806.info differ diff --git a/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010 b/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010 new file mode 100644 index 0000000..5c6bf23 Binary files /dev/null and b/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010 differ diff --git a/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010.info b/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010.info new file mode 100644 index 0000000..f227bbb Binary files /dev/null and b/HoloBot/Library/metadata/c7/c765185e90368834bb85c1a8c0816010.info differ diff --git a/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8 b/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8 new file mode 100644 index 0000000..079a584 Binary files /dev/null and b/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8 differ diff --git a/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8.info b/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8.info new file mode 100644 index 0000000..d3db6dc Binary files /dev/null and b/HoloBot/Library/metadata/c7/c7b57dac0ac191541831c7398a7226e8.info differ diff --git a/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5 b/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5 new file mode 100644 index 0000000..a763287 Binary files /dev/null and b/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5 differ diff --git a/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5.info b/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5.info new file mode 100644 index 0000000..9b2a158 Binary files /dev/null and b/HoloBot/Library/metadata/c8/c828c5b9571ec9c4bb75aef2ba6bc8c5.info differ diff --git a/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e b/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e new file mode 100644 index 0000000..0682d65 Binary files /dev/null and b/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e differ diff --git a/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e.info b/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e.info new file mode 100644 index 0000000..7828101 Binary files /dev/null and b/HoloBot/Library/metadata/c8/c8ac83bd8c9fbcf4f8a419abe32a5d5e.info differ diff --git a/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56 b/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56 new file mode 100644 index 0000000..fbb63c5 Binary files /dev/null and b/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56 differ diff --git a/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56.info b/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56.info new file mode 100644 index 0000000..24d088f Binary files /dev/null and b/HoloBot/Library/metadata/c9/c96e5de2c5d6ff048a7008e554de2a56.info differ diff --git a/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a b/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a new file mode 100644 index 0000000..dc7d105 Binary files /dev/null and b/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a differ diff --git a/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a.info b/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a.info new file mode 100644 index 0000000..b255737 Binary files /dev/null and b/HoloBot/Library/metadata/c9/c97cc1ee7df4993418ffc252dbe1ad8a.info differ diff --git a/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50 b/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50 new file mode 100644 index 0000000..4c58b16 Binary files /dev/null and b/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50 differ diff --git a/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50.info b/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50.info new file mode 100644 index 0000000..1ea3505 Binary files /dev/null and b/HoloBot/Library/metadata/ca/ca254e81287810c45966c3e1fbafce50.info differ diff --git a/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e b/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e new file mode 100644 index 0000000..1f0ba07 Binary files /dev/null and b/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e differ diff --git a/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e.info b/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e.info new file mode 100644 index 0000000..15338ee Binary files /dev/null and b/HoloBot/Library/metadata/ca/ca6f3b91ea1f9634db308846d1cdfb7e.info differ diff --git a/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82 b/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82 new file mode 100644 index 0000000..4feb6d0 Binary files /dev/null and b/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82 differ diff --git a/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82.info b/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82.info new file mode 100644 index 0000000..be291d0 Binary files /dev/null and b/HoloBot/Library/metadata/ca/cade7dac84db4e74b8b3fec66e5e1e82.info differ diff --git a/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372 b/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372 new file mode 100644 index 0000000..044f6b8 Binary files /dev/null and b/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372 differ diff --git a/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372.info b/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372.info new file mode 100644 index 0000000..19fe623 Binary files /dev/null and b/HoloBot/Library/metadata/ca/cae8f3c88e9704a4393cb8d904b62372.info differ diff --git a/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87 b/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87 new file mode 100644 index 0000000..c54855e Binary files /dev/null and b/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87 differ diff --git a/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87.info b/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87.info new file mode 100644 index 0000000..ccdbfbd Binary files /dev/null and b/HoloBot/Library/metadata/cb/cb36c8f8cbd0fa449bbf6edb780e8a87.info differ diff --git a/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a b/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a new file mode 100644 index 0000000..e4faafe Binary files /dev/null and b/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a differ diff --git a/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a.info b/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a.info new file mode 100644 index 0000000..97f41a6 Binary files /dev/null and b/HoloBot/Library/metadata/cb/cb51cb1c2ab889b4da51ba32d95b4d3a.info differ diff --git a/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786 b/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786 new file mode 100644 index 0000000..fddf3bb Binary files /dev/null and b/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786 differ diff --git a/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786.info b/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786.info new file mode 100644 index 0000000..6c317ff Binary files /dev/null and b/HoloBot/Library/metadata/cb/cbbd38aa97489dd4db6d0c2415dd6786.info differ diff --git a/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663 b/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663 new file mode 100644 index 0000000..2641e41 Binary files /dev/null and b/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663 differ diff --git a/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663.info b/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663.info new file mode 100644 index 0000000..a30f01c Binary files /dev/null and b/HoloBot/Library/metadata/cd/cddf97b7fbb11c84eadcf3213214b663.info differ diff --git a/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51 b/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51 new file mode 100644 index 0000000..e0a2d9f Binary files /dev/null and b/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51 differ diff --git a/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51.info b/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51.info new file mode 100644 index 0000000..3d5cb4b Binary files /dev/null and b/HoloBot/Library/metadata/ce/cecbd801e1b4ed448a9066d07bdb1a51.info differ diff --git a/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682 b/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682 new file mode 100644 index 0000000..12307f2 Binary files /dev/null and b/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682 differ diff --git a/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682.info b/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682.info new file mode 100644 index 0000000..654e92b Binary files /dev/null and b/HoloBot/Library/metadata/cf/cf3a15147feff8e4aa8134f6c34b4682.info differ diff --git a/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f b/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f new file mode 100644 index 0000000..40959e9 Binary files /dev/null and b/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f differ diff --git a/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f.info b/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f.info new file mode 100644 index 0000000..f203923 Binary files /dev/null and b/HoloBot/Library/metadata/cf/cfe12bbf45a06fb4b8fce6adb726485f.info differ diff --git a/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd b/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd new file mode 100644 index 0000000..7fc7977 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd differ diff --git a/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd.info b/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd.info new file mode 100644 index 0000000..e5c77cf Binary files /dev/null and b/HoloBot/Library/metadata/d0/d03e1bbf9db35aa48817e1a22390badd.info differ diff --git a/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d b/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d new file mode 100644 index 0000000..9c0122b Binary files /dev/null and b/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d differ diff --git a/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d.info b/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d.info new file mode 100644 index 0000000..293bc3d Binary files /dev/null and b/HoloBot/Library/metadata/d0/d0499d67557ffef4abc380ff3154ff6d.info differ diff --git a/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d b/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d new file mode 100644 index 0000000..e192bec Binary files /dev/null and b/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d differ diff --git a/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d.info b/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d.info new file mode 100644 index 0000000..aed5f88 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d05ac202eaea30445bb88dd80829e91d.info differ diff --git a/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a b/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a new file mode 100644 index 0000000..b12aaf3 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a differ diff --git a/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a.info b/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a.info new file mode 100644 index 0000000..91382f3 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d05b96cee66e14240838de167097537a.info differ diff --git a/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a b/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a new file mode 100644 index 0000000..a396e57 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a differ diff --git a/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a.info b/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a.info new file mode 100644 index 0000000..aeed846 Binary files /dev/null and b/HoloBot/Library/metadata/d0/d073679f573cbb148a8bb835d748bc2a.info differ diff --git a/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de b/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de new file mode 100644 index 0000000..b7daf81 Binary files /dev/null and b/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de differ diff --git a/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de.info b/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de.info new file mode 100644 index 0000000..8d582d3 Binary files /dev/null and b/HoloBot/Library/metadata/d1/d1017be762eba3d4ba065126882b98de.info differ diff --git a/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c b/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c new file mode 100644 index 0000000..9039f22 Binary files /dev/null and b/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c differ diff --git a/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c.info b/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c.info new file mode 100644 index 0000000..d83877e Binary files /dev/null and b/HoloBot/Library/metadata/d1/d157ace7f2fbb8b4094705800cbe216c.info differ diff --git a/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067 b/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067 new file mode 100644 index 0000000..215965e Binary files /dev/null and b/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067 differ diff --git a/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067.info b/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067.info new file mode 100644 index 0000000..160d67b Binary files /dev/null and b/HoloBot/Library/metadata/d1/d16c92d59af8a9a4a9a0db824132b067.info differ diff --git a/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f b/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f new file mode 100644 index 0000000..cca0961 Binary files /dev/null and b/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f differ diff --git a/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f.info b/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f.info new file mode 100644 index 0000000..79b972d Binary files /dev/null and b/HoloBot/Library/metadata/d1/d19e27fb7c95c9149a31eef0146eda5f.info differ diff --git a/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17 b/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17 new file mode 100644 index 0000000..c892427 Binary files /dev/null and b/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17 differ diff --git a/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17.info b/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17.info new file mode 100644 index 0000000..7bc44de Binary files /dev/null and b/HoloBot/Library/metadata/d1/d1b627838df61e64baecc87fee2dec17.info differ diff --git a/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1 b/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1 new file mode 100644 index 0000000..1b074fc Binary files /dev/null and b/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1 differ diff --git a/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1.info b/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1.info new file mode 100644 index 0000000..3decf2b Binary files /dev/null and b/HoloBot/Library/metadata/d2/d29c05be38579034196d7b7692e52bc1.info differ diff --git a/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e b/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e new file mode 100644 index 0000000..6470f5e Binary files /dev/null and b/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e differ diff --git a/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e.info b/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e.info new file mode 100644 index 0000000..e6e72a6 Binary files /dev/null and b/HoloBot/Library/metadata/d3/d32d9a84226f97e438c0d786efe20b8e.info differ diff --git a/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b b/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b new file mode 100644 index 0000000..9d80dec Binary files /dev/null and b/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b differ diff --git a/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b.info b/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b.info new file mode 100644 index 0000000..7816782 Binary files /dev/null and b/HoloBot/Library/metadata/d3/d33108619182be04d9d3a2c97b9c901b.info differ diff --git a/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3 b/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3 new file mode 100644 index 0000000..c4ec804 Binary files /dev/null and b/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3 differ diff --git a/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3.info b/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3.info new file mode 100644 index 0000000..9317fcf Binary files /dev/null and b/HoloBot/Library/metadata/d3/d379ed0a5618c9f479f58bd83a2d0ad3.info differ diff --git a/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402 b/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402 new file mode 100644 index 0000000..3c0bcba Binary files /dev/null and b/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402 differ diff --git a/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402.info b/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402.info new file mode 100644 index 0000000..507808f Binary files /dev/null and b/HoloBot/Library/metadata/d3/d3b5735f1f9d64547aaa4a14c461f402.info differ diff --git a/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed b/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed new file mode 100644 index 0000000..fce39b1 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed differ diff --git a/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed.info b/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed.info new file mode 100644 index 0000000..59fdc47 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d4077c41b4858904d8088a87ef45baed.info differ diff --git a/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41 b/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41 new file mode 100644 index 0000000..cf1a571 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41 differ diff --git a/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41.info b/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41.info new file mode 100644 index 0000000..9f9ae97 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d40781677294a0e4caffa3460012ae41.info differ diff --git a/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607 b/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607 new file mode 100644 index 0000000..0b44c07 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607 differ diff --git a/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607.info b/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607.info new file mode 100644 index 0000000..d91a4b8 Binary files /dev/null and b/HoloBot/Library/metadata/d4/d41fa7615c3c85b40bcc95fc4367b607.info differ diff --git a/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1 b/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1 new file mode 100644 index 0000000..f37d9a0 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1 differ diff --git a/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1.info b/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1.info new file mode 100644 index 0000000..aad5700 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d53ea1ece6ac3424d8a27a35ce7382a1.info differ diff --git a/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f b/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f new file mode 100644 index 0000000..49389a6 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f differ diff --git a/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f.info b/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f.info new file mode 100644 index 0000000..17e89e6 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d587b71ba3b55e44f9654cec8898c32f.info differ diff --git a/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c b/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c new file mode 100644 index 0000000..8c8d8f9 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c differ diff --git a/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c.info b/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c.info new file mode 100644 index 0000000..218f207 Binary files /dev/null and b/HoloBot/Library/metadata/d5/d5e6900a95948c74899ef82b81cdcb2c.info differ diff --git a/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a b/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a new file mode 100644 index 0000000..68126bb Binary files /dev/null and b/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a differ diff --git a/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a.info b/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a.info new file mode 100644 index 0000000..998616d Binary files /dev/null and b/HoloBot/Library/metadata/d6/d698790d3facd3d4289a13fa1243030a.info differ diff --git a/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7 b/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7 new file mode 100644 index 0000000..f10ffac Binary files /dev/null and b/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7 differ diff --git a/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7.info b/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7.info new file mode 100644 index 0000000..8a604e2 Binary files /dev/null and b/HoloBot/Library/metadata/d6/d6afb51c1fb1eca4c803312a06ae36b7.info differ diff --git a/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a b/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a new file mode 100644 index 0000000..3c7cd95 Binary files /dev/null and b/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a differ diff --git a/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a.info b/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a.info new file mode 100644 index 0000000..d81cf74 Binary files /dev/null and b/HoloBot/Library/metadata/d6/d6b6f13a11bfa1c4f97b91ef1c37829a.info differ diff --git a/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94 b/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94 new file mode 100644 index 0000000..e38c4ce Binary files /dev/null and b/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94 differ diff --git a/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94.info b/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94.info new file mode 100644 index 0000000..5cb753a Binary files /dev/null and b/HoloBot/Library/metadata/d7/d75a41f2e4c793940a9a59b31e9acc94.info differ diff --git a/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611 b/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611 new file mode 100644 index 0000000..61ebc95 Binary files /dev/null and b/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611 differ diff --git a/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611.info b/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611.info new file mode 100644 index 0000000..4c44178 Binary files /dev/null and b/HoloBot/Library/metadata/d7/d783ff4004151e94ab8c4d4762ffb611.info differ diff --git a/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447 b/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447 new file mode 100644 index 0000000..2cf246e Binary files /dev/null and b/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447 differ diff --git a/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447.info b/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447.info new file mode 100644 index 0000000..504ce85 Binary files /dev/null and b/HoloBot/Library/metadata/d8/d81078f911cb18b43805ec050f749447.info differ diff --git a/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6 b/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6 new file mode 100644 index 0000000..9a579c9 Binary files /dev/null and b/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6 differ diff --git a/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6.info b/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6.info new file mode 100644 index 0000000..695a401 Binary files /dev/null and b/HoloBot/Library/metadata/d8/d836831ae3fcf3a4ea272a0458a5ccb6.info differ diff --git a/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7 b/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7 new file mode 100644 index 0000000..45cc227 Binary files /dev/null and b/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7 differ diff --git a/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7.info b/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7.info new file mode 100644 index 0000000..fa18b0f Binary files /dev/null and b/HoloBot/Library/metadata/d8/d84aac8e3bc8fe344b50dab1e7382ad7.info differ diff --git a/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 b/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 new file mode 100644 index 0000000..69ac267 Binary files /dev/null and b/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 differ diff --git a/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info b/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info new file mode 100644 index 0000000..f476560 Binary files /dev/null and b/HoloBot/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info differ diff --git a/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e b/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e new file mode 100644 index 0000000..26556ff Binary files /dev/null and b/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e differ diff --git a/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e.info b/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e.info new file mode 100644 index 0000000..4f42930 Binary files /dev/null and b/HoloBot/Library/metadata/d9/d97bc6f8c6648c44d870a1d6b2f4943e.info differ diff --git a/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144 b/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144 new file mode 100644 index 0000000..45c03f8 Binary files /dev/null and b/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144 differ diff --git a/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144.info b/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144.info new file mode 100644 index 0000000..370c61f Binary files /dev/null and b/HoloBot/Library/metadata/da/da1b823857d8a394c8ef27ea19ef3144.info differ diff --git a/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3 b/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3 new file mode 100644 index 0000000..1dca827 Binary files /dev/null and b/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3 differ diff --git a/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3.info b/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3.info new file mode 100644 index 0000000..f8adc4f Binary files /dev/null and b/HoloBot/Library/metadata/db/db80c602911422546923f9ff32bc5ae3.info differ diff --git a/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69 b/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69 new file mode 100644 index 0000000..1f255cc Binary files /dev/null and b/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69 differ diff --git a/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69.info b/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69.info new file mode 100644 index 0000000..28ff9f0 Binary files /dev/null and b/HoloBot/Library/metadata/db/db8878df5857f754aafe6c6d0e759c69.info differ diff --git a/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8 b/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8 new file mode 100644 index 0000000..597b4a0 Binary files /dev/null and b/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8 differ diff --git a/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8.info b/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8.info new file mode 100644 index 0000000..4795a1e Binary files /dev/null and b/HoloBot/Library/metadata/db/dbad991a9894486418e4988222483ef8.info differ diff --git a/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb b/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb new file mode 100644 index 0000000..13b641c Binary files /dev/null and b/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb differ diff --git a/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info b/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info new file mode 100644 index 0000000..ef29fd6 Binary files /dev/null and b/HoloBot/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info differ diff --git a/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233 b/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233 new file mode 100644 index 0000000..6b257f5 Binary files /dev/null and b/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233 differ diff --git a/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233.info b/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233.info new file mode 100644 index 0000000..2c543ea Binary files /dev/null and b/HoloBot/Library/metadata/dd/ddc2ff62e97ce6d41991784c3aa8e233.info differ diff --git a/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84 b/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84 new file mode 100644 index 0000000..693ff1e Binary files /dev/null and b/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84 differ diff --git a/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84.info b/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84.info new file mode 100644 index 0000000..411edb5 Binary files /dev/null and b/HoloBot/Library/metadata/dd/ddd352279e66097418f90a3fcb284d84.info differ diff --git a/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7 b/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7 new file mode 100644 index 0000000..04bad79 Binary files /dev/null and b/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7 differ diff --git a/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7.info b/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7.info new file mode 100644 index 0000000..c015452 Binary files /dev/null and b/HoloBot/Library/metadata/df/df172103f5fba4a4d8636aeca60cb0d7.info differ diff --git a/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539 b/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539 new file mode 100644 index 0000000..1b2e600 Binary files /dev/null and b/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539 differ diff --git a/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539.info b/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539.info new file mode 100644 index 0000000..6f97c3a Binary files /dev/null and b/HoloBot/Library/metadata/df/dfadc27178601dd4ca1793492f9e2539.info differ diff --git a/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85 b/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85 new file mode 100644 index 0000000..dce2192 Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85 differ diff --git a/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85.info b/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85.info new file mode 100644 index 0000000..550cec7 Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0d1a3b25e4d0cf44b9cafd4a514ea85.info differ diff --git a/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522 b/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522 new file mode 100644 index 0000000..7d1cbbe Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522 differ diff --git a/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522.info b/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522.info new file mode 100644 index 0000000..529c976 Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0e40e7a40c41984bbec8aaa64292522.info differ diff --git a/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c b/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c new file mode 100644 index 0000000..3d7e5ae Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c differ diff --git a/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c.info b/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c.info new file mode 100644 index 0000000..3b3afbe Binary files /dev/null and b/HoloBot/Library/metadata/e0/e0fb94a22a19a954b814249beda9d83c.info differ diff --git a/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3 b/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3 new file mode 100644 index 0000000..0b58ca7 Binary files /dev/null and b/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3 differ diff --git a/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3.info b/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3.info new file mode 100644 index 0000000..1fc1e70 Binary files /dev/null and b/HoloBot/Library/metadata/e1/e15291a24858fc648a0b993a0bea40f3.info differ diff --git a/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd b/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd new file mode 100644 index 0000000..e750bb9 Binary files /dev/null and b/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd differ diff --git a/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd.info b/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd.info new file mode 100644 index 0000000..5b9fca0 Binary files /dev/null and b/HoloBot/Library/metadata/e1/e1fd48673918ae242b03ad1ae08a38bd.info differ diff --git a/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e b/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e new file mode 100644 index 0000000..5f73123 Binary files /dev/null and b/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e differ diff --git a/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e.info b/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e.info new file mode 100644 index 0000000..ee2a9c0 Binary files /dev/null and b/HoloBot/Library/metadata/e3/e32721627fdb3a44188591318a46de0e.info differ diff --git a/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a b/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a new file mode 100644 index 0000000..9adc09c Binary files /dev/null and b/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a differ diff --git a/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a.info b/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a.info new file mode 100644 index 0000000..ec4e2bb Binary files /dev/null and b/HoloBot/Library/metadata/e3/e34562f7419002c42acf845c89fd2c5a.info differ diff --git a/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad b/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad new file mode 100644 index 0000000..4e766d4 Binary files /dev/null and b/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad differ diff --git a/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad.info b/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad.info new file mode 100644 index 0000000..386295a Binary files /dev/null and b/HoloBot/Library/metadata/e3/e3614b053e3b0bd4b8efece8f50c21ad.info differ diff --git a/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd b/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd new file mode 100644 index 0000000..cb5820f Binary files /dev/null and b/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd differ diff --git a/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd.info b/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd.info new file mode 100644 index 0000000..631f739 Binary files /dev/null and b/HoloBot/Library/metadata/e3/e3d8348b7d66bae4aa4b1f3ada3ef5fd.info differ diff --git a/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6 b/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6 new file mode 100644 index 0000000..c0044d9 Binary files /dev/null and b/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6 differ diff --git a/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6.info b/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6.info new file mode 100644 index 0000000..dee5008 Binary files /dev/null and b/HoloBot/Library/metadata/e5/e56a6ffca3a66b54189d6d303078cbf6.info differ diff --git a/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07 b/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07 new file mode 100644 index 0000000..dc937e8 Binary files /dev/null and b/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07 differ diff --git a/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07.info b/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07.info new file mode 100644 index 0000000..f4f1779 Binary files /dev/null and b/HoloBot/Library/metadata/e6/e623389d0f1a40d418cefd9fa059dd07.info differ diff --git a/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f b/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f new file mode 100644 index 0000000..581f306 Binary files /dev/null and b/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f differ diff --git a/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f.info b/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f.info new file mode 100644 index 0000000..9da1afd Binary files /dev/null and b/HoloBot/Library/metadata/e6/e62af36e05049ed4bb16fb4572cfc67f.info differ diff --git a/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1 b/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1 new file mode 100644 index 0000000..c06ac72 Binary files /dev/null and b/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1 differ diff --git a/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1.info b/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1.info new file mode 100644 index 0000000..c611a7b Binary files /dev/null and b/HoloBot/Library/metadata/e7/e7d6513c2cdf97f409654a2a4114d9b1.info differ diff --git a/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3 b/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3 new file mode 100644 index 0000000..632b3b9 Binary files /dev/null and b/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3 differ diff --git a/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3.info b/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3.info new file mode 100644 index 0000000..2e633e8 Binary files /dev/null and b/HoloBot/Library/metadata/ea/ea5e835211b0e9541ba1adb429d80ea3.info differ diff --git a/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f b/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f new file mode 100644 index 0000000..deca06c Binary files /dev/null and b/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f differ diff --git a/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f.info b/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f.info new file mode 100644 index 0000000..3554202 Binary files /dev/null and b/HoloBot/Library/metadata/eb/eb16359da8d1ac447a8795ea2b7b2a8f.info differ diff --git a/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6 b/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6 new file mode 100644 index 0000000..972f165 Binary files /dev/null and b/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6 differ diff --git a/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6.info b/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6.info new file mode 100644 index 0000000..104788a Binary files /dev/null and b/HoloBot/Library/metadata/ec/ec2dd3e33d633414fa40ca4fead4a3d6.info differ diff --git a/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a b/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a new file mode 100644 index 0000000..2816a09 Binary files /dev/null and b/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a differ diff --git a/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a.info b/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a.info new file mode 100644 index 0000000..964951c Binary files /dev/null and b/HoloBot/Library/metadata/ec/ecb734a87c4089d4caacb7b907d8c88a.info differ diff --git a/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c b/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c new file mode 100644 index 0000000..3598fa0 Binary files /dev/null and b/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c differ diff --git a/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c.info b/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c.info new file mode 100644 index 0000000..555c4fd Binary files /dev/null and b/HoloBot/Library/metadata/ec/ece6b30733993ed418105192d199ba9c.info differ diff --git a/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b b/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b new file mode 100644 index 0000000..86051e7 Binary files /dev/null and b/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b differ diff --git a/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b.info b/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b.info new file mode 100644 index 0000000..a08ab2e Binary files /dev/null and b/HoloBot/Library/metadata/ec/ecf194ccc63734249bf006b8b276471b.info differ diff --git a/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21 b/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21 new file mode 100644 index 0000000..d338651 Binary files /dev/null and b/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21 differ diff --git a/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21.info b/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21.info new file mode 100644 index 0000000..3cf1cec Binary files /dev/null and b/HoloBot/Library/metadata/ed/ed0c72bbcda0bad4c936bbf7453a0f21.info differ diff --git a/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d b/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d new file mode 100644 index 0000000..4a1c7d7 Binary files /dev/null and b/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d differ diff --git a/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d.info b/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d.info new file mode 100644 index 0000000..6396f40 Binary files /dev/null and b/HoloBot/Library/metadata/ed/ed8582e216067d34eb13d1f04764484d.info differ diff --git a/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80 b/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80 new file mode 100644 index 0000000..94d8954 Binary files /dev/null and b/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80 differ diff --git a/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80.info b/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80.info new file mode 100644 index 0000000..49b06aa Binary files /dev/null and b/HoloBot/Library/metadata/ed/eddbe51e6dc99b140927438b9a702d80.info differ diff --git a/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781 b/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781 new file mode 100644 index 0000000..174f2bf Binary files /dev/null and b/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781 differ diff --git a/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781.info b/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781.info new file mode 100644 index 0000000..090abf9 Binary files /dev/null and b/HoloBot/Library/metadata/ee/ee400289cdcb94240b2db829b6624781.info differ diff --git a/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1 b/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1 new file mode 100644 index 0000000..5e09cc4 Binary files /dev/null and b/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1 differ diff --git a/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1.info b/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1.info new file mode 100644 index 0000000..22a0dd1 Binary files /dev/null and b/HoloBot/Library/metadata/ef/ef662ab2ff31aba40a19a5b6d7e2bad1.info differ diff --git a/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3 b/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3 new file mode 100644 index 0000000..68eeb06 Binary files /dev/null and b/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3 differ diff --git a/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3.info b/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3.info new file mode 100644 index 0000000..dfea04c Binary files /dev/null and b/HoloBot/Library/metadata/ef/ef9fbaad78bdb3243bc2de3a08ab8bf3.info differ diff --git a/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1 b/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1 new file mode 100644 index 0000000..b3e2db2 Binary files /dev/null and b/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1 differ diff --git a/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1.info b/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1.info new file mode 100644 index 0000000..a4acd5d Binary files /dev/null and b/HoloBot/Library/metadata/ef/efac01a000b1e1e4ebb1d664bb73bab1.info differ diff --git a/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7 b/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7 new file mode 100644 index 0000000..5e2dba8 Binary files /dev/null and b/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7 differ diff --git a/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7.info b/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7.info new file mode 100644 index 0000000..3671359 Binary files /dev/null and b/HoloBot/Library/metadata/f0/f035d23cade9e364aa49c03bf785c6a7.info differ diff --git a/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550 b/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550 new file mode 100644 index 0000000..20ed55b Binary files /dev/null and b/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550 differ diff --git a/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550.info b/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550.info new file mode 100644 index 0000000..fbd102d Binary files /dev/null and b/HoloBot/Library/metadata/f1/f122ca4ae6b527e4798205becf9a0550.info differ diff --git a/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f b/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f new file mode 100644 index 0000000..6ac8c4e Binary files /dev/null and b/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f differ diff --git a/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f.info b/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f.info new file mode 100644 index 0000000..7e75388 Binary files /dev/null and b/HoloBot/Library/metadata/f1/f16e5ee07dd5f614bacd13b84d14c32f.info differ diff --git a/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14 b/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14 new file mode 100644 index 0000000..1c5a5ab Binary files /dev/null and b/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14 differ diff --git a/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14.info b/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14.info new file mode 100644 index 0000000..8892e81 Binary files /dev/null and b/HoloBot/Library/metadata/f1/f18ec9e5e41f1df44b967884f76e1b14.info differ diff --git a/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f b/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f new file mode 100644 index 0000000..854afa4 Binary files /dev/null and b/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f differ diff --git a/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f.info b/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f.info new file mode 100644 index 0000000..1470ff9 Binary files /dev/null and b/HoloBot/Library/metadata/f1/f1f3948b20c230044bda31b620ddd37f.info differ diff --git a/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c b/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c new file mode 100644 index 0000000..fcb3dab Binary files /dev/null and b/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c differ diff --git a/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c.info b/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c.info new file mode 100644 index 0000000..b48116b Binary files /dev/null and b/HoloBot/Library/metadata/f2/f203015ed1c31c04a89f0cfa71dc702c.info differ diff --git a/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127 b/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127 new file mode 100644 index 0000000..b39c749 Binary files /dev/null and b/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127 differ diff --git a/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127.info b/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127.info new file mode 100644 index 0000000..b3ef1bd Binary files /dev/null and b/HoloBot/Library/metadata/f3/f326278a838e87c499393f30a8e72127.info differ diff --git a/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2 b/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2 new file mode 100644 index 0000000..eace7a3 Binary files /dev/null and b/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2 differ diff --git a/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2.info b/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2.info new file mode 100644 index 0000000..274d5b6 Binary files /dev/null and b/HoloBot/Library/metadata/f4/f48c1bc329c4af04fb454d6a8dab37a2.info differ diff --git a/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4 b/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4 new file mode 100644 index 0000000..c49ddb5 Binary files /dev/null and b/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4 differ diff --git a/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4.info b/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4.info new file mode 100644 index 0000000..634f19e Binary files /dev/null and b/HoloBot/Library/metadata/f4/f48df919adea4fa095a7407e773e5aa4.info differ diff --git a/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487 b/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487 new file mode 100644 index 0000000..c16d63a Binary files /dev/null and b/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487 differ diff --git a/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487.info b/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487.info new file mode 100644 index 0000000..12d0c84 Binary files /dev/null and b/HoloBot/Library/metadata/f4/f4b049d113a87cc49b45f80cb2f8d487.info differ diff --git a/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c b/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c new file mode 100644 index 0000000..aee665c Binary files /dev/null and b/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c differ diff --git a/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c.info b/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c.info new file mode 100644 index 0000000..4132271 Binary files /dev/null and b/HoloBot/Library/metadata/f5/f546b7eac1a8fc14e9ac0831dd7fd45c.info differ diff --git a/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf b/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf new file mode 100644 index 0000000..7198188 Binary files /dev/null and b/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf differ diff --git a/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf.info b/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf.info new file mode 100644 index 0000000..c3bd83b Binary files /dev/null and b/HoloBot/Library/metadata/f5/f5d9d16de978748488d7a8e0daf6e5cf.info differ diff --git a/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 b/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 new file mode 100644 index 0000000..7eb5840 Binary files /dev/null and b/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 differ diff --git a/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info b/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info new file mode 100644 index 0000000..311e931 Binary files /dev/null and b/HoloBot/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info differ diff --git a/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4 b/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4 new file mode 100644 index 0000000..70d38db Binary files /dev/null and b/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4 differ diff --git a/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4.info b/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4.info new file mode 100644 index 0000000..90632da Binary files /dev/null and b/HoloBot/Library/metadata/f6/f62517ad59638754bad3b2a5d71a06b4.info differ diff --git a/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9 b/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9 new file mode 100644 index 0000000..2b3abdf Binary files /dev/null and b/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9 differ diff --git a/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9.info b/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9.info new file mode 100644 index 0000000..86a0248 Binary files /dev/null and b/HoloBot/Library/metadata/f6/f670afcb463c4a8448e54449d2193cf9.info differ diff --git a/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e b/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e new file mode 100644 index 0000000..2a31e3b Binary files /dev/null and b/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e differ diff --git a/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e.info b/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e.info new file mode 100644 index 0000000..b011c8d Binary files /dev/null and b/HoloBot/Library/metadata/f6/f6bb97bb2293f244497a0ca7b0d46b2e.info differ diff --git a/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5 b/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5 new file mode 100644 index 0000000..e4fec79 Binary files /dev/null and b/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5 differ diff --git a/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5.info b/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5.info new file mode 100644 index 0000000..c9cb3cc Binary files /dev/null and b/HoloBot/Library/metadata/f6/f6e64c91d83a1c14bbf9c73cd6c6d5b5.info differ diff --git a/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c b/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c new file mode 100644 index 0000000..3fc431d Binary files /dev/null and b/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c differ diff --git a/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info b/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info new file mode 100644 index 0000000..df250ee Binary files /dev/null and b/HoloBot/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info differ diff --git a/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e b/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e new file mode 100644 index 0000000..7df265c Binary files /dev/null and b/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e differ diff --git a/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e.info b/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e.info new file mode 100644 index 0000000..48905ca Binary files /dev/null and b/HoloBot/Library/metadata/f7/f70eeb83a554b8945b4d66070558cf6e.info differ diff --git a/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424 b/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424 new file mode 100644 index 0000000..bda7369 Binary files /dev/null and b/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424 differ diff --git a/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424.info b/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424.info new file mode 100644 index 0000000..ab93c22 Binary files /dev/null and b/HoloBot/Library/metadata/f7/f770167b5bb72754ba0b0aee15ec2424.info differ diff --git a/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc b/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc new file mode 100644 index 0000000..35acb5d Binary files /dev/null and b/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc differ diff --git a/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info b/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info new file mode 100644 index 0000000..04c551b Binary files /dev/null and b/HoloBot/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info differ diff --git a/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e b/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e new file mode 100644 index 0000000..4713364 Binary files /dev/null and b/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e differ diff --git a/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e.info b/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e.info new file mode 100644 index 0000000..7004743 Binary files /dev/null and b/HoloBot/Library/metadata/f8/f8f14dae7a2c6cc43882de659d10af8e.info differ diff --git a/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c b/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c new file mode 100644 index 0000000..f88e35d Binary files /dev/null and b/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c differ diff --git a/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c.info b/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c.info new file mode 100644 index 0000000..e1a05ce Binary files /dev/null and b/HoloBot/Library/metadata/f9/f95f2d2e5aebb354c937a457bd78f00c.info differ diff --git a/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399 b/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399 new file mode 100644 index 0000000..0576098 Binary files /dev/null and b/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399 differ diff --git a/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399.info b/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399.info new file mode 100644 index 0000000..d7666c7 Binary files /dev/null and b/HoloBot/Library/metadata/f9/f9cfc0205470fe84b87515fb9b0eb399.info differ diff --git a/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603 b/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603 new file mode 100644 index 0000000..20d1f47 Binary files /dev/null and b/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603 differ diff --git a/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603.info b/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603.info new file mode 100644 index 0000000..98127f7 Binary files /dev/null and b/HoloBot/Library/metadata/f9/f9dc08bcc8a9add4296e995db50f7603.info differ diff --git a/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72 b/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72 new file mode 100644 index 0000000..eef6194 Binary files /dev/null and b/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72 differ diff --git a/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72.info b/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72.info new file mode 100644 index 0000000..83150b0 Binary files /dev/null and b/HoloBot/Library/metadata/fa/fa3fb3fd8dafc484487449a62b4fab72.info differ diff --git a/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2 b/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2 new file mode 100644 index 0000000..bad0e2c Binary files /dev/null and b/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2 differ diff --git a/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2.info b/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2.info new file mode 100644 index 0000000..84962f6 Binary files /dev/null and b/HoloBot/Library/metadata/fa/fad9c3efdd73ec143ba39215c09207a2.info differ diff --git a/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5 b/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5 new file mode 100644 index 0000000..21e33b9 Binary files /dev/null and b/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5 differ diff --git a/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5.info b/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5.info new file mode 100644 index 0000000..bd78544 Binary files /dev/null and b/HoloBot/Library/metadata/fb/fb69de839bd015f4099b5bd2c45e53e5.info differ diff --git a/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05 b/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05 new file mode 100644 index 0000000..321aacc Binary files /dev/null and b/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05 differ diff --git a/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05.info b/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05.info new file mode 100644 index 0000000..a1d346e Binary files /dev/null and b/HoloBot/Library/metadata/fb/fbeba0b69576309478973ecae362ee05.info differ diff --git a/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7 b/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7 new file mode 100644 index 0000000..d920d26 Binary files /dev/null and b/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7 differ diff --git a/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7.info b/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7.info new file mode 100644 index 0000000..df70e77 Binary files /dev/null and b/HoloBot/Library/metadata/fc/fc23ba6f202772142beea841179d5ef7.info differ diff --git a/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334 b/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334 new file mode 100644 index 0000000..6343eab Binary files /dev/null and b/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334 differ diff --git a/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334.info b/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334.info new file mode 100644 index 0000000..8867e33 Binary files /dev/null and b/HoloBot/Library/metadata/fc/fcb86078da5d38b4b9010f905416d334.info differ diff --git a/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074 b/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074 new file mode 100644 index 0000000..88b4fee Binary files /dev/null and b/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074 differ diff --git a/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074.info b/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074.info new file mode 100644 index 0000000..02658dc Binary files /dev/null and b/HoloBot/Library/metadata/fc/fcdb1d067bddcae4ca1167904efdf074.info differ diff --git a/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a b/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a new file mode 100644 index 0000000..75a6d4d Binary files /dev/null and b/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a differ diff --git a/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a.info b/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a.info new file mode 100644 index 0000000..f4ee8b8 Binary files /dev/null and b/HoloBot/Library/metadata/fd/fd5488ec8e9e41e468ef69d31dcb1c8a.info differ diff --git a/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86 b/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86 new file mode 100644 index 0000000..4df8184 Binary files /dev/null and b/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86 differ diff --git a/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86.info b/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86.info new file mode 100644 index 0000000..0a4efab Binary files /dev/null and b/HoloBot/Library/metadata/fd/fda2aad5b5c133648a67aea343382f86.info differ diff --git a/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e b/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e new file mode 100644 index 0000000..c6ae156 Binary files /dev/null and b/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e differ diff --git a/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e.info b/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e.info new file mode 100644 index 0000000..fdaa5f3 Binary files /dev/null and b/HoloBot/Library/metadata/fe/fe13866e1b5b27045b8b21fef6a31a4e.info differ diff --git a/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d b/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d new file mode 100644 index 0000000..03baf13 Binary files /dev/null and b/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d differ diff --git a/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d.info b/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d.info new file mode 100644 index 0000000..1e71d34 Binary files /dev/null and b/HoloBot/Library/metadata/fe/fe4ff7495408b6c4388e16a9e176303d.info differ diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe0.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe0.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe0.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe1.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe1.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe1.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe2.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe2.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe2.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe3.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe3.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe3.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe4.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe4.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe4.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe5.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe5.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe5.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe6.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe6.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe6.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe7.log b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe7.log new file mode 100644 index 0000000..68e1df6 --- /dev/null +++ b/HoloBot/Library/shadercompiler-UnityShaderCompiler.exe7.log @@ -0,0 +1,2 @@ +Base path: D:/Program Files/Unity/Editor/Data +Cmd: getPlatforms diff --git a/HoloBot/ProjectSettings/AudioManager.asset b/HoloBot/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..2c4f5a1 --- /dev/null +++ b/HoloBot/ProjectSettings/AudioManager.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 0 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 diff --git a/HoloBot/ProjectSettings/ClusterInputManager.asset b/HoloBot/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/HoloBot/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/HoloBot/ProjectSettings/DynamicsManager.asset b/HoloBot/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..6be6910 --- /dev/null +++ b/HoloBot/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 3 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_EnablePCM: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/HoloBot/ProjectSettings/EditorBuildSettings.asset b/HoloBot/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..da88e50 --- /dev/null +++ b/HoloBot/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/Scenes/MainScene.unity diff --git a/HoloBot/ProjectSettings/EditorSettings.asset b/HoloBot/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..7dff13c --- /dev/null +++ b/HoloBot/ProjectSettings/EditorSettings.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 3 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_DefaultBehaviorMode: 0 + m_SpritePackerMode: 2 + m_SpritePackerPaddingPower: 1 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationRootNamespace: + m_UserGeneratedProjectSuffix: diff --git a/HoloBot/ProjectSettings/GraphicsSettings.asset b/HoloBot/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..6544cef --- /dev/null +++ b/HoloBot/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_TierSettings_Tier1: + renderingPath: 1 + useCascadedShadowMaps: 0 + m_TierSettings_Tier2: + renderingPath: 1 + useCascadedShadowMaps: 1 + m_TierSettings_Tier3: + renderingPath: 1 + useCascadedShadowMaps: 1 + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDirSeparate: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepDynamicDirSeparate: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 diff --git a/HoloBot/ProjectSettings/InputManager.asset b/HoloBot/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/HoloBot/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/HoloBot/ProjectSettings/NavMeshAreas.asset b/HoloBot/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3a99a5a --- /dev/null +++ b/HoloBot/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,71 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 diff --git a/HoloBot/ProjectSettings/NetworkManager.asset b/HoloBot/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000..5dc6a83 --- /dev/null +++ b/HoloBot/ProjectSettings/NetworkManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!149 &1 +NetworkManager: + m_ObjectHideFlags: 0 + m_DebugLevel: 0 + m_Sendrate: 15 + m_AssetToPrefab: {} diff --git a/HoloBot/ProjectSettings/Physics2DSettings.asset b/HoloBot/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..dd4738c --- /dev/null +++ b/HoloBot/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_MinPenetrationForPenalty: 0.01 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_ChangeStopsCallbacks: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/HoloBot/ProjectSettings/ProjectSettings.asset b/HoloBot/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..f75b689 --- /dev/null +++ b/HoloBot/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,489 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + productGUID: e833af804f9ab1341bb304da959f8b6d + AndroidProfiler: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: HoloBot + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21176471, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_SplashScreenBackgroundLandscape: {fileID: 0} + m_SplashScreenBackgroundPortrait: {fileID: 0} + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_MobileMTRendering: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + tizenShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + disableDepthAndStencilBuffers: 0 + defaultIsFullScreen: 1 + defaultIsNativeResolution: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + gpuSkinning: 0 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 0 + allowFullscreenSwitch: 1 + macFullscreenMode: 2 + d3d9FullscreenMode: 1 + d3d11FullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + n3dsDisableStereoscopicView: 0 + n3dsEnableSharedListOpt: 1 + n3dsEnableVSync: 0 + uiUse16BitDepthBuffer: 0 + ignoreAlphaClear: 0 + xboxOneResolution: 0 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + videoMemoryForVertexBuffers: 0 + psp2PowerMode: 0 + psp2AcquireBGM: 1 + wiiUTVResolution: 0 + wiiUGamePadMSAA: 1 + wiiUSupportsNunchuk: 0 + wiiUSupportsClassicController: 0 + wiiUSupportsBalanceBoard: 0 + wiiUSupportsMotionPlus: 0 + wiiUSupportsProController: 0 + wiiUAllowScreenCapture: 1 + wiiUControllerCount: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleIdentifier: com.Company.ProductName + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 0 + protectGraphicsMemory: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 9 + AndroidPreferredInstallLocation: 1 + aotOptions: + apiCompatibilityLevel: 2 + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + iPhoneBuildNumber: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + preloadShaders: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: + serializedVersion: 2 + m_Bits: 238 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSLargeIconLayers: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageWideLayers: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + appleDeveloperTeamID: + AndroidTargetDevice: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + androidEnableBanner: 1 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetBatching: [] + m_BuildTargetGraphicsAPIs: [] + m_BuildTargetVRSettings: + - m_BuildTarget: Metro + m_Enabled: 1 + m_Devices: + - HoloLens + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + webPlayerTemplate: APPLICATION:Default + m_TemplateCustomTags: {} + wiiUTitleID: 0005000011000000 + wiiUGroupID: 00010000 + wiiUCommonSaveSize: 4096 + wiiUAccountSaveSize: 2048 + wiiUOlvAccessKey: 0 + wiiUTinCode: 0 + wiiUJoinGameId: 0 + wiiUJoinGameModeMask: 0000000000000000 + wiiUCommonBossSize: 0 + wiiUAccountBossSize: 0 + wiiUAddOnUniqueIDs: [] + wiiUMainThreadStackSize: 3072 + wiiULoaderThreadStackSize: 1024 + wiiUSystemHeapSize: 128 + wiiUTVStartupScreen: {fileID: 0} + wiiUGamePadStartupScreen: {fileID: 0} + wiiUDrcBufferDisabled: 0 + wiiUProfilerLibPath: + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + XboxTitleId: + XboxImageXexPath: + XboxSpaPath: + XboxGenerateSpa: 0 + XboxDeployKinectResources: 0 + XboxSplashScreen: {fileID: 0} + xboxEnableSpeech: 0 + xboxAdditionalTitleMemorySize: 0 + xboxDeployKinectHeadOrientation: 0 + xboxDeployKinectHeadPosition: 0 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 1 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutReprojectionRate: 120 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4UseDebugIl2cppLibs: 0 + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 3 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4IncludedModules: [] + monoEnv: + psp2Splashimage: {fileID: 0} + psp2NPTrophyPackPath: + psp2NPSupportGBMorGJP: 0 + psp2NPAgeRating: 12 + psp2NPTitleDatPath: + psp2NPCommsID: + psp2NPCommunicationsID: + psp2NPCommsPassphrase: + psp2NPCommsSig: + psp2ParamSfxPath: + psp2ManualPath: + psp2LiveAreaGatePath: + psp2LiveAreaBackroundPath: + psp2LiveAreaPath: + psp2LiveAreaTrialPath: + psp2PatchChangeInfoPath: + psp2PatchOriginalPackage: + psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui + psp2KeystoneFile: + psp2MemoryExpansionMode: 0 + psp2DRMType: 0 + psp2StorageType: 0 + psp2MediaCapacity: 0 + psp2DLCConfigPath: + psp2ThumbnailPath: + psp2BackgroundPath: + psp2SoundPath: + psp2TrophyCommId: + psp2TrophyPackagePath: + psp2PackagedResourcesPath: + psp2SaveDataQuota: 10240 + psp2ParentalLevel: 1 + psp2ShortTitle: Not Set + psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF + psp2Category: 0 + psp2MasterVersion: 01.00 + psp2AppVersion: 01.00 + psp2TVBootMode: 0 + psp2EnterButtonAssignment: 2 + psp2TVDisableEmu: 0 + psp2AllowTwitterDialog: 1 + psp2Upgradable: 0 + psp2HealthWarning: 0 + psp2UseLibLocation: 0 + psp2InfoBarOnStartup: 0 + psp2InfoBarColor: 0 + psp2UseDebugIl2cppLibs: 0 + psmSplashimage: {fileID: 0} + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLDataCaching: 0 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLUseWasm: 0 + webGLCompressionFormat: 1 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: {} + incrementalIl2cppBuild: {} + additionalIl2CppArgs: + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: HoloBot + metroPackageVersion: 1.0.0.0 + metroCertificatePath: Assets\WSATestCertificate.pfx + metroCertificatePassword: + metroCertificateSubject: DefaultCompany + metroCertificateIssuer: DefaultCompany + metroCertificateNotAfter: 0051a5024aecd301 + metroApplicationDescription: HoloBot + wsaImages: {} + metroTileShortName: HoloBot + metroCommandLineArgsFile: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: + WindowsStoreApps: + AllJoyn: False + BlockedChatMessages: False + Bluetooth: False + Chat: False + CodeGeneration: False + EnterpriseAuthentication: False + HumanInterfaceDevice: False + InputInjectionBrokered: False + InternetClient: True + InternetClientServer: True + Location: False + Microphone: True + MusicLibrary: False + Objects3D: False + PhoneCall: False + PicturesLibrary: False + PrivateNetworkClientServer: False + Proximity: False + RemovableStorage: False + SharedUserCertificates: False + SpatialPerception: False + UserAccountInformation: False + VideosLibrary: False + VoipCall: False + WebCam: False + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + tizenProductDescription: + tizenProductURL: + tizenSigningProfileName: + tizenGPSPermissions: 0 + tizenMicrophonePermissions: 0 + tizenDeploymentTarget: + tizenDeploymentTargetType: 0 + tizenMinOSVersion: 0 + n3dsUseExtSaveData: 0 + n3dsCompressStaticMem: 1 + n3dsExtSaveDataNumber: 0x12345 + n3dsStackSize: 131072 + n3dsTargetPlatform: 2 + n3dsRegion: 7 + n3dsMediaSize: 0 + n3dsLogoStyle: 3 + n3dsTitle: GameName + n3dsProductCode: + n3dsApplicationId: 0xFF3FF + stvDeviceAddress: + stvProductDescription: + stvProductAuthor: + stvProductAuthorEmail: + stvProductLink: + stvProductCategory: 0 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + vrEditorSettings: {} + cloudServicesEnabled: {} + cloudProjectId: + projectName: + organizationId: + cloudEnabled: 0 diff --git a/HoloBot/ProjectSettings/ProjectVersion.txt b/HoloBot/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..66e05aa --- /dev/null +++ b/HoloBot/ProjectSettings/ProjectVersion.txt @@ -0,0 +1 @@ +m_EditorVersion: 5.5.0f3 diff --git a/HoloBot/ProjectSettings/QualitySettings.asset b/HoloBot/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..0d9af3e --- /dev/null +++ b/HoloBot/ProjectSettings/QualitySettings.asset @@ -0,0 +1,180 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Fastest + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Fast + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Simple + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Good + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Beautiful + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Fantastic + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 4 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Nintendo 3DS: 5 + PS4: 5 + PSM: 5 + PSP2: 2 + Samsung TV: 2 + Standalone: 5 + Tizen: 2 + Web: 5 + WebGL: 3 + WiiU: 5 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 5 diff --git a/HoloBot/ProjectSettings/TagManager.asset b/HoloBot/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..772fb65 --- /dev/null +++ b/HoloBot/ProjectSettings/TagManager.asset @@ -0,0 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: + - Stars + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/HoloBot/ProjectSettings/TimeManager.asset b/HoloBot/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/HoloBot/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/HoloBot/ProjectSettings/UnityConnectSettings.asset b/HoloBot/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..2943e44 --- /dev/null +++ b/HoloBot/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + m_Enabled: 0 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes + m_Enabled: 0 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_EnabledPlatforms: 4294967295 + m_IosGameId: + m_AndroidGameId: diff --git a/HoloBot/README.md b/HoloBot/README.md new file mode 100644 index 0000000..a5cc6e9 --- /dev/null +++ b/HoloBot/README.md @@ -0,0 +1,95 @@ +# HoloBot # + +本文件夹为HoloLens端Unity工程文件。实现通过Microphone采集保存中文语音,调用Bing Speech API将中文语音转为中文文本,然后发送消息给Bot Framework(Bot后端调用LUIS进行语义识别并生成相应回答内容),最后通过Bing Speech API,将Bot Framework返回的消息转为中文语音并朗读的功能 + +![](../Screenshots/12.jpg) + +整体架构图如下: +![](../Screenshots/49.jpg) + +### HoloToolkit-Unity说明 ### + +本项目使用HoloToolkit-Unity实现凝视和点击功能,[HoloToolkit-Unity](https://github.com/Microsoft/HoloToolkit-Unity/tree/master/External/Unitypackages "HoloToolkit-Unity")版本为v.1.5.6.0 + +### 软件说明 ### +*Unity*      版本 Unity 5.5.0f3 +*Visual Studio*  版本 Visual Studio 2015 Update 3 + +### 脚本说明 ### +*SpeechToText.cs*  中文语音转文字。使用Microphone将语音录制成文件后,通过Bing Speech API将中文语音文件转成中文文本,发送消息给Bot Framework获取提问答案 +*TextToSpeech.cs*  中文文字转语音。通过Bing Speech API,将Bot Framework响应消息,转成中文语音,然后播放 +*ModelManager.cs*  模型控制脚本。控制录音的开始与结束,控制提示信息的显示,控制响应消息的显示 +*BotService.cs*    Bot Framework服务脚本。提供创建会话,发送消息,获取消息方法 +[*SavWav.cs*](https://gist.github.com/darktable/2317063 "SaveWav.cs")     Unity中AudioClip保存成WAV文件开源代码 +[*JSONObject.cs*](https://github.com/mtschoen/JSONObject/blob/master/JSONObject.cs "JSONObject.cs")  Unity中使用JSON的开源代码 + +### 运行步骤 ### +1. 启动HoloBot App +2. 等待系统初始化完成,提示“点我进行提问”后进行操作 +3. 使用AirTap手势,点击机器人,当出现麦克风图标时进行提问(录音时间为3秒钟,代码中可进行修改)。根据LUIS中定义的问答范围进行提问 +4. 等待返回结果 + +### 运行结果 ### +**Hololens运行结果** +![](../Screenshots/13.jpg) + +![](../Screenshots/14.jpg) + +![](../Screenshots/15.jpg) + +![](../Screenshots/16.jpg) + +![](../Screenshots/21.jpg) + +![](../Screenshots/22.jpg) + +本项目支持在Windows Holographic中运行 +**Windows Holographic运行结果** +![](../Screenshots/39.jpg) + +![](../Screenshots/40.jpg) + +### VendingMachineBotDemo支持的问答范围 ### +**对话逻辑如下** + +Q: 你好 + +A: 您好,我是贩卖机管理小助手,请您先登录系统,输入验证码: + +Q: 123456 + +A: 验证成功,请问有什么可以帮您? + +Q: 贩卖机当前状态怎么样? + +A: 0127号贩卖机工作正常 + +Q: 是否需要补充货物? + +A: 0127号贩卖机货物充足 + +Q: 13号货物通道是什么? + +A: 0127号贩卖机13货道商品名称:银鹭好粥道黑米粥(280g罐)有货 + +Q: 贩卖机温度状态怎么样? + +A: 0127号贩卖机温度状态如下: + +饮料机:右温区温度:9 温度模式:制冷 + +饮料机:中温区温度:8 温度模式:制冷 + +饮料机:左温区温度:8 温度模式:制冷 + +Q: 贩卖机位置在哪里? + +A: 0127号号贩卖机的具体位置请参考地图链接 + +Q: 给我看整体状态PowerBi图 + +A: 0127号贩卖机整体状态PowerBi链接请参考 + +Q: 谢谢 + +A: 不客气,请问还有什么可以帮您? diff --git a/HoloBot/UWP/project.json b/HoloBot/UWP/project.json new file mode 100644 index 0000000..c594939 --- /dev/null +++ b/HoloBot/UWP/project.json @@ -0,0 +1,16 @@ +{ + "dependencies": { + "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0" + }, + "frameworks": { + "uap10.0": {} + }, + "runtimes": { + "win10-arm": {}, + "win10-arm-aot": {}, + "win10-x86": {}, + "win10-x86-aot": {}, + "win10-x64": {}, + "win10-x64-aot": {} + } +} \ No newline at end of file diff --git a/HoloBot/UWP/project.lock.json b/HoloBot/UWP/project.lock.json new file mode 100644 index 0000000..0624dd2 --- /dev/null +++ b/HoloBot/UWP/project.lock.json @@ -0,0 +1,14573 @@ +{ + "locked": false, + "version": 1, + "targets": { + "UAP,Version=v10.0": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "lib/netcore50/System.Core.dll": {}, + "lib/netcore50/System.dll": {}, + "lib/netcore50/System.Net.dll": {}, + "lib/netcore50/System.Numerics.dll": {}, + "lib/netcore50/System.Runtime.Serialization.dll": {}, + "lib/netcore50/System.ServiceModel.dll": {}, + "lib/netcore50/System.ServiceModel.Web.dll": {}, + "lib/netcore50/System.Windows.dll": {}, + "lib/netcore50/System.Xml.dll": {}, + "lib/netcore50/System.Xml.Linq.dll": {}, + "lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-arm": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "lib/netcore50/System.Core.dll": {}, + "lib/netcore50/System.dll": {}, + "lib/netcore50/System.Net.dll": {}, + "lib/netcore50/System.Numerics.dll": {}, + "lib/netcore50/System.Runtime.Serialization.dll": {}, + "lib/netcore50/System.ServiceModel.dll": {}, + "lib/netcore50/System.ServiceModel.Web.dll": {}, + "lib/netcore50/System.Windows.dll": {}, + "lib/netcore50/System.Xml.dll": {}, + "lib/netcore50/System.Xml.Linq.dll": {}, + "lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + }, + "compile": { + "ref/dotnet/_._": {} + }, + "runtime": { + "runtimes/win8-arm/lib/dotnet/mscorlib.ni.dll": {} + }, + "native": { + "runtimes/win8-arm/native/clretwrc.dll": {}, + "runtimes/win8-arm/native/coreclr.dll": {}, + "runtimes/win8-arm/native/dbgshim.dll": {}, + "runtimes/win8-arm/native/mscordaccore.dll": {}, + "runtimes/win8-arm/native/mscordbi.dll": {}, + "runtimes/win8-arm/native/mscorrc.debug.dll": {}, + "runtimes/win8-arm/native/mscorrc.dll": {} + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-arm/4.0.0": { + "native": { + "runtimes/win10-arm/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-arm-aot": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "runtimes/aot/lib/netcore50/mscorlib.dll": {}, + "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "runtimes/aot/lib/netcore50/System.Core.dll": {}, + "runtimes/aot/lib/netcore50/System.dll": {}, + "runtimes/aot/lib/netcore50/System.Net.dll": {}, + "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, + "runtimes/aot/lib/netcore50/System.Windows.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.Native/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-arm/4.0.0": { + "native": { + "runtimes/win10-arm/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-x64": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "lib/netcore50/System.Core.dll": {}, + "lib/netcore50/System.dll": {}, + "lib/netcore50/System.Net.dll": {}, + "lib/netcore50/System.Numerics.dll": {}, + "lib/netcore50/System.Runtime.Serialization.dll": {}, + "lib/netcore50/System.ServiceModel.dll": {}, + "lib/netcore50/System.ServiceModel.Web.dll": {}, + "lib/netcore50/System.Windows.dll": {}, + "lib/netcore50/System.Xml.dll": {}, + "lib/netcore50/System.Xml.Linq.dll": {}, + "lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + }, + "compile": { + "ref/dotnet/_._": {} + }, + "runtime": { + "runtimes/win7-x64/lib/dotnet/mscorlib.ni.dll": {} + }, + "native": { + "runtimes/win7-x64/native/clretwrc.dll": {}, + "runtimes/win7-x64/native/coreclr.dll": {}, + "runtimes/win7-x64/native/dbgshim.dll": {}, + "runtimes/win7-x64/native/mscordaccore.dll": {}, + "runtimes/win7-x64/native/mscordbi.dll": {}, + "runtimes/win7-x64/native/mscorrc.debug.dll": {}, + "runtimes/win7-x64/native/mscorrc.dll": {} + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0": { + "native": { + "runtimes/win10-x64/native/_._": {} + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-x64/4.0.0": { + "native": { + "runtimes/win10-x64/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-x64-aot": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "runtimes/aot/lib/netcore50/mscorlib.dll": {}, + "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "runtimes/aot/lib/netcore50/System.Core.dll": {}, + "runtimes/aot/lib/netcore50/System.dll": {}, + "runtimes/aot/lib/netcore50/System.Net.dll": {}, + "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, + "runtimes/aot/lib/netcore50/System.Windows.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.Native/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-x64/4.0.0": { + "native": { + "runtimes/win10-x64/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-x86": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "lib/netcore50/System.Core.dll": {}, + "lib/netcore50/System.dll": {}, + "lib/netcore50/System.Net.dll": {}, + "lib/netcore50/System.Numerics.dll": {}, + "lib/netcore50/System.Runtime.Serialization.dll": {}, + "lib/netcore50/System.ServiceModel.dll": {}, + "lib/netcore50/System.ServiceModel.Web.dll": {}, + "lib/netcore50/System.Windows.dll": {}, + "lib/netcore50/System.Xml.dll": {}, + "lib/netcore50/System.Xml.Linq.dll": {}, + "lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + }, + "compile": { + "ref/dotnet/_._": {} + }, + "runtime": { + "runtimes/win7-x86/lib/dotnet/mscorlib.ni.dll": {} + }, + "native": { + "runtimes/win7-x86/native/clretwrc.dll": {}, + "runtimes/win7-x86/native/coreclr.dll": {}, + "runtimes/win7-x86/native/dbgshim.dll": {}, + "runtimes/win7-x86/native/mscordaccore.dll": {}, + "runtimes/win7-x86/native/mscordbi.dll": {}, + "runtimes/win7-x86/native/mscorrc.debug.dll": {}, + "runtimes/win7-x86/native/mscorrc.dll": {} + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0": { + "native": { + "runtimes/win10-x86/native/_._": {} + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-x86/4.0.0": { + "native": { + "runtimes/win10-x86/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.Lightweight.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + }, + "UAP,Version=v10.0/win10-x86-aot": { + "Microsoft.CSharp/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.CSharp.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NETCore/5.0.0": { + "dependencies": { + "Microsoft.CSharp": "[4.0.0, )", + "Microsoft.NETCore.Targets": "[1.0.0, )", + "Microsoft.VisualBasic": "[10.0.0, )", + "System.AppContext": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.ComponentModel": "[4.0.0, )", + "System.ComponentModel.Annotations": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tools": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Calendars": "[4.0.0, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.Compression.ZipFile": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.IO.UnmanagedMemoryStream": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Parallel": "[4.0.0, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.NetworkInformation": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Numerics.Vectors": "[4.1.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Metadata": "[1.0.22, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Numerics": "[4.0.0, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Tasks.Dataflow": "[4.5.25, )", + "System.Threading.Tasks.Parallel": "[4.0.0, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XDocument": "[4.0.10, )" + } + }, + "Microsoft.NETCore.Platforms/1.0.0": {}, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Runtime": "[1.0.0, )" + }, + "compile": { + "ref/netcore50/mscorlib.dll": {}, + "ref/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "ref/netcore50/System.Core.dll": {}, + "ref/netcore50/System.dll": {}, + "ref/netcore50/System.Net.dll": {}, + "ref/netcore50/System.Numerics.dll": {}, + "ref/netcore50/System.Runtime.Serialization.dll": {}, + "ref/netcore50/System.ServiceModel.dll": {}, + "ref/netcore50/System.ServiceModel.Web.dll": {}, + "ref/netcore50/System.Windows.dll": {}, + "ref/netcore50/System.Xml.dll": {}, + "ref/netcore50/System.Xml.Linq.dll": {}, + "ref/netcore50/System.Xml.Serialization.dll": {} + }, + "runtime": { + "runtimes/aot/lib/netcore50/mscorlib.dll": {}, + "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll": {}, + "runtimes/aot/lib/netcore50/System.Core.dll": {}, + "runtimes/aot/lib/netcore50/System.dll": {}, + "runtimes/aot/lib/netcore50/System.Net.dll": {}, + "runtimes/aot/lib/netcore50/System.Numerics.dll": {}, + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.dll": {}, + "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll": {}, + "runtimes/aot/lib/netcore50/System.Windows.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Linq.dll": {}, + "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll": {} + } + }, + "Microsoft.NETCore.Runtime/1.0.0": {}, + "Microsoft.NETCore.Runtime.Native/1.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, 4.0.10]", + "System.Diagnostics.Contracts": "[4.0.0, 4.0.0]", + "System.Diagnostics.Debug": "[4.0.10, 4.0.10]", + "System.Diagnostics.StackTrace": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tools": "[4.0.0, 4.0.0]", + "System.Diagnostics.Tracing": "[4.0.20, 4.0.20]", + "System.Globalization": "[4.0.10, 4.0.10]", + "System.Globalization.Calendars": "[4.0.0, 4.0.0]", + "System.IO": "[4.0.10, 4.0.10]", + "System.ObjectModel": "[4.0.10, 4.0.10]", + "System.Private.Uri": "[4.0.0, 4.0.0]", + "System.Reflection": "[4.0.10, 4.0.10]", + "System.Reflection.Extensions": "[4.0.0, 4.0.0]", + "System.Reflection.Primitives": "[4.0.0, 4.0.0]", + "System.Resources.ResourceManager": "[4.0.0, 4.0.0]", + "System.Runtime": "[4.0.20, 4.0.20]", + "System.Runtime.Extensions": "[4.0.10, 4.0.10]", + "System.Runtime.Handles": "[4.0.0, 4.0.0]", + "System.Runtime.InteropServices": "[4.0.20, 4.0.20]", + "System.Text.Encoding": "[4.0.10, 4.0.10]", + "System.Text.Encoding.Extensions": "[4.0.10, 4.0.10]", + "System.Threading": "[4.0.10, 4.0.10]", + "System.Threading.Tasks": "[4.0.10, 4.0.10]", + "System.Threading.Timer": "[4.0.0, 4.0.0]" + } + }, + "Microsoft.NETCore.Targets/1.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "[1.0.0, )", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform": "[5.0.0, )" + } + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": {}, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "dependencies": { + "Microsoft.NETCore": "[5.0.0, )", + "Microsoft.NETCore.Portable.Compatibility": "[1.0.0, )", + "Microsoft.NETCore.Runtime": "[1.0.0, )", + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Data.Common": "[4.0.0, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.StackTrace": "[4.0.0, )", + "System.IO.IsolatedStorage": "[4.0.0, )", + "System.Net.Http.Rtc": "[4.0.0, )", + "System.Net.Requests": "[4.0.10, )", + "System.Net.Sockets": "[4.0.0, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Numerics.Vectors.WindowsRuntime": "[4.0.0, )", + "System.Reflection.Context": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Runtime.Serialization.Json": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Runtime.WindowsRuntime.UI.Xaml": "[4.0.0, )", + "System.ServiceModel.Duplex": "[4.0.0, )", + "System.ServiceModel.Http": "[4.0.10, )", + "System.ServiceModel.NetTcp": "[4.0.0, )", + "System.ServiceModel.Primitives": "[4.0.0, )", + "System.ServiceModel.Security": "[4.0.0, )", + "System.Text.Encoding.CodePages": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + } + }, + "Microsoft.VisualBasic/10.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Dynamic.Runtime": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/Microsoft.VisualBasic.dll": {} + }, + "runtime": { + "lib/netcore50/Microsoft.VisualBasic.dll": {} + } + }, + "Microsoft.Win32.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/Microsoft.Win32.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/Microsoft.Win32.Primitives.dll": {} + } + }, + "System.AppContext/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.AppContext.dll": {} + }, + "runtime": { + "lib/netcore50/System.AppContext.dll": {} + } + }, + "System.Collections/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Collections.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Collections.dll": {} + } + }, + "System.Collections.Concurrent/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Concurrent.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Concurrent.dll": {} + } + }, + "System.Collections.Immutable/1.1.37": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Collections.Immutable.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Immutable.dll": {} + } + }, + "System.Collections.NonGeneric/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.NonGeneric.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.NonGeneric.dll": {} + } + }, + "System.Collections.Specialized/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Globalization.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Collections.Specialized.dll": {} + }, + "runtime": { + "lib/dotnet/System.Collections.Specialized.dll": {} + } + }, + "System.ComponentModel/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ComponentModel.dll": {} + }, + "runtime": { + "lib/netcore50/System.ComponentModel.dll": {} + } + }, + "System.ComponentModel.Annotations/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.ComponentModel": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.Annotations.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.Annotations.dll": {} + } + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + }, + "runtime": { + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll": {} + } + }, + "System.Data.Common/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Data.Common.dll": {} + }, + "runtime": { + "lib/dotnet/System.Data.Common.dll": {} + } + }, + "System.Diagnostics.Contracts/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Contracts.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll": {} + } + }, + "System.Diagnostics.Debug/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Debug.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll": {} + } + }, + "System.Diagnostics.StackTrace/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.StackTrace.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll": {} + } + }, + "System.Diagnostics.Tools/4.0.0": { + "compile": { + "ref/netcore50/System.Diagnostics.Tools.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll": {} + } + }, + "System.Diagnostics.Tracing/4.0.20": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Diagnostics.Tracing.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll": {} + } + }, + "System.Dynamic.Runtime/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Dynamic.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.dll": {} + } + }, + "System.Globalization.Calendars/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Calendars.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll": {} + } + }, + "System.Globalization.Extensions/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Globalization.Extensions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Globalization.Extensions.dll": {} + } + }, + "System.IO/4.0.10": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.IO.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.IO.dll": {} + } + }, + "System.IO.Compression/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.IO.Compression.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.Compression.dll": {} + } + }, + "System.IO.Compression.clrcompression-x86/4.0.0": { + "native": { + "runtimes/win10-x86/native/ClrCompression.dll": {} + } + }, + "System.IO.Compression.ZipFile/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.Compression.ZipFile.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.FileSystem.dll": {} + } + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.IO.FileSystem.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.IsolatedStorage/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.IsolatedStorage.dll": {} + }, + "runtime": { + "lib/netcore50/System.IO.IsolatedStorage.dll": {} + } + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "dependencies": { + "System.IO": "[4.0.10, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + }, + "runtime": { + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll": {} + } + }, + "System.Linq/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Linq.Expressions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll": {} + } + }, + "System.Linq.Parallel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Linq.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Parallel.dll": {} + } + }, + "System.Linq.Queryable/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Linq.Queryable.dll": {} + }, + "runtime": { + "lib/netcore50/System.Linq.Queryable.dll": {} + } + }, + "System.Net.Http/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.dll": {} + } + }, + "System.Net.Http.Rtc/4.0.0": { + "dependencies": { + "System.Net.Http": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Net.Http.Rtc.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Http.Rtc.dll": {} + } + }, + "System.Net.NetworkInformation/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Runtime.InteropServices.WindowsRuntime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Net.NetworkInformation.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.NetworkInformation.dll": {} + } + }, + "System.Net.Primitives/4.0.10": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Primitives.dll": {} + } + }, + "System.Net.Requests/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Net.Requests.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.Requests.dll": {} + } + }, + "System.Net.Sockets/4.0.0": { + "dependencies": { + "System.Private.Networking": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.Sockets.dll": {} + }, + "runtime": { + "lib/netcore50/System.Net.Sockets.dll": {} + } + }, + "System.Net.WebHeaderCollection/4.0.0": { + "dependencies": { + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Net.WebHeaderCollection.dll": {} + }, + "runtime": { + "lib/dotnet/System.Net.WebHeaderCollection.dll": {} + } + }, + "System.Numerics.Vectors/4.1.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Numerics.Vectors.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.dll": {} + } + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "dependencies": { + "System.Numerics.Vectors": "[4.1.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + }, + "runtime": { + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll": {} + } + }, + "System.ObjectModel/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.ObjectModel.dll": {} + }, + "runtime": { + "lib/dotnet/System.ObjectModel.dll": {} + } + }, + "System.Private.DataContractSerialization/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.DataContractSerialization.dll": {} + } + }, + "System.Private.Networking/4.0.0": { + "dependencies": { + "Microsoft.Win32.Primitives": "[4.0.0, )", + "System.Collections": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Overlapped": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.Networking.dll": {} + } + }, + "System.Private.ServiceModel/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Collections.Concurrent": "[4.0.10, )", + "System.Collections.NonGeneric": "[4.0.0, )", + "System.Collections.Specialized": "[4.0.0, )", + "System.ComponentModel.EventBasedAsync": "[4.0.10, )", + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.Compression": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Linq.Expressions": "[4.0.10, )", + "System.Linq.Queryable": "[4.0.0, )", + "System.Net.Http": "[4.0.0, )", + "System.Net.Primitives": "[4.0.10, )", + "System.Net.WebHeaderCollection": "[4.0.0, )", + "System.ObjectModel": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.DispatchProxy": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )", + "System.Runtime.Serialization.Xml": "[4.0.10, )", + "System.Runtime.WindowsRuntime": "[4.0.10, )", + "System.Security.Claims": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )", + "System.Threading.Timer": "[4.0.0, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )", + "System.Xml.XmlSerializer": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "lib/netcore50/System.Private.ServiceModel.dll": {} + } + }, + "System.Private.Uri/4.0.0": { + "compile": { + "ref/netcore50/_._": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll": {} + } + }, + "System.Reflection/4.0.10": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Reflection.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.dll": {} + } + }, + "System.Reflection.Context/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Context.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Context.dll": {} + } + }, + "System.Reflection.DispatchProxy/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.DispatchProxy.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll": {} + } + }, + "System.Reflection.Emit/4.0.0": { + "dependencies": { + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Emit.ILGeneration": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll": {} + }, + "runtime": { + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Extensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll": {} + } + }, + "System.Reflection.Metadata/1.0.22": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Immutable": "[1.1.37, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Reflection": "[4.0.0, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.0, )", + "System.Text.Encoding": "[4.0.0, )", + "System.Text.Encoding.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + }, + "runtime": { + "lib/dotnet/System.Reflection.Metadata.dll": {} + } + }, + "System.Reflection.Primitives/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Reflection.Primitives.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll": {} + } + }, + "System.Reflection.TypeExtensions/4.0.0": { + "dependencies": { + "System.Diagnostics.Contracts": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Reflection.TypeExtensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.Resources.ResourceManager.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll": {} + } + }, + "System.Runtime/4.0.20": { + "dependencies": { + "System.Private.Uri": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.dll": {} + } + }, + "System.Runtime.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll": {} + } + }, + "System.Runtime.Handles/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Handles.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll": {} + } + }, + "System.Runtime.InteropServices/4.0.20": { + "dependencies": { + "System.Reflection": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Runtime.InteropServices.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "compile": { + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll": {} + } + }, + "System.Runtime.Numerics/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Numerics.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Json/4.0.0": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.Serialization.Json.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Json.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Primitives.dll": {} + }, + "runtime": { + "lib/dotnet/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "dependencies": { + "System.Private.DataContractSerialization": "[4.0.0, )", + "System.Runtime.Serialization.Primitives": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Runtime.Serialization.Xml.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Xml.dll": {} + } + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "dependencies": { + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.10, )", + "System.ObjectModel": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll": {} + } + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "dependencies": { + "System.Globalization": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.WindowsRuntime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + }, + "runtime": { + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll": {} + } + }, + "System.Security.Claims/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Globalization": "[4.0.0, )", + "System.IO": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Security.Principal": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Security.Claims.dll": {} + }, + "runtime": { + "lib/dotnet/System.Security.Claims.dll": {} + } + }, + "System.Security.Principal/4.0.0": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/netcore50/System.Security.Principal.dll": {} + }, + "runtime": { + "lib/netcore50/System.Security.Principal.dll": {} + } + }, + "System.ServiceModel.Duplex/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Duplex.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Duplex.dll": {} + } + }, + "System.ServiceModel.Http/4.0.10": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/dotnet/System.ServiceModel.Http.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Http.dll": {} + } + }, + "System.ServiceModel.NetTcp/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.NetTcp.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.NetTcp.dll": {} + } + }, + "System.ServiceModel.Primitives/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Primitives.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Primitives.dll": {} + } + }, + "System.ServiceModel.Security/4.0.0": { + "dependencies": { + "System.Private.ServiceModel": "[4.0.0, )", + "System.Runtime": "[4.0.20, )" + }, + "compile": { + "ref/netcore50/System.ServiceModel.Security.dll": {} + }, + "runtime": { + "lib/netcore50/System.ServiceModel.Security.dll": {} + } + }, + "System.Text.Encoding/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll": {} + } + }, + "System.Text.Encoding.CodePages/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.CodePages.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.Encoding.CodePages.dll": {} + } + }, + "System.Text.Encoding.Extensions/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Text.Encoding": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.Encoding.Extensions.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll": {} + } + }, + "System.Text.RegularExpressions/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/dotnet/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.dll": {} + } + }, + "System.Threading.Overlapped/4.0.0": { + "dependencies": { + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Runtime.Handles": "[4.0.0, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Threading": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Threading.Overlapped.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Overlapped.dll": {} + } + }, + "System.Threading.Tasks/4.0.10": { + "dependencies": { + "System.Runtime": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Threading.Tasks.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll": {} + } + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "dependencies": { + "System.Collections": "[4.0.0, )", + "System.Collections.Concurrent": "[4.0.0, )", + "System.Diagnostics.Debug": "[4.0.0, )", + "System.Diagnostics.Tracing": "[4.0.0, )", + "System.Dynamic.Runtime": "[4.0.0, )", + "System.Linq": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.0, )", + "System.Runtime.Extensions": "[4.0.0, )", + "System.Threading": "[4.0.0, )", + "System.Threading.Tasks": "[4.0.0, )" + }, + "compile": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + }, + "runtime": { + "lib/dotnet/System.Threading.Tasks.Dataflow.dll": {} + } + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "dependencies": { + "System.Collections.Concurrent": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Diagnostics.Tracing": "[4.0.20, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/netcore50/System.Threading.Tasks.Parallel.dll": {} + }, + "runtime": { + "lib/netcore50/System.Threading.Tasks.Parallel.dll": {} + } + }, + "System.Threading.Timer/4.0.0": { + "compile": { + "ref/netcore50/System.Threading.Timer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll": {} + } + }, + "System.Xml.ReaderWriter/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.IO.FileSystem": "[4.0.0, )", + "System.IO.FileSystem.Primitives": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Runtime.InteropServices": "[4.0.20, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Text.Encoding.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading.Tasks": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.ReaderWriter.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Reflection": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XDocument.dll": {} + } + }, + "System.Xml.XmlDocument/4.0.0": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.Encoding": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlDocument.dll": {} + }, + "runtime": { + "lib/dotnet/System.Xml.XmlDocument.dll": {} + } + }, + "System.Xml.XmlSerializer/4.0.10": { + "dependencies": { + "System.Collections": "[4.0.10, )", + "System.Diagnostics.Debug": "[4.0.10, )", + "System.Globalization": "[4.0.10, )", + "System.IO": "[4.0.10, )", + "System.Linq": "[4.0.0, )", + "System.Reflection": "[4.0.10, )", + "System.Reflection.Extensions": "[4.0.0, )", + "System.Reflection.Primitives": "[4.0.0, )", + "System.Reflection.TypeExtensions": "[4.0.0, )", + "System.Resources.ResourceManager": "[4.0.0, )", + "System.Runtime": "[4.0.20, )", + "System.Runtime.Extensions": "[4.0.10, )", + "System.Text.RegularExpressions": "[4.0.10, )", + "System.Threading": "[4.0.10, )", + "System.Xml.ReaderWriter": "[4.0.10, )", + "System.Xml.XmlDocument": "[4.0.0, )" + }, + "compile": { + "ref/dotnet/System.Xml.XmlSerializer.dll": {} + }, + "runtime": { + "runtimes/win8-aot/lib/netcore50/System.Xml.XmlSerializer.dll": {} + } + } + } + }, + "libraries": { + "Microsoft.CSharp/4.0.0": { + "sha512": "oWqeKUxHXdK6dL2CFjgMcaBISbkk+AqEg+yvJHE4DElNzS4QaTsCflgkkqZwVlWby1Dg9zo9n+iCAMFefFdJ/A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/Microsoft.CSharp.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/Microsoft.CSharp.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "Microsoft.CSharp.nuspec", + "package/services/metadata/core-properties/a8a7171824ab4656b3141cda0591ff66.psmdcp", + "ref/dotnet/de/Microsoft.CSharp.xml", + "ref/dotnet/es/Microsoft.CSharp.xml", + "ref/dotnet/fr/Microsoft.CSharp.xml", + "ref/dotnet/it/Microsoft.CSharp.xml", + "ref/dotnet/ja/Microsoft.CSharp.xml", + "ref/dotnet/ko/Microsoft.CSharp.xml", + "ref/dotnet/Microsoft.CSharp.dll", + "ref/dotnet/Microsoft.CSharp.xml", + "ref/dotnet/ru/Microsoft.CSharp.xml", + "ref/dotnet/zh-hans/Microsoft.CSharp.xml", + "ref/dotnet/zh-hant/Microsoft.CSharp.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/Microsoft.CSharp.dll", + "ref/netcore50/Microsoft.CSharp.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._" + ] + }, + "Microsoft.NETCore/5.0.0": { + "sha512": "QQMp0yYQbIdfkKhdEE6Umh2Xonau7tasG36Trw/YlHoWgYQLp7T9L+ZD8EPvdj5ubRhtOuKEKwM7HMpkagB9ZA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_._", + "_rels/.rels", + "Microsoft.NETCore.nuspec", + "package/services/metadata/core-properties/340ac37fb1224580ae47c59ebdd88964.psmdcp" + ] + }, + "Microsoft.NETCore.Platforms/1.0.0": { + "sha512": "0N77OwGZpXqUco2C/ynv1os7HqdFYifvNIbveLDKqL5PZaz05Rl9enCwVBjF61aumHKueLWIJ3prnmdAXxww4A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Platforms.nuspec", + "package/services/metadata/core-properties/36b51d4c6b524527902ff1a182a64e42.psmdcp", + "runtime.json" + ] + }, + "Microsoft.NETCore.Portable.Compatibility/1.0.0": { + "sha512": "5/IFqf2zN1jzktRJitxO+5kQ+0AilcIbPvSojSJwDG3cGNSMZg44LXLB5E9RkSETE0Wh4QoALdNh1koKoF7/mA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dnxcore50/System.ComponentModel.DataAnnotations.dll", + "lib/dnxcore50/System.Core.dll", + "lib/dnxcore50/System.dll", + "lib/dnxcore50/System.Net.dll", + "lib/dnxcore50/System.Numerics.dll", + "lib/dnxcore50/System.Runtime.Serialization.dll", + "lib/dnxcore50/System.ServiceModel.dll", + "lib/dnxcore50/System.ServiceModel.Web.dll", + "lib/dnxcore50/System.Windows.dll", + "lib/dnxcore50/System.Xml.dll", + "lib/dnxcore50/System.Xml.Linq.dll", + "lib/dnxcore50/System.Xml.Serialization.dll", + "lib/net45/_._", + "lib/netcore50/System.ComponentModel.DataAnnotations.dll", + "lib/netcore50/System.Core.dll", + "lib/netcore50/System.dll", + "lib/netcore50/System.Net.dll", + "lib/netcore50/System.Numerics.dll", + "lib/netcore50/System.Runtime.Serialization.dll", + "lib/netcore50/System.ServiceModel.dll", + "lib/netcore50/System.ServiceModel.Web.dll", + "lib/netcore50/System.Windows.dll", + "lib/netcore50/System.Xml.dll", + "lib/netcore50/System.Xml.Linq.dll", + "lib/netcore50/System.Xml.Serialization.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "Microsoft.NETCore.Portable.Compatibility.nuspec", + "package/services/metadata/core-properties/8131b8ae030a45e7986737a0c1d04ef5.psmdcp", + "ref/dotnet/mscorlib.dll", + "ref/dotnet/System.ComponentModel.DataAnnotations.dll", + "ref/dotnet/System.Core.dll", + "ref/dotnet/System.dll", + "ref/dotnet/System.Net.dll", + "ref/dotnet/System.Numerics.dll", + "ref/dotnet/System.Runtime.Serialization.dll", + "ref/dotnet/System.ServiceModel.dll", + "ref/dotnet/System.ServiceModel.Web.dll", + "ref/dotnet/System.Windows.dll", + "ref/dotnet/System.Xml.dll", + "ref/dotnet/System.Xml.Linq.dll", + "ref/dotnet/System.Xml.Serialization.dll", + "ref/net45/_._", + "ref/netcore50/mscorlib.dll", + "ref/netcore50/System.ComponentModel.DataAnnotations.dll", + "ref/netcore50/System.Core.dll", + "ref/netcore50/System.dll", + "ref/netcore50/System.Net.dll", + "ref/netcore50/System.Numerics.dll", + "ref/netcore50/System.Runtime.Serialization.dll", + "ref/netcore50/System.ServiceModel.dll", + "ref/netcore50/System.ServiceModel.Web.dll", + "ref/netcore50/System.Windows.dll", + "ref/netcore50/System.Xml.dll", + "ref/netcore50/System.Xml.Linq.dll", + "ref/netcore50/System.Xml.Serialization.dll", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/aot/lib/netcore50/mscorlib.dll", + "runtimes/aot/lib/netcore50/System.ComponentModel.DataAnnotations.dll", + "runtimes/aot/lib/netcore50/System.Core.dll", + "runtimes/aot/lib/netcore50/System.dll", + "runtimes/aot/lib/netcore50/System.Net.dll", + "runtimes/aot/lib/netcore50/System.Numerics.dll", + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.dll", + "runtimes/aot/lib/netcore50/System.ServiceModel.dll", + "runtimes/aot/lib/netcore50/System.ServiceModel.Web.dll", + "runtimes/aot/lib/netcore50/System.Windows.dll", + "runtimes/aot/lib/netcore50/System.Xml.dll", + "runtimes/aot/lib/netcore50/System.Xml.Linq.dll", + "runtimes/aot/lib/netcore50/System.Xml.Serialization.dll" + ] + }, + "Microsoft.NETCore.Runtime/1.0.0": { + "sha512": "AjaMNpXLW4miEQorIqyn6iQ+BZBId6qXkhwyeh1vl6kXLqosZusbwmLNlvj/xllSQrd3aImJbvlHusam85g+xQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Runtime.nuspec", + "package/services/metadata/core-properties/f289de2ffef9428684eca0c193bc8765.psmdcp", + "runtime.json" + ] + }, + "Microsoft.NETCore.Runtime.CoreCLR-arm/1.0.0": { + "sha512": "hoJfIl981eXwn9Tz8onO/J1xaYApIfp/YrhjSh9rRhml1U5Wj80LBgyp/6n+KI3VlvcAraThhnHnCTp+M3Uh+w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Runtime.CoreCLR-arm.nuspec", + "package/services/metadata/core-properties/c1cbeaed81514106b6b7971ac193f132.psmdcp", + "ref/dotnet/_._", + "runtimes/win8-arm/lib/dotnet/mscorlib.ni.dll", + "runtimes/win8-arm/native/clretwrc.dll", + "runtimes/win8-arm/native/coreclr.dll", + "runtimes/win8-arm/native/dbgshim.dll", + "runtimes/win8-arm/native/mscordaccore.dll", + "runtimes/win8-arm/native/mscordbi.dll", + "runtimes/win8-arm/native/mscorrc.debug.dll", + "runtimes/win8-arm/native/mscorrc.dll" + ] + }, + "Microsoft.NETCore.Runtime.CoreCLR-x64/1.0.0": { + "sha512": "DaY5Z13xCZpnVIGluC5sCo4/0wy1rl6mptBH7v3RYi3guAmG88aSeFoQzyZepo0H0jEixUxNFM0+MB6Jc+j0bw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Runtime.CoreCLR-x64.nuspec", + "package/services/metadata/core-properties/bd7bd26b6b8242179b5b8ca3d9ffeb95.psmdcp", + "ref/dotnet/_._", + "runtimes/win7-x64/lib/dotnet/mscorlib.ni.dll", + "runtimes/win7-x64/native/clretwrc.dll", + "runtimes/win7-x64/native/coreclr.dll", + "runtimes/win7-x64/native/dbgshim.dll", + "runtimes/win7-x64/native/mscordaccore.dll", + "runtimes/win7-x64/native/mscordbi.dll", + "runtimes/win7-x64/native/mscorrc.debug.dll", + "runtimes/win7-x64/native/mscorrc.dll" + ] + }, + "Microsoft.NETCore.Runtime.CoreCLR-x86/1.0.0": { + "sha512": "2LDffu5Is/X01GVPVuye4Wmz9/SyGDNq1Opgl5bXG3206cwNiCwsQgILOtfSWVp5mn4w401+8cjhBy3THW8HQQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Runtime.CoreCLR-x86.nuspec", + "package/services/metadata/core-properties/dd7e29450ade4bdaab9794850cd11d7a.psmdcp", + "ref/dotnet/_._", + "runtimes/win7-x86/lib/dotnet/mscorlib.ni.dll", + "runtimes/win7-x86/native/clretwrc.dll", + "runtimes/win7-x86/native/coreclr.dll", + "runtimes/win7-x86/native/dbgshim.dll", + "runtimes/win7-x86/native/mscordaccore.dll", + "runtimes/win7-x86/native/mscordbi.dll", + "runtimes/win7-x86/native/mscorrc.debug.dll", + "runtimes/win7-x86/native/mscorrc.dll" + ] + }, + "Microsoft.NETCore.Runtime.Native/1.0.0": { + "sha512": "tMsWWrH1AJCguiM22zK/vr6COxqz62Q1F02B07IXAUN405R3HGk5SkD/DL0Hte+OTjNtW9LkKXpOggGBRwYFNg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_._", + "_rels/.rels", + "Microsoft.NETCore.Runtime.Native.nuspec", + "package/services/metadata/core-properties/a985563978b547f984c16150ef73e353.psmdcp" + ] + }, + "Microsoft.NETCore.Targets/1.0.0": { + "sha512": "XfITpPjYLYRmAeZtb9diw6P7ylLQsSC1U2a/xj10iQpnHxkiLEBXop/psw15qMPuNca7lqgxWvzZGpQxphuXaw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Targets.nuspec", + "package/services/metadata/core-properties/5413a5ed3fde4121a1c9ee8feb12ba66.psmdcp", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets.UniversalWindowsPlatform/5.0.0": { + "sha512": "jszcJ6okLlhqF4OQbhSbixLOuLUyVT3BP7Y7/i7fcDMwnHBd1Pmdz6M1Al9SMDKVLA2oSaItg4tq6C0ydv8lYQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Targets.UniversalWindowsPlatform.nuspec", + "package/services/metadata/core-properties/0d18100c9f8c491492d8ddeaa9581526.psmdcp", + "runtime.json" + ] + }, + "Microsoft.NETCore.UniversalWindowsPlatform/5.0.0": { + "sha512": "D0nsAm+yTk0oSSC7E6PcmuuEewBAQbGgIXNcCnRqQ4qLPdQLMjMHg8cilGs3xZgwTRQmMtEn45TAatrU1otWPQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_._", + "_rels/.rels", + "Microsoft.NETCore.UniversalWindowsPlatform.nuspec", + "package/services/metadata/core-properties/5dffd3ce5b6640febe2db09251387062.psmdcp" + ] + }, + "Microsoft.NETCore.Windows.ApiSets-x64/1.0.0": { + "sha512": "NC+dpFMdhujz2sWAdJ8EmBk07p1zOlNi0FCCnZEbzftABpw9xZ99EMP/bUJrPTgCxHfzJAiuLPOtAauzVINk0w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Windows.ApiSets-x64.nuspec", + "package/services/metadata/core-properties/b25894a2a9234c329a98dc84006b2292.psmdcp", + "runtimes/win10-x64/native/_._", + "runtimes/win7-x64/native/API-MS-Win-Base-Util-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-com-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-comm-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-com-private-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-console-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-console-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-datetime-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-debug-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-delayload-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-errorhandling-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-fibers-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-file-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-file-l1-2-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-file-l2-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-handle-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-heap-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-heap-obsolete-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-interlocked-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-io-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-libraryloader-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-localization-l1-2-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-localization-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-2.dll", + "runtimes/win7-x64/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-normalization-l1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-privateprofile-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-processenvironment-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-processsecurity-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-processthreads-l1-1-2.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-profile-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-psapi-ansi-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-psapi-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-realtime-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-registry-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-registry-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-rtlsupport-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-shutdown-l1-1-1.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-string-l1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Core-String-L2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-stringloader-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-synch-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-synch-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win7-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win7-x64/native/api-ms-win-core-threadpool-l1-2-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-threadpool-private-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-timezone-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-url-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-util-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-version-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-error-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-registration-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-winrt-string-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-wow64-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-xstate-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-core-xstate-l2-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-devices-config-L1-1-1.dll", + "runtimes/win7-x64/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Eventing-Controller-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-Eventing-Provider-L1-1-0.dll", + "runtimes/win7-x64/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-ro-typeresolution-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-base-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-cryptoapi-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-lsalookup-l2-1-1.dll", + "runtimes/win7-x64/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-provider-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-security-sddl-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-service-core-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-service-management-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-service-management-l2-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-0.dll", + "runtimes/win7-x64/native/api-ms-win-service-private-l1-1-1.dll", + "runtimes/win7-x64/native/api-ms-win-service-winsvc-l1-1-0.dll", + "runtimes/win7-x64/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll", + "runtimes/win81-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win81-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win81-x64/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win81-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win81-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win81-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win81-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win81-x64/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win8-x64/native/api-ms-win-core-file-l1-2-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-file-l2-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win8-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", + "runtimes/win8-x64/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win8-x64/native/api-ms-win-core-localization-l1-2-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", + "runtimes/win8-x64/native/api-ms-win-core-memory-l1-1-2.dll", + "runtimes/win8-x64/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win8-x64/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-privateprofile-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-processthreads-l1-1-2.dll", + "runtimes/win8-x64/native/api-ms-win-core-shutdown-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-stringloader-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win8-x64/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win8-x64/native/api-ms-win-core-winrt-error-l1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-core-xstate-l2-1-0.dll", + "runtimes/win8-x64/native/API-MS-Win-devices-config-L1-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win8-x64/native/api-ms-win-security-cryptoapi-l1-1-0.dll", + "runtimes/win8-x64/native/api-ms-win-security-lsalookup-l2-1-1.dll", + "runtimes/win8-x64/native/api-ms-win-service-private-l1-1-1.dll" + ] + }, + "Microsoft.NETCore.Windows.ApiSets-x86/1.0.0": { + "sha512": "/HDRdhz5bZyhHwQ/uk/IbnDIX5VDTsHntEZYkTYo57dM+U3Ttel9/OJv0mjL64wTO/QKUJJNKp9XO+m7nSVjJQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "Microsoft.NETCore.Windows.ApiSets-x86.nuspec", + "package/services/metadata/core-properties/b773d829b3664669b45b4b4e97bdb635.psmdcp", + "runtimes/win10-x86/native/_._", + "runtimes/win7-x86/native/API-MS-Win-Base-Util-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-com-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-comm-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-com-private-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-console-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-console-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-datetime-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-debug-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-delayload-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-errorhandling-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-fibers-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-file-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-file-l1-2-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-file-l2-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-handle-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-heap-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-heap-obsolete-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-interlocked-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-io-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-libraryloader-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-localization-l1-2-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-localization-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-2.dll", + "runtimes/win7-x86/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-normalization-l1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-PrivateProfile-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-privateprofile-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-processenvironment-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-processsecurity-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-processthreads-l1-1-2.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-ProcessTopology-Obsolete-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-profile-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-psapi-ansi-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-psapi-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-psapi-obsolete-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-realtime-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-registry-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-registry-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-rtlsupport-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-shlwapi-legacy-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-shutdown-l1-1-1.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-StringAnsi-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-string-l1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Core-String-L2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-stringloader-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-synch-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-synch-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win7-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win7-x86/native/api-ms-win-core-threadpool-l1-2-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-threadpool-legacy-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-threadpool-private-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-timezone-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-url-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-util-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-version-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-error-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-registration-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-robuffer-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-winrt-string-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-wow64-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-xstate-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-core-xstate-l2-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-devices-config-L1-1-1.dll", + "runtimes/win7-x86/native/API-MS-Win-Eventing-ClassicProvider-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Eventing-Consumer-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Eventing-Controller-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Eventing-Legacy-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-Eventing-Provider-L1-1-0.dll", + "runtimes/win7-x86/native/API-MS-Win-EventLog-Legacy-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-ro-typeresolution-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-base-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-cryptoapi-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-lsalookup-l2-1-1.dll", + "runtimes/win7-x86/native/API-MS-Win-Security-LsaPolicy-L1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-provider-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-security-sddl-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-service-core-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-service-management-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-service-management-l2-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-0.dll", + "runtimes/win7-x86/native/api-ms-win-service-private-l1-1-1.dll", + "runtimes/win7-x86/native/api-ms-win-service-winsvc-l1-1-0.dll", + "runtimes/win7-x86/native/ext-ms-win-advapi32-encryptedfile-l1-1-0.dll", + "runtimes/win81-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win81-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win81-x86/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win81-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win81-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win81-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win81-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win81-x86/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win8-x86/native/api-ms-win-core-file-l1-2-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-file-l2-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-kernel32-legacy-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-kernel32-legacy-l1-1-2.dll", + "runtimes/win8-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-1.dll", + "runtimes/win8-x86/native/API-MS-Win-Core-Kernel32-Private-L1-1-2.dll", + "runtimes/win8-x86/native/api-ms-win-core-localization-l1-2-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-localization-obsolete-l1-2-0.dll", + "runtimes/win8-x86/native/api-ms-win-core-memory-l1-1-2.dll", + "runtimes/win8-x86/native/api-ms-win-core-memory-l1-1-3.dll", + "runtimes/win8-x86/native/api-ms-win-core-namedpipe-l1-2-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-privateprofile-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-processthreads-l1-1-2.dll", + "runtimes/win8-x86/native/api-ms-win-core-shutdown-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-stringloader-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-string-obsolete-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-2.dll", + "runtimes/win8-x86/native/api-ms-win-core-sysinfo-l1-2-3.dll", + "runtimes/win8-x86/native/api-ms-win-core-winrt-error-l1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-core-xstate-l2-1-0.dll", + "runtimes/win8-x86/native/API-MS-Win-devices-config-L1-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-security-cpwl-l1-1-0.dll", + "runtimes/win8-x86/native/api-ms-win-security-cryptoapi-l1-1-0.dll", + "runtimes/win8-x86/native/api-ms-win-security-lsalookup-l2-1-1.dll", + "runtimes/win8-x86/native/api-ms-win-service-private-l1-1-1.dll" + ] + }, + "Microsoft.VisualBasic/10.0.0": { + "sha512": "5BEm2/HAVd97whRlCChU7rmSh/9cwGlZ/NTNe3Jl07zuPWfKQq5TUvVNUmdvmEe8QRecJLZ4/e7WF1i1O8V42g==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/Microsoft.VisualBasic.dll", + "lib/net45/_._", + "lib/netcore50/Microsoft.VisualBasic.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "Microsoft.VisualBasic.nuspec", + "package/services/metadata/core-properties/5dbd3a7042354092a8b352b655cf4376.psmdcp", + "ref/dotnet/de/Microsoft.VisualBasic.xml", + "ref/dotnet/es/Microsoft.VisualBasic.xml", + "ref/dotnet/fr/Microsoft.VisualBasic.xml", + "ref/dotnet/it/Microsoft.VisualBasic.xml", + "ref/dotnet/ja/Microsoft.VisualBasic.xml", + "ref/dotnet/ko/Microsoft.VisualBasic.xml", + "ref/dotnet/Microsoft.VisualBasic.dll", + "ref/dotnet/Microsoft.VisualBasic.xml", + "ref/dotnet/ru/Microsoft.VisualBasic.xml", + "ref/dotnet/zh-hans/Microsoft.VisualBasic.xml", + "ref/dotnet/zh-hant/Microsoft.VisualBasic.xml", + "ref/net45/_._", + "ref/netcore50/Microsoft.VisualBasic.dll", + "ref/netcore50/Microsoft.VisualBasic.xml", + "ref/win8/_._", + "ref/wpa81/_._" + ] + }, + "Microsoft.Win32.Primitives/4.0.0": { + "sha512": "CypEz9/lLOup8CEhiAmvr7aLs1zKPYyEU1sxQeEr6G0Ci8/F0Y6pYR1zzkROjM8j8Mq0typmbu676oYyvErQvg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/Microsoft.Win32.Primitives.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/Microsoft.Win32.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "Microsoft.Win32.Primitives.nuspec", + "package/services/metadata/core-properties/1d4eb9d0228b48b88d2df3822fba2d86.psmdcp", + "ref/dotnet/de/Microsoft.Win32.Primitives.xml", + "ref/dotnet/es/Microsoft.Win32.Primitives.xml", + "ref/dotnet/fr/Microsoft.Win32.Primitives.xml", + "ref/dotnet/it/Microsoft.Win32.Primitives.xml", + "ref/dotnet/ja/Microsoft.Win32.Primitives.xml", + "ref/dotnet/ko/Microsoft.Win32.Primitives.xml", + "ref/dotnet/Microsoft.Win32.Primitives.dll", + "ref/dotnet/Microsoft.Win32.Primitives.xml", + "ref/dotnet/ru/Microsoft.Win32.Primitives.xml", + "ref/dotnet/zh-hans/Microsoft.Win32.Primitives.xml", + "ref/dotnet/zh-hant/Microsoft.Win32.Primitives.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/Microsoft.Win32.Primitives.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._" + ] + }, + "System.AppContext/4.0.0": { + "sha512": "gUoYgAWDC3+xhKeU5KSLbYDhTdBYk9GssrMSCcWUADzOglW+s0AmwVhOUGt2tL5xUl7ZXoYTPdA88zCgKrlG0A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.AppContext.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.AppContext.dll", + "lib/netcore50/System.AppContext.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/3b390478e0cd42eb8818bbab19299738.psmdcp", + "ref/dotnet/de/System.AppContext.xml", + "ref/dotnet/es/System.AppContext.xml", + "ref/dotnet/fr/System.AppContext.xml", + "ref/dotnet/it/System.AppContext.xml", + "ref/dotnet/ja/System.AppContext.xml", + "ref/dotnet/ko/System.AppContext.xml", + "ref/dotnet/ru/System.AppContext.xml", + "ref/dotnet/System.AppContext.dll", + "ref/dotnet/System.AppContext.xml", + "ref/dotnet/zh-hans/System.AppContext.xml", + "ref/dotnet/zh-hant/System.AppContext.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.AppContext.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.AppContext.nuspec" + ] + }, + "System.Collections/4.0.10": { + "sha512": "ux6ilcZZjV/Gp7JEZpe+2V1eTueq6NuoGRM3eZCFuPM25hLVVgCRuea6STW8hvqreIOE59irJk5/ovpA5xQipw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Collections.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Collections.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/b4f8061406e54dbda8f11b23186be11a.psmdcp", + "ref/dotnet/de/System.Collections.xml", + "ref/dotnet/es/System.Collections.xml", + "ref/dotnet/fr/System.Collections.xml", + "ref/dotnet/it/System.Collections.xml", + "ref/dotnet/ja/System.Collections.xml", + "ref/dotnet/ko/System.Collections.xml", + "ref/dotnet/ru/System.Collections.xml", + "ref/dotnet/System.Collections.dll", + "ref/dotnet/System.Collections.xml", + "ref/dotnet/zh-hans/System.Collections.xml", + "ref/dotnet/zh-hant/System.Collections.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Collections.dll", + "System.Collections.nuspec" + ] + }, + "System.Collections.Concurrent/4.0.10": { + "sha512": "ZtMEqOPAjAIqR8fqom9AOKRaB94a+emO2O8uOP6vyJoNswSPrbiwN7iH53rrVpvjMVx0wr4/OMpI7486uGZjbw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Collections.Concurrent.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/c982a1e1e1644b62952fc4d4dcbe0d42.psmdcp", + "ref/dotnet/de/System.Collections.Concurrent.xml", + "ref/dotnet/es/System.Collections.Concurrent.xml", + "ref/dotnet/fr/System.Collections.Concurrent.xml", + "ref/dotnet/it/System.Collections.Concurrent.xml", + "ref/dotnet/ja/System.Collections.Concurrent.xml", + "ref/dotnet/ko/System.Collections.Concurrent.xml", + "ref/dotnet/ru/System.Collections.Concurrent.xml", + "ref/dotnet/System.Collections.Concurrent.dll", + "ref/dotnet/System.Collections.Concurrent.xml", + "ref/dotnet/zh-hans/System.Collections.Concurrent.xml", + "ref/dotnet/zh-hant/System.Collections.Concurrent.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Collections.Concurrent.nuspec" + ] + }, + "System.Collections.Immutable/1.1.37": { + "sha512": "fTpqwZYBzoklTT+XjTRK8KxvmrGkYHzBiylCcKyQcxiOM8k+QvhNBxRvFHDWzy4OEP5f8/9n+xQ9mEgEXY+muA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Collections.Immutable.dll", + "lib/dotnet/System.Collections.Immutable.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml", + "package/services/metadata/core-properties/a02fdeabe1114a24bba55860b8703852.psmdcp", + "System.Collections.Immutable.nuspec" + ] + }, + "System.Collections.NonGeneric/4.0.0": { + "sha512": "rVgwrFBMkmp8LI6GhAYd6Bx+2uLIXjRfNg6Ie+ASfX8ESuh9e2HNxFy2yh1MPIXZq3OAYa+0mmULVwpnEC6UDA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Collections.NonGeneric.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Collections.NonGeneric.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/185704b1dc164b078b61038bde9ab31a.psmdcp", + "ref/dotnet/de/System.Collections.NonGeneric.xml", + "ref/dotnet/es/System.Collections.NonGeneric.xml", + "ref/dotnet/fr/System.Collections.NonGeneric.xml", + "ref/dotnet/it/System.Collections.NonGeneric.xml", + "ref/dotnet/ja/System.Collections.NonGeneric.xml", + "ref/dotnet/ko/System.Collections.NonGeneric.xml", + "ref/dotnet/ru/System.Collections.NonGeneric.xml", + "ref/dotnet/System.Collections.NonGeneric.dll", + "ref/dotnet/System.Collections.NonGeneric.xml", + "ref/dotnet/zh-hans/System.Collections.NonGeneric.xml", + "ref/dotnet/zh-hant/System.Collections.NonGeneric.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Collections.NonGeneric.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Collections.NonGeneric.nuspec" + ] + }, + "System.Collections.Specialized/4.0.0": { + "sha512": "poJFwQCUOoXqvdoGxx+3p8Z63yawcYKPBSFP67Z2jICeOINvEIQZN7mVOAnC7gsVF0WU+A2wtVwfhagC7UCgAg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Collections.Specialized.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Collections.Specialized.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/e7002e4ccd044c00a7cbd4a37efe3400.psmdcp", + "ref/dotnet/de/System.Collections.Specialized.xml", + "ref/dotnet/es/System.Collections.Specialized.xml", + "ref/dotnet/fr/System.Collections.Specialized.xml", + "ref/dotnet/it/System.Collections.Specialized.xml", + "ref/dotnet/ja/System.Collections.Specialized.xml", + "ref/dotnet/ko/System.Collections.Specialized.xml", + "ref/dotnet/ru/System.Collections.Specialized.xml", + "ref/dotnet/System.Collections.Specialized.dll", + "ref/dotnet/System.Collections.Specialized.xml", + "ref/dotnet/zh-hans/System.Collections.Specialized.xml", + "ref/dotnet/zh-hant/System.Collections.Specialized.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Collections.Specialized.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Collections.Specialized.nuspec" + ] + }, + "System.ComponentModel/4.0.0": { + "sha512": "BzpLdSi++ld7rJLOOt5f/G9GxujP202bBgKORsHcGV36rLB0mfSA2h8chTMoBzFhgN7TE14TmJ2J7Q1RyNCTAw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.ComponentModel.dll", + "lib/net45/_._", + "lib/netcore50/System.ComponentModel.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/58b9abdedb3a4985a487cb8bf4bdcbd7.psmdcp", + "ref/dotnet/de/System.ComponentModel.xml", + "ref/dotnet/es/System.ComponentModel.xml", + "ref/dotnet/fr/System.ComponentModel.xml", + "ref/dotnet/it/System.ComponentModel.xml", + "ref/dotnet/ja/System.ComponentModel.xml", + "ref/dotnet/ko/System.ComponentModel.xml", + "ref/dotnet/ru/System.ComponentModel.xml", + "ref/dotnet/System.ComponentModel.dll", + "ref/dotnet/System.ComponentModel.xml", + "ref/dotnet/zh-hans/System.ComponentModel.xml", + "ref/dotnet/zh-hant/System.ComponentModel.xml", + "ref/net45/_._", + "ref/netcore50/System.ComponentModel.dll", + "ref/netcore50/System.ComponentModel.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "System.ComponentModel.nuspec" + ] + }, + "System.ComponentModel.Annotations/4.0.10": { + "sha512": "7+XGyEZx24nP1kpHxCB9e+c6D0fdVDvFwE1xujE9BzlXyNVcy5J5aIO0H/ECupx21QpyRvzZibGAHfL/XLL6dw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.ComponentModel.Annotations.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/012e5fa97b3d450eb20342cd9ba88069.psmdcp", + "ref/dotnet/de/System.ComponentModel.Annotations.xml", + "ref/dotnet/es/System.ComponentModel.Annotations.xml", + "ref/dotnet/fr/System.ComponentModel.Annotations.xml", + "ref/dotnet/it/System.ComponentModel.Annotations.xml", + "ref/dotnet/ja/System.ComponentModel.Annotations.xml", + "ref/dotnet/ko/System.ComponentModel.Annotations.xml", + "ref/dotnet/ru/System.ComponentModel.Annotations.xml", + "ref/dotnet/System.ComponentModel.Annotations.dll", + "ref/dotnet/System.ComponentModel.Annotations.xml", + "ref/dotnet/zh-hans/System.ComponentModel.Annotations.xml", + "ref/dotnet/zh-hant/System.ComponentModel.Annotations.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.ComponentModel.Annotations.nuspec" + ] + }, + "System.ComponentModel.EventBasedAsync/4.0.10": { + "sha512": "d6kXcHUgP0jSPXEQ6hXJYCO6CzfoCi7t9vR3BfjSQLrj4HzpuATpx1gkN7itmTW1O+wjuw6rai4378Nj6N70yw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.ComponentModel.EventBasedAsync.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/5094900f1f7e4f4dae27507acc72f2a5.psmdcp", + "ref/dotnet/de/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/es/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/fr/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/it/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/ja/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/ko/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/ru/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/System.ComponentModel.EventBasedAsync.dll", + "ref/dotnet/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/zh-hans/System.ComponentModel.EventBasedAsync.xml", + "ref/dotnet/zh-hant/System.ComponentModel.EventBasedAsync.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.ComponentModel.EventBasedAsync.nuspec" + ] + }, + "System.Data.Common/4.0.0": { + "sha512": "SA7IdoTWiImVr0exDM68r0mKmR4f/qFGxZUrJQKu4YS7F+3afWzSOCezHxWdevQ0ONi4WRQsOiv+Zf9p8H0Feg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Data.Common.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Data.Common.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/aa5ad20c33d94c8e8016ba4fc64d8d66.psmdcp", + "ref/dotnet/de/System.Data.Common.xml", + "ref/dotnet/es/System.Data.Common.xml", + "ref/dotnet/fr/System.Data.Common.xml", + "ref/dotnet/it/System.Data.Common.xml", + "ref/dotnet/ja/System.Data.Common.xml", + "ref/dotnet/ko/System.Data.Common.xml", + "ref/dotnet/ru/System.Data.Common.xml", + "ref/dotnet/System.Data.Common.dll", + "ref/dotnet/System.Data.Common.xml", + "ref/dotnet/zh-hans/System.Data.Common.xml", + "ref/dotnet/zh-hant/System.Data.Common.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Data.Common.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Data.Common.nuspec" + ] + }, + "System.Diagnostics.Contracts/4.0.0": { + "sha512": "lMc7HNmyIsu0pKTdA4wf+FMq5jvouUd+oUpV4BdtyqoV0Pkbg9u/7lTKFGqpjZRQosWHq1+B32Lch2wf4AmloA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Diagnostics.Contracts.dll", + "lib/net45/_._", + "lib/netcore50/System.Diagnostics.Contracts.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/c6cd3d0bbc304cbca14dc3d6bff6579c.psmdcp", + "ref/dotnet/de/System.Diagnostics.Contracts.xml", + "ref/dotnet/es/System.Diagnostics.Contracts.xml", + "ref/dotnet/fr/System.Diagnostics.Contracts.xml", + "ref/dotnet/it/System.Diagnostics.Contracts.xml", + "ref/dotnet/ja/System.Diagnostics.Contracts.xml", + "ref/dotnet/ko/System.Diagnostics.Contracts.xml", + "ref/dotnet/ru/System.Diagnostics.Contracts.xml", + "ref/dotnet/System.Diagnostics.Contracts.dll", + "ref/dotnet/System.Diagnostics.Contracts.xml", + "ref/dotnet/zh-hans/System.Diagnostics.Contracts.xml", + "ref/dotnet/zh-hant/System.Diagnostics.Contracts.xml", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Contracts.dll", + "ref/netcore50/System.Diagnostics.Contracts.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Contracts.dll", + "System.Diagnostics.Contracts.nuspec" + ] + }, + "System.Diagnostics.Debug/4.0.10": { + "sha512": "pi2KthuvI2LWV2c2V+fwReDsDiKpNl040h6DcwFOb59SafsPT/V1fCy0z66OKwysurJkBMmp5j5CBe3Um+ub0g==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Diagnostics.Debug.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Diagnostics.Debug.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/bfb05c26051f4a5f9015321db9cb045c.psmdcp", + "ref/dotnet/de/System.Diagnostics.Debug.xml", + "ref/dotnet/es/System.Diagnostics.Debug.xml", + "ref/dotnet/fr/System.Diagnostics.Debug.xml", + "ref/dotnet/it/System.Diagnostics.Debug.xml", + "ref/dotnet/ja/System.Diagnostics.Debug.xml", + "ref/dotnet/ko/System.Diagnostics.Debug.xml", + "ref/dotnet/ru/System.Diagnostics.Debug.xml", + "ref/dotnet/System.Diagnostics.Debug.dll", + "ref/dotnet/System.Diagnostics.Debug.xml", + "ref/dotnet/zh-hans/System.Diagnostics.Debug.xml", + "ref/dotnet/zh-hant/System.Diagnostics.Debug.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll", + "System.Diagnostics.Debug.nuspec" + ] + }, + "System.Diagnostics.StackTrace/4.0.0": { + "sha512": "PItgenqpRiMqErvQONBlfDwctKpWVrcDSW5pppNZPJ6Bpiyz+KjsWoSiaqs5dt03HEbBTMNCrZb8KCkh7YfXmw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Diagnostics.StackTrace.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Diagnostics.StackTrace.dll", + "lib/netcore50/System.Diagnostics.StackTrace.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/5c7ca489a36944d895c628fced7e9107.psmdcp", + "ref/dotnet/de/System.Diagnostics.StackTrace.xml", + "ref/dotnet/es/System.Diagnostics.StackTrace.xml", + "ref/dotnet/fr/System.Diagnostics.StackTrace.xml", + "ref/dotnet/it/System.Diagnostics.StackTrace.xml", + "ref/dotnet/ja/System.Diagnostics.StackTrace.xml", + "ref/dotnet/ko/System.Diagnostics.StackTrace.xml", + "ref/dotnet/ru/System.Diagnostics.StackTrace.xml", + "ref/dotnet/System.Diagnostics.StackTrace.dll", + "ref/dotnet/System.Diagnostics.StackTrace.xml", + "ref/dotnet/zh-hans/System.Diagnostics.StackTrace.xml", + "ref/dotnet/zh-hant/System.Diagnostics.StackTrace.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Diagnostics.StackTrace.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.StackTrace.dll", + "System.Diagnostics.StackTrace.nuspec" + ] + }, + "System.Diagnostics.Tools/4.0.0": { + "sha512": "uw5Qi2u5Cgtv4xv3+8DeB63iaprPcaEHfpeJqlJiLjIVy6v0La4ahJ6VW9oPbJNIjcavd24LKq0ctT9ssuQXsw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Diagnostics.Tools.dll", + "lib/net45/_._", + "lib/netcore50/System.Diagnostics.Tools.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/20f622a1ae5b4e3992fc226d88d36d59.psmdcp", + "ref/dotnet/de/System.Diagnostics.Tools.xml", + "ref/dotnet/es/System.Diagnostics.Tools.xml", + "ref/dotnet/fr/System.Diagnostics.Tools.xml", + "ref/dotnet/it/System.Diagnostics.Tools.xml", + "ref/dotnet/ja/System.Diagnostics.Tools.xml", + "ref/dotnet/ko/System.Diagnostics.Tools.xml", + "ref/dotnet/ru/System.Diagnostics.Tools.xml", + "ref/dotnet/System.Diagnostics.Tools.dll", + "ref/dotnet/System.Diagnostics.Tools.xml", + "ref/dotnet/zh-hans/System.Diagnostics.Tools.xml", + "ref/dotnet/zh-hant/System.Diagnostics.Tools.xml", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Tools.dll", + "ref/netcore50/System.Diagnostics.Tools.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tools.dll", + "System.Diagnostics.Tools.nuspec" + ] + }, + "System.Diagnostics.Tracing/4.0.20": { + "sha512": "gn/wexGHc35Fv++5L1gYHMY5g25COfiZ0PGrL+3PfwzoJd4X2LbTAm/U8d385SI6BKQBI/z4dQfvneS9J27+Tw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Diagnostics.Tracing.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Diagnostics.Tracing.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/13423e75e6344b289b3779b51522737c.psmdcp", + "ref/dotnet/de/System.Diagnostics.Tracing.xml", + "ref/dotnet/es/System.Diagnostics.Tracing.xml", + "ref/dotnet/fr/System.Diagnostics.Tracing.xml", + "ref/dotnet/it/System.Diagnostics.Tracing.xml", + "ref/dotnet/ja/System.Diagnostics.Tracing.xml", + "ref/dotnet/ko/System.Diagnostics.Tracing.xml", + "ref/dotnet/ru/System.Diagnostics.Tracing.xml", + "ref/dotnet/System.Diagnostics.Tracing.dll", + "ref/dotnet/System.Diagnostics.Tracing.xml", + "ref/dotnet/zh-hans/System.Diagnostics.Tracing.xml", + "ref/dotnet/zh-hant/System.Diagnostics.Tracing.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Tracing.dll", + "System.Diagnostics.Tracing.nuspec" + ] + }, + "System.Dynamic.Runtime/4.0.10": { + "sha512": "r10VTLdlxtYp46BuxomHnwx7vIoMOr04CFoC/jJJfY22f7HQQ4P+cXY2Nxo6/rIxNNqOxwdbQQwv7Gl88Jsu1w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Dynamic.Runtime.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Dynamic.Runtime.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/b7571751b95d4952803c5011dab33c3b.psmdcp", + "ref/dotnet/de/System.Dynamic.Runtime.xml", + "ref/dotnet/es/System.Dynamic.Runtime.xml", + "ref/dotnet/fr/System.Dynamic.Runtime.xml", + "ref/dotnet/it/System.Dynamic.Runtime.xml", + "ref/dotnet/ja/System.Dynamic.Runtime.xml", + "ref/dotnet/ko/System.Dynamic.Runtime.xml", + "ref/dotnet/ru/System.Dynamic.Runtime.xml", + "ref/dotnet/System.Dynamic.Runtime.dll", + "ref/dotnet/System.Dynamic.Runtime.xml", + "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml", + "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtime.json", + "runtimes/win8-aot/lib/netcore50/System.Dynamic.Runtime.dll", + "System.Dynamic.Runtime.nuspec" + ] + }, + "System.Globalization/4.0.10": { + "sha512": "kzRtbbCNAxdafFBDogcM36ehA3th8c1PGiz8QRkZn8O5yMBorDHSK8/TGJPYOaCS5zdsGk0u9qXHnW91nqy7fw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Globalization.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Globalization.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/93bcad242a4e4ad7afd0b53244748763.psmdcp", + "ref/dotnet/de/System.Globalization.xml", + "ref/dotnet/es/System.Globalization.xml", + "ref/dotnet/fr/System.Globalization.xml", + "ref/dotnet/it/System.Globalization.xml", + "ref/dotnet/ja/System.Globalization.xml", + "ref/dotnet/ko/System.Globalization.xml", + "ref/dotnet/ru/System.Globalization.xml", + "ref/dotnet/System.Globalization.dll", + "ref/dotnet/System.Globalization.xml", + "ref/dotnet/zh-hans/System.Globalization.xml", + "ref/dotnet/zh-hant/System.Globalization.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Globalization.dll", + "System.Globalization.nuspec" + ] + }, + "System.Globalization.Calendars/4.0.0": { + "sha512": "cL6WrdGKnNBx9W/iTr+jbffsEO4RLjEtOYcpVSzPNDoli6X5Q6bAfWtJYbJNOPi8Q0fXgBEvKK1ncFL/3FTqlA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Globalization.Calendars.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Calendars.dll", + "lib/netcore50/System.Globalization.Calendars.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/95fc8eb4808e4f31a967f407c94eba0f.psmdcp", + "ref/dotnet/de/System.Globalization.Calendars.xml", + "ref/dotnet/es/System.Globalization.Calendars.xml", + "ref/dotnet/fr/System.Globalization.Calendars.xml", + "ref/dotnet/it/System.Globalization.Calendars.xml", + "ref/dotnet/ja/System.Globalization.Calendars.xml", + "ref/dotnet/ko/System.Globalization.Calendars.xml", + "ref/dotnet/ru/System.Globalization.Calendars.xml", + "ref/dotnet/System.Globalization.Calendars.dll", + "ref/dotnet/System.Globalization.Calendars.xml", + "ref/dotnet/zh-hans/System.Globalization.Calendars.xml", + "ref/dotnet/zh-hant/System.Globalization.Calendars.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Calendars.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Globalization.Calendars.dll", + "System.Globalization.Calendars.nuspec" + ] + }, + "System.Globalization.Extensions/4.0.0": { + "sha512": "rqbUXiwpBCvJ18ySCsjh20zleazO+6fr3s5GihC2sVwhyS0MUl6+oc5Rzk0z6CKkS4kmxbZQSeZLsK7cFSO0ng==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Globalization.Extensions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/a0490a34737f448fb53635b5210e48e4.psmdcp", + "ref/dotnet/de/System.Globalization.Extensions.xml", + "ref/dotnet/es/System.Globalization.Extensions.xml", + "ref/dotnet/fr/System.Globalization.Extensions.xml", + "ref/dotnet/it/System.Globalization.Extensions.xml", + "ref/dotnet/ja/System.Globalization.Extensions.xml", + "ref/dotnet/ko/System.Globalization.Extensions.xml", + "ref/dotnet/ru/System.Globalization.Extensions.xml", + "ref/dotnet/System.Globalization.Extensions.dll", + "ref/dotnet/System.Globalization.Extensions.xml", + "ref/dotnet/zh-hans/System.Globalization.Extensions.xml", + "ref/dotnet/zh-hant/System.Globalization.Extensions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Extensions.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Globalization.Extensions.nuspec" + ] + }, + "System.IO/4.0.10": { + "sha512": "kghf1CeYT+W2lw8a50/GxFz5HR9t6RkL4BvjxtTp1NxtEFWywnMA9W8FH/KYXiDNThcw9u/GOViDON4iJFGXIQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.IO.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.IO.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/db72fd58a86b4d13a6d2858ebec46705.psmdcp", + "ref/dotnet/de/System.IO.xml", + "ref/dotnet/es/System.IO.xml", + "ref/dotnet/fr/System.IO.xml", + "ref/dotnet/it/System.IO.xml", + "ref/dotnet/ja/System.IO.xml", + "ref/dotnet/ko/System.IO.xml", + "ref/dotnet/ru/System.IO.xml", + "ref/dotnet/System.IO.dll", + "ref/dotnet/System.IO.xml", + "ref/dotnet/zh-hans/System.IO.xml", + "ref/dotnet/zh-hant/System.IO.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.IO.dll", + "System.IO.nuspec" + ] + }, + "System.IO.Compression/4.0.0": { + "sha512": "S+ljBE3py8pujTrsOOYHtDg2cnAifn6kBu/pfh1hMWIXd8DoVh0ADTA6Puv4q+nYj+Msm6JoFLNwuRSmztbsDQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.IO.Compression.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.IO.Compression.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/cdbbc16eba65486f85d2caf9357894f3.psmdcp", + "ref/dotnet/de/System.IO.Compression.xml", + "ref/dotnet/es/System.IO.Compression.xml", + "ref/dotnet/fr/System.IO.Compression.xml", + "ref/dotnet/it/System.IO.Compression.xml", + "ref/dotnet/ja/System.IO.Compression.xml", + "ref/dotnet/ko/System.IO.Compression.xml", + "ref/dotnet/ru/System.IO.Compression.xml", + "ref/dotnet/System.IO.Compression.dll", + "ref/dotnet/System.IO.Compression.xml", + "ref/dotnet/zh-hans/System.IO.Compression.xml", + "ref/dotnet/zh-hant/System.IO.Compression.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.IO.Compression.dll", + "ref/netcore50/System.IO.Compression.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtime.json", + "System.IO.Compression.nuspec" + ] + }, + "System.IO.Compression.clrcompression-arm/4.0.0": { + "sha512": "Kk21GecAbI+H6tMP6/lMssGObbhoHwLiREiB5UkNMCypdxACuF+6gmrdDTousCUcbH28CJeo7tArrnUc+bchuw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "package/services/metadata/core-properties/e09228dcfd7b47adb2ddcf73e2eb6ddf.psmdcp", + "runtimes/win10-arm/native/ClrCompression.dll", + "runtimes/win7-arm/native/clrcompression.dll", + "System.IO.Compression.clrcompression-arm.nuspec" + ] + }, + "System.IO.Compression.clrcompression-x64/4.0.0": { + "sha512": "Lqr+URMwKzf+8HJF6YrqEqzKzDzFJTE4OekaxqdIns71r8Ufbd8SbZa0LKl9q+7nu6Em4SkIEXVMB7plSXekOw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "package/services/metadata/core-properties/416c3fd9fab749d484e0fed458de199f.psmdcp", + "runtimes/win10-x64/native/ClrCompression.dll", + "runtimes/win7-x64/native/clrcompression.dll", + "System.IO.Compression.clrcompression-x64.nuspec" + ] + }, + "System.IO.Compression.clrcompression-x86/4.0.0": { + "sha512": "GmevpuaMRzYDXHu+xuV10fxTO8DsP7OKweWxYtkaxwVnDSj9X6RBupSiXdiveq9yj/xjZ1NbG+oRRRb99kj+VQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "package/services/metadata/core-properties/cd12f86c8cc2449589dfbe349763f7b3.psmdcp", + "runtimes/win10-x86/native/ClrCompression.dll", + "runtimes/win7-x86/native/clrcompression.dll", + "System.IO.Compression.clrcompression-x86.nuspec" + ] + }, + "System.IO.Compression.ZipFile/4.0.0": { + "sha512": "pwntmtsJqtt6Lez4Iyv4GVGW6DaXUTo9Rnlsx0MFagRgX+8F/sxG5S/IzDJabBj68sUWViz1QJrRZL4V9ngWDg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.IO.Compression.ZipFile.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.Compression.ZipFile.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/60dc66d592ac41008e1384536912dabf.psmdcp", + "ref/dotnet/de/System.IO.Compression.ZipFile.xml", + "ref/dotnet/es/System.IO.Compression.ZipFile.xml", + "ref/dotnet/fr/System.IO.Compression.ZipFile.xml", + "ref/dotnet/it/System.IO.Compression.ZipFile.xml", + "ref/dotnet/ja/System.IO.Compression.ZipFile.xml", + "ref/dotnet/ko/System.IO.Compression.ZipFile.xml", + "ref/dotnet/ru/System.IO.Compression.ZipFile.xml", + "ref/dotnet/System.IO.Compression.ZipFile.dll", + "ref/dotnet/System.IO.Compression.ZipFile.xml", + "ref/dotnet/zh-hans/System.IO.Compression.ZipFile.xml", + "ref/dotnet/zh-hant/System.IO.Compression.ZipFile.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.Compression.ZipFile.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.IO.Compression.ZipFile.nuspec" + ] + }, + "System.IO.FileSystem/4.0.0": { + "sha512": "eo05SPWfG+54UA0wxgRIYOuOslq+2QrJLXZaJDDsfLXG15OLguaItW39NYZTqUb4DeGOkU4R0wpOLOW4ynMUDQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.IO.FileSystem.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.dll", + "lib/netcore50/System.IO.FileSystem.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/0405bad2bcdd403884f42a0a79534bc1.psmdcp", + "ref/dotnet/de/System.IO.FileSystem.xml", + "ref/dotnet/es/System.IO.FileSystem.xml", + "ref/dotnet/fr/System.IO.FileSystem.xml", + "ref/dotnet/it/System.IO.FileSystem.xml", + "ref/dotnet/ja/System.IO.FileSystem.xml", + "ref/dotnet/ko/System.IO.FileSystem.xml", + "ref/dotnet/ru/System.IO.FileSystem.xml", + "ref/dotnet/System.IO.FileSystem.dll", + "ref/dotnet/System.IO.FileSystem.xml", + "ref/dotnet/zh-hans/System.IO.FileSystem.xml", + "ref/dotnet/zh-hant/System.IO.FileSystem.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.IO.FileSystem.nuspec" + ] + }, + "System.IO.FileSystem.Primitives/4.0.0": { + "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.IO.FileSystem.Primitives.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/2cf3542156f0426483f92b9e37d8d381.psmdcp", + "ref/dotnet/de/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/es/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/it/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/System.IO.FileSystem.Primitives.dll", + "ref/dotnet/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml", + "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.Primitives.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.IO.FileSystem.Primitives.nuspec" + ] + }, + "System.IO.IsolatedStorage/4.0.0": { + "sha512": "d5KimUbZ49Ki6A/uwU+Iodng+nhJvpRs7hr/828cfeXC02LxUiggnRnAu+COtWcKvJ2YbBmAGOcO4GLK4fX1+w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/netcore50/System.IO.IsolatedStorage.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/0d69e649eab84c3cad77d63bb460f7e7.psmdcp", + "ref/dotnet/de/System.IO.IsolatedStorage.xml", + "ref/dotnet/es/System.IO.IsolatedStorage.xml", + "ref/dotnet/fr/System.IO.IsolatedStorage.xml", + "ref/dotnet/it/System.IO.IsolatedStorage.xml", + "ref/dotnet/ja/System.IO.IsolatedStorage.xml", + "ref/dotnet/ko/System.IO.IsolatedStorage.xml", + "ref/dotnet/ru/System.IO.IsolatedStorage.xml", + "ref/dotnet/System.IO.IsolatedStorage.dll", + "ref/dotnet/System.IO.IsolatedStorage.xml", + "ref/dotnet/zh-hans/System.IO.IsolatedStorage.xml", + "ref/dotnet/zh-hant/System.IO.IsolatedStorage.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.IO.IsolatedStorage.nuspec" + ] + }, + "System.IO.UnmanagedMemoryStream/4.0.0": { + "sha512": "i2xczgQfwHmolORBNHxV9b5izP8VOBxgSA2gf+H55xBvwqtR+9r9adtzlc7at0MAwiLcsk6V1TZlv2vfRQr8Sw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.IO.UnmanagedMemoryStream.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.UnmanagedMemoryStream.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/cce1d37d7dc24e5fb4170ead20101af0.psmdcp", + "ref/dotnet/de/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/es/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/fr/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/it/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/ja/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/ko/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/ru/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/System.IO.UnmanagedMemoryStream.dll", + "ref/dotnet/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/zh-hans/System.IO.UnmanagedMemoryStream.xml", + "ref/dotnet/zh-hant/System.IO.UnmanagedMemoryStream.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.UnmanagedMemoryStream.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.IO.UnmanagedMemoryStream.nuspec" + ] + }, + "System.Linq/4.0.0": { + "sha512": "r6Hlc+ytE6m/9UBr+nNRRdoJEWjoeQiT3L3lXYFDHoXk3VYsRBCDNXrawcexw7KPLaH0zamQLiAb6avhZ50cGg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Linq.dll", + "lib/net45/_._", + "lib/netcore50/System.Linq.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/6fcde56ce4094f6a8fff4b28267da532.psmdcp", + "ref/dotnet/de/System.Linq.xml", + "ref/dotnet/es/System.Linq.xml", + "ref/dotnet/fr/System.Linq.xml", + "ref/dotnet/it/System.Linq.xml", + "ref/dotnet/ja/System.Linq.xml", + "ref/dotnet/ko/System.Linq.xml", + "ref/dotnet/ru/System.Linq.xml", + "ref/dotnet/System.Linq.dll", + "ref/dotnet/System.Linq.xml", + "ref/dotnet/zh-hans/System.Linq.xml", + "ref/dotnet/zh-hant/System.Linq.xml", + "ref/net45/_._", + "ref/netcore50/System.Linq.dll", + "ref/netcore50/System.Linq.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "System.Linq.nuspec" + ] + }, + "System.Linq.Expressions/4.0.10": { + "sha512": "qhFkPqRsTfXBaacjQhxwwwUoU7TEtwlBIULj7nG7i4qAkvivil31VvOvDKppCSui5yGw0/325ZeNaMYRvTotXw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Linq.Expressions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Linq.Expressions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/4e3c061f7c0a427fa5b65bd3d84e9bc3.psmdcp", + "ref/dotnet/de/System.Linq.Expressions.xml", + "ref/dotnet/es/System.Linq.Expressions.xml", + "ref/dotnet/fr/System.Linq.Expressions.xml", + "ref/dotnet/it/System.Linq.Expressions.xml", + "ref/dotnet/ja/System.Linq.Expressions.xml", + "ref/dotnet/ko/System.Linq.Expressions.xml", + "ref/dotnet/ru/System.Linq.Expressions.xml", + "ref/dotnet/System.Linq.Expressions.dll", + "ref/dotnet/System.Linq.Expressions.xml", + "ref/dotnet/zh-hans/System.Linq.Expressions.xml", + "ref/dotnet/zh-hant/System.Linq.Expressions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtime.json", + "runtimes/win8-aot/lib/netcore50/System.Linq.Expressions.dll", + "System.Linq.Expressions.nuspec" + ] + }, + "System.Linq.Parallel/4.0.0": { + "sha512": "PtH7KKh1BbzVow4XY17pnrn7Io63ApMdwzRE2o2HnzsKQD/0o7X5xe6mxrDUqTm9ZCR3/PNhAlP13VY1HnHsbA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Linq.Parallel.dll", + "lib/net45/_._", + "lib/netcore50/System.Linq.Parallel.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/5cc7d35889814f73a239a1b7dcd33451.psmdcp", + "ref/dotnet/de/System.Linq.Parallel.xml", + "ref/dotnet/es/System.Linq.Parallel.xml", + "ref/dotnet/fr/System.Linq.Parallel.xml", + "ref/dotnet/it/System.Linq.Parallel.xml", + "ref/dotnet/ja/System.Linq.Parallel.xml", + "ref/dotnet/ko/System.Linq.Parallel.xml", + "ref/dotnet/ru/System.Linq.Parallel.xml", + "ref/dotnet/System.Linq.Parallel.dll", + "ref/dotnet/System.Linq.Parallel.xml", + "ref/dotnet/zh-hans/System.Linq.Parallel.xml", + "ref/dotnet/zh-hant/System.Linq.Parallel.xml", + "ref/net45/_._", + "ref/netcore50/System.Linq.Parallel.dll", + "ref/netcore50/System.Linq.Parallel.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "System.Linq.Parallel.nuspec" + ] + }, + "System.Linq.Queryable/4.0.0": { + "sha512": "DIlvCNn3ucFvwMMzXcag4aFnFJ1fdxkQ5NqwJe9Nh7y8ozzhDm07YakQL/yoF3P1dLzY1T2cTpuwbAmVSdXyBA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Linq.Queryable.dll", + "lib/net45/_._", + "lib/netcore50/System.Linq.Queryable.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/24a380caa65148a7883629840bf0c343.psmdcp", + "ref/dotnet/de/System.Linq.Queryable.xml", + "ref/dotnet/es/System.Linq.Queryable.xml", + "ref/dotnet/fr/System.Linq.Queryable.xml", + "ref/dotnet/it/System.Linq.Queryable.xml", + "ref/dotnet/ja/System.Linq.Queryable.xml", + "ref/dotnet/ko/System.Linq.Queryable.xml", + "ref/dotnet/ru/System.Linq.Queryable.xml", + "ref/dotnet/System.Linq.Queryable.dll", + "ref/dotnet/System.Linq.Queryable.xml", + "ref/dotnet/zh-hans/System.Linq.Queryable.xml", + "ref/dotnet/zh-hant/System.Linq.Queryable.xml", + "ref/net45/_._", + "ref/netcore50/System.Linq.Queryable.dll", + "ref/netcore50/System.Linq.Queryable.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "System.Linq.Queryable.nuspec" + ] + }, + "System.Net.Http/4.0.0": { + "sha512": "mZuAl7jw/mFY8jUq4ITKECxVBh9a8SJt9BC/+lJbmo7cRKspxE3PsITz+KiaCEsexN5WYPzwBOx0oJH/0HlPyQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Net.Http.dll", + "lib/net45/_._", + "lib/netcore50/System.Net.Http.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/62d64206d25643df9c8d01e867c05e27.psmdcp", + "ref/dotnet/de/System.Net.Http.xml", + "ref/dotnet/es/System.Net.Http.xml", + "ref/dotnet/fr/System.Net.Http.xml", + "ref/dotnet/it/System.Net.Http.xml", + "ref/dotnet/ja/System.Net.Http.xml", + "ref/dotnet/ko/System.Net.Http.xml", + "ref/dotnet/ru/System.Net.Http.xml", + "ref/dotnet/System.Net.Http.dll", + "ref/dotnet/System.Net.Http.xml", + "ref/dotnet/zh-hans/System.Net.Http.xml", + "ref/dotnet/zh-hant/System.Net.Http.xml", + "ref/net45/_._", + "ref/netcore50/System.Net.Http.dll", + "ref/netcore50/System.Net.Http.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "System.Net.Http.nuspec" + ] + }, + "System.Net.Http.Rtc/4.0.0": { + "sha512": "PlE+oJgXdbxPmZYR6GBywRkyIPovjB1Y0SYHizj2Iflgu80uJQC4szl9gue4rKI2FgXiEbj9JL7wL5K3mp9HAQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/netcore50/System.Net.Http.Rtc.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/5ae6b04142264f2abb319c7dccbfb69f.psmdcp", + "ref/dotnet/de/System.Net.Http.Rtc.xml", + "ref/dotnet/es/System.Net.Http.Rtc.xml", + "ref/dotnet/fr/System.Net.Http.Rtc.xml", + "ref/dotnet/it/System.Net.Http.Rtc.xml", + "ref/dotnet/ja/System.Net.Http.Rtc.xml", + "ref/dotnet/ko/System.Net.Http.Rtc.xml", + "ref/dotnet/ru/System.Net.Http.Rtc.xml", + "ref/dotnet/System.Net.Http.Rtc.dll", + "ref/dotnet/System.Net.Http.Rtc.xml", + "ref/dotnet/zh-hans/System.Net.Http.Rtc.xml", + "ref/dotnet/zh-hant/System.Net.Http.Rtc.xml", + "ref/netcore50/System.Net.Http.Rtc.dll", + "ref/netcore50/System.Net.Http.Rtc.xml", + "ref/win8/_._", + "System.Net.Http.Rtc.nuspec" + ] + }, + "System.Net.NetworkInformation/4.0.0": { + "sha512": "D68KCf5VK1G1GgFUwD901gU6cnMITksOdfdxUCt9ReCZfT1pigaDqjJ7XbiLAM4jm7TfZHB7g5mbOf1mbG3yBA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Net.NetworkInformation.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/5daeae3f7319444d8efbd8a0c539559c.psmdcp", + "ref/dotnet/de/System.Net.NetworkInformation.xml", + "ref/dotnet/es/System.Net.NetworkInformation.xml", + "ref/dotnet/fr/System.Net.NetworkInformation.xml", + "ref/dotnet/it/System.Net.NetworkInformation.xml", + "ref/dotnet/ja/System.Net.NetworkInformation.xml", + "ref/dotnet/ko/System.Net.NetworkInformation.xml", + "ref/dotnet/ru/System.Net.NetworkInformation.xml", + "ref/dotnet/System.Net.NetworkInformation.dll", + "ref/dotnet/System.Net.NetworkInformation.xml", + "ref/dotnet/zh-hans/System.Net.NetworkInformation.xml", + "ref/dotnet/zh-hant/System.Net.NetworkInformation.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Net.NetworkInformation.dll", + "ref/netcore50/System.Net.NetworkInformation.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Net.NetworkInformation.nuspec" + ] + }, + "System.Net.Primitives/4.0.10": { + "sha512": "YQqIpmMhnKjIbT7rl6dlf7xM5DxaMR+whduZ9wKb9OhMLjoueAJO3HPPJI+Naf3v034kb+xZqdc3zo44o3HWcg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Net.Primitives.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Net.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/3e2f49037d5645bdad757b3fd5b7c103.psmdcp", + "ref/dotnet/de/System.Net.Primitives.xml", + "ref/dotnet/es/System.Net.Primitives.xml", + "ref/dotnet/fr/System.Net.Primitives.xml", + "ref/dotnet/it/System.Net.Primitives.xml", + "ref/dotnet/ja/System.Net.Primitives.xml", + "ref/dotnet/ko/System.Net.Primitives.xml", + "ref/dotnet/ru/System.Net.Primitives.xml", + "ref/dotnet/System.Net.Primitives.dll", + "ref/dotnet/System.Net.Primitives.xml", + "ref/dotnet/zh-hans/System.Net.Primitives.xml", + "ref/dotnet/zh-hant/System.Net.Primitives.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Net.Primitives.nuspec" + ] + }, + "System.Net.Requests/4.0.10": { + "sha512": "A6XBR7TztiIQg6hx7VGfbBKmRTAavUERm2E7pmNz/gZeGvwyP0lcKHZxylJtNVKj7DPwr91bD87oLY6zZYntcg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Net.Requests.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/7a4e397882e44db3aa06d6d8c9dd3d66.psmdcp", + "ref/dotnet/de/System.Net.Requests.xml", + "ref/dotnet/es/System.Net.Requests.xml", + "ref/dotnet/fr/System.Net.Requests.xml", + "ref/dotnet/it/System.Net.Requests.xml", + "ref/dotnet/ja/System.Net.Requests.xml", + "ref/dotnet/ko/System.Net.Requests.xml", + "ref/dotnet/ru/System.Net.Requests.xml", + "ref/dotnet/System.Net.Requests.dll", + "ref/dotnet/System.Net.Requests.xml", + "ref/dotnet/zh-hans/System.Net.Requests.xml", + "ref/dotnet/zh-hant/System.Net.Requests.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Net.Requests.nuspec" + ] + }, + "System.Net.Sockets/4.0.0": { + "sha512": "7bBNLdO6Xw0BGyFVSxjloGXMvsc3qQmW+70bYMLwHEAVivMK8zx+E7XO8CeJnAko2mFj6R402E798EGYUksFcQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Net.Sockets.dll", + "lib/netcore50/System.Net.Sockets.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/cca33bc0996f49c68976fa5bab1500ff.psmdcp", + "ref/dotnet/de/System.Net.Sockets.xml", + "ref/dotnet/es/System.Net.Sockets.xml", + "ref/dotnet/fr/System.Net.Sockets.xml", + "ref/dotnet/it/System.Net.Sockets.xml", + "ref/dotnet/ja/System.Net.Sockets.xml", + "ref/dotnet/ko/System.Net.Sockets.xml", + "ref/dotnet/ru/System.Net.Sockets.xml", + "ref/dotnet/System.Net.Sockets.dll", + "ref/dotnet/System.Net.Sockets.xml", + "ref/dotnet/zh-hans/System.Net.Sockets.xml", + "ref/dotnet/zh-hant/System.Net.Sockets.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Net.Sockets.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Net.Sockets.nuspec" + ] + }, + "System.Net.WebHeaderCollection/4.0.0": { + "sha512": "IsIZAsHm/yK7R/XASnEc4EMffFLIMgYchG3/zJv6B4LwMnXZwrVlSPpNbPgEVb0lSXyztsn7A6sIPAACQQ2vTQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Net.WebHeaderCollection.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/7ab0d7bde19b47548622bfa222a4eccb.psmdcp", + "ref/dotnet/de/System.Net.WebHeaderCollection.xml", + "ref/dotnet/es/System.Net.WebHeaderCollection.xml", + "ref/dotnet/fr/System.Net.WebHeaderCollection.xml", + "ref/dotnet/it/System.Net.WebHeaderCollection.xml", + "ref/dotnet/ja/System.Net.WebHeaderCollection.xml", + "ref/dotnet/ko/System.Net.WebHeaderCollection.xml", + "ref/dotnet/ru/System.Net.WebHeaderCollection.xml", + "ref/dotnet/System.Net.WebHeaderCollection.dll", + "ref/dotnet/System.Net.WebHeaderCollection.xml", + "ref/dotnet/zh-hans/System.Net.WebHeaderCollection.xml", + "ref/dotnet/zh-hant/System.Net.WebHeaderCollection.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Net.WebHeaderCollection.nuspec" + ] + }, + "System.Numerics.Vectors/4.1.0": { + "sha512": "jpubR06GWPoZA0oU5xLM7kHeV59/CKPBXZk4Jfhi0T3DafxbrdueHZ8kXlb+Fb5nd3DAyyMh2/eqEzLX0xv6Qg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Numerics.Vectors.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Numerics.Vectors.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/e501a8a91f4a4138bd1d134abcc769b0.psmdcp", + "ref/dotnet/System.Numerics.Vectors.dll", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Numerics.Vectors.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Numerics.Vectors.nuspec" + ] + }, + "System.Numerics.Vectors.WindowsRuntime/4.0.0": { + "sha512": "Ly7GvoPFZq6GyfZpfS0E7uCk1cinl5BANAngXVuau3lD2QqZJMHitzlPv6n1FlIn6krfv99X2IPkIaVzUwDHXA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Numerics.Vectors.WindowsRuntime.dll", + "package/services/metadata/core-properties/6db0e2464a274e8eb688cd193eb37876.psmdcp", + "System.Numerics.Vectors.WindowsRuntime.nuspec" + ] + }, + "System.ObjectModel/4.0.10": { + "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.ObjectModel.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/36c2aaa0c5d24949a7707921f36ee13f.psmdcp", + "ref/dotnet/de/System.ObjectModel.xml", + "ref/dotnet/es/System.ObjectModel.xml", + "ref/dotnet/fr/System.ObjectModel.xml", + "ref/dotnet/it/System.ObjectModel.xml", + "ref/dotnet/ja/System.ObjectModel.xml", + "ref/dotnet/ko/System.ObjectModel.xml", + "ref/dotnet/ru/System.ObjectModel.xml", + "ref/dotnet/System.ObjectModel.dll", + "ref/dotnet/System.ObjectModel.xml", + "ref/dotnet/zh-hans/System.ObjectModel.xml", + "ref/dotnet/zh-hant/System.ObjectModel.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.ObjectModel.nuspec" + ] + }, + "System.Private.DataContractSerialization/4.0.0": { + "sha512": "uQvzoXHXHn/9YqUmPtgD8ZPJIlBuuL3QHegbuik97W/umoI28fOnGLnvjRHhju1VMWvFLRQoh7uZkBaoZ+KpVQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Private.DataContractSerialization.dll", + "lib/netcore50/System.Private.DataContractSerialization.dll", + "package/services/metadata/core-properties/124ac81dfe1e4d08942831c90a93a6ba.psmdcp", + "ref/dnxcore50/_._", + "ref/netcore50/_._", + "runtime.json", + "runtimes/win8-aot/lib/netcore50/System.Private.DataContractSerialization.dll", + "System.Private.DataContractSerialization.nuspec" + ] + }, + "System.Private.Networking/4.0.0": { + "sha512": "RUEqdBdJjISC65dO8l4LdN7vTdlXH+attUpKnauDUHVtLbIKdlDB9LKoLzCQsTQRP7vzUJHWYXznHJBkjAA7yA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Private.Networking.dll", + "lib/netcore50/System.Private.Networking.dll", + "package/services/metadata/core-properties/b57bed5f606b4402bbdf153fcf3df3ae.psmdcp", + "ref/dnxcore50/_._", + "ref/netcore50/_._", + "System.Private.Networking.nuspec" + ] + }, + "System.Private.ServiceModel/4.0.0": { + "sha512": "cm2wEa1f9kuUq/2k8uIwepgZJi5HdxXSnjGQIeXmAb7RaWfZPEC/iamv9GJ67b5LPnCZHR0KvtFqh82e8AAYSw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Private.ServiceModel.dll", + "lib/netcore50/System.Private.ServiceModel.dll", + "package/services/metadata/core-properties/5668af7c10764fafb51182a583dfb872.psmdcp", + "ref/dnxcore50/_._", + "ref/netcore50/_._", + "System.Private.ServiceModel.nuspec" + ] + }, + "System.Private.Uri/4.0.0": { + "sha512": "CtuxaCKcRIvPcsqquVl3mPp79EDZPMr2UogfiFCxCs+t2z1VjbpQsKNs1GHZ8VQetqbk1mr0V1yAfMe6y8CHDA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Private.Uri.dll", + "lib/netcore50/System.Private.Uri.dll", + "package/services/metadata/core-properties/86377e21a22d44bbba860094428d894c.psmdcp", + "ref/dnxcore50/_._", + "ref/netcore50/_._", + "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll", + "System.Private.Uri.nuspec" + ] + }, + "System.Reflection/4.0.10": { + "sha512": "WZ+4lEE4gqGx6mrqLhSiW4oi6QLPWwdNjzhhTONmhELOrW8Cw9phlO9tltgvRUuQUqYtBiliFwhO5S5fCJElVw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Reflection.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/84d992ce164945bfa10835e447244fb1.psmdcp", + "ref/dotnet/de/System.Reflection.xml", + "ref/dotnet/es/System.Reflection.xml", + "ref/dotnet/fr/System.Reflection.xml", + "ref/dotnet/it/System.Reflection.xml", + "ref/dotnet/ja/System.Reflection.xml", + "ref/dotnet/ko/System.Reflection.xml", + "ref/dotnet/ru/System.Reflection.xml", + "ref/dotnet/System.Reflection.dll", + "ref/dotnet/System.Reflection.xml", + "ref/dotnet/zh-hans/System.Reflection.xml", + "ref/dotnet/zh-hant/System.Reflection.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Reflection.dll", + "System.Reflection.nuspec" + ] + }, + "System.Reflection.Context/4.0.0": { + "sha512": "Gz4sUHHFd/52RjHccSHbOXdujJEWKfL3gIaA+ekxvQaQfJGbI2tPzA0Uv3WTCTDRGHgtoNq5WS9E007Dt4P/VQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Context.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/263ca61f1b594d9395e210a55a8fe7a7.psmdcp", + "ref/dotnet/de/System.Reflection.Context.xml", + "ref/dotnet/es/System.Reflection.Context.xml", + "ref/dotnet/fr/System.Reflection.Context.xml", + "ref/dotnet/it/System.Reflection.Context.xml", + "ref/dotnet/ja/System.Reflection.Context.xml", + "ref/dotnet/ko/System.Reflection.Context.xml", + "ref/dotnet/ru/System.Reflection.Context.xml", + "ref/dotnet/System.Reflection.Context.dll", + "ref/dotnet/System.Reflection.Context.xml", + "ref/dotnet/zh-hans/System.Reflection.Context.xml", + "ref/dotnet/zh-hant/System.Reflection.Context.xml", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Context.dll", + "ref/netcore50/System.Reflection.Context.xml", + "ref/win8/_._", + "System.Reflection.Context.nuspec" + ] + }, + "System.Reflection.DispatchProxy/4.0.0": { + "sha512": "Kd/4o6DqBfJA4058X8oGEu1KlT8Ej0A+WGeoQgZU2h+3f2vC8NRbHxeOSZvxj9/MPZ1RYmZMGL1ApO9xG/4IVA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.DispatchProxy.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.DispatchProxy.dll", + "lib/netcore50/System.Reflection.DispatchProxy.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/1e015137cc52490b9dcde73fb35dee23.psmdcp", + "ref/dotnet/de/System.Reflection.DispatchProxy.xml", + "ref/dotnet/es/System.Reflection.DispatchProxy.xml", + "ref/dotnet/fr/System.Reflection.DispatchProxy.xml", + "ref/dotnet/it/System.Reflection.DispatchProxy.xml", + "ref/dotnet/ja/System.Reflection.DispatchProxy.xml", + "ref/dotnet/ko/System.Reflection.DispatchProxy.xml", + "ref/dotnet/ru/System.Reflection.DispatchProxy.xml", + "ref/dotnet/System.Reflection.DispatchProxy.dll", + "ref/dotnet/System.Reflection.DispatchProxy.xml", + "ref/dotnet/zh-hans/System.Reflection.DispatchProxy.xml", + "ref/dotnet/zh-hant/System.Reflection.DispatchProxy.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtime.json", + "runtimes/win8-aot/lib/netcore50/System.Reflection.DispatchProxy.dll", + "System.Reflection.DispatchProxy.nuspec" + ] + }, + "System.Reflection.Emit/4.0.0": { + "sha512": "CqnQz5LbNbiSxN10cv3Ehnw3j1UZOBCxnE0OO0q/keGQ5ENjyFM6rIG4gm/i0dX6EjdpYkAgKcI/mhZZCaBq4A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.Emit.dll", + "lib/MonoAndroid10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/f6dc998f8a6b43d7b08f33375407a384.psmdcp", + "ref/dotnet/de/System.Reflection.Emit.xml", + "ref/dotnet/es/System.Reflection.Emit.xml", + "ref/dotnet/fr/System.Reflection.Emit.xml", + "ref/dotnet/it/System.Reflection.Emit.xml", + "ref/dotnet/ja/System.Reflection.Emit.xml", + "ref/dotnet/ko/System.Reflection.Emit.xml", + "ref/dotnet/ru/System.Reflection.Emit.xml", + "ref/dotnet/System.Reflection.Emit.dll", + "ref/dotnet/System.Reflection.Emit.xml", + "ref/dotnet/zh-hans/System.Reflection.Emit.xml", + "ref/dotnet/zh-hant/System.Reflection.Emit.xml", + "ref/MonoAndroid10/_._", + "ref/net45/_._", + "ref/xamarinmac20/_._", + "System.Reflection.Emit.nuspec" + ] + }, + "System.Reflection.Emit.ILGeneration/4.0.0": { + "sha512": "02okuusJ0GZiHZSD2IOLIN41GIn6qOr7i5+86C98BPuhlwWqVABwebiGNvhDiXP1f9a6CxEigC7foQD42klcDg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.Emit.ILGeneration.dll", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "lib/wp80/_._", + "package/services/metadata/core-properties/d044dd882ed2456486ddb05f1dd0420f.psmdcp", + "ref/dotnet/de/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/es/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/fr/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/it/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/ja/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/ko/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/ru/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/System.Reflection.Emit.ILGeneration.dll", + "ref/dotnet/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/zh-hans/System.Reflection.Emit.ILGeneration.xml", + "ref/dotnet/zh-hant/System.Reflection.Emit.ILGeneration.xml", + "ref/net45/_._", + "ref/wp80/_._", + "System.Reflection.Emit.ILGeneration.nuspec" + ] + }, + "System.Reflection.Emit.Lightweight/4.0.0": { + "sha512": "DJZhHiOdkN08xJgsJfDjkuOreLLmMcU8qkEEqEHqyhkPUZMMQs0lE8R+6+68BAFWgcdzxtNu0YmIOtEug8j00w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.Emit.Lightweight.dll", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/wp80/_._", + "package/services/metadata/core-properties/52abced289cd46eebf8599b9b4c1c67b.psmdcp", + "ref/dotnet/de/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/es/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/fr/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/it/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/ja/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/ko/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/ru/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/System.Reflection.Emit.Lightweight.dll", + "ref/dotnet/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/dotnet/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/net45/_._", + "ref/wp80/_._", + "System.Reflection.Emit.Lightweight.nuspec" + ] + }, + "System.Reflection.Extensions/4.0.0": { + "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.Extensions.dll", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Extensions.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/0bcc335e1ef540948aef9032aca08bb2.psmdcp", + "ref/dotnet/de/System.Reflection.Extensions.xml", + "ref/dotnet/es/System.Reflection.Extensions.xml", + "ref/dotnet/fr/System.Reflection.Extensions.xml", + "ref/dotnet/it/System.Reflection.Extensions.xml", + "ref/dotnet/ja/System.Reflection.Extensions.xml", + "ref/dotnet/ko/System.Reflection.Extensions.xml", + "ref/dotnet/ru/System.Reflection.Extensions.xml", + "ref/dotnet/System.Reflection.Extensions.dll", + "ref/dotnet/System.Reflection.Extensions.xml", + "ref/dotnet/zh-hans/System.Reflection.Extensions.xml", + "ref/dotnet/zh-hant/System.Reflection.Extensions.xml", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Extensions.dll", + "ref/netcore50/System.Reflection.Extensions.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll", + "System.Reflection.Extensions.nuspec" + ] + }, + "System.Reflection.Metadata/1.0.22": { + "sha512": "ltoL/teiEdy5W9fyYdtFr2xJ/4nHyksXLK9dkPWx3ubnj7BVfsSWxvWTg9EaJUXjhWvS/AeTtugZA1/IDQyaPQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Reflection.Metadata.dll", + "lib/dotnet/System.Reflection.Metadata.xml", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml", + "package/services/metadata/core-properties/2ad78f291fda48d1847edf84e50139e6.psmdcp", + "System.Reflection.Metadata.nuspec" + ] + }, + "System.Reflection.Primitives/4.0.0": { + "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.Primitives.dll", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Primitives.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/7070509f3bfd418d859635361251dab0.psmdcp", + "ref/dotnet/de/System.Reflection.Primitives.xml", + "ref/dotnet/es/System.Reflection.Primitives.xml", + "ref/dotnet/fr/System.Reflection.Primitives.xml", + "ref/dotnet/it/System.Reflection.Primitives.xml", + "ref/dotnet/ja/System.Reflection.Primitives.xml", + "ref/dotnet/ko/System.Reflection.Primitives.xml", + "ref/dotnet/ru/System.Reflection.Primitives.xml", + "ref/dotnet/System.Reflection.Primitives.dll", + "ref/dotnet/System.Reflection.Primitives.xml", + "ref/dotnet/zh-hans/System.Reflection.Primitives.xml", + "ref/dotnet/zh-hant/System.Reflection.Primitives.xml", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll", + "System.Reflection.Primitives.nuspec" + ] + }, + "System.Reflection.TypeExtensions/4.0.0": { + "sha512": "YRM/msNAM86hdxPyXcuZSzmTO0RQFh7YMEPBLTY8cqXvFPYIx2x99bOyPkuU81wRYQem1c1HTkImQ2DjbOBfew==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Reflection.TypeExtensions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/a37798ee61124eb7b6c56400aee24da1.psmdcp", + "ref/dotnet/de/System.Reflection.TypeExtensions.xml", + "ref/dotnet/es/System.Reflection.TypeExtensions.xml", + "ref/dotnet/fr/System.Reflection.TypeExtensions.xml", + "ref/dotnet/it/System.Reflection.TypeExtensions.xml", + "ref/dotnet/ja/System.Reflection.TypeExtensions.xml", + "ref/dotnet/ko/System.Reflection.TypeExtensions.xml", + "ref/dotnet/ru/System.Reflection.TypeExtensions.xml", + "ref/dotnet/System.Reflection.TypeExtensions.dll", + "ref/dotnet/System.Reflection.TypeExtensions.xml", + "ref/dotnet/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/dotnet/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll", + "System.Reflection.TypeExtensions.nuspec" + ] + }, + "System.Resources.ResourceManager/4.0.0": { + "sha512": "qmqeZ4BJgjfU+G2JbrZt4Dk1LsMxO4t+f/9HarNY6w8pBgweO6jT+cknUH7c3qIrGvyUqraBhU45Eo6UtA0fAw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Resources.ResourceManager.dll", + "lib/net45/_._", + "lib/netcore50/System.Resources.ResourceManager.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/657a73ee3f09479c9fedb9538ade8eac.psmdcp", + "ref/dotnet/de/System.Resources.ResourceManager.xml", + "ref/dotnet/es/System.Resources.ResourceManager.xml", + "ref/dotnet/fr/System.Resources.ResourceManager.xml", + "ref/dotnet/it/System.Resources.ResourceManager.xml", + "ref/dotnet/ja/System.Resources.ResourceManager.xml", + "ref/dotnet/ko/System.Resources.ResourceManager.xml", + "ref/dotnet/ru/System.Resources.ResourceManager.xml", + "ref/dotnet/System.Resources.ResourceManager.dll", + "ref/dotnet/System.Resources.ResourceManager.xml", + "ref/dotnet/zh-hans/System.Resources.ResourceManager.xml", + "ref/dotnet/zh-hant/System.Resources.ResourceManager.xml", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll", + "System.Resources.ResourceManager.nuspec" + ] + }, + "System.Runtime/4.0.20": { + "sha512": "X7N/9Bz7jVPorqdVFO86ns1sX6MlQM+WTxELtx+Z4VG45x9+LKmWH0GRqjgKprUnVuwmfB9EJ9DQng14Z7/zwg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Runtime.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/d1ded52f75da4446b1c962f9292aa3ef.psmdcp", + "ref/dotnet/de/System.Runtime.xml", + "ref/dotnet/es/System.Runtime.xml", + "ref/dotnet/fr/System.Runtime.xml", + "ref/dotnet/it/System.Runtime.xml", + "ref/dotnet/ja/System.Runtime.xml", + "ref/dotnet/ko/System.Runtime.xml", + "ref/dotnet/ru/System.Runtime.xml", + "ref/dotnet/System.Runtime.dll", + "ref/dotnet/System.Runtime.xml", + "ref/dotnet/zh-hans/System.Runtime.xml", + "ref/dotnet/zh-hant/System.Runtime.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.dll", + "System.Runtime.nuspec" + ] + }, + "System.Runtime.Extensions/4.0.10": { + "sha512": "5dsEwf3Iml7d5OZeT20iyOjT+r+okWpN7xI2v+R4cgd3WSj4DeRPTvPFjDpacbVW4skCAZ8B9hxXJYgkCFKJ1A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.Extensions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Runtime.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/c7fee76a13d04c7ea49fb1a24c184f37.psmdcp", + "ref/dotnet/de/System.Runtime.Extensions.xml", + "ref/dotnet/es/System.Runtime.Extensions.xml", + "ref/dotnet/fr/System.Runtime.Extensions.xml", + "ref/dotnet/it/System.Runtime.Extensions.xml", + "ref/dotnet/ja/System.Runtime.Extensions.xml", + "ref/dotnet/ko/System.Runtime.Extensions.xml", + "ref/dotnet/ru/System.Runtime.Extensions.xml", + "ref/dotnet/System.Runtime.Extensions.dll", + "ref/dotnet/System.Runtime.Extensions.xml", + "ref/dotnet/zh-hans/System.Runtime.Extensions.xml", + "ref/dotnet/zh-hant/System.Runtime.Extensions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll", + "System.Runtime.Extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.0.0": { + "sha512": "638VhpRq63tVcQ6HDb3um3R/J2BtR1Sa96toHo6PcJGPXEPEsleCuqhBgX2gFCz0y0qkutANwW6VPPY5wQu1XQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.Handles.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Runtime.Handles.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/da57aa32ff2441d1acfe85bee4f101ab.psmdcp", + "ref/dotnet/de/System.Runtime.Handles.xml", + "ref/dotnet/es/System.Runtime.Handles.xml", + "ref/dotnet/fr/System.Runtime.Handles.xml", + "ref/dotnet/it/System.Runtime.Handles.xml", + "ref/dotnet/ja/System.Runtime.Handles.xml", + "ref/dotnet/ko/System.Runtime.Handles.xml", + "ref/dotnet/ru/System.Runtime.Handles.xml", + "ref/dotnet/System.Runtime.Handles.dll", + "ref/dotnet/System.Runtime.Handles.xml", + "ref/dotnet/zh-hans/System.Runtime.Handles.xml", + "ref/dotnet/zh-hant/System.Runtime.Handles.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll", + "System.Runtime.Handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.0.20": { + "sha512": "ZgDyBYfEnjWoz/viS6VOswA6XOkDSH2DzgbpczbW50RywhnCgTl+w3JEvtAiOGyIh8cyx1NJq80jsNBSUr8Pig==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.InteropServices.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Runtime.InteropServices.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/78e7f61876374acba2a95834f272d262.psmdcp", + "ref/dotnet/de/System.Runtime.InteropServices.xml", + "ref/dotnet/es/System.Runtime.InteropServices.xml", + "ref/dotnet/fr/System.Runtime.InteropServices.xml", + "ref/dotnet/it/System.Runtime.InteropServices.xml", + "ref/dotnet/ja/System.Runtime.InteropServices.xml", + "ref/dotnet/ko/System.Runtime.InteropServices.xml", + "ref/dotnet/ru/System.Runtime.InteropServices.xml", + "ref/dotnet/System.Runtime.InteropServices.dll", + "ref/dotnet/System.Runtime.InteropServices.xml", + "ref/dotnet/zh-hans/System.Runtime.InteropServices.xml", + "ref/dotnet/zh-hant/System.Runtime.InteropServices.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll", + "System.Runtime.InteropServices.nuspec" + ] + }, + "System.Runtime.InteropServices.WindowsRuntime/4.0.0": { + "sha512": "K5MGSvw/sGPKQYdOVqSpsVbHBE8HccHIDEhUNjM1lui65KGF/slNZfijGU87ggQiVXTI802ebKiOYBkwiLotow==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/net45/_._", + "lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/3c944c6b4d6044d28ee80e49a09300c9.psmdcp", + "ref/dotnet/de/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/es/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/fr/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/it/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/ja/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/ko/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/ru/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/System.Runtime.InteropServices.WindowsRuntime.dll", + "ref/dotnet/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/zh-hans/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/dotnet/zh-hant/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/net45/_._", + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll", + "ref/netcore50/System.Runtime.InteropServices.WindowsRuntime.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.WindowsRuntime.dll", + "System.Runtime.InteropServices.WindowsRuntime.nuspec" + ] + }, + "System.Runtime.Numerics/4.0.0": { + "sha512": "aAYGEOE01nabQLufQ4YO8WuSyZzOqGcksi8m1BRW8ppkmssR7en8TqiXcBkB2gTkCnKG/Ai2NQY8CgdmgZw/fw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Runtime.Numerics.dll", + "lib/net45/_._", + "lib/netcore50/System.Runtime.Numerics.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/2e43dbd3dfbf4af5bb74bedaf3a67bd5.psmdcp", + "ref/dotnet/de/System.Runtime.Numerics.xml", + "ref/dotnet/es/System.Runtime.Numerics.xml", + "ref/dotnet/fr/System.Runtime.Numerics.xml", + "ref/dotnet/it/System.Runtime.Numerics.xml", + "ref/dotnet/ja/System.Runtime.Numerics.xml", + "ref/dotnet/ko/System.Runtime.Numerics.xml", + "ref/dotnet/ru/System.Runtime.Numerics.xml", + "ref/dotnet/System.Runtime.Numerics.dll", + "ref/dotnet/System.Runtime.Numerics.xml", + "ref/dotnet/zh-hans/System.Runtime.Numerics.xml", + "ref/dotnet/zh-hant/System.Runtime.Numerics.xml", + "ref/net45/_._", + "ref/netcore50/System.Runtime.Numerics.dll", + "ref/netcore50/System.Runtime.Numerics.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "System.Runtime.Numerics.nuspec" + ] + }, + "System.Runtime.Serialization.Json/4.0.0": { + "sha512": "emhWMQP3sdtkAhD0TOeP3FfjS57sfQMQ2sqA6f2Yj5Gd9jkHV4KsQ2TsoJjghca6d8fur7+REQ6ILBXVdGf/0g==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.Serialization.Json.dll", + "lib/net45/_._", + "lib/netcore50/System.Runtime.Serialization.Json.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/2c520ff333ad4bde986eb7a015ba6343.psmdcp", + "ref/dotnet/de/System.Runtime.Serialization.Json.xml", + "ref/dotnet/es/System.Runtime.Serialization.Json.xml", + "ref/dotnet/fr/System.Runtime.Serialization.Json.xml", + "ref/dotnet/it/System.Runtime.Serialization.Json.xml", + "ref/dotnet/ja/System.Runtime.Serialization.Json.xml", + "ref/dotnet/ko/System.Runtime.Serialization.Json.xml", + "ref/dotnet/ru/System.Runtime.Serialization.Json.xml", + "ref/dotnet/System.Runtime.Serialization.Json.dll", + "ref/dotnet/System.Runtime.Serialization.Json.xml", + "ref/dotnet/zh-hans/System.Runtime.Serialization.Json.xml", + "ref/dotnet/zh-hant/System.Runtime.Serialization.Json.xml", + "ref/net45/_._", + "ref/netcore50/System.Runtime.Serialization.Json.dll", + "ref/netcore50/System.Runtime.Serialization.Json.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Json.dll", + "System.Runtime.Serialization.Json.nuspec" + ] + }, + "System.Runtime.Serialization.Primitives/4.0.10": { + "sha512": "NPc8DZIomf5tGjYtz/KTHI01IPcVlypfhCux32AbLPDjTotdvL8TpKRwMyQJ6Kh08yprRVH7uBD1PdJiuoFzag==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Runtime.Serialization.Primitives.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/92e70054da8743d68462736e85fe5580.psmdcp", + "ref/dotnet/de/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/es/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/fr/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/it/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/ja/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/ko/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/ru/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/System.Runtime.Serialization.Primitives.dll", + "ref/dotnet/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/dotnet/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Runtime.Serialization.Primitives.nuspec" + ] + }, + "System.Runtime.Serialization.Xml/4.0.10": { + "sha512": "xsy7XbH8RTpKoDPNcibSGCOpujsmwUmOWAby3PssqkZFpLBXUbDO2s6JKITRjxejET2g0PK8t+mdIvu3xmUuKA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Runtime.Serialization.Xml.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Runtime.Serialization.Xml.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/7d99189e9ae248c9a98d9fc3ccdc5130.psmdcp", + "ref/dotnet/de/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/es/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/fr/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/it/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/ja/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/ko/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/ru/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/System.Runtime.Serialization.Xml.dll", + "ref/dotnet/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/zh-hans/System.Runtime.Serialization.Xml.xml", + "ref/dotnet/zh-hant/System.Runtime.Serialization.Xml.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.Serialization.Xml.dll", + "System.Runtime.Serialization.Xml.nuspec" + ] + }, + "System.Runtime.WindowsRuntime/4.0.10": { + "sha512": "9w6ypdnEw8RrLRlxTbLAYrap4eL1xIQeNoOaumQVOQ8TTD/5g9FGrBtY3KLiGxAPieN9AwAAEIDkugU85Cwuvg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/netcore50/System.Runtime.WindowsRuntime.dll", + "lib/win81/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/a81cabb2b7e843ce801ecf91886941d4.psmdcp", + "ref/dotnet/de/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/es/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/fr/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/it/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/ja/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/ko/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/ru/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/System.Runtime.WindowsRuntime.dll", + "ref/dotnet/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/zh-hans/System.Runtime.WindowsRuntime.xml", + "ref/dotnet/zh-hant/System.Runtime.WindowsRuntime.xml", + "ref/netcore50/System.Runtime.WindowsRuntime.dll", + "ref/netcore50/System.Runtime.WindowsRuntime.xml", + "ref/win81/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Runtime.WindowsRuntime.dll", + "System.Runtime.WindowsRuntime.nuspec" + ] + }, + "System.Runtime.WindowsRuntime.UI.Xaml/4.0.0": { + "sha512": "2GY3fkXBMQOyyO9ovaH46CN6MD2ck/Gvk4VNAgVDvtmfO3HXYFNd+bB05WhVcJrHKbfKZNwfwZKpYZ+OsVFsLw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/0f3b84a81b7a4a97aa765ed058bf6c20.psmdcp", + "ref/dotnet/de/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/es/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/fr/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/it/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/ja/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/ko/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/ru/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/System.Runtime.WindowsRuntime.UI.Xaml.dll", + "ref/dotnet/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/zh-hans/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/dotnet/zh-hant/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.dll", + "ref/netcore50/System.Runtime.WindowsRuntime.UI.Xaml.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "System.Runtime.WindowsRuntime.UI.Xaml.nuspec" + ] + }, + "System.Security.Claims/4.0.0": { + "sha512": "94NFR/7JN3YdyTH7hl2iSvYmdA8aqShriTHectcK+EbizT71YczMaG6LuqJBQP/HWo66AQyikYYM9aw+4EzGXg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Security.Claims.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Claims.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/b682071d85754e6793ca9777ffabaf8a.psmdcp", + "ref/dotnet/de/System.Security.Claims.xml", + "ref/dotnet/es/System.Security.Claims.xml", + "ref/dotnet/fr/System.Security.Claims.xml", + "ref/dotnet/it/System.Security.Claims.xml", + "ref/dotnet/ja/System.Security.Claims.xml", + "ref/dotnet/ko/System.Security.Claims.xml", + "ref/dotnet/ru/System.Security.Claims.xml", + "ref/dotnet/System.Security.Claims.dll", + "ref/dotnet/System.Security.Claims.xml", + "ref/dotnet/zh-hans/System.Security.Claims.xml", + "ref/dotnet/zh-hant/System.Security.Claims.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Claims.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Security.Claims.nuspec" + ] + }, + "System.Security.Principal/4.0.0": { + "sha512": "FOhq3jUOONi6fp5j3nPYJMrKtSJlqAURpjiO3FaDIV4DJNEYymWW5uh1pfxySEB8dtAW+I66IypzNge/w9OzZQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Security.Principal.dll", + "lib/net45/_._", + "lib/netcore50/System.Security.Principal.dll", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/5d44fbabc99d4204b6a2f76329d0a184.psmdcp", + "ref/dotnet/de/System.Security.Principal.xml", + "ref/dotnet/es/System.Security.Principal.xml", + "ref/dotnet/fr/System.Security.Principal.xml", + "ref/dotnet/it/System.Security.Principal.xml", + "ref/dotnet/ja/System.Security.Principal.xml", + "ref/dotnet/ko/System.Security.Principal.xml", + "ref/dotnet/ru/System.Security.Principal.xml", + "ref/dotnet/System.Security.Principal.dll", + "ref/dotnet/System.Security.Principal.xml", + "ref/dotnet/zh-hans/System.Security.Principal.xml", + "ref/dotnet/zh-hant/System.Security.Principal.xml", + "ref/net45/_._", + "ref/netcore50/System.Security.Principal.dll", + "ref/netcore50/System.Security.Principal.xml", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "System.Security.Principal.nuspec" + ] + }, + "System.ServiceModel.Duplex/4.0.0": { + "sha512": "JFeDn+IsiwAVJkNNnM7MLefJOnzYhovaHnjk3lzEnUWkYZJeAKrcgLdK6GE2GNjb5mEV8Pad/E0JcA8eCr3eWQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.ServiceModel.Duplex.dll", + "lib/net45/_._", + "lib/netcore50/System.ServiceModel.Duplex.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/8a542ab34ffb4a13958ce3d7279d9dae.psmdcp", + "ref/dotnet/de/System.ServiceModel.Duplex.xml", + "ref/dotnet/es/System.ServiceModel.Duplex.xml", + "ref/dotnet/fr/System.ServiceModel.Duplex.xml", + "ref/dotnet/it/System.ServiceModel.Duplex.xml", + "ref/dotnet/ja/System.ServiceModel.Duplex.xml", + "ref/dotnet/ko/System.ServiceModel.Duplex.xml", + "ref/dotnet/ru/System.ServiceModel.Duplex.xml", + "ref/dotnet/System.ServiceModel.Duplex.dll", + "ref/dotnet/System.ServiceModel.Duplex.xml", + "ref/dotnet/zh-hans/System.ServiceModel.Duplex.xml", + "ref/dotnet/zh-hant/System.ServiceModel.Duplex.xml", + "ref/net45/_._", + "ref/netcore50/System.ServiceModel.Duplex.dll", + "ref/netcore50/System.ServiceModel.Duplex.xml", + "ref/win8/_._", + "System.ServiceModel.Duplex.nuspec" + ] + }, + "System.ServiceModel.Http/4.0.10": { + "sha512": "Vyl7lmvMlXJamtnDugoXuAgAQGSqtA7omK3zDBYByhbYeBC2hRBchgyXox7e5vEO+29TeB1IpoLWQGb7tO9h6A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.ServiceModel.Http.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.ServiceModel.Http.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/da6bab8a73fb4ac9af198a5f70d8aa64.psmdcp", + "ref/dotnet/de/System.ServiceModel.Http.xml", + "ref/dotnet/es/System.ServiceModel.Http.xml", + "ref/dotnet/fr/System.ServiceModel.Http.xml", + "ref/dotnet/it/System.ServiceModel.Http.xml", + "ref/dotnet/ja/System.ServiceModel.Http.xml", + "ref/dotnet/ko/System.ServiceModel.Http.xml", + "ref/dotnet/ru/System.ServiceModel.Http.xml", + "ref/dotnet/System.ServiceModel.Http.dll", + "ref/dotnet/System.ServiceModel.Http.xml", + "ref/dotnet/zh-hans/System.ServiceModel.Http.xml", + "ref/dotnet/zh-hant/System.ServiceModel.Http.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.ServiceModel.Http.nuspec" + ] + }, + "System.ServiceModel.NetTcp/4.0.0": { + "sha512": "lV2Cdcso9jOS0KBtgHZHzTLe/Lx/ERdPcvF4dlepUie6/+BOMYTOgg2C7OdpIjp3fwUNXq8nhU+IilmEyjuf/A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.ServiceModel.NetTcp.dll", + "lib/net45/_._", + "lib/netcore50/System.ServiceModel.NetTcp.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/024bb3a15d5444e2b8b485ce4cf44640.psmdcp", + "ref/dotnet/de/System.ServiceModel.NetTcp.xml", + "ref/dotnet/es/System.ServiceModel.NetTcp.xml", + "ref/dotnet/fr/System.ServiceModel.NetTcp.xml", + "ref/dotnet/it/System.ServiceModel.NetTcp.xml", + "ref/dotnet/ja/System.ServiceModel.NetTcp.xml", + "ref/dotnet/ko/System.ServiceModel.NetTcp.xml", + "ref/dotnet/ru/System.ServiceModel.NetTcp.xml", + "ref/dotnet/System.ServiceModel.NetTcp.dll", + "ref/dotnet/System.ServiceModel.NetTcp.xml", + "ref/dotnet/zh-hans/System.ServiceModel.NetTcp.xml", + "ref/dotnet/zh-hant/System.ServiceModel.NetTcp.xml", + "ref/net45/_._", + "ref/netcore50/System.ServiceModel.NetTcp.dll", + "ref/netcore50/System.ServiceModel.NetTcp.xml", + "ref/win8/_._", + "System.ServiceModel.NetTcp.nuspec" + ] + }, + "System.ServiceModel.Primitives/4.0.0": { + "sha512": "uF5VYQWR07LgiZkzUr8qjwvqOaIAfwU566MneD4WuC14d8FLJNsAgCJUYhBGB7COjH7HTqnP9ZFmr6c+L83Stg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.ServiceModel.Primitives.dll", + "lib/net45/_._", + "lib/netcore50/System.ServiceModel.Primitives.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/551694f534894508bee57aba617484c9.psmdcp", + "ref/dotnet/de/System.ServiceModel.Primitives.xml", + "ref/dotnet/es/System.ServiceModel.Primitives.xml", + "ref/dotnet/fr/System.ServiceModel.Primitives.xml", + "ref/dotnet/it/System.ServiceModel.Primitives.xml", + "ref/dotnet/ja/System.ServiceModel.Primitives.xml", + "ref/dotnet/ko/System.ServiceModel.Primitives.xml", + "ref/dotnet/ru/System.ServiceModel.Primitives.xml", + "ref/dotnet/System.ServiceModel.Primitives.dll", + "ref/dotnet/System.ServiceModel.Primitives.xml", + "ref/dotnet/zh-hans/System.ServiceModel.Primitives.xml", + "ref/dotnet/zh-hant/System.ServiceModel.Primitives.xml", + "ref/net45/_._", + "ref/netcore50/System.ServiceModel.Primitives.dll", + "ref/netcore50/System.ServiceModel.Primitives.xml", + "ref/win8/_._", + "System.ServiceModel.Primitives.nuspec" + ] + }, + "System.ServiceModel.Security/4.0.0": { + "sha512": "sPVzsnd8w/TJsW/4sYA9eIGP+RtlpN0AhKLGKf9ywdGGmHPi0kkuX2mx412dM3GN0e4oifuISwvZqby/sI8Feg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.ServiceModel.Security.dll", + "lib/net45/_._", + "lib/netcore50/System.ServiceModel.Security.dll", + "lib/win8/_._", + "package/services/metadata/core-properties/724a153019f4439f95c814a98c7503f4.psmdcp", + "ref/dotnet/de/System.ServiceModel.Security.xml", + "ref/dotnet/es/System.ServiceModel.Security.xml", + "ref/dotnet/fr/System.ServiceModel.Security.xml", + "ref/dotnet/it/System.ServiceModel.Security.xml", + "ref/dotnet/ja/System.ServiceModel.Security.xml", + "ref/dotnet/ko/System.ServiceModel.Security.xml", + "ref/dotnet/ru/System.ServiceModel.Security.xml", + "ref/dotnet/System.ServiceModel.Security.dll", + "ref/dotnet/System.ServiceModel.Security.xml", + "ref/dotnet/zh-hans/System.ServiceModel.Security.xml", + "ref/dotnet/zh-hant/System.ServiceModel.Security.xml", + "ref/net45/_._", + "ref/netcore50/System.ServiceModel.Security.dll", + "ref/netcore50/System.ServiceModel.Security.xml", + "ref/win8/_._", + "System.ServiceModel.Security.nuspec" + ] + }, + "System.Text.Encoding/4.0.10": { + "sha512": "fNlSFgy4OuDlJrP9SFFxMlaLazq6ipv15sU5TiEgg9UCVnA/OgoVUfymFp4AOk1jOkW5SVxWbeeIUptcM+m/Vw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Text.Encoding.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Text.Encoding.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/829e172aadac4937a5a6a4b386855282.psmdcp", + "ref/dotnet/de/System.Text.Encoding.xml", + "ref/dotnet/es/System.Text.Encoding.xml", + "ref/dotnet/fr/System.Text.Encoding.xml", + "ref/dotnet/it/System.Text.Encoding.xml", + "ref/dotnet/ja/System.Text.Encoding.xml", + "ref/dotnet/ko/System.Text.Encoding.xml", + "ref/dotnet/ru/System.Text.Encoding.xml", + "ref/dotnet/System.Text.Encoding.dll", + "ref/dotnet/System.Text.Encoding.xml", + "ref/dotnet/zh-hans/System.Text.Encoding.xml", + "ref/dotnet/zh-hant/System.Text.Encoding.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll", + "System.Text.Encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/4.0.0": { + "sha512": "ZHBTr1AXLjY9OuYR7pKx5xfN6QFye1kgd5QAbGrvfCOu7yxRnJs3VUaxERe1fOlnF0mi/xD/Dvb3T3x3HNuPWQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Text.Encoding.CodePages.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/8a616349cf5c4e6ba7634969c080759b.psmdcp", + "ref/dotnet/de/System.Text.Encoding.CodePages.xml", + "ref/dotnet/es/System.Text.Encoding.CodePages.xml", + "ref/dotnet/fr/System.Text.Encoding.CodePages.xml", + "ref/dotnet/it/System.Text.Encoding.CodePages.xml", + "ref/dotnet/ja/System.Text.Encoding.CodePages.xml", + "ref/dotnet/ko/System.Text.Encoding.CodePages.xml", + "ref/dotnet/ru/System.Text.Encoding.CodePages.xml", + "ref/dotnet/System.Text.Encoding.CodePages.dll", + "ref/dotnet/System.Text.Encoding.CodePages.xml", + "ref/dotnet/zh-hans/System.Text.Encoding.CodePages.xml", + "ref/dotnet/zh-hant/System.Text.Encoding.CodePages.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Text.Encoding.CodePages.nuspec" + ] + }, + "System.Text.Encoding.Extensions/4.0.10": { + "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Text.Encoding.Extensions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Text.Encoding.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/894d51cf918c4bca91e81a732d958707.psmdcp", + "ref/dotnet/de/System.Text.Encoding.Extensions.xml", + "ref/dotnet/es/System.Text.Encoding.Extensions.xml", + "ref/dotnet/fr/System.Text.Encoding.Extensions.xml", + "ref/dotnet/it/System.Text.Encoding.Extensions.xml", + "ref/dotnet/ja/System.Text.Encoding.Extensions.xml", + "ref/dotnet/ko/System.Text.Encoding.Extensions.xml", + "ref/dotnet/ru/System.Text.Encoding.Extensions.xml", + "ref/dotnet/System.Text.Encoding.Extensions.dll", + "ref/dotnet/System.Text.Encoding.Extensions.xml", + "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll", + "System.Text.Encoding.Extensions.nuspec" + ] + }, + "System.Text.RegularExpressions/4.0.10": { + "sha512": "0vDuHXJePpfMCecWBNOabOKCvzfTbFMNcGgklt3l5+RqHV5SzmF7RUVpuet8V0rJX30ROlL66xdehw2Rdsn2DA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Text.RegularExpressions.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/548eb1bd139e4c8cbc55e9f7f4f404dd.psmdcp", + "ref/dotnet/de/System.Text.RegularExpressions.xml", + "ref/dotnet/es/System.Text.RegularExpressions.xml", + "ref/dotnet/fr/System.Text.RegularExpressions.xml", + "ref/dotnet/it/System.Text.RegularExpressions.xml", + "ref/dotnet/ja/System.Text.RegularExpressions.xml", + "ref/dotnet/ko/System.Text.RegularExpressions.xml", + "ref/dotnet/ru/System.Text.RegularExpressions.xml", + "ref/dotnet/System.Text.RegularExpressions.dll", + "ref/dotnet/System.Text.RegularExpressions.xml", + "ref/dotnet/zh-hans/System.Text.RegularExpressions.xml", + "ref/dotnet/zh-hant/System.Text.RegularExpressions.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Text.RegularExpressions.nuspec" + ] + }, + "System.Threading/4.0.10": { + "sha512": "0w6pRxIEE7wuiOJeKabkDgeIKmqf4ER1VNrs6qFwHnooEE78yHwi/bKkg5Jo8/pzGLm0xQJw0nEmPXt1QBAIUA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Threading.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Threading.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/c17c3791d8fa4efbb8aded2ca8c71fbe.psmdcp", + "ref/dotnet/de/System.Threading.xml", + "ref/dotnet/es/System.Threading.xml", + "ref/dotnet/fr/System.Threading.xml", + "ref/dotnet/it/System.Threading.xml", + "ref/dotnet/ja/System.Threading.xml", + "ref/dotnet/ko/System.Threading.xml", + "ref/dotnet/ru/System.Threading.xml", + "ref/dotnet/System.Threading.dll", + "ref/dotnet/System.Threading.xml", + "ref/dotnet/zh-hans/System.Threading.xml", + "ref/dotnet/zh-hant/System.Threading.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Threading.dll", + "System.Threading.nuspec" + ] + }, + "System.Threading.Overlapped/4.0.0": { + "sha512": "X5LuQFhM5FTqaez3eXKJ9CbfSGZ7wj6j4hSVtxct3zmwQXLqG95qoWdvILcgN7xtrDOBIFtpiyDg0vmoI0jE2A==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Threading.Overlapped.dll", + "lib/net46/System.Threading.Overlapped.dll", + "lib/netcore50/System.Threading.Overlapped.dll", + "package/services/metadata/core-properties/e9846a81e829434aafa4ae2e8c3517d7.psmdcp", + "ref/dotnet/de/System.Threading.Overlapped.xml", + "ref/dotnet/es/System.Threading.Overlapped.xml", + "ref/dotnet/fr/System.Threading.Overlapped.xml", + "ref/dotnet/it/System.Threading.Overlapped.xml", + "ref/dotnet/ja/System.Threading.Overlapped.xml", + "ref/dotnet/ko/System.Threading.Overlapped.xml", + "ref/dotnet/ru/System.Threading.Overlapped.xml", + "ref/dotnet/System.Threading.Overlapped.dll", + "ref/dotnet/System.Threading.Overlapped.xml", + "ref/dotnet/zh-hans/System.Threading.Overlapped.xml", + "ref/dotnet/zh-hant/System.Threading.Overlapped.xml", + "ref/net46/System.Threading.Overlapped.dll", + "System.Threading.Overlapped.nuspec" + ] + }, + "System.Threading.Tasks/4.0.10": { + "sha512": "NOwJGDfk79jR0bnzosbXLVD/PdI8KzBeESoa3CofEM5v9R5EBfcI0Jyf18stx+0IYV9okmDIDxVtxq9TbnR9bQ==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Threading.Tasks.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Threading.Tasks.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/a4ed35f8764a4b68bb39ec8d13b3e730.psmdcp", + "ref/dotnet/de/System.Threading.Tasks.xml", + "ref/dotnet/es/System.Threading.Tasks.xml", + "ref/dotnet/fr/System.Threading.Tasks.xml", + "ref/dotnet/it/System.Threading.Tasks.xml", + "ref/dotnet/ja/System.Threading.Tasks.xml", + "ref/dotnet/ko/System.Threading.Tasks.xml", + "ref/dotnet/ru/System.Threading.Tasks.xml", + "ref/dotnet/System.Threading.Tasks.dll", + "ref/dotnet/System.Threading.Tasks.xml", + "ref/dotnet/zh-hans/System.Threading.Tasks.xml", + "ref/dotnet/zh-hant/System.Threading.Tasks.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll", + "System.Threading.Tasks.nuspec" + ] + }, + "System.Threading.Tasks.Dataflow/4.5.25": { + "sha512": "Y5/Dj+tYlDxHBwie7bFKp3+1uSG4vqTJRF7Zs7kaUQ3ahYClffCTxvgjrJyPclC+Le55uE7bMLgjZQVOQr3Jfg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Threading.Tasks.Dataflow.dll", + "lib/dotnet/System.Threading.Tasks.Dataflow.XML", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Dataflow.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Dataflow.XML", + "lib/portable-net45+win8+wpa81/System.Threading.Tasks.Dataflow.dll", + "lib/portable-net45+win8+wpa81/System.Threading.Tasks.Dataflow.XML", + "package/services/metadata/core-properties/b27f9e16f16b429f924c31eb4be21d09.psmdcp", + "System.Threading.Tasks.Dataflow.nuspec" + ] + }, + "System.Threading.Tasks.Parallel/4.0.0": { + "sha512": "GXDhjPhF3nE4RtDia0W6JR4UMdmhOyt9ibHmsNV6GLRT4HAGqU636Teo4tqvVQOFp2R6b1ffxPXiRaoqtzGxuA==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Threading.Tasks.Parallel.dll", + "lib/net45/_._", + "lib/netcore50/System.Threading.Tasks.Parallel.dll", + "lib/win8/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/260c0741092249239a3182de21f409ef.psmdcp", + "ref/dotnet/de/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/es/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/fr/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/it/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/ja/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/ko/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/ru/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/System.Threading.Tasks.Parallel.dll", + "ref/dotnet/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/zh-hans/System.Threading.Tasks.Parallel.xml", + "ref/dotnet/zh-hant/System.Threading.Tasks.Parallel.xml", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.Parallel.dll", + "ref/netcore50/System.Threading.Tasks.Parallel.xml", + "ref/win8/_._", + "ref/wpa81/_._", + "System.Threading.Tasks.Parallel.nuspec" + ] + }, + "System.Threading.Timer/4.0.0": { + "sha512": "BIdJH5/e4FnVl7TkRUiE3pWytp7OYiRUGtwUbyLewS/PhKiLepFetdtlW+FvDYOVn60Q2NMTrhHhJ51q+sVW5g==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Threading.Timer.dll", + "lib/net451/_._", + "lib/netcore50/System.Threading.Timer.dll", + "lib/win81/_._", + "lib/wpa81/_._", + "package/services/metadata/core-properties/c02c4d3d0eff43ec9b54de9f60bd68ad.psmdcp", + "ref/dotnet/de/System.Threading.Timer.xml", + "ref/dotnet/es/System.Threading.Timer.xml", + "ref/dotnet/fr/System.Threading.Timer.xml", + "ref/dotnet/it/System.Threading.Timer.xml", + "ref/dotnet/ja/System.Threading.Timer.xml", + "ref/dotnet/ko/System.Threading.Timer.xml", + "ref/dotnet/ru/System.Threading.Timer.xml", + "ref/dotnet/System.Threading.Timer.dll", + "ref/dotnet/System.Threading.Timer.xml", + "ref/dotnet/zh-hans/System.Threading.Timer.xml", + "ref/dotnet/zh-hant/System.Threading.Timer.xml", + "ref/net451/_._", + "ref/netcore50/System.Threading.Timer.dll", + "ref/netcore50/System.Threading.Timer.xml", + "ref/win81/_._", + "ref/wpa81/_._", + "runtimes/win8-aot/lib/netcore50/System.Threading.Timer.dll", + "System.Threading.Timer.nuspec" + ] + }, + "System.Xml.ReaderWriter/4.0.10": { + "sha512": "VdmWWMH7otrYV7D+cviUo7XjX0jzDnD/lTGSZTlZqfIQ5PhXk85j+6P0TK9od3PnOd5ZIM+pOk01G/J+3nh9/w==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Xml.ReaderWriter.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/ef76b636720e4f2d8cfd570899d52df8.psmdcp", + "ref/dotnet/de/System.Xml.ReaderWriter.xml", + "ref/dotnet/es/System.Xml.ReaderWriter.xml", + "ref/dotnet/fr/System.Xml.ReaderWriter.xml", + "ref/dotnet/it/System.Xml.ReaderWriter.xml", + "ref/dotnet/ja/System.Xml.ReaderWriter.xml", + "ref/dotnet/ko/System.Xml.ReaderWriter.xml", + "ref/dotnet/ru/System.Xml.ReaderWriter.xml", + "ref/dotnet/System.Xml.ReaderWriter.dll", + "ref/dotnet/System.Xml.ReaderWriter.xml", + "ref/dotnet/zh-hans/System.Xml.ReaderWriter.xml", + "ref/dotnet/zh-hant/System.Xml.ReaderWriter.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Xml.ReaderWriter.nuspec" + ] + }, + "System.Xml.XDocument/4.0.10": { + "sha512": "+ej0g0INnXDjpS2tDJsLO7/BjyBzC+TeBXLeoGnvRrm4AuBH9PhBjjZ1IuKWOhCkxPkFognUOKhZHS2glIOlng==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Xml.XDocument.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/f5c45d6b065347dfaa1d90d06221623d.psmdcp", + "ref/dotnet/de/System.Xml.XDocument.xml", + "ref/dotnet/es/System.Xml.XDocument.xml", + "ref/dotnet/fr/System.Xml.XDocument.xml", + "ref/dotnet/it/System.Xml.XDocument.xml", + "ref/dotnet/ja/System.Xml.XDocument.xml", + "ref/dotnet/ko/System.Xml.XDocument.xml", + "ref/dotnet/ru/System.Xml.XDocument.xml", + "ref/dotnet/System.Xml.XDocument.dll", + "ref/dotnet/System.Xml.XDocument.xml", + "ref/dotnet/zh-hans/System.Xml.XDocument.xml", + "ref/dotnet/zh-hant/System.Xml.XDocument.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Xml.XDocument.nuspec" + ] + }, + "System.Xml.XmlDocument/4.0.0": { + "sha512": "H5qTx2+AXgaKE5wehU1ZYeYPFpp/rfFh69/937NvwCrDqbIkvJRmIFyKKpkoMI6gl9hGfuVizfIudVTMyowCXw==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/dotnet/System.Xml.XmlDocument.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Xml.XmlDocument.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/89840371bf3f4e0d9ab7b6b34213c74c.psmdcp", + "ref/dotnet/de/System.Xml.XmlDocument.xml", + "ref/dotnet/es/System.Xml.XmlDocument.xml", + "ref/dotnet/fr/System.Xml.XmlDocument.xml", + "ref/dotnet/it/System.Xml.XmlDocument.xml", + "ref/dotnet/ja/System.Xml.XmlDocument.xml", + "ref/dotnet/ko/System.Xml.XmlDocument.xml", + "ref/dotnet/ru/System.Xml.XmlDocument.xml", + "ref/dotnet/System.Xml.XmlDocument.dll", + "ref/dotnet/System.Xml.XmlDocument.xml", + "ref/dotnet/zh-hans/System.Xml.XmlDocument.xml", + "ref/dotnet/zh-hant/System.Xml.XmlDocument.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Xml.XmlDocument.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "System.Xml.XmlDocument.nuspec" + ] + }, + "System.Xml.XmlSerializer/4.0.10": { + "sha512": "OKhE6vruk88z/hl0lmfrMvXteTASgJUagu6PT6S10i9uLbvDR3pTwB6jVgiwa2D2qtTB+eneZbS9jljhPXhTtg==", + "type": "Package", + "files": [ + "[Content_Types].xml", + "_rels/.rels", + "lib/DNXCore50/System.Xml.XmlSerializer.dll", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/netcore50/System.Xml.XmlSerializer.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "package/services/metadata/core-properties/1cffc42bca944f1d81ef3c3abdb0f0be.psmdcp", + "ref/dotnet/de/System.Xml.XmlSerializer.xml", + "ref/dotnet/es/System.Xml.XmlSerializer.xml", + "ref/dotnet/fr/System.Xml.XmlSerializer.xml", + "ref/dotnet/it/System.Xml.XmlSerializer.xml", + "ref/dotnet/ja/System.Xml.XmlSerializer.xml", + "ref/dotnet/ko/System.Xml.XmlSerializer.xml", + "ref/dotnet/ru/System.Xml.XmlSerializer.xml", + "ref/dotnet/System.Xml.XmlSerializer.dll", + "ref/dotnet/System.Xml.XmlSerializer.xml", + "ref/dotnet/zh-hans/System.Xml.XmlSerializer.xml", + "ref/dotnet/zh-hant/System.Xml.XmlSerializer.xml", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "runtime.json", + "runtimes/win8-aot/lib/netcore50/System.Xml.XmlSerializer.dll", + "System.Xml.XmlSerializer.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "": [ + "Microsoft.NETCore.UniversalWindowsPlatform >= 5.0.0" + ], + "UAP,Version=v10.0": [] + } +} \ No newline at end of file diff --git a/README.md b/README.md index f707ae7..3524e05 100644 --- a/README.md +++ b/README.md @@ -1 +1,51 @@ -# Holobot \ No newline at end of file +# HoloBotDemo # +本项目使用 [Bing Speech API](https://azure.microsoft.com/en-us/services/cognitive-services/speech/), [Bot Framework](https://dev.botframework.com/), [LUIS](https://www.luis.ai/home/index) 实现在Hololens端应用内的中文语音问答流程 + +本项目中使用到的LUIS及Bot Framework相关后端代码请参考 [BotDemo](https://github.com/leonlj/BotDemo) 中的 [VendingMachineBotDemo](https://github.com/leonlj/BotDemo/tree/master/VendingMachineBotDemo) + +### 文件说明 ### +*HoloBot* 文件夹中包含HoloLens客户端Unity工程 + +### 准备工作 ### +本工程可以直接使用Unity打开,编译并部署到HoloLens设备中运行 +如需使用自定义Bot和LUIS后端,请下载 [VendingMachineBotDemo](https://github.com/leonlj/BotDemo/tree/master/VendingMachineBotDemo) 代码,订阅 *Bot Framework, LUIS* 的KEY,并在代码的相应位置进行替换 +代码中提供的 *Bing Speech* 的KEY为免费订阅,可以自行申请并在代码的相应位置进行替换 + +#### *Bing Speech API* #### +1、进入 [申请地址](https://azure.microsoft.com/zh-cn/try/cognitive-services/?api=speech-api) ,点击创建,登陆并获取Subscription Key +![](/Screenshots/1.jpg) + +2、修改 *HoloBot\Assets\Scripts\SpeechToText.cs*,添加Subscription Key +![](/Screenshots/2.jpg) + +#### *Bot Framework* #### +1、进入 [Bot管理后台](https://dev.botframework.com/bots) 登陆并创建Bot,获取BotId, AppId, AppPassword +![](/Screenshots/3.jpg) + +2、修改下载的BotDemo项目中的 *[BotDemo/VendingMachineBotDemo/Bot Application2/Web.config](https://github.com/leonlj/BotDemo/blob/master/VendingMachineBotDemo/Bot%20Application2/Web.config)*,添加BotId,AppId,AppPassword +![](/Screenshots/4.jpg) + +3、添加Direct Line Channel +![](/Screenshots/5.jpg) + +4、获取Direct Line Key +![](/Screenshots/6.jpg) + +5、修改 *HoloBot\Assets\Scripts\BotService.cs* ,添加Direct Line Key +![](/Screenshots/7.jpg) + +#### *LUIS* #### +1、进入 [LUIS管理后台](https://www.luis.ai/applications) ,新增LUIS App   +![](/Screenshots/8.jpg) + +2、获取 LUIS App Id 和 LUIS Endpoint Key +![](/Screenshots/9.jpg) + +![](/Screenshots/10.jpg) + +3、修改下载的BotDemo项目中的 *[BotDemo/VendingMachineBotDemo/Bot Application2/LUIS.cs](https://github.com/leonlj/BotDemo/blob/master/VendingMachineBotDemo/Bot%20Application2/LUIS.cs)*,添加Luis AppId和Key +![](/Screenshots/11.jpg) + +### 参考资料 ### +[Bing Speech API文档](https://docs.microsoft.com/zh-cn/azure/cognitive-services/speech/getstarted/getstartedrest) +[Bot Framework API文档](https://docs.botframework.com/en-us/restapi/directline3/#navtitle) diff --git a/Screenshots/1.jpg b/Screenshots/1.jpg new file mode 100644 index 0000000..2640f15 Binary files /dev/null and b/Screenshots/1.jpg differ diff --git a/Screenshots/10.jpg b/Screenshots/10.jpg new file mode 100644 index 0000000..3adecea Binary files /dev/null and b/Screenshots/10.jpg differ diff --git a/Screenshots/11.jpg b/Screenshots/11.jpg new file mode 100644 index 0000000..9d75442 Binary files /dev/null and b/Screenshots/11.jpg differ diff --git a/Screenshots/12.jpg b/Screenshots/12.jpg new file mode 100644 index 0000000..a1d257e Binary files /dev/null and b/Screenshots/12.jpg differ diff --git a/Screenshots/13.jpg b/Screenshots/13.jpg new file mode 100644 index 0000000..8e2133a Binary files /dev/null and b/Screenshots/13.jpg differ diff --git a/Screenshots/14.jpg b/Screenshots/14.jpg new file mode 100644 index 0000000..cb6728a Binary files /dev/null and b/Screenshots/14.jpg differ diff --git a/Screenshots/15.jpg b/Screenshots/15.jpg new file mode 100644 index 0000000..cd138f3 Binary files /dev/null and b/Screenshots/15.jpg differ diff --git a/Screenshots/16.jpg b/Screenshots/16.jpg new file mode 100644 index 0000000..38b6018 Binary files /dev/null and b/Screenshots/16.jpg differ diff --git a/Screenshots/17.jpg b/Screenshots/17.jpg new file mode 100644 index 0000000..59a7740 Binary files /dev/null and b/Screenshots/17.jpg differ diff --git a/Screenshots/18.jpg b/Screenshots/18.jpg new file mode 100644 index 0000000..9c42e48 Binary files /dev/null and b/Screenshots/18.jpg differ diff --git a/Screenshots/19.jpg b/Screenshots/19.jpg new file mode 100644 index 0000000..4d2631b Binary files /dev/null and b/Screenshots/19.jpg differ diff --git a/Screenshots/2.jpg b/Screenshots/2.jpg new file mode 100644 index 0000000..c837499 Binary files /dev/null and b/Screenshots/2.jpg differ diff --git a/Screenshots/20.jpg b/Screenshots/20.jpg new file mode 100644 index 0000000..31590f7 Binary files /dev/null and b/Screenshots/20.jpg differ diff --git a/Screenshots/21.jpg b/Screenshots/21.jpg new file mode 100644 index 0000000..9edba89 Binary files /dev/null and b/Screenshots/21.jpg differ diff --git a/Screenshots/22.jpg b/Screenshots/22.jpg new file mode 100644 index 0000000..f201c9f Binary files /dev/null and b/Screenshots/22.jpg differ diff --git a/Screenshots/23.jpg b/Screenshots/23.jpg new file mode 100644 index 0000000..15946cc Binary files /dev/null and b/Screenshots/23.jpg differ diff --git a/Screenshots/24.jpg b/Screenshots/24.jpg new file mode 100644 index 0000000..343dc45 Binary files /dev/null and b/Screenshots/24.jpg differ diff --git a/Screenshots/25.jpg b/Screenshots/25.jpg new file mode 100644 index 0000000..ab7ffcc Binary files /dev/null and b/Screenshots/25.jpg differ diff --git a/Screenshots/26.jpg b/Screenshots/26.jpg new file mode 100644 index 0000000..b00c30b Binary files /dev/null and b/Screenshots/26.jpg differ diff --git a/Screenshots/27.jpg b/Screenshots/27.jpg new file mode 100644 index 0000000..4eabbfb Binary files /dev/null and b/Screenshots/27.jpg differ diff --git a/Screenshots/28.jpg b/Screenshots/28.jpg new file mode 100644 index 0000000..40e7fa8 Binary files /dev/null and b/Screenshots/28.jpg differ diff --git a/Screenshots/29.jpg b/Screenshots/29.jpg new file mode 100644 index 0000000..411ce8e Binary files /dev/null and b/Screenshots/29.jpg differ diff --git a/Screenshots/3.jpg b/Screenshots/3.jpg new file mode 100644 index 0000000..769b7aa Binary files /dev/null and b/Screenshots/3.jpg differ diff --git a/Screenshots/30.jpg b/Screenshots/30.jpg new file mode 100644 index 0000000..9863c10 Binary files /dev/null and b/Screenshots/30.jpg differ diff --git a/Screenshots/31.jpg b/Screenshots/31.jpg new file mode 100644 index 0000000..9ec63a3 Binary files /dev/null and b/Screenshots/31.jpg differ diff --git a/Screenshots/32.jpg b/Screenshots/32.jpg new file mode 100644 index 0000000..62cc64b Binary files /dev/null and b/Screenshots/32.jpg differ diff --git a/Screenshots/33.jpg b/Screenshots/33.jpg new file mode 100644 index 0000000..d54ed5a Binary files /dev/null and b/Screenshots/33.jpg differ diff --git a/Screenshots/34.jpg b/Screenshots/34.jpg new file mode 100644 index 0000000..eb80a10 Binary files /dev/null and b/Screenshots/34.jpg differ diff --git a/Screenshots/35.jpg b/Screenshots/35.jpg new file mode 100644 index 0000000..0c246a4 Binary files /dev/null and b/Screenshots/35.jpg differ diff --git a/Screenshots/36.jpg b/Screenshots/36.jpg new file mode 100644 index 0000000..4334352 Binary files /dev/null and b/Screenshots/36.jpg differ diff --git a/Screenshots/37.jpg b/Screenshots/37.jpg new file mode 100644 index 0000000..b8b5131 Binary files /dev/null and b/Screenshots/37.jpg differ diff --git a/Screenshots/38.jpg b/Screenshots/38.jpg new file mode 100644 index 0000000..d00c9ae Binary files /dev/null and b/Screenshots/38.jpg differ diff --git a/Screenshots/39.jpg b/Screenshots/39.jpg new file mode 100644 index 0000000..de70889 Binary files /dev/null and b/Screenshots/39.jpg differ diff --git a/Screenshots/4.jpg b/Screenshots/4.jpg new file mode 100644 index 0000000..f3c2a97 Binary files /dev/null and b/Screenshots/4.jpg differ diff --git a/Screenshots/40.jpg b/Screenshots/40.jpg new file mode 100644 index 0000000..f1f6732 Binary files /dev/null and b/Screenshots/40.jpg differ diff --git a/Screenshots/41.jpg b/Screenshots/41.jpg new file mode 100644 index 0000000..0a940b1 Binary files /dev/null and b/Screenshots/41.jpg differ diff --git a/Screenshots/42.jpg b/Screenshots/42.jpg new file mode 100644 index 0000000..4c44c67 Binary files /dev/null and b/Screenshots/42.jpg differ diff --git a/Screenshots/43.jpg b/Screenshots/43.jpg new file mode 100644 index 0000000..edb91d3 Binary files /dev/null and b/Screenshots/43.jpg differ diff --git a/Screenshots/44.jpg b/Screenshots/44.jpg new file mode 100644 index 0000000..f4df6cc Binary files /dev/null and b/Screenshots/44.jpg differ diff --git a/Screenshots/45.jpg b/Screenshots/45.jpg new file mode 100644 index 0000000..a8dab14 Binary files /dev/null and b/Screenshots/45.jpg differ diff --git a/Screenshots/46.jpg b/Screenshots/46.jpg new file mode 100644 index 0000000..b9c552b Binary files /dev/null and b/Screenshots/46.jpg differ diff --git a/Screenshots/47.jpg b/Screenshots/47.jpg new file mode 100644 index 0000000..4859c52 Binary files /dev/null and b/Screenshots/47.jpg differ diff --git a/Screenshots/48.jpg b/Screenshots/48.jpg new file mode 100644 index 0000000..d1d6863 Binary files /dev/null and b/Screenshots/48.jpg differ diff --git a/Screenshots/49.jpg b/Screenshots/49.jpg new file mode 100644 index 0000000..d1a1963 Binary files /dev/null and b/Screenshots/49.jpg differ diff --git a/Screenshots/5.jpg b/Screenshots/5.jpg new file mode 100644 index 0000000..9c5d6d1 Binary files /dev/null and b/Screenshots/5.jpg differ diff --git a/Screenshots/6.jpg b/Screenshots/6.jpg new file mode 100644 index 0000000..dc60a17 Binary files /dev/null and b/Screenshots/6.jpg differ diff --git a/Screenshots/7.jpg b/Screenshots/7.jpg new file mode 100644 index 0000000..088b092 Binary files /dev/null and b/Screenshots/7.jpg differ diff --git a/Screenshots/8.jpg b/Screenshots/8.jpg new file mode 100644 index 0000000..60bb1e3 Binary files /dev/null and b/Screenshots/8.jpg differ diff --git a/Screenshots/9.jpg b/Screenshots/9.jpg new file mode 100644 index 0000000..484bbd7 Binary files /dev/null and b/Screenshots/9.jpg differ