コード例 #1
0
        public void DrawStuff(Stuff stuff)
        {
            try
            {
                SmokeLayer.Clear();
                float startX = MapService.CalculatePointToResolutionX(stuff.StartX);
                float startY = MapService.CalculatePointToResolutionY(stuff.StartY);
                float endX   = MapService.CalculatePointToResolutionX(stuff.EndX);
                float endY   = MapService.CalculatePointToResolutionY(stuff.EndY);

                Bitmap startIcon = null;
                Bitmap endIcon   = null;

                switch (stuff.Type)
                {
                case StuffType.SMOKE:
                    startIcon = GetIconBitmapFromStream("smokegrenade");
                    endIcon   = GetIconBitmapFromStream("smoke");
                    break;

                case StuffType.FLASHBANG:
                    startIcon = GetIconBitmapFromStream("flashbang");
                    endIcon   = GetIconBitmapFromStream("flashbang_exploded");
                    break;

                case StuffType.HE:
                    startIcon = GetIconBitmapFromStream("hegrenade");
                    endIcon   = GetIconBitmapFromStream("he_exploded");
                    break;

                case StuffType.MOLOTOV:
                    startIcon = GetIconBitmapFromStream("molotov");
                    endIcon   = GetIconBitmapFromStream("molotov_burning");
                    break;

                case StuffType.DECOY:
                    startIcon = GetIconBitmapFromStream("decoy");
                    endIcon   = GetIconBitmapFromStream("decoy_screaming");
                    break;
                }

                if (startIcon == null || endIcon == null)
                {
                    return;
                }

                DrawIcon(SmokeLayer, startIcon, new PositionPoint
                {
                    X = startX,
                    Y = startY
                });
                DrawIcon(SmokeLayer, endIcon, new PositionPoint
                {
                    X = endX,
                    Y = endY
                });
                SmokeLayer.DrawLineAa((int)startX, (int)startY, (int)endX, (int)endY, ColorToInt(_colors[0]));

                startIcon.Dispose();
                endIcon.Dispose();
            }
            catch (Exception e)
            {
                Logger.Instance.Log(e);
            }
        }
コード例 #2
0
        /// <summary>
        /// Return PositionPoint for each players determined by selection
        /// </summary>
        /// <param name="demo"></param>
        /// <param name="teamSelector"></param>
        /// <param name="selectedPlayer"></param>
        /// <param name="round"></param>
        /// <returns></returns>
        public async Task <List <List <PositionPoint> > > GetPoints(Demo demo, string teamSelector, Player selectedPlayer, Round round)
        {
            List <List <PositionPoint> > points = new List <List <PositionPoint> >();

            if (teamSelector != null)
            {
                switch (teamSelector)
                {
                case "CT":
                    demo.PositionPoints.Reverse();

                    foreach (Player playerExtended in demo.Players)
                    {
                        List <PositionPoint> playerPoints = new List <PositionPoint>();

                        for (int i = demo.PositionPoints.Count - 1; i >= 0; i--)
                        {
                            if (demo.PositionPoints[i].RoundNumber != round.Number)
                            {
                                continue;
                            }

                            // Keep kills from terrorists
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Team == Side.Terrorist &&
                                demo.PositionPoints[i].Event.GetType() == typeof(KillEvent))
                            {
                                KillEvent e = (KillEvent)demo.PositionPoints[i].Event;
                                if (e.KillerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].Team != Side.CounterTerrorist)
                            {
                                continue;
                            }

                            // Molotov started
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireStartedEvent))
                            {
                                MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            // Molotov ended
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireEndedEvent))
                            {
                                MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].PlayerSteamId != 0 &&
                                demo.PositionPoints[i].PlayerSteamId == playerExtended.SteamId)
                            {
                                playerPoints.Add(demo.PositionPoints[i]);
                                demo.PositionPoints.RemoveAt(i);
                            }
                        }
                        if (playerPoints.Any())
                        {
                            points.Add(playerPoints);
                        }
                    }
                    break;

                case "T":
                    demo.PositionPoints.Reverse();

                    foreach (Player playerExtended in demo.Players)
                    {
                        List <PositionPoint> playerPoints = new List <PositionPoint>();

                        for (int i = demo.PositionPoints.Count - 1; i >= 0; i--)
                        {
                            if (demo.PositionPoints[i].RoundNumber != round.Number)
                            {
                                continue;
                            }

                            // Keep kills from CT
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Team == Side.CounterTerrorist &&
                                demo.PositionPoints[i].Event.GetType() == typeof(KillEvent))
                            {
                                KillEvent e = (KillEvent)demo.PositionPoints[i].Event;
                                if (e.KilledSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].Team != Side.Terrorist)
                            {
                                continue;
                            }

                            // Molotov started
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireStartedEvent))
                            {
                                MolotovFireStartedEvent e = (MolotovFireStartedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            // Molotov ended
                            if (demo.PositionPoints[i].Event != null &&
                                demo.PositionPoints[i].Event.GetType() == typeof(MolotovFireEndedEvent))
                            {
                                MolotovFireEndedEvent e = (MolotovFireEndedEvent)demo.PositionPoints[i].Event;
                                if (e.ThrowerSteamId == playerExtended.SteamId)
                                {
                                    playerPoints.Add(demo.PositionPoints[i]);
                                    demo.PositionPoints.RemoveAt(i);
                                    continue;
                                }
                            }

                            if (demo.PositionPoints[i].PlayerSteamId == playerExtended.SteamId)
                            {
                                playerPoints.Add(demo.PositionPoints[i]);
                                demo.PositionPoints.RemoveAt(i);
                            }
                        }
                        if (playerPoints.Any())
                        {
                            points.Add(playerPoints);
                        }
                    }
                    break;

                case "BOTH":
                    points.AddRange(
                        demo.Players.Select(
                            playerExtended => demo.PositionPoints.Where(
                                point => point.RoundNumber == round.Number &&
                                point.PlayerSteamId == playerExtended.SteamId).ToList())
                        .Where(pts => pts.Any()));
                    break;
                }
            }

            if (selectedPlayer != null)
            {
                await Task.Run(delegate
                {
                    List <PositionPoint> pt = demo.PositionPoints.ToList().Where(
                        positionPoint => positionPoint.PlayerSteamId == selectedPlayer.SteamId &&
                        positionPoint.RoundNumber == round.Number ||
                        (positionPoint.Event != null &&
                         positionPoint.Event.GetType() == typeof(KillEvent)) &&
                        positionPoint.RoundNumber == round.Number).ToList();
                    if (pt.Any())
                    {
                        points.Add(pt);
                    }
                });
            }

            // Set players color
            await Task.Run(delegate
            {
                int index = 0;
                foreach (List <PositionPoint> positionPoints in points.ToList())
                {
                    foreach (PositionPoint positionPoint in positionPoints)
                    {
                        positionPoint.X     = MapService.CalculatePointToResolutionX(positionPoint.X);
                        positionPoint.Y     = MapService.CalculatePointToResolutionY(positionPoint.Y);
                        positionPoint.Color = ColorToInt(_colors[index]);
                    }
                    index++;
                }
            });

            return(points);
        }