Esempio n. 1
0
        private async Task LoadAssets(LoadAssets payload, Action onCompleteCallback)
        {
            LoaderFunction loader;

            switch (payload.Source.ContainerType)
            {
            case AssetContainerType.GLTF:
                loader = LoadAssetsFromGLTF;
                break;

            default:
                throw new Exception(
                          $"Cannot load assets from unknown container type {payload.Source.ContainerType.ToString()}");
            }

            IList <Asset> assets         = null;
            string        failureMessage = null;

            // attempt to get cached assets instead of loading
            try
            {
                assets = await loader(payload.Source, payload.ContainerId, payload.ColliderType);

                ActiveContainers.Add(payload.ContainerId);
            }
            catch (Exception e)
            {
                failureMessage = UtilMethods.FormatException(
                    $"An unexpected error occurred while loading the asset [{payload.Source.Uri}].", e);
            }

            _app.Protocol.Send(new Message()
            {
                ReplyToId = payload.MessageId,
                Payload   = new AssetsLoaded()
                {
                    FailureMessage = failureMessage,
                    Assets         = assets?.ToArray()
                }
            });
            onCompleteCallback?.Invoke();
        }
        private async Task LoadAssets(LoadAssets payload, Action onCompleteCallback)
        {
            LoaderFunction loader;

            switch (payload.Source.ContainerType)
            {
            case AssetContainerType.GLTF:
                loader = LoadAssetsFromGLTF;
                break;

            default:
                throw new Exception(
                          $"Cannot load assets from unknown container type {payload.Source.ContainerType.ToString()}");
            }

            IList <Asset> assets         = null;
            string        failureMessage = null;

            // attempt to get cached assets instead of loading
            var oldGuids = MREAPI.AppsAPI.AssetCache.GetAssetIdsInSource(payload.Source);

            if (oldGuids != null)
            {
                assets = new List <Asset>(5);
                foreach (var guid in oldGuids)
                {
                    var oldAsset = MREAPI.AppsAPI.AssetCache.GetAsset(guid);
                    if (oldAsset == null)
                    {
                        continue;
                    }

                    var patch = GenerateAssetPatch(oldAsset, guid);
                    patch.Name   = oldAsset.name;
                    patch.Source = payload.Source;
                    assets.Add(patch);
                }
            }
            else
            {
                try
                {
                    assets = await loader(payload.Source, payload.ColliderType);
                }
                catch (Exception e)
                {
                    failureMessage = UtilMethods.FormatException(
                        $"An unexpected error occurred while loading the asset [{payload.Source.Uri}].", e);
                }
            }

            _app.Protocol.Send(new Message()
            {
                ReplyToId = payload.MessageId,
                Payload   = new AssetsLoaded()
                {
                    FailureMessage = failureMessage,
                    Assets         = assets ?? new Asset[] { }
                }
            });
            onCompleteCallback?.Invoke();
        }