Game.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using Model;
  5. namespace Base
  6. {
  7. public static class Game
  8. {
  9. private static readonly HashSet<Disposer> disposers = new HashSet<Disposer>();
  10. private static DisposerEventManager disposerEventManager;
  11. private static Scene scene;
  12. public static Scene Scene
  13. {
  14. get
  15. {
  16. return scene ?? (scene = new Scene());
  17. }
  18. }
  19. public static void CloseScene()
  20. {
  21. scene.Dispose();
  22. scene = null;
  23. }
  24. public static void ClearDisposers()
  25. {
  26. foreach (Disposer disposer in disposers)
  27. {
  28. disposer.Dispose();
  29. }
  30. disposers.Clear();
  31. }
  32. public static DisposerEventManager DisposerEventManager
  33. {
  34. get
  35. {
  36. return disposerEventManager ?? (disposerEventManager = new DisposerEventManager());
  37. }
  38. }
  39. public static void Add(Disposer disposer)
  40. {
  41. disposers.Add(disposer);
  42. disposerEventManager.Add(disposer);
  43. }
  44. public static void Remove(Disposer disposer)
  45. {
  46. disposers.Remove(disposer);
  47. disposerEventManager.Remove(disposer);
  48. }
  49. public static void Update()
  50. {
  51. disposerEventManager.Update();
  52. }
  53. public static string DisposerInfo()
  54. {
  55. var info = new Dictionary<string, int>();
  56. foreach (Disposer disposer in disposers)
  57. {
  58. if (info.ContainsKey(disposer.GetType().Name))
  59. {
  60. info[disposer.GetType().Name] += 1;
  61. }
  62. else
  63. {
  64. info[disposer.GetType().Name] = 1;
  65. }
  66. }
  67. info = info.OrderByDescending(s => s.Value).ToDictionary(p => p.Key, p => p.Value);
  68. StringBuilder sb = new StringBuilder();
  69. sb.Append("\r\n");
  70. foreach (string key in info.Keys)
  71. {
  72. sb.Append($"{info[key],10} {key}\r\n");
  73. }
  74. return sb.ToString();
  75. }
  76. }
  77. }