void LHSceneShapesDemo::createMouseJointForTouchLocation(Point point) { #if LH_USE_BOX2D b2Body* ourBody = NULL; b2World* world = this->getBox2dWorld(); if(world == NULL)return; LHNode* mouseJointDummyNode = (LHNode*)this->getChildNodeWithName("dummyBodyForMouseJoint"); b2Body* mouseJointBody = mouseJointDummyNode->getBox2dBody(); if(!mouseJointBody)return; b2Vec2 pointToTest = this->metersFromPoint(point); for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) { if(b != mouseJointBody) { b2Fixture* stFix = b->GetFixtureList(); while(stFix != 0){ if(stFix->TestPoint(pointToTest)){ if(ourBody == NULL) { ourBody = b; } else{ LHNode* ourNode = (LHNode*)(ourBody->GetUserData()); LHNode* bNode = (LHNode*)(b->GetUserData()); if(bNode->getLocalZOrder() > ourNode->getLocalZOrder()) { ourBody = b; } } } stFix = stFix->GetNext(); } } } if(ourBody == NULL || mouseJointBody == NULL) return; b2MouseJointDef md; md.bodyA = mouseJointBody; md.bodyB = ourBody; b2Vec2 locationWorld = pointToTest; md.target = locationWorld; md.collideConnected = true; md.maxForce = 1000.0f * ourBody->GetMass(); ourBody->SetAwake(true); if(mouseJoint){ world->DestroyJoint(mouseJoint); mouseJoint = NULL; } mouseJoint = (b2MouseJoint*)world->CreateJoint(&md); #else __Array* allShapes = this->getChildrenOfType<LHShape*>(); for(size_t i = 0; i < allShapes->count(); ++i) { Node* node = (Node*)allShapes->getObjectAtIndex(i); Rect rect = node->getBoundingBox(); if(rect.containsPoint(point)) { touchedNode = node; touchedNodeWasDynamic = touchedNode->getPhysicsBody()->isDynamic(); touchedNode->getPhysicsBody()->setDynamic(false); break; } } #endif }
void LHScenePulleyJointDemo::createMouseJointForTouchLocation(Point point) { #if LH_USE_BOX2D b2Body* ourBody = NULL; b2World* world = this->getBox2dWorld(); if(world == NULL)return; LHNode* mouseJointDummyNode = (LHNode*)this->getChildNodeWithName("dummyBodyForMouseJoint"); b2Body* mouseJointBody = mouseJointDummyNode->getBox2dBody(); if(!mouseJointBody)return; b2Vec2 pointToTest = this->metersFromPoint(point); for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) { if(b != mouseJointBody) { b2Fixture* stFix = b->GetFixtureList(); while(stFix != 0){ if(stFix->TestPoint(pointToTest)){ if(ourBody == NULL) { ourBody = b; } else{ LHNode* ourNode = (LHNode*)(ourBody->GetUserData()); LHNode* bNode = (LHNode*)(b->GetUserData()); if(bNode->getLocalZOrder() > ourNode->getLocalZOrder()) { ourBody = b; } } } stFix = stFix->GetNext(); } } } if(ourBody == NULL || mouseJointBody == NULL) return; b2MouseJointDef md; md.bodyA = mouseJointBody; md.bodyB = ourBody; b2Vec2 locationWorld = pointToTest; md.target = locationWorld; md.collideConnected = true; md.maxForce = 1000.0f * ourBody->GetMass(); ourBody->SetAwake(true); if(mouseJoint){ world->DestroyJoint(mouseJoint); mouseJoint = NULL; } mouseJoint = (b2MouseJoint*)world->CreateJoint(&md); #endif }