void PhysicsWorld::queryRect(PhysicsQueryRectCallbackFunc func, const Rect& rect, void* data) { CCASSERT(func != nullptr, "func shouldn't be nullptr"); if (func != nullptr) { RectQueryCallbackInfo info = {this, func, data}; PhysicsWorldCallback::continues = true; cpSpaceBBQuery(this->_info->getSpace(), PhysicsHelper::rect2cpbb(rect), CP_ALL_LAYERS, CP_NO_GROUP, (cpSpaceBBQueryFunc)PhysicsWorldCallback::queryRectCallbackFunc, &info); } }
void PhysicsWorld::queryRect(PhysicsQueryRectCallbackFunc func, const Rect& rect, void* data) { CCASSERT(func != nullptr, "func shouldn't be nullptr"); if (func != nullptr) { if (!_delayAddBodies.empty() || !_delayRemoveBodies.empty()) { updateBodies(); } RectQueryCallbackInfo info = {this, func, data}; PhysicsWorldCallback::continues = true; cpSpaceBBQuery(_cpSpace, PhysicsHelper::rect2cpbb(rect), CP_SHAPE_FILTER_ALL, (cpSpaceBBQueryFunc)PhysicsWorldCallback::queryRectCallbackFunc, &info); } }
void PhysicsWorld::queryRect(PhysicsQueryRectCallbackFunc func, const Rect& rect, void* data) { CCASSERT(func != nullptr, "func shouldn't be nullptr"); if (func != nullptr) { if (!_delayAddBodies.empty() || !_delayRemoveBodies.empty()) { _scene->updatePhysicsBodyTransform(_scene->getNodeToParentTransform(), 0, 1.0f, 1.0f); updateBodies(); } RectQueryCallbackInfo info = {this, func, data}; PhysicsWorldCallback::continues = true; cpSpaceBBQuery(_cpSpace, PhysicsHelper::rect2cpbb(rect), CP_ALL_LAYERS, CP_NO_GROUP, (cpSpaceBBQueryFunc)PhysicsWorldCallback::queryRectCallbackFunc, &info); } }
inline void space_bb_query(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, void *f) { cpSpaceBBQuery(space, bb, layers, group, bbQuery, f); }
void Space::BBQuery(cpBB bb,cpLayers layers,cpGroup group,SpaceBBQueryFunc func) { cpSpaceBBQuery(space,bb,layers,group,*SpaceBBQuery,&func); }
void Space::BBQuery(const cp::BB& bb,cpLayers layers,cpGroup group,cpSpaceBBQueryFunc func,void *data) { cpSpaceBBQuery(space,bb,layers,group,func,data); }
static void activateShapesTouchingShape(cpSpace *space, cpShape *shape) { // TODO this query should be more precise cpSpaceBBQuery(space, shape->bb, CP_ALL_LAYERS, CP_NO_GROUP, activateShapesTouchingShapeHelper, NULL); }