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