using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using BoltInternal; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Scripting; namespace Bolt { [Preserve] public static class BoltDynamicData { public static void Setup() { BoltNetworkInternal.DebugDrawer = new BoltInternal.UnityDebugDrawer(); #if UNITY_PRO_LICENSE BoltNetworkInternal.UsingUnityPro = true; #else BoltNetworkInternal.UsingUnityPro = false; #endif BoltNetworkInternal.GetActiveSceneIndex = GetActiveSceneIndex; BoltNetworkInternal.GetSceneName = GetSceneName; BoltNetworkInternal.GetSceneIndex = GetSceneIndex; BoltNetworkInternal.GetGlobalBehaviourTypes = GetGlobalBehaviourTypes; BoltNetworkInternal.EnvironmentSetup = BoltInternal.BoltNetworkInternal_User.EnvironmentSetup; BoltNetworkInternal.EnvironmentReset = BoltInternal.BoltNetworkInternal_User.EnvironmentReset; // Setup Unity Config #if ENABLE_IL2CPP UnitySettings.IsBuildIL2CPP = true; #elif ENABLE_MONO UnitySettings.IsBuildMono = true; #elif ENABLE_DOTNET UnitySettings.IsBuildDotNet = true; #endif UnitySettings.CurrentPlatform = Application.platform; } static int GetActiveSceneIndex() { return SceneManager.GetActiveScene().buildIndex; } static int GetSceneIndex(string name) { return BoltInternal.BoltScenes_Internal.GetSceneIndex(name); } static string GetSceneName(int index) { return BoltInternal.BoltScenes_Internal.GetSceneName(index); } static public List> GetGlobalBehaviourTypes() { List> result = new List>(); try { var asmIter = BoltAssemblies.AllAssemblies; while (asmIter.MoveNext()) { var asm = GetAssemblyByName(asmIter.Current); if (asm == null) { continue; } foreach (Type type in asm.GetTypes()) { if (typeof(MonoBehaviour).IsAssignableFrom(type)) { var attrs = (BoltGlobalBehaviourAttribute[]) type.GetCustomAttributes(typeof(BoltGlobalBehaviourAttribute), false); if (attrs.Length == 1) { result.Add(new STuple(attrs[0], type)); } } } } } catch (Exception e) { BoltLog.Exception(e); } return result; } static Assembly GetAssemblyByName(string name) { return AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(assembly => assembly.GetName().Name == name); } } }