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

70 lines
2.8 KiB

using System;
using System.IO;
using UnityEngine;
using Version = SemVer.Version;
namespace IPA.Utilities
{
/// <summary>
/// Provides some basic utility methods and properties of Beat Saber
/// </summary>
public static class BeatSaber
{
private static Version _gameVersion;
/// <summary>
/// Provides the current game version
/// </summary>
public static Version GameVersion => _gameVersion ?? (_gameVersion = new Version(Application.version, true));
/// <summary>
/// The different types of releases of the game.
/// </summary>
public enum Release
{
/// <summary>
/// Indicates a Steam release.
/// </summary>
Steam,
/// <summary>
/// Indicates an Oculus release.
/// </summary>
Oculus
}
private static Release? _releaseCache;
/// <summary>
/// Gets the <see cref="Release"/> type of this installation of Beat Saber
/// </summary>
public static Release ReleaseType => (_releaseCache ?? (_releaseCache = FindSteamVRAsset() ? Release.Steam : Release.Oculus)).Value;
/// <summary>
/// The path to the Beat Saber install dir
/// </summary>
public static string InstallPath => Environment.CurrentDirectory;
/// <summary>
/// The path to the `Libs` folder. Use only if necessary.
/// </summary>
public static string LibraryPath => Path.Combine(InstallPath, "Libs");
/// <summary>
/// The path to the `Libs\Native` folder. Use only if necessary.
/// </summary>
public static string NativeLibraryPath => Path.Combine(LibraryPath, "Native");
/// <summary>
/// The directory to load plugins from.
/// </summary>
public static string PluginsPath => Path.Combine(InstallPath, "Plugins");
/// <summary>
/// The path to the `UserData` folder.
/// </summary>
public static string UserDataPath => Path.Combine(InstallPath, "UserData");
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;
}
}
}