ObjectEvents.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System.Collections.Generic;
  2. namespace Model
  3. {
  4. public sealed class ObjectEvents
  5. {
  6. private static ObjectEvents instance;
  7. private Queue<Disposer> loads = new Queue<Disposer>();
  8. private Queue<Disposer> loads2 = new Queue<Disposer>();
  9. private Queue<Disposer> updates = new Queue<Disposer>();
  10. private Queue<Disposer> updates2 = new Queue<Disposer>();
  11. private Queue<Disposer> lateUpdates = new Queue<Disposer>();
  12. private Queue<Disposer> lateUpdates2 = new Queue<Disposer>();
  13. public static ObjectEvents Instance
  14. {
  15. get
  16. {
  17. return instance ?? (instance = new ObjectEvents());
  18. }
  19. }
  20. public void Add(Disposer disposer)
  21. {
  22. if (disposer is ILoad)
  23. {
  24. loads.Enqueue(disposer);
  25. }
  26. if (disposer is IUpdate)
  27. {
  28. updates.Enqueue(disposer);
  29. }
  30. if (disposer is ILateUpdate)
  31. {
  32. lateUpdates.Enqueue(disposer);
  33. }
  34. }
  35. public void Load()
  36. {
  37. while (this.loads.Count > 0)
  38. {
  39. Disposer disposer = this.loads.Dequeue();
  40. if (disposer.Id == 0)
  41. {
  42. continue;
  43. }
  44. this.loads2.Enqueue(disposer);
  45. ((ILoad)disposer).Load();
  46. }
  47. ObjectHelper.Swap(ref this.loads, ref this.loads2);
  48. }
  49. public void Update()
  50. {
  51. while (this.updates.Count > 0)
  52. {
  53. Disposer disposer = this.updates.Dequeue();
  54. if (disposer.Id == 0)
  55. {
  56. continue;
  57. }
  58. this.updates2.Enqueue(disposer);
  59. ((IUpdate)disposer).Update();
  60. }
  61. ObjectHelper.Swap(ref this.updates, ref this.updates2);
  62. }
  63. public void LateUpdate()
  64. {
  65. while (this.lateUpdates.Count > 0)
  66. {
  67. Disposer disposer = this.lateUpdates.Dequeue();
  68. if (disposer.Id == 0)
  69. {
  70. continue;
  71. }
  72. this.lateUpdates2.Enqueue(disposer);
  73. ((ILateUpdate)disposer).LateUpdate();
  74. }
  75. ObjectHelper.Swap(ref this.lateUpdates, ref this.lateUpdates2);
  76. }
  77. }
  78. }