render method

void render(
  1. DebugDraw debugDraw,
  2. Transform xf,
  3. Color3i color,
  4. bool wireframe,
)

Implementation

void render(
  DebugDraw debugDraw,
  Transform xf,
  Color3i color,
  bool wireframe,
) {
  switch (type) {
    case ShapeType.circle:
      {
        final circle = shape as CircleShape;

        renderCenter.setFrom(Transform.mulVec2(xf, circle.position));
        final radius = circle.radius;
        xf.q.getXAxis(out: renderAxis);

        if (userData != null && userData == liquidFlag) {
          _liquidOffset.setFrom(body.linearVelocity);
          final linVelLength = body.linearVelocity.length;
          if (_averageLinearVel == -1) {
            _averageLinearVel = linVelLength;
          } else {
            _averageLinearVel = .98 * _averageLinearVel + .02 * linVelLength;
          }
          _liquidOffset.scale(_liquidLength / _averageLinearVel / 2);
          _circleCenterMoved
            ..setFrom(renderCenter)
            ..add(_liquidOffset);
          renderCenter.sub(_liquidOffset);
          debugDraw.drawSegment(
            renderCenter,
            _circleCenterMoved,
            _liquidColor,
          );
          return;
        }
        if (wireframe) {
          debugDraw.drawCircleAxis(renderCenter, radius, renderAxis, color);
        } else {
          debugDraw.drawSolidCircle(renderCenter, radius, color);
        }
      }
      break;
    case ShapeType.polygon:
      {
        final poly = shape as PolygonShape;
        assert(poly.vertices.length <= settings.maxPolygonVertices);
        final vertices = poly.vertices
            .map(
              (vertex) => Transform.mulVec2(xf, vertex),
            )
            .toList();

        if (wireframe) {
          debugDraw.drawPolygon(vertices, color);
        } else {
          debugDraw.drawSolidPolygon(vertices, color);
        }
      }
      break;
    case ShapeType.edge:
      {
        final edge = shape as EdgeShape;
        _v1.setFrom(Transform.mulVec2(xf, edge.vertex1));
        _v2.setFrom(Transform.mulVec2(xf, edge.vertex2));
        debugDraw.drawSegment(_v1, _v2, color);
      }
      break;
    case ShapeType.chain:
      {
        final chain = shape as ChainShape;
        final count = chain.vertexCount;
        final vertices = chain.vertices;

        _v1.setFrom(Transform.mulVec2(xf, vertices[0]));
        for (var i = 1; i < count; ++i) {
          _v2.setFrom(Transform.mulVec2(xf, vertices[i]));
          debugDraw.drawSegment(_v1, _v2, color);
          debugDraw.drawCircle(_v1, 0.05, color);
          _v1.setFrom(_v2);
        }
      }
      break;
    default:
      break;
  }
}