public void SetUp()
        {
            _cachedLoader = Substitute.For <IBundleCachedLoader>();

            // Mock bundleManifest
            _bundleManifestLoader = Substitute.For <IBundleManifestLoader>();
            _bundleManifest       = Substitute.For <IBundleManifest>();
            _bundleManifestLoader.Load().Returns(Observable.Return(_bundleManifest));

            _fixture = new BundleLoader(_cachedLoader, _bundleManifestLoader);
        }
        public IObservable <IBundleManifest> Load() =>
        _bundleManifest == null
                ? _innerLoader
        .Load <IBundle>(_manifestUri)
        .ContinueWith(bundle => bundle.LoadAsset <AssetBundleManifest>(ManifestAssetName))
        .Select(x =>
        {
            if (x == null)
            {
                throw new InvalidOperationException(
                    $"No AssetBundleManifest found from bundleManifest uri {_manifestUri}");
            }

            return(_bundleManifest = new BundleManifestAdaptor(x));
        })
                : Observable.Return(_bundleManifest);
Example #3
0
        private IObservable<List<string>> LoadAllDependencies(IBundleManifest bundleManifest, string bundleName, Options options)
        {
            var loadedBundleNames = new List<string>();

            return bundleManifest
                .GetAllDependencies(bundleName)
                .Select(x => _cachedLoader
                    .LoadDependency(x, options, bundleName)
                    .Do(y =>
                    {
                        (y as IDisposable)?.Dispose();
                        loadedBundleNames.Add(x);
                    }))
                .WhenAll()
                .Select(x => loadedBundleNames)
                .DoOnError(ex => loadedBundleNames
                    .ForEach(x => _cachedLoader.UnloadDependency(x, bundleName))); // Todo DRY
        }