Пример #1
0
        // While still in design this function draws directly to the component.
        // Once design is complete it will paint to a image, then the image painted to the component for a little speed boost.
        private void DrawKillCircles(Graphics g, Kill kKill, KillDisplayDetails kddKillDetails) {

            PointF pntLineStart = new PointF((float)kKill.KillerLocation.X, (float)kKill.KillerLocation.Y);
            PointF pntLineEnd = new PointF((float)kKill.VictimLocation.X, (float)kKill.VictimLocation.Y);
            PointF pntLineHalfway = new PointF(pntLineStart.X - (pntLineStart.X - pntLineEnd.X) / 2, pntLineStart.Y - (pntLineStart.Y - pntLineEnd.Y) / 2 - 3);
            PointF pntLineHalfway2 = new PointF(pntLineStart.X - (pntLineStart.X - pntLineEnd.X) / 2, pntLineStart.Y - (pntLineStart.Y - pntLineEnd.Y) / 2 - 4);

            LinearGradientBrush killBrush = this.GetKillColour(this.KillColours, kKill, kddKillDetails);

            GraphicsPath gpKillCircles = new GraphicsPath();
            gpKillCircles.AddEllipse(new Rectangle(kKill.KillerLocation.X - this.ErrorRadius, kKill.KillerLocation.Y - this.ErrorRadius, this.ErrorRadius * 2, this.ErrorRadius * 2));
            gpKillCircles.AddEllipse(new Rectangle(kKill.VictimLocation.X - this.ErrorRadius, kKill.VictimLocation.Y - this.ErrorRadius, this.ErrorRadius * 2, this.ErrorRadius * 2));
            gpKillCircles.FillMode = FillMode.Winding;

            //GraphicsPath gpKill = new GraphicsPath();
            GraphicsPath gpKill = (GraphicsPath)gpKillCircles.Clone();
            gpKill.AddClosedCurve(new PointF[] { pntLineStart, pntLineHalfway, pntLineEnd, pntLineHalfway2 });
            //gpKill.AddEllipse(new Rectangle(kKill.KillerLocation.X - this.ErrorRadius, kKill.KillerLocation.Y - this.ErrorRadius, this.ErrorRadius * 2, this.ErrorRadius * 2));
            //gpKill.AddEllipse(new Rectangle(kKill.VictimLocation.X - this.ErrorRadius, kKill.VictimLocation.Y - this.ErrorRadius, this.ErrorRadius * 2, this.ErrorRadius * 2));
            gpKill.FillMode = FillMode.Winding;

            GraphicsPath gpKillOutline = (GraphicsPath)gpKill.Clone();
            //GraphicsPath gpKillOutline = new GraphicsPath(gpKill.PathPoints, gpKill.PathTypes);
            Matrix gpKillMatrix = new Matrix();
            gpKillOutline.Widen(this.m_pTwoWidth, gpKillMatrix, 0.01F);

            Region reKillOutline = new Region(gpKillOutline);
            reKillOutline.Exclude(gpKill);
            reKillOutline.Exclude(gpKillCircles);

            Region reKill = new Region(gpKill);
            reKill.Union(gpKillCircles);

            //Region reKillDropshadow = new Region(gpKill);
            //reKillDropshadow.Union(gpKillCircles);
            //reKillDropshadow.Union(reKillOutline);
            //reKillDropshadow.Translate(0.4F, 1.0F);

            if (reKill.IsVisible(this.ClientPointToGame(this.PointToClient(Cursor.Position))) == true) {
                kddKillDetails.IsMouseOver = true;
                kddKillDetails.Opacity = 1.0F;
            }
            else {
                kddKillDetails.IsMouseOver = false;
            }

            //g.FillRegion(new SolidBrush(Color.FromArgb((int)(64.0F * kddKillDetails.Opacity), Color.Black)), reKillDropshadow);
            g.FillRegion(killBrush, reKill);
            g.FillRegion(new SolidBrush(Color.FromArgb((int)(255.0F * kddKillDetails.Opacity), Color.Black)), reKillOutline);

            if (this.LoadedMapImagePack != null) {

                Image imgDeathIcon = null;
                if (kKill.Headshot == true) {
                    imgDeathIcon = this.LoadedMapImagePack.CompensateImageRotation(this.LoadedMapImagePack.GetIcon("Headshot"));
                }
                else {
                    imgDeathIcon = this.LoadedMapImagePack.CompensateImageRotation(this.LoadedMapImagePack.GetIcon("Death"));
                }

                if (imgDeathIcon != null) {
                    ColorMatrix colormatrix = new ColorMatrix();
                    colormatrix.Matrix00 = 1.0F;
                    colormatrix.Matrix11 = 1.0F;
                    colormatrix.Matrix22 = 1.0F;
                    colormatrix.Matrix33 = kddKillDetails.Opacity;
                    colormatrix.Matrix44 = 1.0F;
                    ImageAttributes imgattr = new ImageAttributes();
                    imgattr.SetColorMatrix(colormatrix);

                    Rectangle destRect = new Rectangle((int)pntLineEnd.X - 12, (int)pntLineEnd.Y - 12, 24, 24);
                    g.DrawImage(imgDeathIcon, destRect, 0, 0, imgDeathIcon.Width, imgDeathIcon.Height, GraphicsUnit.Pixel, imgattr);

                    imgattr.Dispose();
                    imgDeathIcon.Dispose();
                }
            }

            this.DrawMapText(g, kKill.Victim.SoldierName, kKill.VictimLocation, 16, kddKillDetails.Opacity);
            this.DrawMapText(g, kKill.Killer.SoldierName, kKill.KillerLocation, 16, kddKillDetails.Opacity);

            killBrush.Dispose();
            gpKillCircles.Dispose();
            gpKill.Dispose();
            gpKillOutline.Dispose();
            gpKillMatrix.Dispose();
            reKill.Dispose();
        }
Пример #2
0
        // Move to KillDisplayKillCircles : MapObject once completed.
        private LinearGradientBrush GetKillColour(KillDisplayColours colours, Kill kKill, KillDisplayDetails killDetails) {

            LinearGradientBrush returnBrush = null;

            double angle = Math.Atan2((double)kKill.KillerLocation.X - (double)kKill.VictimLocation.X, (double)kKill.KillerLocation.Y - (double)kKill.VictimLocation.Y);
            double adjext = Math.Cos(angle) * 14.4F;
            double oppext = Math.Sin(angle) * 14.4F;

            PointF pntStart = new PointF((float)kKill.KillerLocation.X + (float)oppext, (float)kKill.KillerLocation.Y + (float)adjext);
            PointF pntEnd = new PointF((float)kKill.VictimLocation.X - (float)oppext, (float)kKill.VictimLocation.Y - (float)adjext);

            if (colours == KillDisplayColours.EnemyColours) {
                returnBrush = new LinearGradientBrush(pntStart, pntEnd, Color.FromArgb((int)(192.0F * killDetails.Opacity), Color.LightSeaGreen), Color.FromArgb((int)(192.0F * killDetails.Opacity), Color.Red));
            }
            else if (colours == KillDisplayColours.TeamColours) {
                if (this.m_dicTeamColours.ContainsKey(kKill.Killer.TeamID) == true && this.m_dicTeamColours.ContainsKey(kKill.Victim.TeamID) == true) {
                    returnBrush = new LinearGradientBrush(pntStart, pntEnd, Color.FromArgb((int)(192.0F * killDetails.Opacity), this.m_dicTeamColours[kKill.Killer.TeamID]), Color.FromArgb((int)(192.0F * killDetails.Opacity), this.m_dicTeamColours[kKill.Victim.TeamID]));
                }
            }

            return returnBrush;
        }
Пример #3
0
        // MapObject is only used in this class as a reference point, nothing in it is really used per se.
        public void Draw(Graphics g, PointF pntDrawOffset, Point pntMouseLocation, MouseButtons mbButtons, Kill kMouseOveredKill, KillDisplayDetails kddDisplayDetails, Image imgDamageType, string strLocalizedDamageType, KillDisplayColours colours, Dictionary <int, Color> teamColours)
        {
            //string killerName = kMouseOveredKill.Killer.ClanTag.Length > 0 ? String.Format("[{0}] {1}", kMouseOveredKill.Killer.ClanTag, kMouseOveredKill.Killer.SoldierName) : kMouseOveredKill.Killer.SoldierName;
            //string victimName = kMouseOveredKill.Victim.ClanTag.Length > 0 ? String.Format("[{0}] {1}", kMouseOveredKill.Victim.ClanTag, kMouseOveredKill.Victim.SoldierName) : kMouseOveredKill.Victim.SoldierName;

            GraphicsPath gpBackground = new GraphicsPath();
            RectangleF   recBackground;

            MapTextBlock textBlock = new MapTextBlock();

            Color killerColour = Color.White;
            Color victimColour = Color.White;

            if (colours == KillDisplayColours.EnemyColours)
            {
                killerColour = ControlPaint.LightLight(Color.SeaGreen);
                victimColour = ControlPaint.LightLight(Color.Red);
            }
            else if (colours == KillDisplayColours.TeamColours)
            {
                if (teamColours.ContainsKey(kMouseOveredKill.Killer.TeamID) == true && teamColours.ContainsKey(kMouseOveredKill.Victim.TeamID) == true)
                {
                    killerColour = ControlPaint.LightLight(teamColours[kMouseOveredKill.Killer.TeamID]);
                    victimColour = ControlPaint.LightLight(teamColours[kMouseOveredKill.Victim.TeamID]);
                }
            }

            if (kMouseOveredKill.Killer.ClanTag.Length > 0)
            {
                textBlock.Strings.Add(new MapTextBlockString(String.Format("Killer: [{0}] ", kMouseOveredKill.Killer.ClanTag), Color.WhiteSmoke, false));
            }
            else
            {
                textBlock.Strings.Add(new MapTextBlockString("Killer: ", Color.WhiteSmoke, false));
            }
            textBlock.Strings.Add(new MapTextBlockString(kMouseOveredKill.Killer.SoldierName, killerColour, true));

            if (kMouseOveredKill.Victim.ClanTag.Length > 0)
            {
                textBlock.Strings.Add(new MapTextBlockString(String.Format("Victim: [{0}] ", kMouseOveredKill.Victim.ClanTag), Color.WhiteSmoke, false));
            }
            else
            {
                textBlock.Strings.Add(new MapTextBlockString("Victim: ", Color.WhiteSmoke, false));
            }
            textBlock.Strings.Add(new MapTextBlockString(kMouseOveredKill.Victim.SoldierName, victimColour, true));

            textBlock.Strings.Add(new MapTextBlockString(String.Format("Weapon: {0}", strLocalizedDamageType), Color.WhiteSmoke, true));
            textBlock.Strings.Add(new MapTextBlockString(String.Format("Distance: {0:0.0} m, {1:0.0} yd", kMouseOveredKill.Distance, kMouseOveredKill.Distance * 1.0936133D), Color.WhiteSmoke, true));

            if (kMouseOveredKill.Headshot == true)
            {
                textBlock.Strings.Add(new MapTextBlockString("... HEADSHOT ...", killerColour, true));
            }

            RectangleF recTextSize = textBlock.GetBounds();

            if (imgDamageType != null)
            {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - (imgDamageType.Height + recTextSize.Height)), new SizeF(Math.Max(imgDamageType.Width, recTextSize.Width) + 10.0F, imgDamageType.Height + recTextSize.Height));
                gpBackground.AddRectangle(recBackground);

                // DRAWBLOCK: new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height)

                //gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100 + imgDamageType.Height), 12, 1.0F);
            }
            else
            {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - recTextSize.Height), new SizeF(recTextSize.Width + 10.0F, recTextSize.Height));

                gpBackground.AddRectangle(recBackground);

                // DRAW BLOCK : new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F)

                //gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100), 12, 1.0F);
            }

            // Give it a little bit of a border.

            if (pntDrawOffset.X + recBackground.Width > g.ClipBounds.Width)
            {
                this.m_pntDrawOffset.X = -1 * ((pntDrawOffset.X + recBackground.Width) - g.ClipBounds.Width);
            }

            if (pntDrawOffset.Y - recBackground.Height < 0)
            {
                this.m_pntDrawOffset.Y = -1 * (pntDrawOffset.Y - recBackground.Height);
            }

            this.DrawBwShape(g, gpBackground, 0.8F, 4.0F, Color.Black, Color.White);
            //this.DrawBwShape(g, gpKillPopupText, 1.0F, 4.0F, Color.Black, Color.White);
            textBlock.Draw(g, new PointF(this.m_pntDrawOffset.X + recBackground.X + 5.0F, this.m_pntDrawOffset.Y + recBackground.Y + 10.0F + (imgDamageType != null ? imgDamageType.Height : 0)), pntMouseLocation, mbButtons);
            //textBlock.Draw(g, new PointF(pntDrawOffset.X + 5.0F, pntDrawOffset.Y - recTextSize.Height + 10.0F), pntMouseLocation, mbButtons);

            if (imgDamageType != null)
            {
                g.DrawImage(imgDamageType, new RectangleF((recBackground.X + recBackground.Width / 2) - imgDamageType.Width / 2 + this.m_pntDrawOffset.X, recBackground.Y + this.m_pntDrawOffset.Y + 5.0F, imgDamageType.Width, imgDamageType.Height));
            }

            textBlock.Dispose();
            gpBackground.Dispose();

            /*
             *
             * string strText = String.Format("Killer: {0}\nVictim: {1}\nWeapon: {2}\nDistance: {3:0.0} m, {4:0.0} yd", killerName, victimName, strLocalizedDamageType, kMouseOveredKill.Distance, kMouseOveredKill.Distance * 1.0936133D);
             * SizeF szTextSize = g.MeasureString(strText, new Font("Arial", 10));
             *
             * GraphicsPath gpBackground = new GraphicsPath();
             * GraphicsPath gpKillPopupText = new GraphicsPath();
             * RectangleF recBackground;
             *
             * if (imgDamageType != null) {
             *  recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - (imgDamageType.Height + szTextSize.Height)), new SizeF(Math.Max(imgDamageType.Width, szTextSize.Width), imgDamageType.Height + szTextSize.Height));
             *  gpBackground.AddRectangle(recBackground);
             *
             *  gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height), StringFormat.GenericTypographic);
             *  //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100 + imgDamageType.Height), 12, 1.0F);
             * }
             * else {
             *  recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - szTextSize.Height), new SizeF(szTextSize.Width, szTextSize.Height));
             *
             *  gpBackground.AddRectangle(recBackground);
             *
             *  gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F), StringFormat.GenericTypographic);
             *  //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100), 12, 1.0F);
             * }
             *
             * //gpBackground.Widen(this.m_pOneWidth);
             * //gpKillPopupText.Widen(this.m_pOneWidth);
             *
             * if (pntDrawOffset.X + recBackground.Width > g.ClipBounds.Width) {
             *  this.m_pntDrawOffset.X = -1 * ((pntDrawOffset.X + recBackground.Width) - g.ClipBounds.Width);
             * }
             *
             * if (pntDrawOffset.Y - recBackground.Height < 0) {
             *  this.m_pntDrawOffset.Y = -1 * (pntDrawOffset.Y - recBackground.Height);
             * }
             *
             * this.DrawBwShape(g, gpBackground, 0.8F, 4.0F, Color.Black, Color.White);
             * this.DrawBwShape(g, gpKillPopupText, 1.0F, 4.0F, Color.Black, Color.White);
             *
             * if (imgDamageType != null) {
             *  g.DrawImage(imgDamageType, new PointF((recBackground.X + recBackground.Width / 2) - imgDamageType.Width / 2 + this.m_pntDrawOffset.X, recBackground.Y + this.m_pntDrawOffset.Y));
             * }
             *
             * gpBackground.Dispose();
             * gpKillPopupText.Dispose();
             */
        }
Пример #4
0
        private void DrawAdditionalDetails(Graphics g, Kill kMouseOveredKill, KillDisplayDetails kddDisplayDetails) {
            if (kMouseOveredKill != null && kddDisplayDetails != null) {

                KillDisplayPopup kdp = new KillDisplayPopup();

                string strDamageType = String.Empty;
                if (this.m_clocLanguage.TryGetLocalized(out strDamageType, "global.Weapons." + kMouseOveredKill.DamageType.ToLower()) == false) {
                    strDamageType = kMouseOveredKill.DamageType;
                }

                kdp.Draw(g, this.PointToClient(Cursor.Position), this.PointToClient(Cursor.Position), MouseButtons, kMouseOveredKill, kddDisplayDetails, this.LoadedMapImagePack.GetIcon(kMouseOveredKill.DamageType.ToLower()), strDamageType, this.KillColours, this.m_dicTeamColours);
            }
        }
Пример #5
0
        // MapObject is only used in this class as a reference point, nothing in it is really used per se.
        public void Draw(Graphics g, PointF pntDrawOffset, Point pntMouseLocation, MouseButtons mbButtons, Kill kMouseOveredKill, KillDisplayDetails kddDisplayDetails, Image imgDamageType, string strLocalizedDamageType, KillDisplayColours colours, Dictionary<int, Color> teamColours)
        {
            //string killerName = kMouseOveredKill.Killer.ClanTag.Length > 0 ? String.Format("[{0}] {1}", kMouseOveredKill.Killer.ClanTag, kMouseOveredKill.Killer.SoldierName) : kMouseOveredKill.Killer.SoldierName;
            //string victimName = kMouseOveredKill.Victim.ClanTag.Length > 0 ? String.Format("[{0}] {1}", kMouseOveredKill.Victim.ClanTag, kMouseOveredKill.Victim.SoldierName) : kMouseOveredKill.Victim.SoldierName;

            GraphicsPath gpBackground = new GraphicsPath();
            RectangleF recBackground;

            MapTextBlock textBlock = new MapTextBlock();

            Color killerColour = Color.White;
            Color victimColour = Color.White;

            if (colours == KillDisplayColours.EnemyColours) {
                killerColour = ControlPaint.LightLight(Color.SeaGreen);
                victimColour = ControlPaint.LightLight(Color.Red);
            }
            else if (colours == KillDisplayColours.TeamColours) {
                if (teamColours.ContainsKey(kMouseOveredKill.Killer.TeamID) == true && teamColours.ContainsKey(kMouseOveredKill.Victim.TeamID) == true) {

                    killerColour = ControlPaint.LightLight(teamColours[kMouseOveredKill.Killer.TeamID]);
                    victimColour = ControlPaint.LightLight(teamColours[kMouseOveredKill.Victim.TeamID]);
                }
            }

            if (kMouseOveredKill.Killer.ClanTag.Length > 0) {
                textBlock.Strings.Add(new MapTextBlockString(String.Format("Killer: [{0}] ", kMouseOveredKill.Killer.ClanTag), Color.WhiteSmoke, false));
            }
            else {
                textBlock.Strings.Add(new MapTextBlockString("Killer: ", Color.WhiteSmoke, false));
            }
            textBlock.Strings.Add(new MapTextBlockString(kMouseOveredKill.Killer.SoldierName, killerColour, true));

            if (kMouseOveredKill.Victim.ClanTag.Length > 0) {
                textBlock.Strings.Add(new MapTextBlockString(String.Format("Victim: [{0}] ", kMouseOveredKill.Victim.ClanTag), Color.WhiteSmoke, false));
            }
            else {
                textBlock.Strings.Add(new MapTextBlockString("Victim: ", Color.WhiteSmoke, false));
            }
            textBlock.Strings.Add(new MapTextBlockString(kMouseOveredKill.Victim.SoldierName, victimColour, true));

            textBlock.Strings.Add(new MapTextBlockString(String.Format("Weapon: {0}", strLocalizedDamageType), Color.WhiteSmoke, true));
            textBlock.Strings.Add(new MapTextBlockString(String.Format("Distance: {0:0.0} m, {1:0.0} yd", kMouseOveredKill.Distance, kMouseOveredKill.Distance * 1.0936133D), Color.WhiteSmoke, true));

            if (kMouseOveredKill.Headshot == true)
            {
                textBlock.Strings.Add(new MapTextBlockString("... HEADSHOT ...", killerColour, true));
            }

            RectangleF recTextSize = textBlock.GetBounds();

            if (imgDamageType != null) {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - (imgDamageType.Height + recTextSize.Height)), new SizeF(Math.Max(imgDamageType.Width, recTextSize.Width) + 10.0F, imgDamageType.Height + recTextSize.Height));
                gpBackground.AddRectangle(recBackground);

                // DRAWBLOCK: new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height)

                //gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100 + imgDamageType.Height), 12, 1.0F);
            }
            else {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - recTextSize.Height), new SizeF(recTextSize.Width + 10.0F, recTextSize.Height));

                gpBackground.AddRectangle(recBackground);

                // DRAW BLOCK : new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F)

                //gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100), 12, 1.0F);
            }

            // Give it a little bit of a border.

            if (pntDrawOffset.X + recBackground.Width > g.ClipBounds.Width) {
                this.m_pntDrawOffset.X = -1 * ((pntDrawOffset.X + recBackground.Width) - g.ClipBounds.Width);
            }

            if (pntDrawOffset.Y - recBackground.Height < 0) {
                this.m_pntDrawOffset.Y = -1 * (pntDrawOffset.Y - recBackground.Height);
            }

            this.DrawBwShape(g, gpBackground, 0.8F, 4.0F, Color.Black, Color.White);
            //this.DrawBwShape(g, gpKillPopupText, 1.0F, 4.0F, Color.Black, Color.White);
            textBlock.Draw(g, new PointF(this.m_pntDrawOffset.X + recBackground.X + 5.0F, this.m_pntDrawOffset.Y + recBackground.Y + 10.0F + (imgDamageType != null ? imgDamageType.Height : 0)), pntMouseLocation, mbButtons);
            //textBlock.Draw(g, new PointF(pntDrawOffset.X + 5.0F, pntDrawOffset.Y - recTextSize.Height + 10.0F), pntMouseLocation, mbButtons);

            if (imgDamageType != null) {

                g.DrawImage(imgDamageType, new RectangleF((recBackground.X + recBackground.Width / 2) - imgDamageType.Width / 2 + this.m_pntDrawOffset.X, recBackground.Y + this.m_pntDrawOffset.Y + 5.0F, imgDamageType.Width, imgDamageType.Height));
            }

            textBlock.Dispose();
            gpBackground.Dispose();

            /*

            string strText = String.Format("Killer: {0}\nVictim: {1}\nWeapon: {2}\nDistance: {3:0.0} m, {4:0.0} yd", killerName, victimName, strLocalizedDamageType, kMouseOveredKill.Distance, kMouseOveredKill.Distance * 1.0936133D);
            SizeF szTextSize = g.MeasureString(strText, new Font("Arial", 10));

            GraphicsPath gpBackground = new GraphicsPath();
            GraphicsPath gpKillPopupText = new GraphicsPath();
            RectangleF recBackground;

            if (imgDamageType != null) {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - (imgDamageType.Height + szTextSize.Height)), new SizeF(Math.Max(imgDamageType.Width, szTextSize.Width), imgDamageType.Height + szTextSize.Height));
                gpBackground.AddRectangle(recBackground);

                gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + imgDamageType.Height), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100 + imgDamageType.Height), 12, 1.0F);
            }
            else {
                recBackground = new RectangleF(new PointF(pntDrawOffset.X, pntDrawOffset.Y - szTextSize.Height), new SizeF(szTextSize.Width, szTextSize.Height));

                gpBackground.AddRectangle(recBackground);

                gpKillPopupText.AddString(strText, new FontFamily("Arial"), 0, 12, new PointF(recBackground.X + 10.0F, recBackground.Y + 1.0F), StringFormat.GenericTypographic);
                //this.DrawText(g, strText, new Point(pntMouseLocation.X + 10, pntMouseLocation.Y - 100), 12, 1.0F);
            }

            //gpBackground.Widen(this.m_pOneWidth);
            //gpKillPopupText.Widen(this.m_pOneWidth);

            if (pntDrawOffset.X + recBackground.Width > g.ClipBounds.Width) {
                this.m_pntDrawOffset.X = -1 * ((pntDrawOffset.X + recBackground.Width) - g.ClipBounds.Width);
            }

            if (pntDrawOffset.Y - recBackground.Height < 0) {
                this.m_pntDrawOffset.Y = -1 * (pntDrawOffset.Y - recBackground.Height);
            }

            this.DrawBwShape(g, gpBackground, 0.8F, 4.0F, Color.Black, Color.White);
            this.DrawBwShape(g, gpKillPopupText, 1.0F, 4.0F, Color.Black, Color.White);

            if (imgDamageType != null) {
                g.DrawImage(imgDamageType, new PointF((recBackground.X + recBackground.Width / 2) - imgDamageType.Width / 2 + this.m_pntDrawOffset.X, recBackground.Y + this.m_pntDrawOffset.Y));
            }

            gpBackground.Dispose();
            gpKillPopupText.Dispose();
            */
        }