13 #ifndef __CU_WORLD_CONTROLLER_H__
14 #define __CU_WORLD_CONTROLLER_H__
18 #include <Box2D/Dynamics/b2WorldCallbacks.h>
27 #define DEFAULT_WORLD_STEP 1/60.0f
29 #define DEFAULT_WORLD_VELOC 6
31 #define DEFAULT_WORLD_POSIT 2
35 #pragma mark World Controller
48 class CC_DLL
WorldController :
public b2ContactListener, b2DestructionListener, b2ContactFilter,
public Ref {
78 #pragma mark Static Constructors
107 static WorldController* create(
const Rect& bounds,
const Vec2& gravity);
111 #pragma mark Physics Handling
209 void setGravity(
const Vec2& gravity);
225 void update(
float dt);
247 #pragma mark Object Management
291 void garbageCollect();
303 #pragma mark Collision Callback Functions
313 void activateCollisionCallbacks(
bool flag);
365 std::function<void(b2Contact* contact, const b2Manifold* oldManifold)>
beforeSolve;
384 std::function<void(b2Contact* contact, const b2ContactImpulse* impulse)>
afterSolve;
395 if (onBeginContact !=
nullptr) {
396 onBeginContact(contact);
409 if (onEndContact !=
nullptr) {
410 onEndContact(contact);
434 void PreSolve(b2Contact* contact,
const b2Manifold* oldManifold)
override {
435 if (beforeSolve !=
nullptr) {
436 beforeSolve(contact,oldManifold);
457 void PostSolve(b2Contact* contact,
const b2ContactImpulse* impulse)
override {
458 if (afterSolve !=
nullptr) {
459 afterSolve(contact,impulse);
465 #pragma mark Filter Callback Functions
476 void activateFilterCallbacks(
bool flag);
499 std::function<bool(b2Fixture* fixtureA, b2Fixture* fixtureB)>
shouldCollide;
512 if (shouldCollide !=
nullptr) {
513 return shouldCollide(fixtureA,fixtureB);
520 #pragma mark Destruction Callback Functions
530 void activateDestructionCallbacks(
bool flag);
572 if (destroyJoint !=
nullptr) {
586 if (destroyFixture !=
nullptr) {
587 destroyFixture(fixture);
593 #pragma mark Query Functions
603 void queryAABB(std::function<
bool(b2Fixture* fixture)> callback,
const Rect& aabb)
const;
614 void rayCast(std::function<
float(b2Fixture* fixture,
const Vec2& point,
const Vec2& normal,
float fraction)> callback,
615 const Vec2& point1,
const Vec2& point2)
const;
619 CC_CONSTRUCTOR_ACCESS:
621 #pragma mark Initializers
648 virtual bool init(
const Rect& bounds);
662 virtual bool init(
const Rect& bounds,
const Vec2& gravity);
void PreSolve(b2Contact *contact, const b2Manifold *oldManifold) override
Definition: CUWorldController.h:434
bool enabledCollisionCallbacks() const
Definition: CUWorldController.h:323
bool enabledDestructionCallbacks() const
Definition: CUWorldController.h:541
b2World * getWorld()
Definition: CUWorldController.h:123
bool _filters
Definition: CUWorldController.h:72
void EndContact(b2Contact *contact) override
Definition: CUWorldController.h:408
float _stepssize
Definition: CUWorldController.h:55
void BeginContact(b2Contact *contact) override
Definition: CUWorldController.h:394
int _itvelocity
Definition: CUWorldController.h:57
std::function< void(b2Contact *contact, const b2Manifold *oldManifold)> beforeSolve
Definition: CUWorldController.h:365
std::function< void(b2Fixture *fixture)> destroyFixture
Definition: CUWorldController.h:551
std::function< bool(b2Fixture *fixtureA, b2Fixture *fixtureB)> shouldCollide
Definition: CUWorldController.h:499
const Vec2 & getGravity() const
Definition: CUWorldController.h:200
std::function< void(b2Contact *contact, const b2ContactImpulse *impulse)> afterSolve
Definition: CUWorldController.h:384
int getPositionIterations() const
Definition: CUWorldController.h:184
void setStepsize(float step)
Definition: CUWorldController.h:161
const std::vector< Obstacle * > & getObstacles()
Definition: CUWorldController.h:253
void PostSolve(b2Contact *contact, const b2ContactImpulse *impulse) override
Definition: CUWorldController.h:457
Rect _bounds
Definition: CUWorldController.h:67
std::function< void(b2Contact *contact)> onBeginContact
Definition: CUWorldController.h:333
bool _collide
Definition: CUWorldController.h:70
bool ShouldCollide(b2Fixture *fixtureA, b2Fixture *fixtureB) override
Definition: CUWorldController.h:511
void SayGoodbye(b2Fixture *fixture) override
Definition: CUWorldController.h:585
Definition: CUWorldController.h:48
bool _destroy
Definition: CUWorldController.h:74
int _itposition
Definition: CUWorldController.h:59
void SayGoodbye(b2Joint *joint) override
Definition: CUWorldController.h:571
float getStepsize() const
Definition: CUWorldController.h:151
void setLockStep(bool flag)
Definition: CUWorldController.h:142
Vec2 _gravity
Definition: CUWorldController.h:61
void setPositionIterations(int position)
Definition: CUWorldController.h:193
b2World * _world
Definition: CUWorldController.h:51
const Rect & getBounds() const
Definition: CUWorldController.h:232
Definition: CUObstacle.h:46
std::function< void(b2Contact *contact)> onEndContact
Definition: CUWorldController.h:343
void setVelocityIterations(int velocity)
Definition: CUWorldController.h:177
bool isLockStep() const
Definition: CUWorldController.h:132
std::function< void(b2Joint *joint)> destroyJoint
Definition: CUWorldController.h:561
bool _lockstep
Definition: CUWorldController.h:53
std::vector< Obstacle * > _objects
Definition: CUWorldController.h:64
bool enabledFilterCallbacks() const
Definition: CUWorldController.h:487
int getVelocityIterations() const
Definition: CUWorldController.h:168