using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using SemVer; using Version = SemVer.Version; namespace IPA.Utilities { /// /// Provides some basic utility methods and properties of Beat Saber /// public static class BeatSaber { private static Version _gameVersion = null; /// /// Provides the current game version /// public static Version GameVersion => _gameVersion ?? (_gameVersion = new Version(UnityEngine.Application.version)); /// /// The different types of releases of the game. /// public enum Release { /// /// Indicates a Steam release. /// Steam, /// /// Indicates an Oculus release. /// Oculus } private static Release? _releaseCache = null; /// /// Gets the type of this installation of Beat Saber /// public static Release ReleaseType => (_releaseCache ?? (_releaseCache = FindSteamVRAsset() ? Release.Steam : Release.Oculus)).Value; /// /// The path to the `Libs` folder. Use only if necessary. /// public static string LibraryPath => Path.Combine(Environment.CurrentDirectory, "Libs"); /// /// The path to the `Libs\Native` folder. Use only if necessary. /// public static string NativeLibraryPath => Path.Combine(LibraryPath, "Native"); private static bool FindSteamVRAsset() { // these require assembly qualified names.... var SteamVRCamera = Type.GetType("SteamVR_Camera, Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", false); var SteamVRExternalCamera = Type.GetType("SteamVR_ExternalCamera, Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", false); var SteamVRFade = Type.GetType("SteamVR_Fade, Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", false); return SteamVRCamera != null && SteamVRExternalCamera != null && SteamVRFade != null; } } }