using System; using System.Diagnostics; using System.Globalization; using System.IO; using CefSharp; namespace VRCX { public class AppApiVr { public static readonly AppApiVr Instance; static AppApiVr() { Instance = new AppApiVr(); } public void Init() { // Create Instance before Cef tries to bind it } public void VrInit() { if (MainForm.Instance?.Browser != null && !MainForm.Instance.Browser.IsLoading && MainForm.Instance.Browser.CanExecuteJavascriptInMainFrame) MainForm.Instance.Browser.ExecuteScriptAsync("$app.vrInit", ""); } public void ToggleSystemMonitor(bool enabled) { SystemMonitor.Instance.Start(enabled); } /// /// Returns the current CPU usage as a percentage. /// /// The current CPU usage as a percentage. public float CpuUsage() { return SystemMonitor.Instance.CpuUsage; } /// /// Returns an array of arrays containing information about the connected VR devices. /// Each sub-array contains the type of device and its current state /// /// An array of arrays containing information about the connected VR devices. public string[][] GetVRDevices() { return Program.VRCXVRInstance.GetDevices(); } /// /// Returns the number of milliseconds that the system has been running. /// /// The number of milliseconds that the system has been running. public double GetUptime() { return SystemMonitor.Instance.UpTime; } /// /// Returns the current language of the operating system. /// /// The current language of the operating system. public string CurrentCulture() { return CultureInfo.CurrentCulture.ToString(); } /// /// Returns the file path of the custom user js file, if it exists. /// /// The file path of the custom user js file, or an empty string if it doesn't exist. public string CustomVrScriptPath() { var output = string.Empty; var filePath = Path.Join(Program.AppDataDirectory, "customvr.js"); if (File.Exists(filePath)) output = filePath; return output; } public bool IsRunningUnderWine() { return Wine.GetIfWine(); } } }