| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #pragma once
- #include "Actor.h"
- #include "Box2D/Box2D.h"
- using namespace oxygine;
- namespace oxygine
- {
- class ShaderProgramGL;
- }
- DECLARE_SMART(Box2DDraw, spBox2DDraw);
- class Box2DDraw: public Actor, public b2Draw
- {
- public:
- Box2DDraw();
- ~Box2DDraw();
- void setWorld(float worldScale, b2World* world) {_worldScale = worldScale; _world = world;}
- /// Draw a closed polygon provided in CCW order.
- void DrawPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
- /// Draw a solid closed polygon provided in CCW order.
- void DrawSolidPolygon(const b2Vec2* vertices, int32 vertexCount, const b2Color& color);
- /// Draw a circle.
- void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color);
- /// Draw a solid circle.
- void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color);
- /// Draw a line segment.
- void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color);
- /// Draw a transform. Choose your own length scale.
- /// @param xf a transform.
- void DrawTransform(const b2Transform& xf);
- protected:
- b2World* _world;
- float _worldScale;
- void doRender(const RenderState& rs);
- static const int MAX_VERTICES = 64;
- static const int CIRCLE_SEGMENTS = 16;
- Vector2 mVertices[MAX_VERTICES];
- void createCircleVertices(const b2Vec2& aCenter, float32 aRadius);
- void createPolygonVertices(const b2Vec2* aVertices, int32 aVertexCount);
- void drawPrimitives(bool drawTriangles, bool drawLines, int aCount, const b2Color& aColor);
- ShaderProgramGL* _program;
- };
|