// frees all memory allocated to the skeleton struct void destroySkeleton(Skeleton skeleton) { free(skeleton.name); for (size_t i = 0; i < skeleton.numJoints; i++) { destroyJoint(skeleton.jointArray[i]); } free(skeleton.jointArray); }
void ClockCircle :: createJoint ( float x, float y, float length ) { if( hasJoint() ) destroyJoint(); b2BodyDef bd; bd.position.Set( ( x * screenWidth ) / OFX_BOX2D_SCALE, ( y * screenHeight ) / OFX_BOX2D_SCALE ); point = world->CreateBody( &bd ); b2DistanceJointDef jd; b2Vec2 p1, p2, d; jd.frequencyHz = 1.0; jd.dampingRatio = 0.2; jd.body1 = body; jd.body2 = point; jd.localAnchor1.Set( 0, 0 ); jd.localAnchor2.Set( 0, 0 ); jd.collideConnected = false; p1 = jd.body1->GetWorldPoint( jd.localAnchor1 ); p2 = jd.body2->GetWorldPoint( jd.localAnchor2 ); d = p2 - p1; jd.length = length / OFX_BOX2D_SCALE; joint = (b2DistanceJoint*)world->CreateJoint( &jd ); body->WakeUp(); }
void PHJoint::setObject2(PHLObject*obj) { destroyJoint(); if (body2) body2->removeJoint(this); body2 = obj; if (body2) body2->addJoint(this); }
void PHJoint::setObject1(PHLObject*obj) { destroyJoint(); if (body1) body1->removeJoint(this); body1 = obj; if (body1) body1->addJoint(this); }
void PHDistanceJoint::recreateJoint() { destroyJoint(); b2DistanceJointDef jointDef; b2Body * b1 = body1->getBody(); b2Body * b2 = body2->getBody(); b2Vec2 a1; b2Vec2 a2; a1.x = anchor1.x; a1.y = anchor1.y; a2.x = anchor2.x; a2.y = anchor2.y; if (!worldCoord) { a1 = b1->GetWorldPoint(a1); a2 = b2->GetWorldPoint(a2); } jointDef.Initialize(b1,b2,a1,a2); jointDef.collideConnected = collideConnected; jointDef.frequencyHz = freq; jointDef.dampingRatio = damp; joint = world->getPhysicsWorld()->CreateJoint(&jointDef); }
void PHJoint::recreateJoint() { destroyJoint(); //placeholder }
PHJoint::~PHJoint() { destroyJoint(); setObject1(NULL); setObject2(NULL); }
GearJoint::~GearJoint() { destroyJoint(joint); joint = 0; }
PulleyJoint::~PulleyJoint() { destroyJoint(joint); joint = 0; }
DistanceJoint::~DistanceJoint() { destroyJoint(joint); joint = 0; }
PrismaticJoint::~PrismaticJoint() { destroyJoint(joint); joint = 0; }
Joint::~Joint() { mBodyA->unregisterAttachedJoint(this); mBodyB->unregisterAttachedJoint(this); setParent(nullptr); destroyJoint(); }