예제 #1
0
        /// <summary>
        /// GetHaircutDataAsync implementation
        /// </summary>
        private IEnumerator GetHaircutDataFunc(string avatarCode, string haircutId, AsyncRequest <AvatarHaircutData> request)
        {
            bool takeFromCache = UseCache && haircutsDataCache.ContainsKey(avatarCode);

            if (takeFromCache)
            {
                request.Result = haircutsDataCache[avatarCode].FirstOrDefault(h => string.Compare(h.identity, haircutId) == 0);
            }
            else
            {
                // get AvatarData firstly.
                // If you would like to make multiple requests for getting haircut data, it is better to get AvatarData only once and store it somewhere
                var avatarRequest = GetAvatarAsync(avatarCode);
                yield return(avatarRequest.Await());

                if (avatarRequest.IsError)
                {
                    request.SetError(avatarRequest.ErrorMessage);
                    yield break;
                }

                var haircutInfoRequest = connection.GetHaircutsAsync(avatarRequest.Result);
                yield return(request.AwaitSubrequest(haircutInfoRequest, 0.9f));

                if (request.IsError)
                {
                    yield break;
                }

                if (UseCache)
                {
                    haircutsDataCache.Add(avatarCode, haircutInfoRequest.Result);
                }

                AvatarHaircutData haircutData = haircutInfoRequest.Result.FirstOrDefault(h => string.Compare(h.identity, haircutId) == 0);
                if (haircutData == null)
                {
                    Debug.LogErrorFormat("There is no {0} haircut for avatar with code: {1}", haircutId, avatarCode);
                    yield break;
                }
                request.Result = haircutData;
            }

            request.IsDone = true;
        }
        /// <summary>
        /// DownloadAndSaveHaircutPreviewAsync implementation
        /// </summary>
        private IEnumerator DownloadAndSaveHaircutPreviewFunc(AvatarHaircutData haircutData, AsyncRequest request)
        {
            Debug.LogFormat("Downloading haircut preview...");
            var haircutPreviewRequest = connection.DownloadHaircutPreviewBytesAsync(haircutData);

            yield return(request.AwaitSubrequest(haircutPreviewRequest, 0.8f));

            if (request.IsError)
            {
                yield break;
            }

            Debug.LogFormat("Saving haircut preview to disk...");
            var saveHaircutPreviewRequest = CoreTools.SaveHaircutFileAsync(haircutPreviewRequest.Result, haircutData.identity, HaircutFile.HAIRCUT_PREVIEW);

            yield return(request.AwaitSubrequest(saveHaircutPreviewRequest, 0.9f));

            if (request.IsError)
            {
                yield break;
            }

            request.IsDone = true;
        }
        /// <summary>
        /// DownloadAndSaveHaircutMeshAsync implementation
        /// </summary>
        private IEnumerator DownloadAndSaveHaircutMeshFunc(AvatarHaircutData haircutData, AsyncRequest request)
        {
            Debug.LogFormat("Downloading haircut mesh, texture and points simultaneously...");
            var haircutMeshRequest    = connection.DownloadHaircutMeshZipAsync(haircutData);
            var haircutTextureRequest = connection.DownloadHaircutTextureBytesAsync(haircutData);

            yield return(request.AwaitSubrequests(0.8f, haircutMeshRequest, haircutTextureRequest));

            if (request.IsError)
            {
                yield break;
            }

            Debug.LogFormat("Saving haircut mesh and texture to disk...");
            var saveHaircutMeshRequest    = CoreTools.SaveHaircutFileAsync(haircutMeshRequest.Result, haircutData.identity, HaircutFile.HAIRCUT_MESH_ZIP);
            var saveHaircutTextureRequest = CoreTools.SaveHaircutFileAsync(haircutTextureRequest.Result, haircutData.identity, HaircutFile.HAIRCUT_TEXTURE);

            yield return(request.AwaitSubrequests(0.9f, saveHaircutMeshRequest, saveHaircutTextureRequest));

            if (request.IsError)
            {
                yield break;
            }

            Debug.LogFormat("Unzip haircut mesh...");
            var unzipMeshRequest = CoreTools.UnzipFileAsync(saveHaircutMeshRequest.Result);

            yield return(request.AwaitSubrequest(unzipMeshRequest, 1.0f));

            if (request.IsError)
            {
                yield break;
            }

            request.IsDone = true;
        }