Exemple #1
0
        public IEnumerator InstantiateSceneFromMemoryAsync(RequestLoadSceneFromMemory requestScene)
        {
            string assetName = requestScene.AssetName;

            byte[] bytes   = requestScene.Bytes;
            int    version = 1;

            yield return(StartCoroutine(LoadAssetBundleFromMemory(bytes, assetName, version)));

            AssetBundle bundle = GetAssetBundle(assetName, version);

            if (bundle != null)
            {
                string path     = bundle.GetAllScenePaths()[0];
                var    response = new ResponseAsset {
                    Asset = bundle, Path = path, UserData = requestScene.UserData
                };
                ((IRequest)requestScene).OnResponseDone(response);
            }
            else
            {
                string message = "Can not load asset " + requestScene.AssetName;
                ((IRequest)requestScene).OnResponseError(message);
            }
        }
Exemple #2
0
        public IEnumerator InstantiateGameObjectAsync(RequestAsset requestAsset)
        {
            string path    = requestAsset.Uri;
            int    version = 1;

            yield return(StartCoroutine(DownloadAssetBundle(path, version)));

            AssetBundle bundle = GetAssetBundle(path, version);

            if (bundle != null)
            {
                var loadAssetAsync = bundle.LoadAssetAsync(requestAsset.AssetName);
                yield return(loadAssetAsync);

                var response = new ResponseAsset {
                    Asset = loadAssetAsync.asset, UserData = requestAsset.UserData
                };
                ((IRequest)requestAsset).OnResponseDone(response);
            }
            else
            {
                string message = "Can not load asset " + requestAsset.AssetName;
                ((IRequest)requestAsset).OnResponseError(message);
            }

            yield return(true);
        }
Exemple #3
0
        public IEnumerator InstantiateAssetFromMemoryAsync(RequestLoadAssetFromMemory requestAsset)
        {
            string assetName = requestAsset.AssetName;

            byte[] bytes   = requestAsset.Bytes;
            int    version = 1;

            yield return(StartCoroutine(LoadAssetBundleFromMemory(bytes, assetName, version)));

            AssetBundle bundle = GetAssetBundle(assetName, version);

            if (bundle != null)
            {
                var loadAssetAsync = bundle.LoadAssetAsync(requestAsset.AssetName);
                yield return(loadAssetAsync);

                var response = new ResponseAsset {
                    Asset = loadAssetAsync.asset, UserData = requestAsset.UserData
                };
                ((IRequest)requestAsset).OnResponseDone(response);
                bundle.Unload(false);
            }
            else
            {
                string message = "Can not load asset " + requestAsset.AssetName;
                ((IRequest)requestAsset).OnResponseError(message);
            }
        }
        private static void LoadSceneFromStorage(LocationPrefub locationPrefub, string environmentDirectory)
        {
            string sceneName = locationPrefub.Name;

            LogManager.GetCurrentClassLogger().Info($"Loading location \"{sceneName}\" from storage: " + Time.time);
            byte[] bytes = null;

            RequestTread requestTread = new RequestTread(delegate
            {
                bytes = File.ReadAllBytes(Path.Combine(environmentDirectory, "bundle"));
            });

            requestTread.OnFinish += responseTread =>
            {
                RequestLoadSceneFromMemory request = new RequestLoadSceneFromMemory(sceneName, bytes);

                request.OnFinish += response1 =>
                {
                    ResponseAsset response  = (ResponseAsset)response1;
                    string        scenePath = Path.GetFileNameWithoutExtension(response.Path);
                    WorldDataListener.Instance.LoadScene(scenePath);
                };

                request.OnError += s =>
                {
                    string message = ErrorHelper.GetErrorDescByCode(TM.Errors.ErrorCode.EnvironmentNotFoundError);
                    LogManager.GetCurrentClassLogger().Fatal("Location is not loaded from storage! " + s);
                    LauncherErrorManager.Instance.Show(message, null);
                };
            };
        }
        public static void LoadScene(int locationId)
        {
            _startLoadingTime = DateTime.Now;

            LocationPrefub location = WorldData.WorldStructure.Locations.GetLocation(locationId);

            if (location == null)
            {
                return;
            }

            string sceneName = location.Name;

            LogManager.GetCurrentClassLogger().Info($"Loading location \"{sceneName}\" from tar file");
            RequestTar requestConfig = new RequestTar(location.Resources.Config);

            requestConfig.OnFinish += responseConfig =>
            {
                SceneData  sceneData  = ((ResponseTar)responseConfig).TextData.JsonDeserialize <SceneData>();
                RequestTar requestTar = new RequestTar(location.Resources.Bundle);

                requestTar.OnFinish += response =>
                {
                    ResponseTar responseTar = (ResponseTar)response;
                    byte[]      bundle      = responseTar.ByteData;

                    RequestLoadSceneFromMemory request =
                        new RequestLoadSceneFromMemory(sceneData.AssetBundleLabel, bundle);

                    request.OnFinish += response1 =>
                    {
                        ResponseAsset responseAsset = (ResponseAsset)response1;
                        string        scenePath     = Path.GetFileNameWithoutExtension(responseAsset.Path);

                        WorldDataListener.Instance.LoadScene(scenePath);
                    };

                    Resources.UnloadUnusedAssets();

                    request.OnError += s => { Helper.ShowErrorLoadScene(); };
                };

                requestTar.OnError += s => { Helper.ShowErrorLoadScene(); };
            };
        }
Exemple #6
0
        public static void LoadResourcesApi(AssetInfo assetInfo, PrefabObject o)
        {
            string assetBundleUri = o.Resources.Bundle;

            if (assetInfo.Resources == null)
            {
                return;
            }

            foreach (string assetName in assetInfo.Resources)
            {
                new RequestAsset(assetName, assetBundleUri).OnFinish += response2 =>
                {
                    ResponseAsset responseResource = (ResponseAsset)response2;
                    ObjectResourses.AddResourse(responseResource.Asset);
                };
            }
        }
Exemple #7
0
        protected void CreatePrefabEntity(IResponse response, PrefabObject o, Sprite icon = null)
        {
            var alreadyLoaded = GameStateData.GetPrefabData(o.Id);

            if (alreadyLoaded != null)
            {
                LoadCounter.loadObjectsCounter.PrefabsLoaded++;
                LogManager.GetCurrentClassLogger().Info(o.Config.i18n.en + " was ignored, because it already loaded");
                return;
            }

            ResponseAsset responseAsset = (ResponseAsset)response;
            Object        unityObject   = responseAsset.Asset;
            PrefabObject  serverObject  = (PrefabObject)responseAsset.UserData[0];
            GameEntity    entity        = Contexts.sharedInstance.game.CreateEntity();

            entity.AddServerObject(serverObject);
            GameStateData.AddPrefabGameObject(serverObject.Id, responseAsset.Asset, o);
            GameStateData.AddObjectIcon(serverObject.Id, icon);
            entity.AddIcon(icon);

            if (o.Embedded)
            {
                GameStateData.AddToEmbeddedList(serverObject.Id);
            }

            GameObject gameObject = unityObject as GameObject;

            if (gameObject != null)
            {
                entity.AddGameObject(gameObject);
            }

            else
            {
                string message = $"Game object is null in asset {o.Config.i18n.en}";
                Logger.Fatal(message);
                RequestManager.Instance.StopRequestsWithError(message);
                return;
            }

            LoadCounter.loadObjectsCounter.PrefabsLoaded++;
            LogManager.GetCurrentClassLogger().Info(o.Config.i18n.en + " is loaded");
        }
Exemple #8
0
        private static void CreatePrefabEntity(IResponse response, ref GameEntity counter, PrefabObject o, Sprite icon = null)
        {
            ResponseAsset responseAsset = (ResponseAsset)response;
            Object        unityObject   = responseAsset.Asset;
            PrefabObject  serverObject  = (PrefabObject)responseAsset.UserData[0];
            GameEntity    entity        = Contexts.sharedInstance.game.CreateEntity();

            entity.AddServerObject(serverObject);
            GameStateData.AddPrefabGameObject(serverObject.Id, responseAsset.Asset, o);
            GameStateData.AddObjectIcon(serverObject.Id, icon);

            if (o.Embedded)
            {
                GameStateData.AddToEmbeddedList(serverObject.Id);
            }

            AddCastComponent(unityObject, entity);
            entity.AddIcon(icon);
            counter.loadObjectsCounter.PrefabsLoaded++;
            LogManager.GetCurrentClassLogger().Info(o.Config.i18n.en + " is loaded");
        }
Exemple #9
0
        public static void LoadResourcesTar(AssetInfo assetInfo, PrefabObject o)
        {
            string assetBundleUri = o.Resources.Bundle;

            if (assetInfo.Resources != null)
            {
                foreach (string resource in assetInfo.Resources)
                {
                    new RequestTar(assetBundleUri).OnFinish += response =>
                    {
                        var bundle = ((ResponseTar)response).ByteData;

                        new RequestLoadAssetFromMemory(resource, bundle).OnFinish += response2 =>
                        {
                            ResponseAsset responseResource = (ResponseAsset)response2;
                            ObjectResourses.AddResourse(responseResource.Asset);
                        };
                    };
                }
            }
        }
Exemple #10
0
        public override void LoadLocation(int locationId)
        {
            LocationPrefab location = ProjectData.ProjectStructure.Locations.GetProjectScene(locationId);

            Logger.Info($"Loading location \"{location.Name}\" from tar file");
            RequestFileRead requestConfig = new RequestFileRead(location.ConfigResource);

            requestConfig.OnFinish += responseConfig =>
            {
                SceneData sceneData = ((ResponseFileRead)responseConfig).TextData.JsonDeserialize <SceneData>();

                RequestFileRead requestFileRead = new RequestFileRead(ProjectData.ProjectStructure.IsMobile
                    ? location.AndroidBundleResource
                    : location.BundleResource);

                requestFileRead.OnFinish += response =>
                {
                    ResponseFileRead responseFileRead = (ResponseFileRead)response;
                    byte[]           bundle           = responseFileRead.ByteData;

                    RequestLoadSceneFromMemory request =
                        new RequestLoadSceneFromMemory(sceneData.AssetBundleLabel, bundle);

                    request.OnFinish += response1 =>
                    {
                        ResponseAsset responseAsset = (ResponseAsset)response1;
                        string        scenePath     = Path.GetFileNameWithoutExtension(responseAsset.Path);

                        ProjectDataListener.Instance.LoadScene(scenePath);
                    };

                    Resources.UnloadUnusedAssets();

                    request.OnError += s => { Helper.ShowErrorLoadScene(); };
                };

                requestFileRead.OnError += s => { Helper.ShowErrorLoadScene(); };
            };
        }
Exemple #11
0
        private void LoadLocationFromWeb(LocationPrefab locationPrefab, string environmentDirectory)
        {
            DateTime startLoadingTime = DateTime.Now;

            Logger.Info($"Loading location \"{locationPrefab.Name}\" from web");
            RequestUri sceneDataRequest = new RequestUri(locationPrefab.ConfigResource);

            sceneDataRequest.OnFinish += response =>
            {
                string    json      = ((ResponseUri)response).TextData;
                SceneData sceneData = json.JsonDeserialize <SceneData>();

                List <string> environmentFiles = new List <string>(3)
                {
                    ProjectData.IsMobileVr() ? locationPrefab.AndroidBundleResource : locationPrefab.BundleResource,
                              locationPrefab.IconResource,
                              ProjectData.IsMobileVr()
                        ? locationPrefab.AndroidManifestResource
                        : locationPrefab.ManifestResource,
                };

                RequestDownLoad requestDownloads = new RequestDownLoad(environmentFiles,
                                                                       environmentDirectory,
                                                                       LoaderAdapter.OnLoadingUpdate,
                                                                       this,
                                                                       LanguageManager.Instance.GetTextValue("LOADING_FILE"));

                requestDownloads.OnFinish += response1 =>
                {
                    TimeSpan span = DateTime.Now - startLoadingTime;

                    Logger.Info($"Location \"{locationPrefab.Name}\" is loaded. Time = {span.Seconds} sec.");

                    ResponseDownLoad responseDownLoad = (ResponseDownLoad)response1;

                    string sceneName = sceneData.Name;

                    string assetName = ProjectData.IsMobileVr()
                        ? "android_" + sceneData.AssetBundleLabel
                        : sceneData.AssetBundleLabel;

                    foreach (var key in responseDownLoad.DownLoadedData.Keys)
                    {
                        Logger.Info("Downloaded for scene" + sceneName + ": " + key);
                    }

                    byte[] bytes = responseDownLoad.DownLoadedData[assetName].ToArray();

                    Logger.Info($"Loading location \"{sceneName}\"...");

                    RequestLoadSceneFromMemory request = new RequestLoadSceneFromMemory(sceneName, bytes);

                    request.OnFinish += response2 =>
                    {
                        ResponseAsset responseAsset = (ResponseAsset)response2;
                        string        scenePath     = Path.GetFileNameWithoutExtension(responseAsset.Path);
                        ProjectDataListener.Instance.LoadScene(scenePath);
                    };

                    request.OnError += s => { ShowErrorLoadScene(); };
                };

                requestDownloads.OnError += s => { ShowErrorLoadScene(); };
            };

            sceneDataRequest.OnError += s => { ShowErrorLoadScene(); };
        }