Seven is the number.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.6 KiB

4 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEngine;
  5. [InitializeOnLoad]
  6. public static class BoltExecutionOrderManager
  7. {
  8. static BoltExecutionOrderManager()
  9. {
  10. Dictionary<string, MonoScript> monoScripts = new Dictionary<string, MonoScript>();
  11. foreach (MonoScript monoScript in MonoImporter.GetAllRuntimeMonoScripts())
  12. {
  13. try
  14. {
  15. switch (monoScript.name)
  16. {
  17. case "BoltPoll":
  18. SetExecutionOrder(monoScript, -10000);
  19. break;
  20. case "BoltSend":
  21. SetExecutionOrder(monoScript, +10000);
  22. break;
  23. case "BoltEntity":
  24. SetExecutionOrder(monoScript, -2500);
  25. break;
  26. default:
  27. if (monoScripts.ContainsKey(monoScript.name))
  28. {
  29. monoScripts[monoScript.name] = monoScript;
  30. }
  31. else
  32. {
  33. monoScripts.Add(monoScript.name, monoScript);
  34. }
  35. break;
  36. }
  37. }
  38. catch { }
  39. }
  40. foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
  41. {
  42. foreach (var type in asm.GetTypes())
  43. {
  44. if (monoScripts.ContainsKey(type.Name))
  45. {
  46. try
  47. {
  48. foreach (BoltExecutionOrderAttribute attribute in type.GetCustomAttributes(typeof(BoltExecutionOrderAttribute), false))
  49. {
  50. SetExecutionOrder(monoScripts[type.Name], attribute.executionOrder);
  51. }
  52. }
  53. catch (Exception exn)
  54. {
  55. BoltLog.Exception(exn);
  56. }
  57. }
  58. }
  59. }
  60. }
  61. static void SetExecutionOrder(MonoScript script, Int32 executionOrder)
  62. {
  63. if (MonoImporter.GetExecutionOrder(script) != executionOrder)
  64. {
  65. MonoImporter.SetExecutionOrder(script, executionOrder);
  66. }
  67. }
  68. }