Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);