-
Notifications
You must be signed in to change notification settings - Fork 1
/
box2dfrictionjoint.cpp
77 lines (63 loc) · 1.84 KB
/
box2dfrictionjoint.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "box2dfrictionjoint.h"
#include "box2dbody.h"
#include "box2dworld.h"
Box2DFrictionJoint::Box2DFrictionJoint(QDeclarativeItem *parent) :
Box2DJoint(parent),
mFrictionJointDef(),
mFrictionJoint(0)
{
}
float Box2DFrictionJoint::maxForce() const
{
return mFrictionJointDef.maxForce;
}
void Box2DFrictionJoint::setMaxForce(float force)
{
if (mFrictionJointDef.maxForce == force)
return;
mFrictionJointDef.maxForce = force;
if (mFrictionJoint)
mFrictionJoint->SetMaxForce(force);
emit maxForceChanged();
}
float Box2DFrictionJoint::maxTorque() const
{
return mFrictionJointDef.maxTorque;
}
void Box2DFrictionJoint::setMaxTorque(float torque)
{
if (mFrictionJointDef.maxTorque == torque)
return;
mFrictionJointDef.maxTorque = torque;
if (mFrictionJoint)
mFrictionJoint->SetMaxTorque(torque);
emit maxTorqueChanged();
}
QPointF const Box2DFrictionJoint::reactionForce(float inv)
{
const b2Vec2 rf = mFrictionJoint->GetReactionForce(inv);
return QPointF(rf.x, rf.y);
}
float Box2DFrictionJoint::reactionTorque(float inv)
{
return mFrictionJoint->GetReactionTorque(inv);
}
void Box2DFrictionJoint::createJoint()
{
mFrictionJointDef.Initialize(bodyA()->body(), bodyB()->body(), bodyA()->body()->GetWorldCenter());
mFrictionJointDef.collideConnected = collideConnected();
mFrictionJoint = static_cast<b2FrictionJoint*>(world()->CreateJoint(&mFrictionJointDef));
mInitializePending = false;
}
void Box2DFrictionJoint::nullifyJoint()
{
mFrictionJoint = 0;
}
void Box2DFrictionJoint::cleanup(b2World *world)
{
if (mFrictionJoint && bodyA() && bodyB()) {
mFrictionJoint->SetUserData(0);
world->DestroyJoint(mFrictionJoint);
mFrictionJoint = 0;
}
}