//TODO: hook setup & destroy graphics properly private void DrawGraphics(object sender, GameOverlay.Windows.DrawGraphicsEventArgs e) { lock (m_lock) { e.Graphics.ClearScene(); if (!string.IsNullOrEmpty(m_text)) { GameOverlay.Drawing.Font font = e.Graphics.CreateFont("Calibri", 50, true); GameOverlay.Drawing.Point textSize = e.Graphics.MeasureString(font, m_text); int middleX = m_overlay.Width / 2; int middleY = m_overlay.Height / 2; double millisElapsed = DateTime.Now.Subtract(m_shownTime).TotalMilliseconds; if (millisElapsed > c_fadeStartDelay + c_fadeMillis) { return; } //'flash' by not displaying immediately on keyboard input, makes it easier to see when different keys are pressed if (millisElapsed < 30) { return; } float alpha = 1.0f; if (millisElapsed > c_fadeStartDelay) { alpha = 1.0f - (float)((millisElapsed - c_fadeStartDelay) / c_fadeMillis); } var backColour = e.Graphics.CreateSolidBrush(0.6f, 0.6f, 0.6f, 0.85f * alpha); var fontColour = e.Graphics.CreateSolidBrush(0f, 0f, 0f, alpha); var rect = GameOverlay.Drawing.Rectangle.Create((int)(middleX - textSize.X / 2), (int)(middleY - textSize.Y / 2), (int)textSize.X, (int)textSize.Y); Inflate(ref rect, c_paddingX, c_paddingY); e.Graphics.FillRectangle(backColour, rect); if (c_border > 0) { Inflate(ref rect, c_border / 2, c_border / 2); e.Graphics.DrawRectangle(fontColour, rect, c_border); } e.Graphics.DrawText(font, fontColour, middleX - textSize.X / 2, middleY - textSize.Y / 2, m_text); } } }
public static FloatPoint ToFloatPoint(this GameOverlay.Drawing.Point point) => new FloatPoint(point.X, point.Y);
public static Point ToDrawingPoint(this GameOverlay.Drawing.Point point) => new Point((int)point.X, (int)point.Y);
private void DrawGraphics(object sender, GameOverlay.Windows.DrawGraphicsEventArgs e) { lock (m_lock) { e.Graphics.ClearScene(); //centre overlay on the mouse m_overlay.Move(m_position.X - m_overlay.Width / 2, m_position.Y - m_overlay.Height / 2); var middle = new GameOverlay.Drawing.Point(m_overlay.Width / 2, m_overlay.Height / 2); //if down, reset the time to keep it at max opacity if (m_isDown) { if (c_growMillis > 0) { //if grow is enabled, only reset to max grow size - not initial click size double elapsed = DateTime.Now.Subtract(m_downTime).TotalMilliseconds; if (elapsed > c_growMillis) { m_downTime = DateTime.Now.Subtract(TimeSpan.FromMilliseconds(c_growMillis)); } } else { m_downTime = DateTime.Now; } } double millisElapsed = DateTime.Now.Subtract(m_downTime).TotalMilliseconds; if (millisElapsed <= c_growMillis + c_fadeMillis) { float alpha = c_initialOpacity; float radius = c_radius; if (c_growMillis > 0 && millisElapsed <= c_growMillis) //in grow stage { radius *= (float)(millisElapsed / c_growMillis); } else //past grow stage { alpha = c_initialOpacity * (1.0f - (float)((millisElapsed - c_growMillis) / c_fadeMillis)); } GameOverlay.Drawing.Color curColour; if (!c_colours.TryGetValue(m_button, out curColour)) { curColour = c_colours[MouseButtons.Left]; } e.Graphics.FillCircle(e.Graphics.CreateSolidBrush(curColour.R, curColour.G, curColour.B, alpha), new GameOverlay.Drawing.Circle(middle.X, middle.Y, radius)); //if there's a border, render just outside the radius if (c_borderWidth > 0) { e.Graphics.DrawCircle(e.Graphics.CreateSolidBrush(0, 0, 0, alpha), new GameOverlay.Drawing.Circle(middle.X, middle.Y, radius + c_borderWidth / 2.0f), c_borderWidth * (radius / c_radius)); } } //draw scroll indicator float scrollFadeDelay = 300; float scrollFadeTime = 1000; double scrollMillisElapsed = DateTime.Now.Subtract(m_scrollTime).TotalMilliseconds; if (scrollMillisElapsed > 50 && scrollMillisElapsed < scrollFadeDelay + scrollFadeTime) { float alpha = 1.0f; if (scrollMillisElapsed >= scrollFadeDelay) { alpha = 1.0f - (float)((scrollMillisElapsed - 50 - scrollFadeDelay) / scrollFadeTime); } int xOffset = 40; e.Graphics.DrawImage(m_scrollDir ? m_img_wheelup : m_img_wheeldn, middle.X + xOffset, middle.Y - m_img_wheelup.Height / 2, alpha); } } }
public static GameOverlay.Drawing.Point Subtract(this GameOverlay.Drawing.Point a, GameOverlay.Drawing.Point b) { return(new GameOverlay.Drawing.Point(a.X - b.X, a.Y - b.Y)); }