UnityExplorer/src/Core/Runtime/RuntimeProvider.cs

89 lines
2.6 KiB
C#
Raw Normal View History

2021-03-16 18:12:39 +11:00
using System;
using System.Collections;
2021-03-16 18:12:39 +11:00
using System.Collections.Generic;
using System.Linq;
2021-04-07 17:20:09 +10:00
using System.Reflection;
2021-03-16 18:12:39 +11:00
using System.Text;
using UnityEngine;
2021-04-07 17:20:09 +10:00
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
2021-04-07 17:20:09 +10:00
using UnityExplorer.Core.Runtime;
2021-03-16 18:12:39 +11:00
2021-04-07 17:20:09 +10:00
// Intentionally project-wide namespace so that its always easily accessible.
namespace UnityExplorer
2021-03-16 18:12:39 +11:00
{
public abstract class RuntimeProvider
{
public static RuntimeProvider Instance;
public ReflectionProvider Reflection;
public TextureUtilProvider TextureUtil;
2021-03-16 18:12:39 +11:00
public RuntimeProvider()
{
Initialize();
SetupEvents();
}
public static void Init() =>
#if CPP
2021-04-07 17:20:09 +10:00
Instance = new Core.Runtime.Il2Cpp.Il2CppProvider();
2021-03-16 18:12:39 +11:00
#else
2021-04-07 17:20:09 +10:00
Instance = new Core.Runtime.Mono.MonoProvider();
2021-03-16 18:12:39 +11:00
#endif
public abstract void Initialize();
public abstract void SetupEvents();
2021-04-07 17:20:09 +10:00
public abstract void StartCoroutine(IEnumerator routine);
public abstract void Update();
public virtual bool IsReferenceEqual(object a, object b) => ReferenceEquals(a, b);
// Unity API handlers
2021-04-07 17:20:09 +10:00
public abstract T AddComponent<T>(GameObject obj, Type type) where T : Component;
public abstract ScriptableObject CreateScriptable(Type type);
public abstract string LayerToName(int layer);
public abstract UnityEngine.Object[] FindObjectsOfTypeAll(Type type);
2021-04-07 17:20:09 +10:00
public abstract void GraphicRaycast(GraphicRaycaster raycaster, PointerEventData data, List<RaycastResult> list);
public abstract int GetSceneHandle(Scene scene);
public abstract GameObject[] GetRootGameObjects(Scene scene);
public abstract int GetRootCount(Scene scene);
public abstract void SetColorBlock(Selectable selectable, ColorBlock colors);
public abstract void SetColorBlock(Selectable selectable, Color? normal = null, Color? highlighted = null, Color? pressed = null);
2021-04-07 17:20:09 +10:00
public virtual void FindSingleton(string[] s_instanceNames, Type type, BindingFlags flags, List<object> instances)
{
// Look for a typical Instance backing field.
FieldInfo fi;
foreach (var name in s_instanceNames)
{
fi = type.GetField(name, flags);
if (fi != null)
{
var instance = fi.GetValue(null);
if (instance != null)
{
instances.Add(instance);
return;
}
}
}
}
2021-03-16 18:12:39 +11:00
}
}