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); } }
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); } }
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; } }
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); } }