コード例 #1
0
ファイル: apAnimPlayQueue.cs プロジェクト: kirsi0/Sheepy
        // Request -> Queue 요청
        //Request의 애니메이션의 Fade가 끝나면서 이전에 플레이되던 AnimPlayUnit을 종료하는 함수
        //AnimPlayRequest가 호출한다.
        //직접 SetEnd하는 것이 아니라 Queue에서 확인하여 처리한다.
        public void SetEndByRequest(apAnimPlayRequest request)
        {
            //Debug.Log("----- Check Set End -------------");
            bool isStopRequest = request.RequestType == apAnimPlayRequest.REQUEST_TYPE.Stop;
            bool isLastRequest = false;

            if (_requests_Live.Count > 0)
            {
                int iLastLiveRequest = -1;
                //Live 중의 마지막 Request를 찾는다.
                //대기중인 것은 의미 없음
                for (int i = _requests_Live.Count - 1; i >= 0; i--)
                {
                    if (_requests_Live[i].IsLive || _requests_Live[i].IsEnded)
                    {
                        iLastLiveRequest = i;
                        break;
                    }
                }

                //Debug.Log("iLastRequest : " + iLastLiveRequest);
                if (iLastLiveRequest >= 0)
                {
                    isLastRequest = (_requests_Live[iLastLiveRequest] == request);
                }
            }

            //Debug.Log("Is Stop Request [" + isStopRequest + "] / Is Last Request [" + isLastRequest + "]");

            //TODO
            //이 상태에서
            //A -> Play B -> PlayQueued A -> A를 바로 호출시
            //[A -> Play B]를 진행하면서 A -> 0 -> End/Ready로 만들고 싶지만
            //[PlayQueued A]를 호출하면서 A의 LinkKey가 바뀌면서 [Play B]에서 Weight를 조절할 수 없게 되었다...


            //if (isStopRequest || isLastRequest)
            //그냥 해볼까
            {
                //Debug.LogError("!!!!! Set End !!!!!");
                //이전의 모든 Request를 모두 End한다.
                apAnimPlayUnit playUnit = null;
                for (int i = 0; i < request._prevPlayUnitKeys.Count; i++)
                {
                    playUnit = GetPlayUnitByLinkKey(request._prevPlayUnitKeys[i]);
                    if (playUnit != null)
                    {
                        //Debug.Log("Set End - " + playUnit._linkedAnimClip._name + " / " + playUnit.LinkKey);
                        if (isStopRequest || isLastRequest)
                        {
                            playUnit.SetEnd();
                        }
                        else
                        {
                            playUnit.SetWeightZero();
                        }
                    }
                    //else
                    //{
                    //	Debug.LogError("Is Null Unit [" + request._prevPlayUnitKeys[i] + "]");
                    //}
                }
            }

            //추가
            //만약 Chained 된 상태이고
            //Next Chained된 Request가 아직 Ready라면
            //SetWeightZero를 해야한다.
            //이건 반복해서 처리한다.
            //AdaptWeight도 마찬가지로 처리
            SetWeightZeroToNextChained(request);


            //Debug.Break();
        }