Beispiel #1
0
        private void PrepareDraw(IRenderCanvas renderCanvas, Body body)
        {
            renderCanvas.StrokeThickness = 1f;

            if (body.IsStatic)
            {
                renderCanvas.StrokeColor = Color.Yellow;
                renderCanvas.FillColor   = Color.FromArgb(128, Color.YellowGreen);
            }
            else if (body.BodyType == BodyType.Kinematic)
            {
                renderCanvas.StrokeColor = Color.White;
                renderCanvas.FillColor   = Color.FromArgb(128, Color.White);
            }
            else if (body.Awake)
            {
                renderCanvas.StrokeColor = Color.Red;
                renderCanvas.FillColor   = Color.FromArgb(128, Color.OrangeRed);
            }
            else
            {
                renderCanvas.StrokeColor = Color.Green;
                renderCanvas.FillColor   = Color.FromArgb(128, Color.SeaGreen);
            }
        }
Beispiel #2
0
        private void DrawBodyFixtures(IRenderCanvas renderCanvas, List <Fixture> fixtureList)
        {
            Transform transform;

            for (var idx = 0; idx < fixtureList.Count; ++idx)
            {
                var fixture = fixtureList[idx];

                fixture.Body.GetTransform(out transform);
                DrawShape(renderCanvas, fixture.Shape, transform);
            }
        }
Beispiel #3
0
        private void DrawShape(IRenderCanvas renderCanvas, Shape shape, Transform xf)
        {
            switch (shape.ShapeType)
            {
            case ShapeType.Circle:
            {
                CircleShape circle = (CircleShape)shape;
                Vector2     center = MathUtils.Mul(ref xf, circle.Position);
                float       radius = circle.Radius;
                renderCanvas.DrawCircle(center, radius);
            }
            break;

            case ShapeType.Polygon:
            {
                PolygonShape poly        = (PolygonShape)shape;
                int          vertexCount = poly.Vertices.Count;
                Debug.Assert(vertexCount <= Settings.MaxPolygonVertices);

                for (int i = 0; i < vertexCount; ++i)
                {
                    tempVertices[i] = MathUtils.Mul(ref xf, poly.Vertices[i]);
                }

                renderCanvas.DrawPolygon(tempVertices, vertexCount);
            }
            break;


            case ShapeType.Edge:
            {
                EdgeShape edge = (EdgeShape)shape;
                Vector2   v1   = MathUtils.Mul(ref xf, edge.Vertex1);
                Vector2   v2   = MathUtils.Mul(ref xf, edge.Vertex2);
                renderCanvas.DrawLine(v1, v2);
            }
            break;

            case ShapeType.Chain:
            {
                ChainShape chain = (ChainShape)shape;

                for (int i = 0; i < chain.Vertices.Count - 1; ++i)
                {
                    Vector2 v1 = MathUtils.Mul(ref xf, chain.Vertices[i]);
                    Vector2 v2 = MathUtils.Mul(ref xf, chain.Vertices[i + 1]);
                    renderCanvas.DrawLine(v1, v2);
                }
            }
            break;
            }
        }
Beispiel #4
0
        public virtual void Render(IRenderCanvas renderCanvas)
        {
            renderCanvas.Clear(Color.Black);

            renderCanvas.Scale  = MathHelper.Min((renderCanvas.Size.Width - 10) / Size.X, (renderCanvas.Size.Height - 10) / Size.Y);
            renderCanvas.Center = Vector2.Zero;

            for (var idx = 0; idx < World.BodyList.Count; ++idx)
            {
                var body = World.BodyList[idx];

                PrepareDraw(renderCanvas, body);
                DrawBodyFixtures(renderCanvas, body.FixtureList);
            }
        }