using UnityEngine; using System.Collections; using System.Collections.Generic; public class SyncManager : MonoBehaviour { public enum SyncType { Chat, } private List list; void Awake() { DontDestroyOnLoad (this.gameObject); } // Update is called once per frame void FixedUpdate () { for(int i=0; i (); instance.list = new List (); } return instance; } public static void Add(SyncType syncType, CallBackUtil.SimpleCallBack callBack, float interval) { SyncItem item = new SyncItem (); item.syncType = syncType; item.callBack = callBack; item.interval = interval; GetInstance().list.Add (item); } public static void Remove(SyncType syncType) { List list = GetInstance ().list; for(int i=list.Count-1; i>=0; i--) { SyncItem item = list [i]; if (item.syncType == syncType) list.RemoveAt (i); } } public static void ResetTime(SyncType syncType) { List list = GetInstance ().list; for(int i=0; i list = GetInstance ().list; for(int i=0; i minInterval) item.Sync (true); } } } public class SyncItem { public SyncManager.SyncType syncType; public float interval; public CallBackUtil.SimpleCallBack callBack; private float lastSyncTime; public SyncItem() { lastSyncTime = GameTime.time; } public void ResetTime() { lastSyncTime = GameTime.time; } public void Sync(bool forceSync=false) { if(forceSync || GetTimeFromLastSync() > interval) { callBack (); ResetTime (); } } public float GetTimeFromLastSync() { return GameTime.time - lastSyncTime; } }