예제 #1
0
        /// <summary>
        /// Create avatar and save photo to disk.
        /// </summary>
        private IEnumerator CreateNewAvatar(byte[] photoBytes)
        {
            PipelineType pipeline = pipelineType;

            // Choose default set of resources to generate
            var resourcesRequest = avatarProvider.ResourceManager.GetResourcesAsync(AvatarResourcesSubset.DEFAULT, pipelineType);

            yield return(resourcesRequest);

            if (resourcesRequest.IsError)
            {
                yield break;
            }

            var initializeAvatar = avatarProvider.InitializeAvatarAsync(photoBytes, "name", "description", pipeline, resourcesRequest.Result);

            yield return(Await(initializeAvatar, null));

            string avatarCode = initializeAvatar.Result;

            if (initializeAvatar.IsError)
            {
                UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED);
                yield break;
            }

            yield return(UpdateAvatarList());

            UpdateAvatarState(avatarCode, GalleryAvatarState.GENERATING);

            var calculateAvatar = avatarProvider.StartAndAwaitAvatarCalculationAsync(avatarCode);

            yield return(Await(calculateAvatar, avatarCode));

            if (calculateAvatar.IsError)
            {
                UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED);
                yield break;
            }

            var downloadAvatar = avatarProvider.MoveAvatarModelToLocalStorageAsync(avatarCode, pipeline == PipelineType.FACE, true);

            yield return(Await(downloadAvatar, avatarCode));

            if (downloadAvatar.IsError)
            {
                UpdateAvatarState(avatarCode, GalleryAvatarState.FAILED);
                yield break;
            }

            UpdateAvatarState(avatarCode, GalleryAvatarState.COMPLETED);
        }