Game.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using Base;
  5. namespace Model
  6. {
  7. public static class Game
  8. {
  9. private static HashSet<Disposer> disposers;
  10. private static EntityEventManager entityEventManager;
  11. public static TPoller Poller { get; } = new TPoller();
  12. private static Scene scene;
  13. public static Scene Scene
  14. {
  15. get
  16. {
  17. if (scene == null)
  18. {
  19. scene = new Scene();
  20. #if SERVER
  21. scene.AddComponent<EventComponent>();
  22. #else
  23. scene.AddComponent<EventComponent>();
  24. #endif
  25. scene.AddComponent<TimerComponent>();
  26. }
  27. return scene;
  28. }
  29. }
  30. public static HashSet<Disposer> Disposers
  31. {
  32. get
  33. {
  34. if (disposers == null)
  35. {
  36. disposers = new HashSet<Disposer>();
  37. }
  38. return disposers;
  39. }
  40. }
  41. public static void CloseScene()
  42. {
  43. scene.Dispose();
  44. scene = null;
  45. }
  46. public static void ClearDisposers()
  47. {
  48. foreach (Disposer disposer in Disposers)
  49. {
  50. disposer.Dispose();
  51. }
  52. disposers.Clear();
  53. disposers = null;
  54. }
  55. public static EntityEventManager EntityEventManager
  56. {
  57. get
  58. {
  59. if (entityEventManager == null)
  60. {
  61. entityEventManager = new EntityEventManager();
  62. }
  63. return entityEventManager;
  64. }
  65. set
  66. {
  67. entityEventManager = value;
  68. }
  69. }
  70. public static string DisposerInfo()
  71. {
  72. var info = new Dictionary<string, int>();
  73. foreach (Disposer disposer in Disposers)
  74. {
  75. if (info.ContainsKey(disposer.GetType().Name))
  76. {
  77. info[disposer.GetType().Name] += 1;
  78. }
  79. else
  80. {
  81. info[disposer.GetType().Name] = 1;
  82. }
  83. }
  84. info = info.OrderByDescending(s => s.Value).ToDictionary(p => p.Key, p => p.Value);
  85. StringBuilder sb = new StringBuilder();
  86. sb.Append("\r\n");
  87. foreach (string key in info.Keys)
  88. {
  89. sb.Append($"{info[key],10} {key}\r\n");
  90. }
  91. return sb.ToString();
  92. }
  93. }
  94. }