1/**
2 * Copyright (c) 2006-2023 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
27namespace love
28{
29namespace physics
30{
31namespace 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 **/
40class PulleyJoint : public Joint
41{
42public:
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
74private:
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