Exemple #1
0
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            Minifier minifier = new Minifier();
            //MinifiedDemo demo = await minifier.MinifyDemoAsync("g2-vs-fnatic-m3-overpass.dem", new System.Threading.CancellationToken());

            //demo.SaveCompressed("g2-vs-fnatic-m3-overpass.minidem");

            MinifiedDemo demo = await minifier.MinifyDemoAsync("vitality-vs-mousesports-m1-inferno.dem", new System.Threading.CancellationToken());

            int baseCount     = 0;
            int positionCount = 0;
            int fullCount     = 0;

            foreach (var tick in demo.Ticks)
            {
                baseCount     += tick.PlayerStates.Count((s) => s.Type == PlayerStateType.Base);
                positionCount += tick.PlayerStates.Count((s) => s.Type == PlayerStateType.Position);
                fullCount     += tick.PlayerStates.Count((s) => s.Type == PlayerStateType.Full);
            }

            int entityBaseCount = 0;
            int entityFullCount = 0;

            foreach (var tick in demo.Ticks)
            {
                entityBaseCount += tick.EntityStates.Count((s) => s.Type == EntityStateType.Base);
                entityFullCount += tick.EntityStates.Count((s) => s.Type == EntityStateType.Full);
            }

            demo.SaveCompressed("vitality-vs-mousesports-m1-inferno.minidem");

            //MinifiedDemo demo = await minifier.MinifyDemoAsync("test2.dem", new System.Threading.CancellationToken());

            //demo.SaveCompressed("test2.minidem");
        }
Exemple #2
0
 public void Dispose()
 {
     Parser.Dispose();
     Demo                   = null;
     CurrentTick            = null;
     MostRecentPlayerStates = null;
     MostRecentEntityStates = null;
     ProgressCallback       = null;
 }
Exemple #3
0
        public async Task <MinifiedDemo> MinifyDemoAsync(string path, CancellationToken token, Action <string, float> progressCallback = null)
        {
            FileStream stream = File.OpenRead(path);

            Parser      = new DemoParser(stream);
            Demo        = new MinifiedDemo();
            CurrentTick = new Tick();

            MostRecentPlayerStates = new Dictionary <byte, FullPlayerState>();
            MostRecentEntityStates = new Dictionary <int, FullEntityState>();

            ProgressCallback = progressCallback;

            RegisterEvents();

            ParseHeader();

            bool completed = await Task.Run(() =>
            {
                try
                {
                    Parser.ParseToEnd(token);
                    return(true);
                }
                catch (Exception e)
                {
                    return(false);
                }
            }, token);

            stream.Dispose();

            if (!completed)
            {
                return(null);
            }

            return(Demo);
        }
Exemple #4
0
        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            MinifiedDemo   demo   = MinifiedDemo.LoadCompressed("g2-vs-fnatic-m3-overpass.minidem");
            MinifiedParser parser = new MinifiedParser(demo);

            radarMain.SetMap(parser.Map);

            parser.SmokeNadeStarted += (o, e) => radarMain.SmokeStarted(e.Position);
            parser.SmokeNadeEnded   += (o, e) => radarMain.SmokeEnded(e.Position);
            parser.FireNadeStarted  += (o, e) => radarMain.FireStarted(e.Position);
            parser.FireNadeEnded    += (o, e) => radarMain.FireEnded(e.Position);
            parser.RoundStart       += (o, e) => radarMain.ResetNades();
            parser.RoundEnd         += (o, e) => radarMain.ResetNades();
            parser.PlayerKilled     += (o, e) =>
            {
                Player killer = parser.PartipatingPlayers.First(p => p.SteamID == e.KillerSteamID);
                Player victim = parser.PartipatingPlayers.First(p => p.SteamID == e.VictimSteamID);
                radarMain.PlayerKilled(killer, victim, e.Weapon, e.Headshot, e.PenetratedObjects > 0);
            };
            parser.TickDone += (o, e) =>
            {
                foreach (var player in parser.PartipatingPlayers)
                {
                    radarMain.UpdatePlayer(player, false);

                    if (player.Team == Team.CounterTerrorist)           //Player is a CT
                    {
                        if (tPlayerEntries.ContainsKey(player.SteamID)) //Handle if player's team has changed
                        {
                            var oldEntry = tPlayerEntries[player.SteamID];
                            stackPanelTerrorists.Children.Remove(oldEntry);
                            tPlayerEntries.Remove(player.SteamID);
                        }

                        //Get or create new CT entry
                        PlayerHudEntryCT ctEntry;
                        if (ctPlayerEntries.ContainsKey(player.SteamID))
                        {
                            ctEntry = ctPlayerEntries[player.SteamID];
                        }
                        else
                        {
                            ctEntry = new PlayerHudEntryCT();
                            stackPanelCounterTerrorists.Children.Add(ctEntry);
                            ctPlayerEntries.Add(player.SteamID, ctEntry);
                        }

                        //Update player entry UI
                        ctEntry.SetName(player.Name);
                        ctEntry.SetHP(player.HP);
                        ctEntry.SetMoney(player.Money);
                        ctEntry.SetArmor(player.Armor, player.HasHelmet);
                        ctEntry.SetDefuseKit(player.HasDefuseKit);
                        ctEntry.SetPrimary(player.RawWeapons.Values.FirstOrDefault(w => w.Class == EquipmentClass.Rifle || w.Class == EquipmentClass.SMG || w.Class == EquipmentClass.Heavy));
                        ctEntry.SetSecondary(player.RawWeapons.Values.FirstOrDefault(w => w.Class == EquipmentClass.Pistol));
                        ctEntry.SetSmokeGrenade(player.HasSmokeGrenade);
                        ctEntry.SetHEGrenade(player.HasHighExplosiveGrenade);
                        ctEntry.SetFlashGrenadeCount(player.FlasbangCount);
                        ctEntry.SetMolotov(player.HasMolotov);
                        ctEntry.SetIncendiary(player.HasIncendiary);
                    }
                    else //Player is a T
                    {
                        if (ctPlayerEntries.ContainsKey(player.SteamID)) //Handle if player's team has changed
                        {
                            var oldEntry = ctPlayerEntries[player.SteamID];
                            stackPanelCounterTerrorists.Children.Remove(oldEntry);
                            ctPlayerEntries.Remove(player.SteamID);
                        }

                        //Get or create new T entry
                        PlayerHudEntryT tEntry;
                        if (tPlayerEntries.ContainsKey(player.SteamID))
                        {
                            tEntry = tPlayerEntries[player.SteamID];
                        }
                        else
                        {
                            tEntry = new PlayerHudEntryT();
                            stackPanelTerrorists.Children.Add(tEntry);
                            tPlayerEntries.Add(player.SteamID, tEntry);
                        }

                        //Update player entry UI
                        tEntry.SetName(player.Name);
                        tEntry.SetHP(player.HP);
                        tEntry.SetMoney(player.Money);
                        tEntry.SetArmor(player.Armor, player.HasHelmet);
                        tEntry.SetBomb(false);
                        tEntry.SetPrimary(player.RawWeapons.Values.FirstOrDefault(w => w.Class == EquipmentClass.Rifle || w.Class == EquipmentClass.SMG || w.Class == EquipmentClass.Heavy));
                        tEntry.SetSecondary(player.RawWeapons.Values.FirstOrDefault(w => w.Class == EquipmentClass.Pistol));
                        tEntry.SetSmokeGrenade(player.HasSmokeGrenade);
                        tEntry.SetHEGrenade(player.HasHighExplosiveGrenade);
                        tEntry.SetFlashGrenadeCount(player.FlasbangCount);
                        tEntry.SetMolotov(player.HasMolotov);
                        tEntry.SetIncendiary(player.HasIncendiary);
                    }
                }
            };


            DispatcherTimer timer = new DispatcherTimer();

            timer.Interval = TimeSpan.FromMilliseconds(0);
            timer.Tick    += (o, args) => parser.ParseNextTick();
            timer.Start();
        }
Exemple #5
0
        public MinifiedParser(MinifiedDemo demo)
        {
            Demo = demo;

            currentTick = Demo.Ticks[CurrentTickIndex];
        }