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); } }
/// <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); }