Files
UnityExplorer_Fix/src/Loader/Standalone/ExplorerStandalone.cs

106 lines
4.3 KiB
C#
Raw Normal View History

2021-03-11 17:57:58 +11:00
#if STANDALONE
using HarmonyLib;
using System;
using System.IO;
using System.Reflection;
using UnityEngine;
using UnityExplorer.Config;
using UnityEngine.EventSystems;
2021-12-02 18:35:46 +11:00
using UniverseLib.Input;
2022-03-21 21:25:51 +11:00
using UnityExplorer.Loader.Standalone;
#if CPP
using UnhollowerRuntimeLib;
#endif
2021-03-11 17:57:58 +11:00
namespace UnityExplorer
{
public class ExplorerStandalone : IExplorerLoader
{
2022-03-21 21:25:51 +11:00
public static ExplorerStandalone Instance { get; protected set; }
/// <summary>
/// Invoked whenever Explorer logs something. Subscribe to this to handle logging.
/// </summary>
public static event Action<string, LogType> OnLog;
public string UnhollowedModulesFolder => unhollowedPath;
private string unhollowedPath;
public ConfigHandler ConfigHandler => configHandler;
internal StandaloneConfigHandler configHandler;
public string ExplorerFolderName => ExplorerCore.DEFAULT_EXPLORER_FOLDER_NAME;
public string ExplorerFolderDestination
2022-03-21 21:25:51 +11:00
{
get
{
CheckExplorerFolder();
return explorerFolderDest;
2022-03-21 21:25:51 +11:00
}
}
protected static string explorerFolderDest;
2022-03-21 21:25:51 +11:00
Action<object> IExplorerLoader.OnLogMessage => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Log); };
Action<object> IExplorerLoader.OnLogWarning => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Warning); };
Action<object> IExplorerLoader.OnLogError => (object log) => { OnLog?.Invoke(log?.ToString() ?? "", LogType.Error); };
/// <summary>
/// Call this to initialize UnityExplorer without adding a log listener or Unhollowed modules path.
/// The default Unhollowed path "sinai-dev-UnityExplorer\Modules\" will be used.
/// </summary>
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
public static ExplorerStandalone CreateInstance() => CreateInstance(null, null);
/// <summary>
/// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages, without specifying an Unhollowed modules path.
/// The default Unhollowed path "sinai-dev-UnityExplorer\Modules\" will be used.
/// </summary>
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
public static ExplorerStandalone CreateInstance(Action<string, LogType> logListener) => CreateInstance(logListener, null);
/// <summary>
/// Call this to initialize UnityExplorer with the provided log listener and Unhollowed modules path.
/// </summary>
/// <param name="logListener">Your log listener to handle UnityExplorer logs.</param>
/// <param name="unhollowedModulesPath">The path of the Unhollowed modules, either relative or absolute.</param>
/// <returns>The new (or active, if one exists) instance of ExplorerStandalone.</returns>
public static ExplorerStandalone CreateInstance(Action<string, LogType> logListener, string unhollowedModulesPath)
2021-03-11 17:57:58 +11:00
{
if (Instance != null)
return Instance;
var instance = new ExplorerStandalone();
instance.Init();
instance.CheckExplorerFolder();
2021-07-21 04:13:42 +10:00
if (logListener != null)
OnLog += logListener;
2021-03-11 17:57:58 +11:00
if (string.IsNullOrEmpty(unhollowedModulesPath) || !Directory.Exists(unhollowedModulesPath))
instance.unhollowedPath = Path.Combine(ExplorerCore.ExplorerFolder, "Modules");
else
2022-03-21 21:25:51 +11:00
instance.unhollowedPath = unhollowedModulesPath;
return instance;
2021-03-11 17:57:58 +11:00
}
2022-03-21 21:25:51 +11:00
internal void Init()
{
Instance = this;
2022-03-21 21:25:51 +11:00
configHandler = new StandaloneConfigHandler();
ExplorerCore.Init(this);
}
2022-03-21 21:25:51 +11:00
protected virtual void CheckExplorerFolder()
{
if (explorerFolderDest == null)
{
string assemblyLocation = Uri.UnescapeDataString(new Uri(typeof(ExplorerCore).Assembly.CodeBase).AbsolutePath);
explorerFolderDest = Path.GetDirectoryName(assemblyLocation);
}
}
2021-03-11 17:57:58 +11:00
}
}
#endif