|
|
- using System;
- using System.Collections.Generic;
- using UnityEditor;
- using UnityEngine;
-
- [InitializeOnLoad]
- public static class BoltExecutionOrderManager
- {
- static BoltExecutionOrderManager()
- {
- Dictionary<string, MonoScript> monoScripts = new Dictionary<string, MonoScript>();
-
- foreach (MonoScript monoScript in MonoImporter.GetAllRuntimeMonoScripts())
- {
- try
- {
- switch (monoScript.name)
- {
- case "BoltPoll":
- SetExecutionOrder(monoScript, -10000);
- break;
-
- case "BoltSend":
- SetExecutionOrder(monoScript, +10000);
- break;
-
- case "BoltEntity":
- SetExecutionOrder(monoScript, -2500);
- break;
-
- default:
- if (monoScripts.ContainsKey(monoScript.name))
- {
- monoScripts[monoScript.name] = monoScript;
- }
- else
- {
- monoScripts.Add(monoScript.name, monoScript);
- }
- break;
- }
- }
- catch { }
- }
-
- foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
- {
- foreach (var type in asm.GetTypes())
- {
- if (monoScripts.ContainsKey(type.Name))
- {
- try
- {
- foreach (BoltExecutionOrderAttribute attribute in type.GetCustomAttributes(typeof(BoltExecutionOrderAttribute), false))
- {
- SetExecutionOrder(monoScripts[type.Name], attribute.executionOrder);
- }
- }
- catch (Exception exn)
- {
- BoltLog.Exception(exn);
- }
- }
- }
- }
- }
-
- static void SetExecutionOrder(MonoScript script, Int32 executionOrder)
- {
- if (MonoImporter.GetExecutionOrder(script) != executionOrder)
- {
- MonoImporter.SetExecutionOrder(script, executionOrder);
- }
- }
- }
|