private async Task Run(params object[] args) { Func <ILoader <object>, Task <object> > load = async(loader) => await Load(loader, resources); var loading = (await Scene.instance.Run("Loading", load)) as ILoader <object>; var loaderAssets = await loading.Get() as Tuple <ASSET_DIC, AsyncOperation>; this.assets = loaderAssets.Item1; var data = new SceneData() { name = name, args = args, operation = loaderAssets.Item2, option = new LoadingOption() { block = false }, }; await Scene.instance.Run(data); }
private async Task <Tuple <ASSET_DIC, AsyncOperation> > Load(ILoader <object> loading, List <string> resources) { async Task <Tuple <string, object> > LoadAssetsFunc() { var result = await LoadAssets(loading, resources); return(Tuple.Create("assets", result as object)); }; async Task <Tuple <string, object> > LoadSceneFunc() { var result = await Scene.instance.Load(this.name, BuildOption(loading)); return(Tuple.Create("scene", result as object)); }; var tasks = new List <IObservable <Tuple <string, object> > >(); tasks.Add(ObservableTask.Create(LoadAssetsFunc())); tasks.Add(ObservableTask.Create(LoadSceneFunc())); var loaders = await tasks.WhenAll(); ASSET_DIC assetDic = null; AsyncOperation asyncOperation = null; foreach (var loader in loaders) { if (loader.Item1.Equals("assets")) { assetDic = loader.Item2 as ASSET_DIC; } if (loader.Item1.Equals("scene")) { asyncOperation = loader.Item2 as AsyncOperation; } } return(Tuple.Create(assetDic, asyncOperation)); }
private Loader(string name, List <string> resources) { this.name = name; this.resources = resources; this.assets = new Dictionary <string, AssetRef>(); }