#if STANDALONE
using HarmonyLib;
using System;
using System.IO;
using System.Reflection;
using UnityEngine;
using UnityExplorer.Config;
using UnityExplorer.Loader.STANDALONE;
using UnityEngine.EventSystems;
using UniverseLib.Input;
#if CPP
using UnhollowerRuntimeLib;
#endif
namespace UnityExplorer
{
public class ExplorerStandalone : IExplorerLoader
{
///
/// Call this to initialize UnityExplorer without adding a log listener or Unhollowed modules path.
/// The default Unhollowed path "UnityExplorer\Modules\" will be used.
///
/// The new (or active, if one exists) instance of ExplorerStandalone.
public static ExplorerStandalone CreateInstance() => CreateInstance(null, null);
///
/// Call this to initialize UnityExplorer and add a listener for UnityExplorer's log messages, without specifying an Unhollowed modules path.
/// The default Unhollowed path "UnityExplorer\Modules\" will be used.
///
/// Your log listener to handle UnityExplorer logs.
/// The new (or active, if one exists) instance of ExplorerStandalone.
public static ExplorerStandalone CreateInstance(Action logListener) => CreateInstance(logListener, null);
///
/// Call this to initialize UnityExplorer with the provided log listener and Unhollowed modules path.
///
/// Your log listener to handle UnityExplorer logs.
/// The path of the Unhollowed modules, either relative or absolute.
/// The new (or active, if one exists) instance of ExplorerStandalone.
public static ExplorerStandalone CreateInstance(Action logListener, string unhollowedModulesPath)
{
if (Instance != null)
return Instance;
var instance = new ExplorerStandalone();
instance.Init();
instance.CheckExplorerFolder();
if (logListener != null)
OnLog += logListener;
if (string.IsNullOrEmpty(unhollowedModulesPath) || !Directory.Exists(unhollowedModulesPath))
instance._unhollowedPath = Path.Combine(instance.ExplorerFolder, "Modules");
else
instance._unhollowedPath = unhollowedModulesPath;
return instance;
}
public static ExplorerStandalone Instance { get; private set; }
///
/// Invoked whenever Explorer logs something. Subscribe to this to handle logging.
///
public static event Action OnLog;
public string UnhollowedModulesFolder => _unhollowedPath;
private string _unhollowedPath;
public ConfigHandler ConfigHandler => _configHandler;
private StandaloneConfigHandler _configHandler;
public string ExplorerFolder
{
get
{
CheckExplorerFolder();
return s_explorerFolder;
}
}
private static string s_explorerFolder;
Action