Exemplo n.º 1
0
        public async Task Parsing()
        {
            const string source = "portal2_sp.dem";

            var parser = new SourceParser();
            var demo   = await parser.ParseFromFileAsync(Paths.Demos + source);
        }
Exemplo n.º 2
0
        public async Task Discover()
        {
            try
            {
                const string source = "portal2_cm_coop.dem";

                var parser = new SourceParser();
                var demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

                Console.WriteLine("Before: " + demo.PlaybackTicks);

                // Load automatically from assembly
#if !DISCOVER_2
                await Adjustments.DiscoverAsync();
#else
                await Adjustments.DiscoverAsync(System.Reflection.Assembly.GetEntryAssembly());
#endif
                await demo.AdjustAsync();

                Console.WriteLine("After: " + demo.PlaybackTicks);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Exemplo n.º 3
0
        public async Task Net()
        {
            const string source = "portal2.dem";

            var parser = new SourceParser(new SourceParserOptions()
            {
                ReadPackets = true
            });

            var demo = await parser.ParseFromFileAsync(Paths.Demos + source);

            var dump = new System.Collections.Generic.List <string>();

            foreach (var msg in demo.Messages)
            {
                if (msg is Packet packet)
                {
                    dump.Add($"--- tick {msg.Tick} ---");
                    foreach (var nmsg in packet.NetMessages)
                    {
                        dump.Add($"{nmsg.Code} {nmsg.Name}");
                    }
                }
            }

            await System.IO.File.WriteAllLinesAsync("logs/dump.txt", dump);
        }
Exemplo n.º 4
0
        public async Task OldEngine()
        {
            const string source = "hl2oe.dem";
            var          parser = new SourceParser();
            var          demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

            Console.WriteLine($"Messages: {demo.Messages.Count}");
        }
Exemplo n.º 5
0
        public async Task Portal()
        {
            const string source = "portal_steampipe.dem";
            var          parser = new SourceParser();
            var          demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

            Console.WriteLine($"Messages: {demo.Messages.Count}");
            foreach (var message in demo.Messages.Take(50))
            {
                Console.WriteLine(message);
            }
        }
Exemplo n.º 6
0
        // TODO: Real benchmarking
        public async Task Timing()
        {
            const string source = "portal2_sp.dem";

            var watch = new Stopwatch();

            var fast = new SourceParser();
            var slow = new SourceParser(new SourceParserOptions()
            {
                ReadPackets      = true,
                ReadDataTables   = true,
                ReadStringTables = true,
                ReadUserCmds     = true,
            });
            var headeronly = new SourceParser(new SourceParserOptions()
            {
                ReadMessages = false
            });

            // Everything
            watch = Stopwatch.StartNew();
            _     = await slow.ParseFromFileAsync(Paths.Demos + source);

            watch.Stop();
            var result2 = watch.Elapsed.TotalMilliseconds;

            // Default
            watch = Stopwatch.StartNew();
            _     = await fast.ParseFromFileAsync(Paths.Demos + source);

            watch.Stop();
            var result1 = watch.Elapsed.TotalMilliseconds;

            // Header only
            watch = Stopwatch.StartNew();
            _     = await headeronly.ParseFromFileAsync(Paths.Demos + source);

            watch.Stop();
            var result3 = watch.Elapsed.TotalMilliseconds;

            Console.WriteLine($"Default: {result1}ms");
            Console.WriteLine($"Everything: {result2}ms ({(int)(result2 / result1)} times slower)");
            Console.WriteLine($"Header only: {result3}ms ({(int)(result1 / result3)} times faster)");

            /*	Random Result
             *                  Default: 33.0111ms
             *                  Everything: 82.6472ms (2 times slower)
             *                  Header only: 0.1249ms (264 times faster)
             */
        }
Exemplo n.º 7
0
        public async Task Portal2()
        {
            const string source = "portal2_sp.dem";
            var          parser = new SourceParser();
            var          demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

            foreach (var message in demo.Messages)
            {
                if (message is UserCmd ucmsg)
                {
                    Console.WriteLine(message.Tick + ": " + (ucmsg as UserCmd).Cmd.SideMove);
                }
            }
        }
Exemplo n.º 8
0
        public async Task Modification()
        {
            const string source      = "portal2_sp.dem";
            const string destination = "portal2_sp_edit.dem";

            var parser   = new SourceParser();
            var exporter = new SourceExporter();

            var demo = await parser.ParseFromFileAsync(Paths.Demos + source);

            var demo2 = default(SourceDemo);

            await exporter.ExportToFileAsync(Paths.Export + destination, demo);

            try
            {
                Console.WriteLine("Parsing exported demo...");
                demo2 = await parser.ParseFromFileAsync(Paths.Export + destination);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Exemplo n.º 9
0
        public async Task Analyze()
        {
            const string source = "splice.dem";
            var          parser = new SourceParser();
            var          demo   = await parser.ParseFromFileAsync(Paths.Export + source);

            using (var fs = File.Create(Paths.Logs + "test.txt"))
                using (var sr = new StreamWriter(fs))
                {
                    foreach (var msg in demo.Messages)
                    {
                        sr.WriteLine(msg);
                    }
                }
        }
Exemplo n.º 10
0
        public async Task Cleanup()
        {
            const string source = "portal2_pausing.dem";

            var parser = new SourceParser();
            var demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

            bool RemovePacket = false;
            var  copy         = demo.Messages.ToArray();

            demo.Messages.CopyTo(copy);

            var index = 0;

            foreach (var msg in copy)
            {
                if (msg.Tick > 0)
                {
                    if (msg is ConsoleCmd console)
                    {
                        if (console.Command == "gameui_activate")
                        {
                            RemovePacket = true;
                        }
                        else if (console.Command == "gameui_hide")
                        {
                            RemovePacket = false;
                        }
                    }
                    else if ((msg is UserCmd) || (msg is Packet))
                    {
                        if (RemovePacket)
                        {
                            demo.Messages.RemoveAt(index);
                            --index;
                        }
                    }
                }
                ++index;
            }

            var exporter = new SourceExporter();
            await exporter.ExportToFileAsync(Paths.Demos + "portal2_cleanup.dem", demo);
        }
Exemplo n.º 11
0
        public async Task DirectLoad()
        {
            try
            {
                const string source = "portal2_cm_coop.dem";

                var parser = new SourceParser();
                var demo   = await parser.ParseFromFileAsync(Paths.Demos + source);

                Console.WriteLine("Before: " + demo.PlaybackTicks);

                // Load custom demo directly
                await Adjustments.LoadAsync <CustomDemo>();

                await demo.AdjustAsync();

                Console.WriteLine("After: " + demo.PlaybackTicks);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Exemplo n.º 12
0
        public async Task Splice()
        {
            const string source1 = "ademo.dem";
            const string source2 = "ademo2.dem";
            const string source3 = "ademo2.dem";
            const string output  = "splice.dem";

            var demos = new List <SourceDemo>();
            var files = new List <string>()
            {
                Paths.Test + source1,
                Paths.Test + source2,
                Paths.Test + source3,
            };

            var parser   = new SourceParser();
            var exporter = new SourceExporter();

            if (files.Count < 2)
            {
                throw new InvalidOperationException("Need at least two demos for merging them together.");
            }

            foreach (var source in files)
            {
                var demo = await parser.ParseFromFileAsync(source);

                demo.Messages.RemoveAll(m => m.Name == "Stop");
                demos.Add(demo);
            }

            var result = demos.First();
            var tick   = 0;

            foreach (var demo in demos.Skip(1))
            {
                tick = result.PlaybackTicks;

                result.PlaybackTicks  += demo.PlaybackTicks;
                result.PlaybackTime   += demo.PlaybackTime;
                result.PlaybackFrames += demo.PlaybackFrames;

                var messages = demo.Messages.Where(m =>
                {
                    return((m is Packet) ||
                           (m is DataTables) ||
                           (m is UserCmd) ||
                           (m is ConsoleCmd) ||
                           (m is Stop));
                });

                foreach (DemoMessage msg in messages)
                {
                    msg.Tick += tick;
                }

                result.Messages.AddRange(messages);
            }
            result.Messages.Add(new Stop());

            await exporter.ExportToFileAsync(Paths.Export + output, result);
        }