Beispiel #1
0
    public void Init()
    {
        if (isInit)
        {
            return;
        }

        isInit = true;

        InitGameObjects();

        HUDConfiguration hudConfig = new HUDConfiguration();

        hudConfig.active  = true;
        hudConfig.visible = false;
        HUDController.i.CreateHudElement <BuildModeHUDController>(hudConfig, HUDController.HUDElementID.BUILDER_IN_WORLD_MAIN);
        HUDController.i.CreateHudElement <BuilderInWorldInititalHUDController>(hudConfig, HUDController.HUDElementID.BUILDER_IN_WORLD_INITIAL);
        HUDController.i.builderInWorldMainHud.Initialize();

        HUDController.i.builderInWorldInititalHud.OnEnterEditMode += TryStartEnterEditMode;
        HUDController.i.builderInWorldMainHud.OnTutorialAction    += StartTutorial;
        HUDController.i.builderInWorldMainHud.OnLogoutAction      += ExitEditMode;

        ConfigureLoadingController();
        InitControllers();

        CommonScriptableObjects.builderInWorldNotNecessaryUIVisibilityStatus.Set(true);

        catalogAsyncOp   = BuilderInWorldUtils.MakeGetCall(BuilderInWorldSettings.BASE_URL_ASSETS_PACK, CatalogReceived);
        isCatalogLoading = true;
        BuilderInWorldNFTController.i.Initialize();
        BuilderInWorldNFTController.i.OnNFTUsageChange += OnNFTUsageChange;
    }
Beispiel #2
0
    void LoadAsset()
    {
        if (!string.IsNullOrEmpty(OBJUrl))
        {
            Destroy(loadedOBJGameObject);

            asyncOp = Environment.i.platform.webRequest.Get(
                url: OBJUrl,
                OnSuccess: (webRequestResult) =>
            {
                loadedOBJGameObject      = OBJLoader.LoadOBJFile(webRequestResult.downloadHandler.text, true);
                loadedOBJGameObject.name = "LoadedOBJ";
                loadedOBJGameObject.transform.SetParent(transform);
                loadedOBJGameObject.transform.localPosition = Vector3.zero;

                OnFinishedLoadingAsset?.Invoke();
                alreadyLoadedAsset = true;
            },
                OnFail: (webRequestResult) =>
            {
                Debug.Log("Couldn't get OBJ, error: " + webRequestResult.error + " ... " + OBJUrl);
            });
        }
        else
        {
            Debug.Log("couldn't load OBJ because url is empty");
        }

        if (loadingPlaceholder != null)
        {
            loadingPlaceholder.SetActive(false);
        }
    }
Beispiel #3
0
        IEnumerator Fetch()
        {
            bool shouldRetry = true;
            int  retryCount  = 0;

            string url = API_URL_ASSETS + assetContractAddress;

            do
            {
                if (OpenSeaRequestController.VERBOSE)
                {
                    Debug.Log($"RequestGroup: Request to OpenSea {url}");
                }

                // NOTE(Santi): In this case, as this code is implementing a very specific retries system (including delays), we use our
                //              custom WebRequest system without retries (requestAttemps = 1) and let the current code to apply the retries.
                WebRequestAsyncOperation requestOp = WebRequestController.i.Get(url: url, requestAttemps: 1, disposeOnCompleted: false);
                yield return(requestOp);

                AssetsResponse response = null;
                if (requestOp.isSucceded)
                {
                    response = Utils.FromJsonWithNulls <AssetsResponse>(requestOp.webRequest.downloadHandler.text);
                }

                if (OpenSeaRequestController.VERBOSE)
                {
                    Debug.Log($"RequestGroup: Request resolving {response != null} {requestOp.webRequest.error} {url}");
                }

                if (response != null)
                {
                    shouldRetry = false;
                    OnSuccess?.Invoke(response);
                    requestOp.Dispose();
                }
                else
                {
                    shouldRetry = retryCount < REQUEST_RETRIES;
                    if (!shouldRetry)
                    {
                        OnError?.Invoke("Error " + requestOp.webRequest.downloadHandler.text);
                        requestOp.Dispose();
                    }
                    else
                    {
                        retryCount++;

                        if (OpenSeaRequestController.VERBOSE)
                        {
                            Debug.Log($"RequestGroup: Request retrying {url}");
                        }

                        yield return(new WaitForSeconds(GetRetryDelay()));

                        requestOp.Dispose();
                    }
                }
            } while (shouldRetry);
        }
    private IEnumerator UniGifProcessorLoad(string url, Action<GifFrameData[]> OnSuccess, Action OnFail)
    {
        webRequestOp = DCL.Environment.i.platform.webRequest.Get(url: url, disposeOnCompleted: false);

        yield return webRequestOp;

        if (webRequestOp.isSucceded)
        {
            var bytes = webRequestOp.webRequest.downloadHandler.data;
            yield return UniGif.GetTextureListCoroutine(bytes,
                (frames, loopCount, width, height) =>
                {
                    if (frames != null)
                    {
                        OnSuccess?.Invoke(frames);
                    }
                    else
                    {
                        OnFail?.Invoke();
                    }
                });
        }
        else
        {
            OnFail?.Invoke();
        }

        webRequestOp.Dispose();
    }
        private IEnumerator CreateHTTPRequest(string rootUri, string httpRequestPath)
        {
            string finalUrl = httpRequestPath;

            if (!string.IsNullOrEmpty(rootUri))
            {
                finalUrl = Path.Combine(rootUri, httpRequestPath);
            }

            WebRequestAsyncOperation asyncOp = webRequestController.Get(
                url: finalUrl,
                downloadHandler: new DownloadHandlerBuffer(),
                timeout: 5000,
                disposeOnCompleted: false);

            yield return(asyncOp);

            if (!asyncOp.isSucceded)
            {
                Debug.LogError($"{asyncOp.webRequest.error} - {finalUrl}");
                yield break;
            }

            if (asyncOp.webRequest.downloadedBytes > int.MaxValue)
            {
                Debug.LogError("Stream is too big for a byte array");
                yield break;
            }

            if (asyncOp.webRequest.downloadHandler.data == null)
            {
                yield break;
            }

            //NOTE(Brian): Caution, webRequestResult.downloadHandler.data returns a COPY of the data, if accessed twice,
            //             2 copies will be performed for the entire file (and then discarded by GC, introducing hiccups).
            //             The correct fix is by using DownloadHandler.ReceiveData. But this is in version > 2019.3.
            byte[] data = asyncOp.webRequest.downloadHandler.data;

            if (data != null)
            {
                LoadedStream = new MemoryStream(data, 0, data.Length, true, true);
            }

            asyncOp.Dispose();
        }
    private void GetCatalog()
    {
        if (catalogAdded)
        {
            return;
        }

        if (areCatalogHeadersReady)
        {
            catalogAsyncOp = BIWUtils.MakeGetCall(BIWUrlUtils.GetUrlCatalog(), CatalogReceived, catalogCallHeaders);
        }
        else
        {
            builderInWorldBridge.AskKernelForCatalogHeaders();
        }

        isCatalogRequested = true;
    }
    private void FetchScenePreviewImage(string previewImageUrl)
    {
        if (string.IsNullOrEmpty(previewImageUrl))
        {
            return;
        }

        spinnerImage.SetActive(true);
        fetchParcelImageOp = Utils.FetchTexture(previewImageUrl, (texture) =>
        {
            downloadedBanner            = texture;
            imageSceneThumbnail.texture = texture;

            RectTransform rt = (RectTransform)imageSceneThumbnail.transform.parent;
            float h          = rt.rect.height;
            float w          = h * (texture.width / (float)texture.height);
            imageSceneThumbnail.rectTransform.sizeDelta = new Vector2(w, h);

            spinnerImage.SetActive(false);
            imageSceneThumbnail.gameObject.SetActive(true);
        });
    }
Beispiel #8
0
        private void SendRequest(IRequestHandler requestHandler)
        {
            string url = requestHandler.GetUrl();

            if (VERBOSE)
            {
                Debug.Log($"RequestController: Send Request: {url}");
            }

            // NOTE: In this case, as this code is implementing a very specific retries system (including delays), we use our
            //              custom WebRequest system without retries (requestAttemps = 1) and let the current code to apply the retries.
            WebRequestAsyncOperation asyncOp = Environment.i.platform.webRequest.Get(url, requestAttemps: 1, disposeOnCompleted: true);

            asyncOp.completed += operation =>
            {
                UnityWebRequest unityWebRequest  = operation.webRequest;
                bool            shouldTryToRetry = true;
                string          serverResponse   = unityWebRequest.downloadHandler.text;

                if (VERBOSE)
                {
                    Debug.Log($"RequestController: Request completed: success? {unityWebRequest.result == UnityWebRequest.Result.Success} {serverResponse}");
                }

                if (unityWebRequest.result == UnityWebRequest.Result.Success)
                {
                    requestHandler.SetApiResponse(serverResponse,
                                                  () =>
                    {
                        if (VERBOSE)
                        {
                            Debug.Log($"RequestController: Request Succeeded: {url}");
                        }

                        shouldTryToRetry = false;
                    },
                                                  error =>
                    {
                        serverResponse = $"RequestController: Parse Request Error: {url}: {error}";

                        if (VERBOSE)
                        {
                            Debug.Log(serverResponse);
                        }
                    });
                }

                if (shouldTryToRetry)
                {
                    if (requestHandler.CanRetry())
                    {
                        requestHandler.Retry();
                    }
                    else
                    {
                        requestHandler.SetApiResponseError(serverResponse);
                    }
                }

                unityWebRequest.Dispose();
            };
        }
Beispiel #9
0
        IEnumerator Fetch(float delayRequest)
        {
            yield return(new WaitForSeconds(delayRequest));

            CloseGroup();

            bool shouldRetry = false;
            int  retryCount  = 0;

            string url = API_URL_ASSETS + requestUrl;

            do
            {
                if (OpenSeaRequestController.VERBOSE)
                {
                    Debug.Log($"RequestGroup: Request to OpenSea {url}");
                }

                // NOTE(Santi): In this case, as this code is implementing a very specific retries system (including delays), we use our
                //              custom WebRequest system without retries (requestAttemps = 1) and let the current code to apply the retries.
                WebRequestAsyncOperation asyncOp = WebRequestController.i.Get(url: url, requestAttemps: 1, disposeOnCompleted: false);
                yield return(asyncOp);

                AssetsResponse response = null;
                if (asyncOp.isSucceded)
                {
                    response = Utils.FromJsonWithNulls <AssetsResponse>(asyncOp.webRequest.downloadHandler.text);
                }

                if (OpenSeaRequestController.VERBOSE)
                {
                    Debug.Log($"RequestGroup: Request resolving {response != null} {asyncOp.webRequest.error} {url}");
                }

                if (response != null)
                {
                    shouldRetry = false;
                    //if we have one element in the group, is the one failing and we dont group it again
                    if (response.assets.Length != 0 || requests.Count <= 1)
                    {
                        using (var iterator = requests.GetEnumerator())
                        {
                            while (iterator.MoveNext())
                            {
                                iterator.Current.Value.Resolve(response);
                            }
                        }
                    }
                    else
                    {
                        //There are invalids NFTs to fetch, we split the request into 2 smaller groups to find the ofender
                        SplitGroup();
                    }

                    asyncOp.Dispose();
                }
                else
                {
                    shouldRetry = retryCount < REQUEST_RETRIES;
                    if (!shouldRetry)
                    {
                        using (var iterator = requests.GetEnumerator())
                        {
                            while (iterator.MoveNext())
                            {
                                iterator.Current.Value.Resolve(asyncOp.webRequest.error);
                            }
                        }

                        asyncOp.Dispose();
                    }
                    else
                    {
                        retryCount++;

                        if (OpenSeaRequestController.VERBOSE)
                        {
                            Debug.Log($"RequestGroup: Request retrying {url}");
                        }

                        asyncOp.Dispose();

                        yield return(new WaitForSeconds(GetRetryDelay()));
                    }
                }
            } while (shouldRetry);
        }