box2d_DebugDraw.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include "box2d_bindings.hpp"
  2. namespace pkpy{
  3. // def draw_polygon(self, vertices: list[vec2], color: vec4): ...
  4. // def draw_solid_polygon(self, vertices: list[vec2], color: vec4): ...
  5. // def draw_circle(self, center: vec2, radius: float, color: vec4): ...
  6. // def draw_solid_circle(self, center: vec2, radius: float, axis: vec2, color: vec4): ...
  7. // def draw_segment(self, p1: vec2, p2: vec2, color: vec4): ...
  8. // def draw_transform(self, position: vec2, rotation: float): ...
  9. // def draw_point(self, p: vec2, size: float, color: vec4): ...
  10. static Vec4 color_to_vec4(const b2Color& color){
  11. return Vec4(color.r, color.g, color.b, color.a);
  12. }
  13. void PyDebugDraw::DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color){
  14. DEF_SNAME(draw_polygon);
  15. List v(vertexCount);
  16. for(int i = 0; i < vertexCount; i++) v[i] = VAR(vertices[i]);
  17. PyObject* col = VAR(color_to_vec4(color));
  18. vm->call_method(draw_like, draw_polygon, VAR(std::move(v)), col);
  19. }
  20. void PyDebugDraw::DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color){
  21. DEF_SNAME(draw_solid_polygon);
  22. List v(vertexCount);
  23. for(int i = 0; i < vertexCount; i++) v[i] = VAR(vertices[i]);
  24. PyObject* col = VAR(color_to_vec4(color));
  25. vm->call_method(draw_like, draw_solid_polygon, VAR(std::move(v)), col);
  26. }
  27. void PyDebugDraw::DrawCircle(const b2Vec2& center, float radius, const b2Color& color){
  28. DEF_SNAME(draw_circle);
  29. PyObject* col = VAR(color_to_vec4(color));
  30. vm->call_method(draw_like, draw_circle, VAR(center), VAR(radius), col);
  31. }
  32. void PyDebugDraw::DrawSolidCircle(const b2Vec2& center, float radius, const b2Vec2& axis, const b2Color& color){
  33. DEF_SNAME(draw_solid_circle);
  34. PyObject* col = VAR(color_to_vec4(color));
  35. vm->call_method(draw_like, draw_solid_circle, VAR(center), VAR(radius), VAR(axis), col);
  36. }
  37. void PyDebugDraw::DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color){
  38. DEF_SNAME(draw_segment);
  39. PyObject* col = VAR(color_to_vec4(color));
  40. vm->call_method(draw_like, draw_segment, VAR(p1), VAR(p2), col);
  41. }
  42. void PyDebugDraw::DrawTransform(const b2Transform& xf){
  43. DEF_SNAME(draw_transform);
  44. vm->call_method(draw_like, draw_transform, VAR(xf.p), VAR(xf.q.GetAngle()));
  45. }
  46. void PyDebugDraw::DrawPoint(const b2Vec2& p, float size, const b2Color& color){
  47. DEF_SNAME(draw_point);
  48. PyObject* col = VAR(color_to_vec4(color));
  49. vm->call_method(draw_like, draw_point, VAR(p), VAR(size), col);
  50. }
  51. }