SyncManager.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class SyncManager : MonoBehaviour
  5. {
  6. public enum SyncType
  7. {
  8. Chat,
  9. }
  10. private List<SyncItem> list;
  11. void Awake()
  12. {
  13. DontDestroyOnLoad (this.gameObject);
  14. }
  15. // Update is called once per frame
  16. void FixedUpdate ()
  17. {
  18. for(int i=0; i<list.Count; i++)
  19. {
  20. list [i].Sync ();
  21. }
  22. }
  23. private static SyncManager instance;
  24. public static SyncManager GetInstance()
  25. {
  26. if (instance == null) {
  27. GameObject gameObj = new GameObject ("SyncManager");
  28. instance = gameObj.AddComponent<SyncManager> ();
  29. instance.list = new List<SyncItem> ();
  30. }
  31. return instance;
  32. }
  33. public static void Add(SyncType syncType, CallBackUtil.SimpleCallBack callBack, float interval)
  34. {
  35. SyncItem item = new SyncItem ();
  36. item.syncType = syncType;
  37. item.callBack = callBack;
  38. item.interval = interval;
  39. GetInstance().list.Add (item);
  40. }
  41. public static void Remove(SyncType syncType)
  42. {
  43. List<SyncItem> list = GetInstance ().list;
  44. for(int i=list.Count-1; i>=0; i--)
  45. {
  46. SyncItem item = list [i];
  47. if (item.syncType == syncType)
  48. list.RemoveAt (i);
  49. }
  50. }
  51. public static void ResetTime(SyncType syncType)
  52. {
  53. List<SyncItem> list = GetInstance ().list;
  54. for(int i=0; i<list.Count; i++)
  55. {
  56. SyncItem item = list [i];
  57. if(item.syncType == syncType)
  58. item.ResetTime ();
  59. }
  60. }
  61. public static void Sync(SyncType syncType, float minInterval=0)
  62. {
  63. List<SyncItem> list = GetInstance ().list;
  64. for(int i=0; i<list.Count; i++)
  65. {
  66. SyncItem item = list [i];
  67. if (item.syncType == syncType && item.GetTimeFromLastSync () > minInterval)
  68. item.Sync (true);
  69. }
  70. }
  71. }
  72. public class SyncItem
  73. {
  74. public SyncManager.SyncType syncType;
  75. public float interval;
  76. public CallBackUtil.SimpleCallBack callBack;
  77. private float lastSyncTime;
  78. public SyncItem()
  79. {
  80. lastSyncTime = GameTime.time;
  81. }
  82. public void ResetTime()
  83. {
  84. lastSyncTime = GameTime.time;
  85. }
  86. public void Sync(bool forceSync=false)
  87. {
  88. if(forceSync || GetTimeFromLastSync() > interval)
  89. {
  90. callBack ();
  91. ResetTime ();
  92. }
  93. }
  94. public float GetTimeFromLastSync()
  95. {
  96. return GameTime.time - lastSyncTime;
  97. }
  98. }