/// <summary> /// Get list of all haircuts for avatar. /// </summary> public virtual AsyncWebRequest <AvatarHaircutData[]> GetHaircutsAsync(AvatarData avatar) { var r = AvatarJsonArrayRequest <AvatarHaircutData> (avatar.haircuts); r.State = AvatarSdkMgr.Str(Strings.RequestingHaircutInfo); return(r); }
/// <summary> /// Get avatar information by code. /// </summary> public virtual AsyncWebRequest <AvatarData> GetAvatarAsync(string avatarCode) { var r = AvatarJsonRequest <AvatarData> (GetUrl("avatars", avatarCode)); r.State = AvatarSdkMgr.Str(Strings.GettingAvatarInfo); return(r); }
/// <summary> /// Get list of all textures for avatar. /// </summary> public virtual AsyncWebRequest <TextureData[]> GetTexturesAsync(AvatarData avatar) { var r = AvatarJsonArrayRequest <TextureData> (GetUrl("avatars", avatar.code, "textures")); r.State = AvatarSdkMgr.Str(Strings.RequestingTextureInfo); return(r); }
/// <summary> /// Obtain token using itSeez3D username and password. Not for production use! /// </summary> private AsyncWebRequest <AccessData> AuthorizePasswordGrantTypeAsync( string clientId, string clientSecret, string username, string password ) { Debug.LogWarning("Don't use this auth method in production, use other grant types!"); var request = new AsyncWebRequest <AccessData> (AvatarSdkMgr.Str(Strings.RequestingApiToken)); if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(clientId)) { request.SetError("itSeez3D credentials not provided"); Debug.LogError(request.ErrorMessage); return(request); } var form = new Dictionary <string, string> () { { "grant_type", "password" }, { "username", username }, { "password", password }, { "client_id", clientId }, { "client_secret", clientSecret }, }; Func <UnityWebRequest> webRequestFactory = () => HttpPost(GetUrl("o", "token"), form); AvatarSdkMgr.SpawnCoroutine(AwaitJsonWebRequest(webRequestFactory, request)); return(request); }
protected override AsyncRequest <GalleryAvatar[]> GetAllAvatarsAsync(int maxItems) { var request = new AsyncRequest <GalleryAvatar[]>(AvatarSdkMgr.Str(Strings.GettingAvatarState)); AvatarSdkMgr.SpawnCoroutine(GetAllAvatarsFunc(maxItems, request)); return(request); }
/// <summary> /// Waits while the avatar is being calulated. Calculations start automatically after the photo was loaded to the server. /// </summary> public AsyncRequest StartAndAwaitAvatarCalculationAsync(string avatarCode) { var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GeneratingAvatar)); AvatarSdkMgr.SpawnCoroutine(StartAndAwaitAvatarCalculationFunc(avatarCode, request)); return(request); }
/// <summary> /// Download haircut preview into memory. /// </summary> public virtual AsyncWebRequest <byte[]> DownloadHaircutPreviewBytesAsync(AvatarHaircutData haircut) { var r = AvatarDataRequestAsync(haircut.preview); r.State = AvatarSdkMgr.Str(Strings.DownloadingHaircutPreview); return(r); }
/// <summary> /// Downloads the haircut point cloud zip into memory. /// </summary> public virtual AsyncWebRequest <byte[]> DownloadHaircutPointCloudZipAsync(AvatarHaircutData haircut) { var r = AvatarDataRequestAsync(haircut.pointcloud); r.State = AvatarSdkMgr.Str(Strings.DownloadingHaircutPointCloud); return(r); }
/// <summary> /// Download main texture into memory. Can be used right away to create Unity texture. /// </summary> public virtual AsyncWebRequest <byte[]> DownloadTextureBytesAsync(AvatarData avatar) { var r = AvatarDataRequestAsync(avatar.texture); r.State = AvatarSdkMgr.Str(Strings.DownloadingHeadTexture); return(r); }
/// <summary> /// Creates TexturedMesh of the head for a given avatar. /// If required files (mesh and texture) don't exist on disk, it downloads them from the cloud. /// </summary> /// <param name="avatarCode">code of the loaded avatar</param> /// <param name="withBlendshapes">blendshapes will be added to mesh</param> public AsyncRequest <TexturedMesh> GetHeadMeshAsync(string avatarCode, bool withBlendshapes, int detailsLevel = 0) { var request = new AsyncRequest <TexturedMesh>(AvatarSdkMgr.Str(Strings.GettingHeadMesh)); AvatarSdkMgr.SpawnCoroutine(GetHeadMeshFunc(avatarCode, withBlendshapes, detailsLevel, request)); return(request); }
/// <summary> /// Wait until avatar is calculated. Report progress through the async request object. /// This function will return error (request.IsError == true) only if calculations failed on server or /// avatar has been deleted from the server. In all other cases it will continue to poll status. /// </summary> public virtual AsyncRequest <AvatarData> AwaitAvatarCalculationsAsync(AvatarData avatar) { var request = new AsyncRequest <AvatarData> (AvatarSdkMgr.Str(Strings.StartingCalculations)); AvatarSdkMgr.SpawnCoroutine(AwaitAvatarCalculationsLoop(avatar, request)); return(request); }
/// <summary> /// Requests from the server identities of the latest "maxItems" avatars. /// </summary> public AsyncRequest <string[]> GetAllAvatarsAsync(int maxItems) { var request = new AsyncRequest <string[]>(AvatarSdkMgr.Str(Strings.GettingAvatarList)); AvatarSdkMgr.SpawnCoroutine(GetAllAvatarsFunc(maxItems, request)); return(request); }
/// <summary> /// Get a particular page in the list of avatars. /// </summary> public virtual AsyncWebRequest <Page <AvatarData> > GetAvatarsPageAsync(int pageNumber) { var r = AvatarJsonPageRequest <AvatarData> (GetUrl("avatars"), pageNumber); r.State = AvatarSdkMgr.Str(Strings.GettingAvatarList); return(r); }
/// <summary> /// Downloads from the server haircut preview image and saves it locally. /// Note: this method isn't implemented yet. /// </summary> /// <param name="haircutId">Haircut identity</param> public AsyncRequest <byte[]> GetHaircutPreviewAsync(string avatarCode, string haircutId) { var request = new AsyncRequest <byte[]>(AvatarSdkMgr.Str(Strings.GettingHaircutPreview)); AvatarSdkMgr.SpawnCoroutine(GetHaircutPreviewFunc(avatarCode, haircutId, request)); return(request); }
/// <summary> /// Downloading coordinates of the vertices of the head model. This can be used to save download time, because faces and UV are always the same. /// </summary> public virtual AsyncWebRequest <byte[]> DownloadPointCloudZipAsync(AvatarData avatar) { var r = AvatarDataRequestAsync(GetUrl("avatars", avatar.code, "pointcloud")); r.State = AvatarSdkMgr.Str(Strings.DownloadingHeadMesh); return(r); }
/// <summary> /// Download haircut preview and save it to disk /// </summary> public AsyncRequest DownloadAndSaveHaircutPreviewAsync(AvatarHaircutData haircutData) { var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GettingHaircutPreview)); AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveHaircutPreviewFunc(haircutData, request)); return(request); }
protected AsyncRequest <GalleryAvatar[]> GetAllAvatarsAsync(int maxItems) { var request = new AsyncRequest <GalleryAvatar[]>(AvatarSdkMgr.Str(Strings.GettingAvatarState)); EditorRunner.instance.Run(GetAllAvatarsRoutine(maxItems, request)); return(request); }
/// <summary> /// Downloads avatar files and stores them on disk. /// </summary> /// <param name="avatarCode">Avatar code</param> /// <param name="withHaircutPointClouds">If True, haircut point clouds will be downloaded.</param> /// <param name="withBlendshapes">If true, blendshapes will be downloaded.</param> /// <returns></returns> public AsyncRequest MoveAvatarModelToLocalStorageAsync(string avatarCode, bool withHaircutPointClouds, bool withBlendshapes) { var request = new AsyncRequest <AvatarData>(AvatarSdkMgr.Str(Strings.DownloadingAvatar)); AvatarSdkMgr.SpawnCoroutine(MoveAvatarModelToLocalStorage(avatarCode, withHaircutPointClouds, withBlendshapes, request)); return(request); }
/// <summary> /// Authorize this session using the credentials loaded from encrypted binary resource. /// </summary> public virtual AsyncRequest AuthorizeAsync() { var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.Authentication)); AvatarSdkMgr.SpawnCoroutine(Authorize(request)); return(request); }
public override AsyncRequest <AvatarResources> GetResourcesAsync(AvatarResourcesSubset resourcesSubset, PipelineType pipelineType) { var request = new AsyncRequest <AvatarResources>(AvatarSdkMgr.Str(Strings.GettingResourcesList)); AvatarSdkMgr.SpawnCoroutine(GetResourcesFunc(resourcesSubset, pipelineType, request)); return(request); }
/// <summary> /// Edit avatar name/description on the server. /// </summary> public virtual AsyncWebRequest EditAvatarAsync(AvatarData avatar, string name = null, string description = null) { var request = new AsyncWebRequest(AvatarSdkMgr.Str(Strings.EditingAvatar)); byte[] requestBodyData = null; using (var requestBody = new MultipartBody()) { requestBody.WriteTextField("name", name); requestBody.WriteTextField("description", description); requestBody.WriteFooter(); requestBodyData = requestBody.GetRequestBodyData(); Func <UnityWebRequest> webRequestFactory = () => { var webRequest = UnityWebRequest.Post(avatar.url, " "); webRequest.chunkedTransfer = false; webRequest.method = "PATCH"; webRequest.uploadHandler = new UploadHandlerRaw(requestBodyData); webRequest.SetRequestHeader( "Content-Type", string.Format("multipart/form-data; boundary=\"{0}\"", requestBody.Boundary) ); SetAuthHeaders(webRequest); return(webRequest); }; Debug.LogFormat("Uploading photo..."); AvatarSdkMgr.SpawnCoroutine(AwaitJsonWebRequest(webRequestFactory, request)); return(request); } }
/// <summary> /// Requests server to delete all data permanently and deletes local avatar files. /// </summary> public AsyncRequest DeleteAvatarAsync(string avatarCode) { var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.DeletingAvatarFiles)); AvatarSdkMgr.SpawnCoroutine(DeleteAvatarFunc(avatarCode, request)); return(request); }
/// <summary> /// Returns identities of all haircuts available for the avatar /// </summary> public AsyncRequest <string[]> GetHaircutsIdAsync(string avatarCode) { var request = new AsyncRequest <string[]>(AvatarSdkMgr.Str(Strings.GettingAvailableHaircuts)); AvatarSdkMgr.SpawnCoroutine(GetHaircutsIdFunc(avatarCode, request)); return(request); }
/// <summary> /// Download haircut points and save them to disk /// </summary> public AsyncRequest DownloadAndSaveHaircutPointsAsync(string avatarCode, AvatarHaircutData haircutData) { var request = new AsyncRequest(AvatarSdkMgr.Str(Strings.GettingHaircutPointCloud)); AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveHaircutPointsFunc(avatarCode, haircutData, request)); return(request); }
/// <summary> /// Creates TexturedMesh of the haircut. /// If any of the required files doesn't exist it downloads them from the cloud and saves on the disk. /// </summary> /// <param name="avatarCode">Avatar code</param> /// <param name="haircutName">Haircut identity</param> public AsyncRequest <TexturedMesh> GetHaircutMeshAsync(string avatarCode, string haircutId) { var request = new AsyncRequest <TexturedMesh>(AvatarSdkMgr.Str(Strings.GettingHaircutMesh)); AvatarSdkMgr.SpawnCoroutine(GetHaircutMeshFunc(avatarCode, haircutId, request)); return(request); }
/// <summary> /// Download all avatar files, unzip and save to disk. /// </summary> /// <param name="connection">Connection session.</param> /// <param name="avatar">Avatar to download.</param> /// <param name="withHaircutPointClouds">If set to true, download all haircut point clouds too.</param> /// <param name="withBlendshapes">If set to true, download blendshapes too.</param> public AsyncRequest DownloadAndSaveAvatarModelAsync(AvatarData avatar, bool withHaircutPointClouds, bool withBlendshapes) { var request = new AsyncRequest <AvatarData>(AvatarSdkMgr.Str(Strings.DownloadingAvatar)); AvatarSdkMgr.SpawnCoroutine(DownloadAndSaveAvatarModel(avatar, withHaircutPointClouds, withBlendshapes, request)); return(request); }
/// <summary> /// Get haircut info /// </summary> /// <param name="avatarCode">Avatar code</param> /// <param name="haircutId">Haircut identity</param> public AsyncRequest <AvatarHaircutData> GetHaircutDataAsync(string avatarCode, string haircutId) { var request = new AsyncRequest <AvatarHaircutData>(AvatarSdkMgr.Str(Strings.GettingHaircutInfo)); AvatarSdkMgr.SpawnCoroutine(GetHaircutDataFunc(avatarCode, haircutId, request)); return(request); }
/// <summary> /// Initializes avatar and uploads photo to the server. /// </summary> /// <param name="photoBytes">Photo bytes (jpg or png encoded).</param> /// <param name="name">Name of the avatar</param> /// <param name="description">Description of the avatar</param> /// <param name="pipeline">Calculation pipeline to use</param> /// <returns>Avatar unique code</returns> public AsyncRequest <string> InitializeAvatarAsync(byte[] photoBytes, string name, string description, PipelineType pipeline = PipelineType.FACE, AvatarResources avatarResources = null) { var request = new AsyncRequest <string>(AvatarSdkMgr.Str(Strings.GeneratingAvatar)); AvatarSdkMgr.SpawnCoroutine(InitializeAvatarFunc(photoBytes, name, description, pipeline, avatarResources, request)); return(request); }
/// <summary> /// Download mesh zip file into memory. /// </summary> /// <param name="levelOfDetails">Level of mesh details. 0 - highest resolution, 7 - lowest resolution</param> /// <returns></returns> public virtual AsyncWebRequest <byte[]> DownloadMeshZipAsync(AvatarData avatar, int levelOfDetails = 0) { var url = UrlWithParams(avatar.mesh, "lod", levelOfDetails.ToString()); var r = AvatarDataRequestAsync(url); r.State = AvatarSdkMgr.Str(Strings.DownloadingHeadMesh); return(r); }
/// <summary> /// Downloads zip archive with point clouds for all haircuts. It is recommended to use this request /// for less overall download time (instead of downloading all individual haircuts separately). /// </summary> public virtual AsyncWebRequest <byte[]> DownloadAllHaircutPointCloudsZipAsync(AvatarData avatar) { string url = string.Format("{0}pointclouds/", avatar.haircuts); var r = AvatarDataRequestAsync(url); r.State = AvatarSdkMgr.Str(Strings.DownloadingAllHaircutPointClouds); return(r); }