// 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(); }