#pragma once #include "stdafx.h" #include "Body.cpp" #include "Vector.cpp" using namespace System::Runtime::InteropServices; namespace Box2D { namespace Net { //TODO: is there a way to automatically include the b2JointType as an enum here? public enum class JointType { e_unknownJoint = ::e_unknownJoint, e_revoluteJoint = ::e_revoluteJoint, e_prismaticJoint = ::e_prismaticJoint, e_distanceJoint = ::e_distanceJoint, e_pulleyJoint = ::e_pulleyJoint, e_mouseJoint = ::e_mouseJoint, e_gearJoint = ::e_gearJoint }; public ref class JointDef { internal: b2JointDef *def; JointDef() : def(new b2JointDef()) { } JointDef(b2JointDef *justBuilt) : def(justBuilt) { } virtual ~JointDef() { delete def; } public: property JointType Type { JointType get() { return (JointType)def->type; } void set(JointType value) { def->type = (b2JointType)value; } } property Object^ UserData { Object^ get() { return System::Runtime::InteropServices::GCHandle::FromIntPtr((System::IntPtr)def->userData).Target; } void set(Object^ value) { GCHandle^ gch = GCHandle::Alloc(value); def->userData = (void *)gch->ToIntPtr(*gch); } } property Body^ Body1 { Body^ get() { return gcnew Body(def->body1); } void set(Body^ value) { def->body1 = value->body; } } property Body^ Body2 { Body^ get() { return gcnew Body(def->body2); } void set(Body^ value) { def->body2 = value->body; } } property bool CollideConnected { bool get() { return def->collideConnected; } void set(bool value) { def->collideConnected = value; } } }; public ref class MouseJointDef : public JointDef { internal: b2MouseJointDef *mouseJoint; public: MouseJointDef() : JointDef(mouseJoint = new b2MouseJointDef()) { } property Vector^ Target { Vector^ get() { return gcnew Vector(mouseJoint->target); } void set(Vector^ value) { mouseJoint->target = value->getVec2(); } } property float32 MaxForce { float32 get() { return mouseJoint->maxForce; } void set(float32 value) { mouseJoint->maxForce = value; } } property float32 FrequencyHz { float32 get() { return mouseJoint->frequencyHz; } void set(float32 value) { mouseJoint->frequencyHz = value; } } property float32 DampingRatio { float32 get() { return mouseJoint->dampingRatio; } void set(float32 value) { mouseJoint->dampingRatio = value; } } property float32 TimeStep { float32 get() { return mouseJoint->timeStep; } void set(float32 value) { mouseJoint->timeStep = value; } } }; } }