コード例 #1
0
        // Functions
        //---------------------------------------------------
        //Update에서 호출하는 함수와
        //LateUpdate에서 호출하는 함수 2개로 나뉜다.
        /// <summary>
        /// 이 함수를 Update에서 호출하자
        /// 토큰이 없다면 null로 하되, 리턴값을 멤버로 가지고 있자
        /// </summary>
        /// <param name="token"></param>
        /// <param name="fps"></param>
        /// <returns></returns>
        public UpdateToken AddRequest(UpdateToken token, int fps, float deltaTime)
        {
            //상태가 바뀌면 초기화를 해야한다.
            if (_state != STATE.Update)
            {
#if UNITY_EDITOR
                Profiler.BeginSample("AddRequest > Reset");
#endif
                //_fps2Tokens.Clear();
                foreach (KeyValuePair <int, TokenList> keyValuePair in _fps2Tokens)
                {
                    keyValuePair.Value.Reset(deltaTime);
                }

                _state = STATE.Update;

#if UNITY_EDITOR
                Profiler.EndSample();
#endif
            }

            fps = Mathf.Clamp(fps, MIN_FPS, MAX_FPS);

            if (token == null)
            {
                token = new UpdateToken(fps);
            }
            else
            {
                token.SetFPS(fps);
            }
            token.UpdateTime(deltaTime);

            token.ReadyToCalculate();

            if (token.IsUpdatable())
            {
                //업데이트될 수 있다면 토큰을 리스트에 넣자
                if (_fps2Tokens.ContainsKey(fps))
                {
                    _fps2Tokens[fps].AddRequest(token);
                }
                else
                {
                    TokenList newTokenList = new TokenList(fps);

                    newTokenList.Reset(deltaTime);
                    _fps2Tokens.Add(fps, newTokenList);
                    newTokenList.AddRequest(token);

                    //Debug.Log("New Token List : " + fps);
                }
            }

            return(token);
        }