mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
114 lines
2.6 KiB
Dart
114 lines
2.6 KiB
Dart
part of flutter_sprites;
|
|
|
|
class _PhysicsDebugDraw extends box2d.DebugDraw {
|
|
_PhysicsDebugDraw(
|
|
box2d.ViewportTransform transform,
|
|
this.physicsWorld
|
|
) : super(transform) {
|
|
appendFlags(
|
|
box2d.DebugDraw.JOINT_BIT |
|
|
box2d.DebugDraw.CENTER_OF_MASS_BIT |
|
|
box2d.DebugDraw.WIREFRAME_DRAWING_BIT
|
|
);
|
|
}
|
|
|
|
PhysicsWorld physicsWorld;
|
|
|
|
Canvas canvas;
|
|
|
|
@override
|
|
void drawSegment(Vector2 p1, Vector2 p2, box2d.Color3i color) {
|
|
Paint paint = new Paint()
|
|
..color = _toColor(color)
|
|
..strokeWidth = 1.0;
|
|
canvas.drawLine(_toPoint(p1), _toPoint(p2), paint);
|
|
}
|
|
|
|
@override
|
|
void drawSolidPolygon(
|
|
List<Vector2> vertices,
|
|
int vertexCount,
|
|
box2d.Color3i color
|
|
) {
|
|
Path path = new Path();
|
|
Point pt = _toPoint(vertices[0]);
|
|
path.moveTo(pt.x, pt.y);
|
|
for (int i = 1; i < vertexCount; i++) {
|
|
pt = _toPoint(vertices[i]);
|
|
path.lineTo(pt.x, pt.y);
|
|
}
|
|
|
|
Paint paint = new Paint()..color = _toColor(color);
|
|
canvas.drawPath(path, paint);
|
|
}
|
|
|
|
@override
|
|
void drawCircle(Vector2 center, num radius, box2d.Color3i color, [Vector2 axis]) {
|
|
Paint paint = new Paint()
|
|
..color = _toColor(color)
|
|
..style = PaintingStyle.stroke
|
|
..strokeWidth = 1.0;
|
|
|
|
canvas.drawCircle(_toPoint(center), _scale(radius), paint);
|
|
}
|
|
|
|
@override
|
|
void drawSolidCircle(Vector2 center, num radius, Vector2 axis, box2d.Color3i color) {
|
|
Paint paint = new Paint()
|
|
..color = _toColor(color);
|
|
|
|
canvas.drawCircle(_toPoint(center), _scale(radius), paint);
|
|
}
|
|
|
|
@override
|
|
void drawPoint(Vector2 point, num radiusOnScreen, box2d.Color3i color) {
|
|
drawSolidCircle(point, radiusOnScreen, null, color);
|
|
}
|
|
|
|
@override
|
|
void drawParticles(
|
|
List<Vector2> centers,
|
|
double radius,
|
|
List<box2d.ParticleColor> colors,
|
|
int count
|
|
) {
|
|
// TODO: Implement
|
|
}
|
|
|
|
@override
|
|
void drawParticlesWireframe(
|
|
List<Vector2> centers,
|
|
double radius,
|
|
List<box2d.ParticleColor> colors,
|
|
int count
|
|
) {
|
|
// TODO: Implement
|
|
}
|
|
|
|
@override
|
|
void drawTransform(box2d.Transform xf, box2d.Color3i color) {
|
|
drawCircle(xf.p, 0.1, color);
|
|
// TODO: Improve
|
|
}
|
|
|
|
@override
|
|
void drawStringXY(num x, num y, String s, box2d.Color3i color) {
|
|
// TODO: Implement
|
|
}
|
|
|
|
Color _toColor(box2d.Color3i color) {
|
|
return new Color.fromARGB(255, color.x, color.y, color.z);
|
|
}
|
|
|
|
Point _toPoint(Vector2 vec) {
|
|
return new Point(
|
|
vec.x * physicsWorld.b2WorldToNodeConversionFactor,
|
|
vec.y * physicsWorld.b2WorldToNodeConversionFactor
|
|
);
|
|
}
|
|
|
|
double _scale(double value) {
|
|
return value * physicsWorld.b2WorldToNodeConversionFactor;
|
|
}
|
|
}
|