1 /**
2  * Copyright (c) 2006-2019 LOVE Development Team
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty.  In no event will the authors be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  *    claim that you wrote the original software. If you use this software
14  *    in a product, an acknowledgment in the product documentation would be
15  *    appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  *    misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  **/
20 
21 #ifndef LOVE_PHYSICS_BOX2D_PULLEY_JOINT_H
22 #define LOVE_PHYSICS_BOX2D_PULLEY_JOINT_H
23 
24 // Module
25 #include "Joint.h"
26 
27 namespace love
28 {
29 namespace physics
30 {
31 namespace box2d
32 {
33 
34 /**
35  * The PulleyJoint The pulley connects two bodies to ground and
36  * to each other. As one body goes up, the other goes down. The
37  * total length of the pulley rope is conserved according to the
38  * initial configuration: length1 + ratio * length2 <= constant.
39  **/
40 class PulleyJoint : public Joint
41 {
42 public:
43 
44 	static love::Type type;
45 
46 	/**
47 	 * Creates a PulleyJoint connecting bodyA to bodyB.
48 	 **/
49 	PulleyJoint(Body *bodyA, Body *bodyB, b2Vec2 groundAnchorA, b2Vec2 groundAnchorB, b2Vec2 anchorA, b2Vec2 anchorB, float ratio, bool collideConnected);
50 
51 	virtual ~PulleyJoint();
52 
53 	/**
54 	 * Gets the ground anchors position in world
55 	 * coordinates.
56 	 **/
57 	int getGroundAnchors(lua_State *L);
58 
59 	/**
60 	 * Gets the current length of the segment attached to bodyA.
61 	 **/
62 	float getLengthA() const;
63 
64 	/**
65 	 * Gets the current length of the segment attached to bodyB.
66 	 **/
67 	float getLengthB() const;
68 
69 	/**
70 	 * Gets the pulley ratio.
71 	 **/
72 	float getRatio() const;
73 
74 private:
75 	// The Box2D DistanceJoint object.
76 	b2PulleyJoint *joint;
77 };
78 
79 } // box2d
80 } // physics
81 } // love
82 
83 #endif // LOVE_PHYSICS_BOX2D_PULLEY_JOINT_H
84