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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#pragma once
#include "stdafx.h"
#include "Body.cpp"
#include "JointDef.cpp"
namespace Box2D
{
namespace Net
{
public ref class Joint
{
internal:
b2Joint *joint;
Joint(b2Joint *jointRef) : joint(jointRef) { }
public:
property JointType JointType
{
Box2D::Net::JointType get()
{
return (Box2D::Net::JointType) joint->GetType();
}
}
property Body^ Body1
{
Body^ get()
{
return gcnew Body(joint->GetBody1());
}
}
property Body^ Body2
{
Body^ get()
{
return gcnew Body(joint->GetBody2());
}
}
property Vector^ Anchor1
{
Vector^ get()
{
return gcnew Vector(joint->GetAnchor1());
}
}
property Vector^ Anchor2
{
Vector^ get()
{
return gcnew Vector(joint->GetAnchor2());
}
}
Vector^ GetReactionForce()
{
return gcnew Vector(joint->GetReactionForce());
}
float32 GetReactionTorque()
{
return joint->GetReactionTorque();
}
Joint^ GetNext()
{
return gcnew Joint(joint->GetNext());
}
//TODO:
/*
void* GetUserData();
*/
};
public ref class MouseJoint : public Joint
{
internal:
b2MouseJoint *mouseJoint;
MouseJoint(b2MouseJoint *joint) : Joint(joint), mouseJoint(joint) { }
public:
MouseJoint(Joint^ joint) : Joint(joint->joint), mouseJoint(0)
{
if(joint->JointType == Box2D::Net::JointType::e_mouseJoint &&
reinterpret_cast<b2MouseJoint *>(joint->joint))
{
mouseJoint = reinterpret_cast<b2MouseJoint *>(joint->joint);
}
else
{
throw gcnew System::Exception("Attempting to convert a Joint to a MouseJoint, "
"but the joint is not a mouse joint.");
}
}
void SetTarget(Vector^ Target)
{
mouseJoint->SetTarget(Target->getVec2());
}
};
}
}
|