#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(joint->joint)) { mouseJoint = reinterpret_cast(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()); } }; } }