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(); }