public async Task <MatchResult> RunMatch(MatchConfig config, bool loadScene = true) { Debug.Log($"Running Match. Config: {config}"); await DataLoader.LoadTask.Task; Task sceneLoad = Task.CompletedTask; if (loadScene) { var stage = Registry.Get <SceneData>().Get(config.StageID); Assert.IsTrue(stage != null && stage.Type == SceneType.Stage); await stage.GameScene.LoadAsync(); } var additionalScenes = Config.Get <SceneConfig>().AdditionalStageScenes; await Task.WhenAll(additionalScenes.Select(s => s.LoadAsync(LoadSceneMode.Additive))); var matchManager = MatchManager.Instance; matchManager.enabled = false; matchManager.Config = config; try { await LoadingScreen.Await(InitializeMatch(matchManager, config)); await LoadingScreen.AwaitAll(); } catch (Exception e) { Debug.LogException(e); } matchManager.enabled = true; return(await matchManager.RunMatch()); }