Exemple #1
0
        public static void DrawImage(this RenderContext context, Image image, float destX, float destY, InterpolationMode interpolationMode, CompositeMode compositeMode)
        {
            var dstOffset = new RawVector2(destX, destY);

            context.RenderTarget.DeviceContext2D.DrawImage(image, dstOffset, null, interpolationMode, compositeMode);
        }
 public static void FillClassicMusicalVerticalParallelRect(this RenderTarget renderTarget, RawVector2 startPos, RawVector2 endPos, Color color, float strokeWidth, float scale = 1f, bool shadow = false)
 {
     PointF[] pathPoints;
     if (startPos.X > endPos.X)
     {
         RawVector2 vector = new RawVector2 {
             X = startPos.X,
             Y = startPos.Y
         };
         startPos.X = endPos.X;
         startPos.Y = endPos.Y;
         endPos.X   = vector.X;
         endPos.Y   = vector.Y;
     }
     if (scale > 0f)
     {
         endPos.X = startPos.X + ((endPos.X - startPos.X) * scale);
         endPos.Y = startPos.Y + ((endPos.Y - startPos.Y) * scale);
     }
     else
     {
         startPos.X += (endPos.X - startPos.X) * (1f + scale);
         startPos.Y += (endPos.Y - startPos.Y) * (1f + scale);
     }
     startPos.X--;
     using (GraphicsPath path = new GraphicsPath())
     {
         float num = strokeWidth / 2f;
         path.AddLine(startPos.X, startPos.Y, startPos.X, startPos.Y - num);
         path.AddLine(startPos.X, startPos.Y - num, endPos.X, endPos.Y - num);
         path.AddLine(endPos.X, endPos.Y - num, endPos.X, endPos.Y + num);
         path.AddLine(endPos.X, endPos.Y + num, startPos.X, startPos.Y + num);
         path.AddLine(startPos.X, startPos.Y + num, startPos.X, startPos.Y);
         path.Flatten();
         pathPoints = path.PathPoints;
         path.Dispose();
     }
     using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
     {
         GeometrySink sink;
         int          num2;
         PathGeometry geometry = new PathGeometry(factory);
         if (pathPoints.Length > 1)
         {
             sink = geometry.Open();
             sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
             sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
             for (num2 = 1; num2 < pathPoints.Length; num2++)
             {
                 sink.AddLine(new RawVector2(pathPoints[num2].X, pathPoints[num2].Y));
             }
             sink.EndFigure(FigureEnd.Closed);
             sink.Close();
             sink.Dispose();
         }
         if (shadow)
         {
             PathGeometry geometry2 = new PathGeometry(factory);
             if (shadow && (pathPoints.Length > 1))
             {
                 sink = geometry2.Open();
                 sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
                 sink.BeginFigure(new RawVector2(pathPoints[0].X + 2f, pathPoints[0].Y + 2f), FigureBegin.Filled);
                 for (num2 = 1; num2 < pathPoints.Length; num2++)
                 {
                     sink.AddLine(new RawVector2(pathPoints[num2].X + 2f, pathPoints[num2].Y + 2f));
                 }
                 sink.EndFigure(FigureEnd.Closed);
                 sink.Close();
                 sink.Dispose();
             }
             SolidColorBrush brush = new SolidColorBrush(renderTarget, Color.FromArgb((int)(color.A * 0.2f), color).ToRawColor4(1f));
             renderTarget.FillGeometry(geometry2, brush);
             brush.Dispose();
             geometry2.Dispose();
         }
         SolidColorBrush brush2 = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
         renderTarget.FillGeometry(geometry, brush2);
         brush2.Dispose();
         geometry.Dispose();
     }
 }
 public override void stepFinish()
 {
     movement = new RawVector2(transform.M31 - oldLocation.X, transform.M32 - oldLocation.Y);
     base.stepFinish();
 }
 public static void DrawBezierLine(this RenderTarget renderTarget, RawVector2 pStart, RawVector2 pEnd, float heightDiff, float mpRatio, Color color)
 {
     renderTarget.DrawBezierLine(pStart, pEnd, heightDiff, mpRatio, color, 1f, null, false);
 }
        public static void DrawTextLayout(this RenderTarget renderTarget, SharpDX.DirectWrite.Factory writeFactory, string text, RawVector2 pos, string fontFamilyName, float fontSize, Color color, TextAlignment textAlignment, ParagraphAlignment paragraphAlignment, SharpDX.DirectWrite.FontStyle fontStyle = 0, FontWeight fontWeight = 700)
        {
            Trimming     trimming;
            InlineObject obj2;
            TextFormat   textFormat = new TextFormat(writeFactory, fontFamilyName, fontWeight, fontStyle, FontStretch.Normal, fontSize);

            textFormat.GetTrimming(out trimming, out obj2);
            trimming.Granularity = TrimmingGranularity.Word;
            textFormat.SetTrimming(trimming, obj2);
            textFormat.TextAlignment      = TextAlignment.Center;
            textFormat.ParagraphAlignment = ParagraphAlignment.Center;
            TextLayout layout = new TextLayout(writeFactory, text, textFormat, 1920f, 1080f);

            textFormat.TextAlignment      = textAlignment;
            textFormat.ParagraphAlignment = paragraphAlignment;
            TextLayout textLayout = new TextLayout(writeFactory, text, textFormat, layout.Metrics.Width + 2f, layout.Metrics.Height);

            layout.Dispose();
            textFormat.Dispose();
            switch (textAlignment)
            {
            case TextAlignment.Trailing:
                pos.X -= textLayout.Metrics.Width;
                break;

            case TextAlignment.Center:
            case TextAlignment.Justified:
                pos.X -= textLayout.Metrics.Width / 2f;
                break;
            }
            switch (paragraphAlignment)
            {
            case ParagraphAlignment.Far:
                pos.Y -= textLayout.Metrics.Height;
                break;

            case ParagraphAlignment.Center:
                pos.Y -= textLayout.Metrics.Height / 2f;
                break;
            }
            SolidColorBrush defaultForegroundBrush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));

            renderTarget.DrawTextLayout(pos, textLayout, defaultForegroundBrush, DrawTextOptions.Clip);
            defaultForegroundBrush.Dispose();
            textLayout.Dispose();
        }
        public static void DrawBezierLine(this RenderTarget renderTarget, RawVector2 pStart, RawVector2 pEnd, float heightDiff, float mpRatio, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
        {
            mpRatio = mpRatio.Clamp(0f, 1f);
            float      num     = pEnd.X - pStart.X;
            float      num2    = pEnd.Y - pStart.Y;
            RawVector2 vector  = new RawVector2(pStart.X + (num * mpRatio), (pStart.Y + (num2 * mpRatio)) + heightDiff);
            RawVector2 vector2 = new RawVector2(pStart.X + (num * (1f - mpRatio)), (pStart.Y + (num2 * (1f - mpRatio))) + heightDiff);

            renderTarget.DrawBezierLine(pStart, vector, vector2, pEnd, color, strokeWidth, strokeStyle, disposeStrokeStyle);
        }
 public static void DrawBitmap(this RenderTarget renderTarget, SharpDX.WIC.Bitmap bitmap, RawVector2 pos, float opacity = 1f)
 {
     renderTarget.DrawBitmap(SharpDX.Direct2D1.Bitmap.FromWicBitmap(renderTarget, bitmap), pos, null, opacity, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor);
 }
Exemple #8
0
 public void Draw(SpriteResource sprite, RawVector2 origin, float rotate)
 => Draw(sprite, origin, rotate, new RawVector2(.5f, .5f));
Exemple #9
0
 public void Draw(SpriteResource sprite, RawVector2 origin)
 => Draw(sprite, origin, 0);
Exemple #10
0
 /// <unmanaged>HRESULT ID2D1CommandSink::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle)</unmanaged>
 public void DrawLine(RawVector2 point0, RawVector2 point1, Brush brush, float strokeWidth, StrokeStyle strokeStyle)
 {
     DrawLine_(point0, point1, brush, strokeWidth, strokeStyle);
 }
Exemple #11
0
 public void Draw(SpriteResource sprite, RawVector2 origin, float rotate, RawVector2 rotateOrigin)
 => Draw(sprite, new RawRectangleF(origin.X, origin.Y, origin.X + (sprite.Rect.Right - sprite.Rect.Left), origin.Y + (sprite.Rect.Bottom - sprite.Rect.Top)), rotate, rotateOrigin);
Exemple #12
0
 /// <unmanaged>HRESULT ID2D1CommandSink::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode)</unmanaged>
 public void DrawGlyphRun(RawVector2 baselineOrigin, DirectWrite.GlyphRun glyphRun, DirectWrite.GlyphRunDescription glyphRunDescription, Brush foregroundBrush, MeasuringMode measuringMode)
 {
     DrawGlyphRun_(baselineOrigin, glyphRun, glyphRunDescription, foregroundBrush, measuringMode);
 }
Exemple #13
0
 /// <summary>
 /// Draw a black background behind where our crosshair will go
 /// </summary>
 /// <param name="Location"></param>
 /// <param name="Radius"></param>
 private void DrawCrosshairBackground(RawVector2 Location, float Radius)
 {
     Surface.RenderTarget2D.FillEllipse(new Ellipse(Location, Radius + 5f, Radius + 5f), BlackBrush);
 }
Exemple #14
0
        /// <summary>
        /// Render our training layer
        /// </summary>
        /// <param name="renderTime"></param>
        public override void Render(RenderTime renderTime)
        {
            base.Render(renderTime);

            if (MM_Repository.Training == null || MM_Repository.Training.TrainingMode == Data_Elements.Training.MM_Training.enumTrainingMode.NotTraning)
            {
                return;
            }
            else
            {
                MM_Repository.Training.CheckTimes();
                String TextToDraw;
                Brush  DrawBrush;

                //Determine our question text and color

                if (MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.UserWon)
                {
                    TextToDraw = "Congratulations! You won!";
                    DrawBrush  = LightGreenBrush;
                }
                else if (MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.UserFailed)
                {
                    TextToDraw = "Sorry - please play again!";
                    DrawBrush  = RedBrush;
                }
                else
                {
                    TextToDraw = MM_Repository.Training.QuestionText;
                    DrawBrush  = QuestionBrush;
                }

                //Now, draw all of our strings
                DrawString(TextToDraw, VerticalAlignment.Top, HorizontalAlignment.Center, DrawBrush, QuestionFormat);
                DrawString("Score: " + MM_Repository.Training.Score.ToString("#,##0"), VerticalAlignment.Top, HorizontalAlignment.Left, DrawBrush, QuestionFormat);
                DrawString("[" + (MM_Repository.Training.CurrentLevel.ID + 1).ToString() + "]: " + MM_Repository.Training.CurrentLevel.Title, VerticalAlignment.Bottom, HorizontalAlignment.Left, DrawBrush, QuestionFormat);

                //If we're in question mode, show our countdown timer
                if (MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.QuestionAsked)
                {
                    double TimeLeft = MM_Repository.Training.CurrentLevel.QuestionTimeout - MM_Repository.Training.TimeSincePresentation;
                    DrawString("Time: " + TimeLeft.ToString("0"), VerticalAlignment.Top, HorizontalAlignment.Right, DrawBrush, QuestionFormat);
                }



                //If we have the incorrect answer, draw accordingly.
                if (MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.AnswerCorrect || MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.AnswerWrong)
                {
                    bool Correct = MM_Repository.Training.TrainingMode == MM_Training.enumTrainingMode.AnswerCorrect;
                    DrawBrush = Correct ? CorrectBrush : IncorrectBrush;
                    DrawString(MM_Repository.Training.AnswerText, VerticalAlignment.Top, HorizontalAlignment.Center, DrawBrush, QuestionFormat, 1, 2);

                    RawVector2 CorrectAnswerXY = MM_Coordinates.LngLatToScreenVector2(MM_Repository.Training.CorrectAnswer, Surface.Coordinates.ZoomLevel);
                    CorrectAnswerXY.X -= Surface.Coordinates.TopLeftXY.X;
                    CorrectAnswerXY.Y -= Surface.Coordinates.TopLeftXY.Y;

                    if (!MM_Repository.Training.UserAnswer.IsEmpty)
                    {
                        RawVector2 UserAnswerXY = MM_Coordinates.LngLatToScreenVector2(MM_Repository.Training.UserAnswer, Surface.Coordinates.ZoomLevel);
                        UserAnswerXY.X -= Surface.Coordinates.TopLeftXY.X;
                        UserAnswerXY.Y -= Surface.Coordinates.TopLeftXY.Y;
                        DrawCrosshairBackground(UserAnswerXY, 8f);
                        Surface.RenderTarget2D.DrawLine(CorrectAnswerXY, UserAnswerXY, BlackBrush, 5f);

                        DrawCrosshairBackground(CorrectAnswerXY, 15f);
                        Surface.RenderTarget2D.DrawLine(CorrectAnswerXY, UserAnswerXY, CorrectBrush, 3f);
                        DrawCrosshair(WhiteBrush, UserAnswerXY, 10, "");
                    }

                    if (MM_Repository.Training.TargetElement is MM_Substation)
                    {
                        DrawCrosshair(DrawBrush, CorrectAnswerXY, 20, ((MM_Substation)MM_Repository.Training.TargetElement).LongName);
                    }
                    else
                    {
                        DrawCrosshair(DrawBrush, CorrectAnswerXY, 20, MM_Repository.Training.TargetElement.Name);
                    }
                }
            }
        }
Exemple #15
0
        private void TxtView_D2DPaint(D2DGraphics g)
        {
            if (!string.IsNullOrWhiteSpace(BackGroundText) && !isHideBackGroundText)
            {
                g.RenderTarget.AntialiasMode = AntialiasMode.PerPrimitive;
                SolidColorBrush brush      = new SolidColorBrush(g.RenderTarget, GDIDataD2DUtils.TransToRawColor4(BackGroundTextColor));
                TextFormat      textFormat = new TextFormat(D2DGraphics.dwriteFactory, foreFont.FamilyName, foreFont.Weight, foreFont.Style, foreFont.Size)
                {
                    TextAlignment = TextAlignment.Leading, ParagraphAlignment = ParagraphAlignment.Center
                };

                textFormat.WordWrapping = WordWrapping.Wrap;

                SharpDX.RectangleF textRegionRect =
                    new SharpDX.RectangleF(0, 0, Width - 1, Height - 1);

                g.RenderTarget.DrawText(BackGroundText, textFormat, textRegionRect, brush, DrawTextOptions.Clip);
            }


            if (metricsList != null)
            {
                g.RenderTarget.AntialiasMode = AntialiasMode.Aliased;


                SharpDX.Direct2D1.Brush brush = new SolidColorBrush(g.RenderTarget, SharpDX.Color.SkyBlue);

                foreach (HitTestMetrics m in metricsList)
                {
                    SharpDX.RectangleF textRegionRect =
                        new SharpDX.RectangleF((float)Math.Ceiling(m.Left), (float)Math.Ceiling(m.Top), (float)Math.Ceiling(m.Width), (float)Math.Ceiling(m.Height));

                    g.RenderTarget.FillRectangle(textRegionRect, brush);
                }
            }

            g.RenderTarget.AntialiasMode = AntialiasMode.PerPrimitive;

            if (CurrentTextLayout != null && scTextRenderer != null)
            {
                CurrentTextLayout.Draw(scTextRenderer, 0, 0);
            }


            if (cursorState == 1)
            {
                g.RenderTarget.AntialiasMode = AntialiasMode.Aliased;

                RawRectangleF rect =
                    new RawRectangleF(
                        hitTestMetrics[cursorIdx].Left,
                        hitTestMetrics[cursorIdx].Top,
                        hitTestMetrics[cursorIdx].Left + hitTestMetrics[cursorIdx].Width,
                        hitTestMetrics[cursorIdx].Top + hitTestMetrics[cursorIdx].Height);

                RawVector2 pt0;
                RawVector2 pt1;

                if (isTrailingHit[cursorIdx] == false)
                {
                    pt0 = new RawVector2((float)Math.Ceiling(rect.Left), (float)Math.Ceiling(rect.Top));
                    pt1 = new RawVector2((float)Math.Ceiling(rect.Left), (float)Math.Ceiling(rect.Bottom));
                }
                else
                {
                    pt0 = new RawVector2((float)Math.Ceiling(rect.Right), (float)Math.Ceiling(rect.Top));
                    pt1 = new RawVector2((float)Math.Ceiling(rect.Right), (float)Math.Ceiling(rect.Bottom));
                }

                RawColor4 color = GDIDataD2DUtils.TransToRawColor4(Color.FromArgb(255, 255, 0, 0));
                SharpDX.Direct2D1.Brush brushx = new SolidColorBrush(g.RenderTarget, color);

                if (pt0.X == 0 && pt1.X == 0)
                {
                    pt1.X = pt0.X = 1;
                }

                g.RenderTarget.DrawLine(pt0, pt1, brushx);
            }
        }
Exemple #16
0
        private void RenderingDrawTriangleWithText(float[] center, string text, float radius, double percentage, int[] color, int thickness, bool drawWorldMap, bool fill = false)
        {
            if (drawWorldMap)
            {
                radius = radius * 20;
            }

            double segments = 3;

            RawVector2[] pts = new RawVector2[(int)segments + 1];

            double angle       = 0;
            double segmentSize = (360 * percentage) / segments;

            int[] sCenter;
            if (!Helpers.ViewTransform.ToScreen.WorldToScreen(center, out sCenter, drawWorldMap))
            {
                return;
            }

            int count = 0;

            if (percentage < 1)
            {
                pts = new RawVector2[(int)segments + 3];

                pts[0] = new RawVector2(sCenter[0], sCenter[1]);

                count = 1;
            }

            int[] screen = null;

            while (angle <= (360 * percentage))
            {
                float X = (float)(center[0] + (radius * Math.Cos(angle / (180 / Math.PI))));
                float Z = (float)(center[2] + (radius * Math.Sin(angle / (180 / Math.PI))));


                if (Helpers.ViewTransform.ToScreen.WorldToScreen(new float[] { X, center[1], Z }, out screen, drawWorldMap))
                {
                    pts[count] = new RawVector2(screen[0], screen[1]);
                }
                else
                {
                    return;
                }

                angle += segmentSize;
                count++;
            }

            if (percentage < 1)
            {
                pts[pts.Length - 1] = pts[0];
            }

            //if (pts.Any(x => x.X == 0 || x.Y == 0))
            //return;

            pathGeometry = new PathGeometry(factory);
            geometrySink = pathGeometry.Open();

            geometrySink.BeginFigure(pts[0], new FigureBegin());
            geometrySink.AddLines(pts);
            geometrySink.EndFigure(new FigureEnd());
            geometrySink.Close();

            ChangeColor(color);

            device.DrawGeometry(pathGeometry, solidColorBrush);

            if (fill)
            {
                device.FillGeometry(pathGeometry, solidColorBrush);
            }

            pathGeometry.Dispose();
            geometrySink.Dispose();

            RenderingDrawText(screen, color, text, drawWorldMap);
        }
Exemple #17
0
 //---------------------------------------------------------------------------------------------------------
 /// <summary>
 /// Сериализация двухмерного вектора в строку
 /// </summary>
 /// <param name="vector">Двухмерный вектор</param>
 /// <returns>Строка данных</returns>
 //---------------------------------------------------------------------------------------------------------
 public static String Serialize(this RawVector2 vector)
 {
     return(String.Format("{0};{1}", vector.X, vector.Y));
 }
Exemple #18
0
        private void RenderingDrawSquare(float[] center, float squaresize, int[] color, int thickness, bool drawWorldMap, bool fill = false)
        {
            if (drawWorldMap)
            {
                squaresize = squaresize * 1f;
            }

            RawVector2[] pts = new RawVector2[4];

            bool draw = false;

            int[]   screen;
            float[] buffer = center.ToArray();
            buffer[0] -= squaresize / 2;
            buffer[2] -= squaresize / 2;
            if (Helpers.ViewTransform.ToScreen.WorldToScreen(buffer, out screen, drawWorldMap))
            {
                pts[0] = new RawVector2(screen[0], screen[1]);

                buffer     = center.ToArray();
                buffer[0] += squaresize / 2;
                buffer[2] -= squaresize / 2;

                if (Helpers.ViewTransform.ToScreen.WorldToScreen(buffer, out screen, drawWorldMap))
                {
                    pts[1] = new RawVector2(screen[0], screen[1]);

                    buffer     = center.ToArray();
                    buffer[0] += squaresize / 2;
                    buffer[2] += squaresize / 2;

                    if (Helpers.ViewTransform.ToScreen.WorldToScreen(buffer, out screen, drawWorldMap))
                    {
                        pts[2] = new RawVector2(screen[0], screen[1]);

                        buffer     = center.ToArray();
                        buffer[0] -= squaresize / 2;
                        buffer[2] += squaresize / 2;

                        if (Helpers.ViewTransform.ToScreen.WorldToScreen(buffer, out screen, drawWorldMap))
                        {
                            pts[3] = new RawVector2(screen[0], screen[1]);

                            draw = true;
                        }
                    }
                }
            }


            if (!draw)
            {
                return;
            }

            pathGeometry = new PathGeometry(factory);
            geometrySink = pathGeometry.Open();

            geometrySink.BeginFigure(pts[0], new FigureBegin());
            geometrySink.AddLines(new RawVector2[] { pts[1], pts[2], pts[3], pts[0] });
            geometrySink.EndFigure(new FigureEnd());
            geometrySink.Close();

            ChangeColor(color);

            device.DrawGeometry(pathGeometry, solidColorBrush);

            if (fill)
            {
                device.FillGeometry(pathGeometry, solidColorBrush);
            }

            pathGeometry.Dispose();
            geometrySink.Dispose();
        }
 public static void DrawBitmap(this RenderTarget renderTarget, SharpDX.Direct2D1.Bitmap bitmap, RawVector2 pos)
 {
     renderTarget.DrawBitmap(bitmap, pos, null, 1f, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor);
 }
 /// <summary>
 /// Initialize a new flow path
 /// </summary>
 /// <param name="Point1">The first part of the line</param>
 /// <param name="Point2">The second part of the line</param>
 public MM_NetworkMap_FlowPath(RawVector2 Point1, RawVector2 Point2)
 {
     this.CurDimension = 0;
     RecomputeFlow(Point1, Point2);
 }
 public static void DrawBitmap(this RenderTarget renderTarget, SharpDX.Direct2D1.Bitmap bitmap, RawVector2 pos, Size2F?size, float opacity = 1f, SharpDX.Direct2D1.BitmapInterpolationMode interpolationMode = 0)
 {
     if (!size.HasValue)
     {
         size = new Size2F?(bitmap.Size);
     }
     renderTarget.DrawBitmap(bitmap, new RawRectangleF(pos.X, pos.Y, pos.X + size.Value.Width, pos.Y + size.Value.Height), opacity, interpolationMode);
 }
Exemple #22
0
        /// <summary>
        /// Create a <see cref="LinearGradientBrush"/> from parameters.
        /// </summary>
        /// <param name="renderTarget">The render target to use.</param>
        /// <param name="gradientStops">Collection of <see cref="GradientStop"/>s.</param>
        /// <param name="startPosition">The <see cref="LinearGradientBrush"/> start vector.</param>
        /// <param name="endPosition">The <see cref="LinearGradientBrush"/> end vector.</param>
        /// <returns><see cref="LinearGradientBrush"/></returns>
        public static LinearGradientBrush GetLinearGradientBrush(RenderTarget renderTarget, IList <GradientStop> gradientStops, RawVector2 startPosition, RawVector2 endPosition)
        {
            var lprops = new LinearGradientBrushProperties
            {
                StartPoint = startPosition,
                EndPoint   = endPosition
            };

            var brush = new LinearGradientBrush(renderTarget, lprops, null, new GradientStopCollection(renderTarget, gradientStops.ToArray()));

            return(brush);
        }
 public static void DrawTextLayout(this RenderTarget renderTarget, SharpDX.DirectWrite.Factory writeFactory, string text, RawVector2 pos, string fontFamilyName, float fontSize, Color color, TextAlignment textAlignment, SharpDX.DirectWrite.FontStyle fontStyle = 0)
 {
     renderTarget.DrawTextLayout(writeFactory, text, pos, fontFamilyName, fontSize, color, textAlignment, ParagraphAlignment.Near, fontStyle, FontWeight.Bold);
 }
Exemple #24
0
 /// <summary>Create an indexed palette and linear brush for linear gradients.</summary>
 /// <param name="surface">The <see cref="Direct3DSurface"/> used for rendering.</param>
 /// <param name="gradientStops">Collection of gradient stops to use in brush and palette.</param>
 /// <param name="paletteSize">Number of indexed colors to create.</param>
 /// <param name="startPosition"><see cref="LinearGradientBrush"/> start vector.</param>
 /// <param name="endPosition"><see cref="LinearGradientBrush"/> end vector.</param>
 public LinearGradientPalette(Direct3DSurface surface, IEnumerable <GradientStop> gradientStops, RawVector2 startPosition, RawVector2 endPosition, int paletteSize = 256)
 {
     IsDisposed     = false;
     _surface       = surface;
     _paletteSize   = paletteSize;
     _startPosition = startPosition;
     _endPosition   = endPosition;
     _gradientStops = gradientStops.ToList();
     Update();
 }
        private static void DrawTie(this RenderTarget renderTarget, SharpDX.DirectWrite.Factory writeFactory, RawVector2 startPos, RawVector2 endPos, Color color, bool flipVertical = false, bool isTriplet = false)
        {
            PointF[]   pathPoints;
            RawVector2 vector;
            RawVector2 vector2;

            using (GraphicsPath path = new GraphicsPath())
            {
                float num  = 45f;
                float num2 = 0.3f;
                float num3 = startPos.GetDistanceByRawVector2(endPos).Clamp(64f, 256f);
                float num4 = startPos.GetAngleByRawVector2(endPos);
                float num5 = endPos.GetAngleByRawVector2(startPos);
                if (flipVertical)
                {
                    vector  = startPos.GetRawVector2ByPolarCoordinates(num4 + num, num3 * num2);
                    vector2 = endPos.GetRawVector2ByPolarCoordinates(num5 - num, num3 * num2);
                    path.AddBezier(startPos.X, startPos.Y, vector.X, vector.Y, vector2.X, vector2.Y, endPos.X, endPos.Y);
                    path.AddBezier(endPos.X, endPos.Y + 1f, vector2.X, vector2.Y + 2f, vector.X, vector.Y + 2f, startPos.X, startPos.Y + 1f);
                }
                else
                {
                    vector  = startPos.GetRawVector2ByPolarCoordinates(num4 - num, num3 * num2);
                    vector2 = endPos.GetRawVector2ByPolarCoordinates(num5 + num, num3 * num2);
                    path.AddBezier(startPos.X, startPos.Y, vector.X, vector.Y, vector2.X, vector2.Y, endPos.X, endPos.Y);
                    path.AddBezier(endPos.X, endPos.Y - 1f, vector2.X, vector2.Y - 2f, vector.X, vector.Y - 2f, startPos.X, startPos.Y - 1f);
                }
                path.Flatten();
                pathPoints = path.PathPoints;
                path.Dispose();
            }
            using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
            {
                PathGeometry geometry = new PathGeometry(factory);
                if (pathPoints.Length > 1)
                {
                    GeometrySink sink = geometry.Open();
                    sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
                    sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
                    for (int i = 1; i < pathPoints.Length; i++)
                    {
                        sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
                    }
                    sink.EndFigure(FigureEnd.Closed);
                    sink.Close();
                    sink.Dispose();
                }
                SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
                renderTarget.FillGeometry(geometry, brush);
                brush.Dispose();
                geometry.Dispose();
                if (isTriplet)
                {
                    RawVector2 pos = new RawVector2(vector.X + ((vector2.X - vector.X) / 2f), vector.Y + ((vector2.Y - vector.Y) / 2f));
                    renderTarget.DrawTextLayout(writeFactory, "3", pos, "Consolas", 16f, Color.FromArgb((int)(color.A * 0.75f), color), TextAlignment.Center, ParagraphAlignment.Center, SharpDX.DirectWrite.FontStyle.Normal, FontWeight.ExtraBlack);
                }
            }
        }
Exemple #26
0
 public RawVector2 Render(RawVector2 Pos)
 {
     Base.D2DRenderTarget.DrawTextLayout(Pos, Text, Base.Brushes.GetColor(Color), DrawTextOptions.None);
     return(new RawVector2(Text.Metrics.Width, Text.Metrics.Height));
 }
 public static void DrawBezierLine(this RenderTarget renderTarget, RawVector2 pStart, RawVector2 pM1, RawVector2 pM2, RawVector2 pEnd, Color color, float strokeWidth, StrokeStyle strokeStyle, bool disposeStrokeStyle = true)
 {
     PointF[] pathPoints;
     using (GraphicsPath path = new GraphicsPath())
     {
         path.AddBezier(pStart.X, pStart.Y, pM1.X, pM1.Y, pM2.X, pM2.Y, pEnd.X, pEnd.Y);
         path.Flatten();
         pathPoints = path.PathPoints;
         path.Dispose();
     }
     using (SharpDX.Direct2D1.Factory factory = renderTarget.Factory)
     {
         PathGeometry geometry = new PathGeometry(factory);
         if (pathPoints.Length > 1)
         {
             GeometrySink sink = geometry.Open();
             sink.SetSegmentFlags(PathSegment.ForceRoundLineJoin);
             sink.BeginFigure(new RawVector2(pathPoints[0].X, pathPoints[0].Y), FigureBegin.Filled);
             for (int i = 1; i < pathPoints.Length; i++)
             {
                 sink.AddLine(new RawVector2(pathPoints[i].X, pathPoints[i].Y));
             }
             sink.EndFigure(FigureEnd.Open);
             sink.Close();
             sink.Dispose();
         }
         SolidColorBrush brush = new SolidColorBrush(renderTarget, color.ToRawColor4(1f));
         renderTarget.DrawGeometry(geometry, brush, strokeWidth, strokeStyle);
         brush.Dispose();
         geometry.Dispose();
     }
     if (disposeStrokeStyle && (strokeStyle != null))
     {
         strokeStyle.Dispose();
     }
 }
Exemple #28
0
        public void Render()
        {
            RawVector2 nextPos;
            float      cursorY;

            lock (ScreenElementsLock) {
                cursorY = Math.Min(TextElementsHeight, Screen.ScreenSize.Height - (ScrollMode ? 0 : Base.DefaultTextFormat.FontSize));
                nextPos = new RawVector2(0, cursorY);
                float skipSz = 0;
                int   x;
                for (x = ScreenElements.Count - 1; skipSz < TextElementsScroll; x--)
                {
                    skipSz += ScreenElements[x].RenderedElementSize.Y;
                }

                var diff = TextElementsScroll - skipSz;
                nextPos.Y += diff;

                while (nextPos.Y > 0 && x >= 0)
                {
                    nextPos.Y -= ScreenElements[x].RenderedElementSize.Y;
                    ScreenElements[x].Render(nextPos);
                    x--;
                }
            }

            TextLayout tl;

            lock (CommandLock) {
                tl = new TextLayout(
                    Base.DWFactory,
                    CommandPre + Command,
                    Base.DefaultTextFormat,
                    Screen.ScreenSize.Width,
                    Screen.ScreenSize.Height
                    );

                Base.D2DRenderTarget.FillRectangle(new RawRectangleF(0, cursorY, tl.Metrics.Width, cursorY + tl.Metrics.Height), Base.Brushes.GetColor(Settings.Colors.Background));

                Base.D2DRenderTarget.DrawTextLayout(
                    new RawVector2(0, cursorY),
                    tl,
                    Base.Brushes.GetColor(Settings.Colors.NormalText),
                    DrawTextOptions.Clip
                    );
            }

            if (DateTime.Now.Millisecond % 200 >= 100 && !Commands.Parser.CommandExecuting)
            {
                float x, y;
                lock (CursorLock)
                    tl.HitTestTextPosition(Cursor + CommandPre.Length, new RawBool(false), out x, out y);

                //x = tl.Metrics.WidthIncludingTrailingWhitespace;

                Base.D2DRenderTarget.DrawLine(
                    new RawVector2(
                        x,
                        cursorY
                        ),
                    new RawVector2(
                        x,
                        cursorY + Base.DefaultTextFormat.FontSize
                        ),
                    Base.Brushes.GetColor(Settings.Colors.NormalText)
                    );
            }
            tl.Dispose();

            if (SpecialCommandPending || ScrollMode)
            {
                StrokeStyleProperties ssp = new StrokeStyleProperties();
                ssp.DashStyle  = DashStyle.Dash;
                ssp.DashOffset = 15.0f;
                using (var ss = new StrokeStyle(Base.D2DFactory, ssp))
                    Base.D2DRenderTarget.DrawRectangle(Screen.ScreenRect, Base.Brushes.GetColor(ScrollMode ? ConsoleColor.DarkBlue : ConsoleColor.DarkRed), 3.0f, ss);
            }
        }
        public override void stepStart()
        {
            float xSpeed = 0;

            if (currentAction == PlayerAction.idle || !grounded)
            {
                float lx    = Program.getAnalog(AnalogEnum.lx);
                float ly    = Program.getAnalog(AnalogEnum.ly);
                float speed = maxSpeed;
                //if(Math.Sqrt(lx * lx + ly * ly) < .5)
                //{
                //    speed /= 2;
                //}
                switch (Program.leftStickState())
                {
                case (StickState.right):
                    xSpeed = speed;
                    break;

                case (StickState.upRight):
                    xSpeed = speed;
                    break;

                case (StickState.downRight):
                    xSpeed = speed / 2;
                    break;

                case (StickState.left):
                    xSpeed = -speed;
                    break;

                case (StickState.upLeft):
                    xSpeed = -speed;
                    break;

                case (StickState.downLeft):
                    xSpeed = -speed / 2;
                    break;

                case (StickState.up):
                    break;

                case (StickState.down):
                    break;

                default:
                    switch (Program.dpadStickState())
                    {
                    case (StickState.right):
                        xSpeed = speed;
                        break;

                    case (StickState.upRight):
                        xSpeed = speed;
                        break;

                    case (StickState.downRight):
                        xSpeed = speed / 2;
                        break;

                    case (StickState.left):
                        xSpeed = -speed;
                        break;

                    case (StickState.upLeft):
                        xSpeed = -speed;
                        break;

                    case (StickState.downLeft):
                        xSpeed = -speed / 2;
                        break;

                    case (StickState.up):
                        break;

                    case (StickState.down):
                        break;

                    default:
                        break;
                    }
                    break;
                }
            }
            if (currentAction == PlayerAction.attacking)
            {
                if (actionFrame >= 0)
                {
                    currentAction = PlayerAction.idle;
                }
            }
            else if (currentAction == PlayerAction.idle)
            {
                if (Program.getButton(ButtonEnum.a) == ButtonState.pressed)
                {
                    jump();
                }
                if (Program.getButton(ButtonEnum.x) == ButtonState.pressed)
                {
                    attack();
                }
            }
            if (jumpFrame > 0)
            {
                if (Program.getButton(ButtonEnum.a) != ButtonState.down && Program.getButton(ButtonEnum.a) != ButtonState.pressed)
                {
                    jumpFrame = 0;
                }
            }
            safeMove(xSpeed, ySpeed);

            if (jumpFrame <= 0)
            {
                ySpeed += gravity;
            }

            ySpeed = Math.Min(ySpeed, maxFallSpeed);
            if (distanceToFloor() > 0)
            {
                grounded = false;
            }
            else
            {
                jumpFrame = 0;
            }
            RawMatrix3x2 fullTransform = getFullTransform();
            RawVector2   location      = new RawVector2(fullTransform.M31, fullTransform.M32);

            if (location.X != idealLocation.X || location.Y != idealLocation.Y)
            {
                Program.currentRoom.move(location.X - idealLocation.X, location.Y - idealLocation.Y);
            }
            base.stepStart();
        }
Exemple #30
0
 private RawVector2 SnapToGrid(RawVector2 v)
 {
     return(new RawVector2(SnapToGridX(v.X), SnapToGridY(v.Y)));
 }