2021-03-16 18:12:39 +11:00
|
|
|
|
using System;
|
2021-03-25 18:39:35 +11:00
|
|
|
|
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;
|
2021-03-18 17:17:29 +11:00
|
|
|
|
using UnityEngine;
|
2021-04-07 17:20:09 +10:00
|
|
|
|
using UnityEngine.EventSystems;
|
2021-03-18 17:17:29 +11:00
|
|
|
|
using UnityEngine.SceneManagement;
|
2021-03-30 19:50:04 +11:00
|
|
|
|
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;
|
|
|
|
|
|
2021-03-18 17:17:29 +11:00
|
|
|
|
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);
|
2021-03-25 18:39:35 +11:00
|
|
|
|
|
2021-03-18 17:17:29 +11:00
|
|
|
|
// 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);
|
|
|
|
|
|
2021-03-18 17:17:29 +11:00
|
|
|
|
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);
|
|
|
|
|
|
2021-03-18 17:17:29 +11:00
|
|
|
|
public abstract int GetSceneHandle(Scene scene);
|
|
|
|
|
|
|
|
|
|
public abstract GameObject[] GetRootGameObjects(Scene scene);
|
|
|
|
|
|
|
|
|
|
public abstract int GetRootCount(Scene scene);
|
2021-03-30 19:50:04 +11:00
|
|
|
|
|
2021-04-10 18:25:13 +10:00
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
}
|