Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 7
0
        /// <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);
        }
Esempio n. 8
0
        /// <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);
        }
Esempio n. 9
0
        /// <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);
        }
Esempio n. 11
0
        /// <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);
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 15
0
        /// <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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 19
0
        /// <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);
        }
Esempio n. 21
0
        /// <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);
        }
Esempio n. 29
0
        /// <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);
        }
Esempio n. 30
0
        /// <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);
        }