コード例 #1
0
ファイル: Timers.cs プロジェクト: chengz8392/UFIFramework
        private Anymous_T GetFromPool()
        {
            Anymous_T t;
            int       cnt = _pool.Count;

            if (cnt > 0)
            {
                t = _pool[cnt - 1];
                _pool.RemoveAt(cnt - 1);
                t.deleted = false;
                t.elapsed = 0;
            }
            else
            {
                t = new Anymous_T();
            }
            return(t);
        }
コード例 #2
0
ファイル: Timers.cs プロジェクト: chengz8392/UFIFramework
        public void Update()
        {
            float dt = Time.unscaledDeltaTime;

            Dictionary <TimerCallback, Anymous_T> .Enumerator iter;

            if (_items.Count > 0)
            {
                iter = _items.GetEnumerator();
                while (iter.MoveNext())
                {
                    Anymous_T i = iter.Current.Value;
                    if (i.deleted)
                    {
                        _toRemove.Add(i);
                        continue;
                    }

                    i.elapsed += dt;
                    if (i.elapsed < i.interval)
                    {
                        continue;
                    }

                    i.elapsed -= i.interval;
                    if (i.elapsed < 0 || i.elapsed > 0.03f)
                    {
                        i.elapsed = 0;
                    }

                    if (i.repeat > 0)
                    {
                        i.repeat--;
                        if (i.repeat == 0)
                        {
                            i.deleted = true;
                            _toRemove.Add(i);
                        }
                    }
                    repeat = i.repeat;
                    if (i.callback != null)
                    {
                        if (catchCallbackExceptions)
                        {
                            try
                            {
                                i.callback(i.param);
                            }
                            catch (System.Exception e)
                            {
                                i.deleted = true;
                                Debug.LogWarning("FairyGUI: timer(internal=" + i.interval + ", repeat=" + i.repeat + ") callback error > " + e.Message);
                            }
                        }
                        else
                        {
                            i.callback(i.param);
                        }
                    }
                }
                iter.Dispose();
            }

            int len = _toRemove.Count;

            if (len > 0)
            {
                for (int k = 0; k < len; k++)
                {
                    Anymous_T i = _toRemove[k];
                    if (i.deleted && i.callback != null)
                    {
                        _items.Remove(i.callback);
                        ReturnToPool(i);
                    }
                }
                _toRemove.Clear();
            }

            if (_toAdd.Count > 0)
            {
                iter = _toAdd.GetEnumerator();
                while (iter.MoveNext())
                {
                    _items.Add(iter.Current.Key, iter.Current.Value);
                }
                iter.Dispose();
                _toAdd.Clear();
            }
        }
コード例 #3
0
ファイル: Timers.cs プロジェクト: chengz8392/UFIFramework
 private void ReturnToPool(Anymous_T t)
 {
     t.callback = null;
     _pool.Add(t);
 }
コード例 #4
0
ファイル: Timers.cs プロジェクト: zz0733/Fishing
        public void Update()
        {
            time = Time.time;
            float elapsed = time - _lastTime;

            if (Time.timeScale != 0)
            {
                elapsed /= Time.timeScale;
            }
            _lastTime = time;

            foreach (KeyValuePair <TimerCallback, Anymous_T> kvp in _items)
            {
                Anymous_T i = kvp.Value;
                if (i.deleted)
                {
                    _toRemove.Add(i);
                    continue;
                }

                i.elapsed += elapsed;
                if (i.elapsed < i.interval)
                {
                    continue;
                }

                i.elapsed -= i.interval;
                if (i.elapsed < 0 || i.elapsed > 0.03f)
                {
                    i.elapsed = 0;
                }

                if (i.repeat > 0)
                {
                    i.repeat--;
                    if (i.repeat == 0)
                    {
                        i.deleted = true;
                        _toRemove.Add(i);
                    }
                }
                repeat = i.repeat;
                if (i.callback != null)
                {
                    try
                    {
                        i.callback(i.param);
                    }
                    catch (System.Exception e)
                    {
                        i.deleted = true;
                        Debug.Log("timer callback failed, " + i.interval + "," + i.repeat);
                        Debug.LogException(e);
                    }
                }
            }

            foreach (Anymous_T i in _toRemove)
            {
                if (i.deleted && i.callback != null)
                {
                    _items.Remove(i.callback);
                    ReturnToPool(i);
                }
            }
            _toRemove.Clear();

            foreach (KeyValuePair <TimerCallback, Anymous_T> kvp in _toAdd)
            {
                _items.Add(kvp.Key, kvp.Value);
            }
            _toAdd.Clear();
        }
コード例 #5
0
        public void Update()
        {
            time = Time.time;
            float elapsed = time - _lastTime;

            if (Time.timeScale != 0)
            {
                elapsed /= Time.timeScale;
            }
            _lastTime = time;

            Dictionary <TimerCallback, Anymous_T> .Enumerator iter;

            if (_items.Count > 0)
            {
                iter = _items.GetEnumerator();
                while (iter.MoveNext())
                {
                    Anymous_T i = iter.Current.Value;
                    if (i.deleted)
                    {
                        _toRemove.Add(i);
                        continue;
                    }

                    i.elapsed += elapsed;
                    if (i.elapsed < i.interval)
                    {
                        continue;
                    }

                    i.elapsed -= i.interval;
                    if (i.elapsed < 0 || i.elapsed > 0.03f)
                    {
                        i.elapsed = 0;
                    }

                    if (i.repeat > 0)
                    {
                        i.repeat--;
                        if (i.repeat == 0)
                        {
                            i.deleted = true;
                            _toRemove.Add(i);
                        }
                    }
                    repeat = i.repeat;
                    if (i.callback != null)
                    {
                        try
                        {
                            i.callback(i.param);
                        }
                        catch (System.Exception e)
                        {
                            i.deleted = true;
                            Debug.Log("timer callback failed, " + i.interval + "," + i.repeat);
                            Debug.LogException(e);
                        }
                    }
                }
                iter.Dispose();
            }

            int len = _toRemove.Count;

            if (len > 0)
            {
                for (int k = 0; k < len; k++)
                {
                    Anymous_T i = _toRemove[k];
                    if (i.deleted && i.callback != null)
                    {
                        _items.Remove(i.callback);
                        ReturnToPool(i);
                    }
                }
                _toRemove.Clear();
            }

            if (_toAdd.Count > 0)
            {
                iter = _toAdd.GetEnumerator();
                while (iter.MoveNext())
                {
                    _items.Add(iter.Current.Key, iter.Current.Value);
                }
                iter.Dispose();
                _toAdd.Clear();
            }
        }
コード例 #6
0
        public void Update()
        {
            time = Time.time;
            float elapsed = time - _lastTime;

            if (Time.timeScale != 0)
            {
                elapsed /= Time.timeScale;
            }
            _lastTime = time;

            /*
             *          foreach (KeyValuePair<TimerCallback, Anymous_T> kvp in _items)
             *          {
             *                  Anymous_T i = kvp.Value;
             *                  if (i.deleted)
             *                  {
             *                          _toRemove.Add(i);
             *                          continue;
             *                  }
             *
             *                  i.elapsed += elapsed;
             *                  if (i.elapsed < i.interval)
             *                          continue;
             *
             *                  i.elapsed -= i.interval;
             *                  if (i.elapsed < 0 || i.elapsed > 0.03f)
             *                          i.elapsed = 0;
             *
             *                  if (i.repeat > 0)
             *                  {
             *                          i.repeat--;
             *                          if (i.repeat == 0)
             *                          {
             *                                  i.deleted = true;
             *                                  _toRemove.Add(i);
             *                          }
             *                  }
             *                  repeat = i.repeat;
             *                  if (i.callback != null)
             *                  {
             *                          try
             *                          {
             *                                  i.callback(i.param);
             *                          }
             *                          catch (System.Exception e)
             *                          {
             *                                  i.deleted = true;
             *                                  Debug.Log("timer callback failed, " + i.interval + "," + i.repeat);
             *                                  Debug.LogException(e);
             *                          }
             *                  }
             *          }
             */
            tmpToAddEnumerator = _items.GetEnumerator();
            while (tmpToAddEnumerator.MoveNext())
            {
                kvp = tmpToAddEnumerator.Current;
                Anymous_T i = kvp.Value;
                if (i.deleted)
                {
                    _toRemove.Add(i);
                    continue;
                }

                i.elapsed += elapsed;
                if (i.elapsed < i.interval)
                {
                    continue;
                }

                i.elapsed -= i.interval;
                if (i.elapsed < 0 || i.elapsed > 0.03f)
                {
                    i.elapsed = 0;
                }

                if (i.repeat > 0)
                {
                    i.repeat--;
                    if (i.repeat == 0)
                    {
                        i.deleted = true;
                        _toRemove.Add(i);
                    }
                }
                repeat = i.repeat;
                if (i.callback != null)
                {
                    try
                    {
                        i.callback(i.param);
                    }
                    catch (System.Exception e)
                    {
                        i.deleted = true;
                        Debug.Log("timer callback failed, " + i.interval + "," + i.repeat);
                        Debug.LogException(e);
                    }
                }
            }

            /*
             *          foreach (Anymous_T i in _toRemove)
             *          {
             *                  if (i.deleted && i.callback != null)
             *                  {
             *                          _items.Remove(i.callback);
             *                          ReturnToPool(i);
             *                  }
             *          }
             *          _toRemove.Clear();
             */
            for (int i = 0; i < _toRemove.Count; i++)
            {
                tmpToRemove = _toRemove[i];
                if (tmpToRemove.deleted && tmpToRemove.callback != null)
                {
                    _items.Remove(tmpToRemove.callback);
                    ReturnToPool(tmpToRemove);
                }
            }
            _toRemove.Clear();

            /*
             *          foreach (KeyValuePair<TimerCallback, Anymous_T> kvp in _toAdd)
             *                  _items.Add(kvp.Key, kvp.Value);
             *          _toAdd.Clear();
             */
            tmpToAddEnumerator = _toAdd.GetEnumerator();
            while (tmpToAddEnumerator.MoveNext())
            {
                kvp = tmpToAddEnumerator.Current;
                _items.Add(kvp.Key, kvp.Value);
            }
            _toAdd.Clear();
        }
コード例 #7
0
ファイル: Timers.cs プロジェクト: niuniuzhu/FairyGUI-unity
 private void ReturnToPool(Anymous_T t)
 {
     t.callback = null;
     _pool.Add(t);
 }
コード例 #8
0
ファイル: Timers.cs プロジェクト: niuniuzhu/FairyGUI-unity
 private Anymous_T GetFromPool()
 {
     Anymous_T t;
     int cnt = _pool.Count;
     if (cnt > 0)
     {
         t = _pool[cnt - 1];
         _pool.RemoveAt(cnt - 1);
         t.deleted = false;
         t.elapsed = 0;
     }
     else
         t = new Anymous_T();
     return t;
 }
コード例 #9
0
ファイル: Timers.cs プロジェクト: zhzhwcn/FairyGUI-monogame
        public void Update(GameTime gameTime)
        {
            time      = (float)gameTime.TotalGameTime.TotalMilliseconds / 1000f;
            deltaTime = (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000f;

            float elapsed = deltaTime;

            Dictionary <TimerCallback, Anymous_T> .Enumerator iter;

            if (_items.Count > 0)
            {
                iter = _items.GetEnumerator();
                while (iter.MoveNext())
                {
                    Anymous_T i = iter.Current.Value;
                    if (i.deleted)
                    {
                        _toRemove.Add(i);
                        continue;
                    }

                    i.elapsed += elapsed;
                    if (i.elapsed < i.interval)
                    {
                        continue;
                    }

                    i.elapsed -= i.interval;
                    if (i.elapsed < 0 || i.elapsed > 0.03f)
                    {
                        i.elapsed = 0;
                    }

                    if (i.repeat > 0)
                    {
                        i.repeat--;
                        if (i.repeat == 0)
                        {
                            i.deleted = true;
                            _toRemove.Add(i);
                        }
                    }
                    if (i.callback != null)
                    {
                        try
                        {
                            i.callback(i.param);
                        }
                        catch (System.Exception e)
                        {
                            i.deleted = true;
                            Log.Info("timer callback failed, " + i.interval + "," + i.repeat);
                            Log.Exception(e);
                        }
                    }
                }
                iter.Dispose();
            }

            int len = _toRemove.Count;

            if (len > 0)
            {
                for (int k = 0; k < len; k++)
                {
                    Anymous_T i = _toRemove[k];
                    if (i.deleted && i.callback != null)
                    {
                        _items.Remove(i.callback);
                        ReturnToPool(i);
                    }
                }
                _toRemove.Clear();
            }

            if (_toAdd.Count > 0)
            {
                iter = _toAdd.GetEnumerator();
                while (iter.MoveNext())
                {
                    _items.Add(iter.Current.Key, iter.Current.Value);
                }
                iter.Dispose();
                _toAdd.Clear();
            }
        }