// /*=============================================================================== // Copyright (C) 2020 PhantomsXR Ltd. All Rights Reserved. // // This file is part of the AR-MOD SDK. // // The AR-MOD SDK cannot be copied, distributed, or made available to // third-parties for commercial purposes without written permission of PhantomsXR Ltd. // // Contact info@phantomsxr.com for licensing requests. // ===============================================================================*/ using System.Collections.Generic; using System.Threading.Tasks; using Phantom.XRMOD.ActionNotification.Runtime; using Phantom.XRMOD.UnityFusion.Runtime.CodeHook; using Unity.Profiling; using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; namespace Phantom.XRMOD.UnityFusion.Runtime.CodeHook { public class BinderManager : MonoBehaviour { public static void Instantiate() { _INSTANCE = new GameObject("ClassBindMgr").AddComponent(); DontDestroyOnLoad(_INSTANCE); } private static BinderManager _INSTANCE; private static List _MONO_BINDERS; private void Awake() { if (_INSTANCE != null) { Destroy(this); } _MONO_BINDERS = new List(0); DoBind(); } public static async void DoBind(List _monoBinders) { _monoBinders.Reverse(); foreach (MonoBinder tmp_MonoBinder in _monoBinders) { tmp_MonoBinder.ScriptList.Reverse(); } foreach (var tmp_MonoBinder in _monoBinders) { foreach (MonoData tmp_MonoScript in tmp_MonoBinder.ScriptList) { if (tmp_MonoScript == null || tmp_MonoScript.Added) { continue; } tmp_MonoBinder.AddRuntimeClass(tmp_MonoScript); } } foreach (var tmp_MonoBinder in _monoBinders) { foreach (MonoData tmp_MonoScript in tmp_MonoBinder.ScriptList) { if (tmp_MonoScript == null || tmp_MonoScript.BoundData) { continue; } await tmp_MonoBinder.SetValues(tmp_MonoScript); } } foreach (var tmp_MonoBinder in _monoBinders) { foreach (MonoData tmp_MonoScript in tmp_MonoBinder.ScriptList) { if (tmp_MonoScript == null) continue; if (tmp_MonoScript.Activated) { continue; } tmp_MonoBinder.Active(tmp_MonoScript); } } foreach (var tmp_MonoBinder in _monoBinders) { if (!tmp_MonoBinder) continue; tmp_MonoBinder.Remove(); tmp_MonoBinder.SetupGameObjectRenderState(tmp_MonoBinder.DefaultRenderState == RenderStateType.Visiable); } } public static async void DoBind(MonoBinder _monoBinder) { _monoBinder.ScriptList.Reverse(); foreach (MonoData tmp_MonoScript in _monoBinder.ScriptList) { if (tmp_MonoScript == null || tmp_MonoScript.Added) { continue; } _monoBinder.AddRuntimeClass(tmp_MonoScript); } foreach (MonoData tmp_MonoScript in _monoBinder.ScriptList) { if (tmp_MonoScript == null || tmp_MonoScript.BoundData) { continue; } await _monoBinder.SetValues(tmp_MonoScript); } foreach (MonoData tmp_MonoScript in _monoBinder.ScriptList) { if (tmp_MonoScript == null) continue; if (tmp_MonoScript.Activated) { continue; } _monoBinder.Active(tmp_MonoScript); } if (!_monoBinder) return; _monoBinder.SetupGameObjectRenderState(_monoBinder.DefaultRenderState == RenderStateType.Visiable); _monoBinder.Remove(); } public static void DoBind() { _MONO_BINDERS ??= new List(0); var tmp_AllMonoBinders = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.InstanceID); _MONO_BINDERS.AddRange(tmp_AllMonoBinders); DoBind(_MONO_BINDERS); } } }