Beispiel #1
0
        //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);
                }
            }
        }
Beispiel #2
0
 public static FloatPoint ToFloatPoint(this GameOverlay.Drawing.Point point)
 => new FloatPoint(point.X, point.Y);
Beispiel #3
0
 public static Point ToDrawingPoint(this GameOverlay.Drawing.Point point)
 => new Point((int)point.X, (int)point.Y);
Beispiel #4
0
        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);
                }
            }
        }
Beispiel #5
0
 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));
 }