File: Joint.cpp

package info (click to toggle)
box2d 2.0.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze, wheezy
  • size: 1,748 kB
  • ctags: 2,143
  • sloc: cpp: 15,308; xml: 1,249; cs: 648; makefile: 338; ansic: 28
file content (106 lines) | stat: -rw-r--r-- 1,929 bytes parent folder | download
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());
			}

		};
	}
}