private void DrawShape(Fixture fixture, Transform xf, Color3f color)
{
switch (fixture.Type)
{
case ShapeType.Circle:
{
CircleShape circle = (CircleShape)fixture.Shape;
// Vec2 center = Mul(xf, circle.m_p);
Transform.MulToOutUnsafe(xf, circle.P, center);
float radius = circle.Radius;
xf.Q.GetXAxis(axis);
if (fixture.UserData != null && fixture.UserData.Equals(LIQUID_INT))
{
Body b = fixture.Body;
liquidOffset.Set(b.LinearVelocity);
float linVelLength = b.LinearVelocity.Length();
if (averageLinearVel == -1)
{
averageLinearVel = linVelLength;
}
else
{
averageLinearVel = .98f * averageLinearVel + .02f * linVelLength;
}
liquidOffset.MulLocal(LIQUID_LENGTH / averageLinearVel / 2);
circCenterMoved.Set(center).AddLocal(liquidOffset);
center.SubLocal(liquidOffset);
DebugDraw.DrawSegment(center, circCenterMoved, liquidColor);
return;
}
DebugDraw.DrawSolidCircle(center, radius, axis, color);
}
break;
case ShapeType.Polygon:
{
PolygonShape poly = (PolygonShape)fixture.Shape;
int vertexCount = poly.VertexCount;
Debug.Assert(vertexCount <= Settings.MAX_POLYGON_VERTICES);
Vec2[] vertices = tlvertices.Get(Settings.MAX_POLYGON_VERTICES);
for (int i = 0; i < vertexCount; ++i)
{
// vertices[i] = Mul(xf, poly.m_vertices[i]);
Transform.MulToOutUnsafe(xf, poly.Vertices[i], vertices[i]);
}
DebugDraw.DrawSolidPolygon(vertices, vertexCount, color);
}
break;
case ShapeType.Edge:
{
EdgeShape edge = (EdgeShape)fixture.Shape;
Transform.MulToOutUnsafe(xf, edge.Vertex1, v1);
Transform.MulToOutUnsafe(xf, edge.Vertex2, v2);
DebugDraw.DrawSegment(v1, v2, color);
}
break;
case ShapeType.Chain:
{
ChainShape chain = (ChainShape)fixture.Shape;
int count = chain.Count;
Vec2[] vertices = chain.Vertices;
Transform.MulToOutUnsafe(xf, vertices[0], v1);
for (int i = 1; i < count; ++i)
{
Transform.MulToOutUnsafe(xf, vertices[i], v2);
DebugDraw.DrawSegment(v1, v2, color);
DebugDraw.DrawCircle(v1, 0.05f, color);
v1.Set(v2);
}
}
break;
}
}