public async Task LaunchAndSpectate(LoadedReplay loadedReplay) { await contextSetter.SetContextAsync(loadedReplay); await gameController.LaunchAsync(); if (settings.OBS.Enabled) { obsController.ConfigureFromContext(); obsController.SwapToGameScene(); obsController.StartRecording(); await spectator.SpectateAsync(); obsController.StopRecording(); gameController.Kill(); await obsController.CycleReportAsync(); obsController.SwapToWaitingScene(); } else { await spectator.SpectateAsync(); gameController.Kill(); } }
private async Task SpectatorAsync() { while (!consoleTokenProvider.Token.IsCancellationRequested) { LoadedReplay loadedReplay = await replayProvider.TryLoadNextReplayAsync(); if (loadedReplay != null) { await gameManager.LaunchAndSpectate(loadedReplay); } } }
public async Task OutputReportAsync() { await gameData.LoadDataAsync().ConfigureAwait(false); LoadedReplay loadedReplay = await provider.TryLoadNextReplayAsync(); IEnumerable <string> lines = analyzer.GetPlayers(loadedReplay.Replay) .Select(WriteCsvLine) .Prepend(string.Join(",", headers)); Directory.CreateDirectory(settings.SpectateReportPath); string report = Path.Combine(settings.SpectateReportPath, Path.GetFileName(loadedReplay.FileInfo.FullName) + ".csv"); await File.WriteAllLinesAsync(report, lines, tokenProvider.Token); }
public async Task SetContextAsync(LoadedReplay loadedReplay) { if (loadedReplay == null) { throw new ArgumentNullException(nameof(loadedReplay)); } Previous = Current; Replay replay = loadedReplay.Replay; var players = replayAnalyzer.GetPlayers(replay); var panels = replayAnalyzer.GetPanels(replay); var end = replayAnalyzer.GetEnd(replay); var isCarried = replayAnalyzer.GetIsCarriedObjective(replay); var start = replayAnalyzer.GetStart(replay); var payloads = replayAnalyzer.GetPayloads(replay); var teamBans = replayAnalyzer.GetTeamBans(replay); var directory = Directory.CreateDirectory(settings.ContextsDirectory).CreateSubdirectory($"{loadedReplay.ReplayId}"); Current = new ContextData { LoadedReplay = loadedReplay, Payloads = payloads, Players = players, Panels = panels, GatesOpen = start, CoreKilled = end, IsCarriedObjectiveMap = isCarried, Timeloaded = DateTime.Now, Directory = directory, TeamBans = teamBans }; await contextFileManager.WriteContextFilesAsync(Current); }