123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class SyncManager : MonoBehaviour
- {
- public enum SyncType
- {
- Chat,
- }
- private List<SyncItem> list;
- void Awake()
- {
- DontDestroyOnLoad (this.gameObject);
- }
- // Update is called once per frame
- void FixedUpdate ()
- {
- for(int i=0; i<list.Count; i++)
- {
- list [i].Sync ();
- }
- }
- private static SyncManager instance;
- public static SyncManager GetInstance()
- {
- if (instance == null) {
- GameObject gameObj = new GameObject ("SyncManager");
- instance = gameObj.AddComponent<SyncManager> ();
- instance.list = new List<SyncItem> ();
- }
- 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<SyncItem> 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<SyncItem> list = GetInstance ().list;
- for(int i=0; i<list.Count; i++)
- {
- SyncItem item = list [i];
- if(item.syncType == syncType)
- item.ResetTime ();
- }
- }
- public static void Sync(SyncType syncType, float minInterval=0)
- {
- List<SyncItem> list = GetInstance ().list;
- for(int i=0; i<list.Count; i++)
- {
- SyncItem item = list [i];
- if (item.syncType == syncType && item.GetTimeFromLastSync () > 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;
- }
- }
|