public static async Task <SourceDemo> TimeFlagAsync(this SourceDemo demo, string saveFlag = SaveFlags.SourceRuns) { if (demo.Messages.Count == 0) { throw new InvalidOperationException("Cannot time demo by flag without any parsed messages."); } var flag = demo .MessagesWhereType(typeof(ConsoleCmd)) .FirstOrDefault(msg => (msg as ConsoleCmd).Command == saveFlag); if (flag != null) { await demo.TimeExact(flag.Tick).ConfigureAwait(false); return(demo); } return(demo); }
public async Task <string> ParseCommandAsync(string command) { switch (command.ToLower()) { case "header": return($"HeaderId\t{_demo.HeaderId}\n" + $"Protocol\t{_demo.Protocol}\n" + $"NetworkProtocol\t{_demo.NetworkProtocol}\n" + $"GameDirectory\t{_demo.GameDirectory}\n" + $"MapName\t{_demo.MapName}\n" + $"ServerName\t{_demo.ServerName}\n" + $"ClientName\t{_demo.ClientName}\n" + $"PlaybackTime\t{_demo.PlaybackTime.ToString("N3")}\n" + $"PlaybackTicks\t{_demo.PlaybackTicks}\n" + $"PlaybackFrames\t{_demo.PlaybackFrames}\n" + $"SignOnLength\t{_demo.SignOnLength}"); case "header-id": return($"HeaderId\t{_demo.HeaderId}"); case "protocol": return($"Protocol\t{_demo.Protocol}"); case "netproc": case "net-protocol": return($"NetworkProtocol\t{_demo.NetworkProtocol}"); case "dir": case "game-dir": return($"GameDirectory\t{_demo.GameDirectory}"); case "map": case "map-name": return($"MapName\t{_demo.MapName}"); case "server": case "server-name": return($"ServerName\t{_demo.ServerName}"); case "client": case "client-name": return($"ClientName\t{_demo.ClientName}"); case "time": return($"PlaybackTime\t{_demo.PlaybackTime.ToString("N3")}"); case "ticks": return($"PlaybackTicks\t{_demo.PlaybackTicks}"); case "frames": return($"FrameCount\t{_demo.PlaybackFrames}"); case "signon": case "signonlength": return($"SignOnLength\t{_demo.SignOnLength}"); // Data case "tickrate": return($"Tickrate\t{_demo.GetTickrate()}"); case "ipt": case "interval-per-tick": return($"IntervalPerTick\t{_demo.GetIntervalPerTick().ToString("N3")}"); // Returns nothing case "time-exact": await _demo.TimeExact(); break; case "time-sf": case "time-flag": await _demo.TimeFlagAsync(); break; case "speedrun": if (!_discovered) { await Adjustments.DiscoverAsync(); _discovered = true; } await _demo.AdjustAsync(); break; } return(default);