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