packages feed

apecs-physics 0.4.4 → 0.4.5

raw patch · 21 files changed

+177/−191 lines, 21 filesdep ~vectorPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: vector

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+## [0.4.5]+### Changed+- (#78) Chipmunk bumped to `v7.0.3`, fixes the `sysctl.h` deprecation reported in #77+ ## [0.4.4] ### Changed - Increased upper bound `apecs` dependency
Chipmunk2D/include/chipmunk/chipmunk.h view
@@ -125,10 +125,10 @@  #include "cpSpace.h" -// Chipmunk 7.0.2+// Chipmunk 7.0.3 #define CP_VERSION_MAJOR 7 #define CP_VERSION_MINOR 0-#define CP_VERSION_RELEASE 2+#define CP_VERSION_RELEASE 3  /// Version string. CP_EXPORT extern const char *cpVersionString;
Chipmunk2D/include/chipmunk/chipmunk_private.h view
@@ -48,8 +48,8 @@  //MARK: cpHashSet -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt);-typedef void *(*cpHashSetTransFunc)(void *ptr, void *data);+typedef cpBool (*cpHashSetEqlFunc)(const void *ptr, const void *elt);+typedef void *(*cpHashSetTransFunc)(const void *ptr, void *data);  cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value);@@ -57,9 +57,9 @@ void cpHashSetFree(cpHashSet *set);  int cpHashSetCount(cpHashSet *set);-void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data);-void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr);-void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr);+const void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, const void *ptr, cpHashSetTransFunc trans, void *data);+const void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, const void *ptr);+const void *cpHashSetFind(cpHashSet *set, cpHashValue hash, const void *ptr);  typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data);
Chipmunk2D/include/chipmunk/cpPolyline.h view
@@ -23,7 +23,7 @@  /** 	Returns a copy of a polyline simplified by discarding "flat" vertexes.-	This works well on straigt edged or angular shapes, not as well on smooth shapes.+	This works well on straight edged or angular shapes, not as well on smooth shapes. */ CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); 
− Chipmunk2D/include/chipmunk/prime.h
@@ -1,68 +0,0 @@-/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software- * - * Permission is hereby granted, free of charge, to any person obtaining a copy- * of this software and associated documentation files (the "Software"), to deal- * in the Software without restriction, including without limitation the rights- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell- * copies of the Software, and to permit persons to whom the Software is- * furnished to do so, subject to the following conditions:- * - * The above copyright notice and this permission notice shall be included in- * all copies or substantial portions of the Software.- * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE- * SOFTWARE.- */--// Used for resizing hash tables.-// Values approximately double.-// http://planetmath.org/encyclopedia/GoodHashTablePrimes.html-static int primes[] = {-	5,-	13,-	23,-	47,-	97,-	193,-	389,-	769,-	1543,-	3079,-	6151,-	12289,-	24593,-	49157,-	98317,-	196613,-	393241,-	786433,-	1572869,-	3145739,-	6291469,-	12582917,-	25165843,-	50331653,-	100663319,-	201326611,-	402653189,-	805306457,-	1610612741,-	0,-};--static inline int-next_prime(int n)-{-	int i = 0;-	while(n > primes[i]){-		i++;-		cpAssertHard(primes[i], "Tried to resize a hash table to a size greater than 1610612741 O_o"); // realistically this should never happen-	}-	-	return primes[i];-}
Chipmunk2D/src/chipmunk.c view
@@ -89,7 +89,7 @@ }  cpFloat-cpMomentForPoly(cpFloat m, const int count, const cpVect *verts, cpVect offset, cpFloat r)+cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat r) { 	// TODO account for radius. 	if(count == 2) return cpMomentForSegment(m, verts[0], verts[1], 0.0f);
Chipmunk2D/src/cpArbiter.c view
@@ -231,9 +231,11 @@ cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b) { 	if(arb->swapped){-		(*a) = (cpShape *)arb->b, (*b) = (cpShape *)arb->a;+		(*a) = (cpShape *)arb->b;+		(*b) = (cpShape *)arb->a; 	} else {-		(*a) = (cpShape *)arb->a, (*b) = (cpShape *)arb->b;+		(*a) = (cpShape *)arb->a;+		(*b) = (cpShape *)arb->b; 	} } 
Chipmunk2D/src/cpBBTree.c view
@@ -24,7 +24,7 @@  #include "chipmunk_private.h" -static inline cpSpatialIndexClass *Klass();+static inline cpSpatialIndexClass *Klass(void);  typedef struct Node Node; typedef struct Pair Pair;
Chipmunk2D/src/cpBody.c view
@@ -258,7 +258,7 @@ 	 	cpBodyActivate(body); 	body->m = mass;-	body->m_inv = 1.0f/mass;+	body->m_inv = mass == 0.0f ? INFINITY : 1.0f/mass; 	cpAssertSaneBody(body); } @@ -275,7 +275,7 @@ 	 	cpBodyActivate(body); 	body->i = moment;-	body->i_inv = 1.0f/moment;+	body->i_inv = moment == 0.0f ? INFINITY : 1.0f/moment; 	cpAssertSaneBody(body); } 
Chipmunk2D/src/cpCollision.c view
@@ -200,7 +200,7 @@ ClosestT(const cpVect a, const cpVect b) { 	cpVect delta = cpvsub(b, a);-	return -cpfclamp(cpvdot(delta, cpvadd(a, b))/cpvlengthsq(delta), -1.0f, 1.0f);+	return -cpfclamp(cpvdot(delta, cpvadd(a, b))/(cpvlengthsq(delta) + CPFLOAT_MIN), -1.0f, 1.0f); }  // Basically the same as cpvlerp(), except t = [-1, 1]@@ -674,7 +674,7 @@ 	// If the closest points are nearer than the sum of the radii... 	if(points.d <= circle->r + poly->r){ 		cpVect n = info->n = points.n;-		cpCollisionInfoPushContact(info, cpvadd(points.a, cpvmult(n, circle->r)), cpvadd(points.b, cpvmult(n, poly->r)), 0);+		cpCollisionInfoPushContact(info, cpvadd(points.a, cpvmult(n, circle->r)), cpvadd(points.b, cpvmult(n, -poly->r)), 0); 	} } 
Chipmunk2D/src/cpHashSet.c view
@@ -149,8 +149,8 @@ 	return set->entries; } -void *-cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data)+const void *+cpHashSetInsert(cpHashSet *set, cpHashValue hash, const void *ptr, cpHashSetTransFunc trans, void *data) { 	cpHashValue idx = hash%set->size; 	@@ -175,8 +175,8 @@ 	return bin->elt; } -void *-cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr)+const void *+cpHashSetRemove(cpHashSet *set, cpHashValue hash, const void *ptr) { 	cpHashValue idx = hash%set->size; 	@@ -195,7 +195,7 @@ 		(*prev_ptr) = bin->next; 		set->entries--; 		-		void *elt = bin->elt;+		const void *elt = bin->elt; 		recycleBin(set, bin); 		 		return elt;@@ -204,8 +204,8 @@ 	return NULL; } -void *-cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr)+const void *+cpHashSetFind(cpHashSet *set, cpHashValue hash, const void *ptr) {	 	cpHashValue idx = hash%set->size; 	cpHashSetBin *bin = set->table[idx];
Chipmunk2D/src/cpHastySpace.c view
@@ -7,8 +7,14 @@ //TODO: Move all the thread stuff to another file  //#include <sys/param.h >-#ifndef _WIN32++#ifdef __APPLE__ #include <sys/sysctl.h>+#endif++#ifndef _WIN32+#include <pthread.h>+#elif defined(__MINGW32__) #include <pthread.h> #else #ifndef WIN32_LEAN_AND_MEAN
Chipmunk2D/src/cpMarch.c view
@@ -44,8 +44,8 @@ 			cpFloat x0 = cpflerp(bb.l, bb.r, (i+0)*x_denom); 			cpFloat x1 = cpflerp(bb.l, bb.r, (i+1)*x_denom); 			-			a = b, b = buffer[i + 1];-			c = d, d = sample(cpv(x1, y1), sample_data);+			a = b; b = buffer[i + 1];+			c = d; d = sample(cpv(x1, y1), sample_data); 			buffer[i + 1] = d; 			 			cell(t, a, b, c, d, x0, x1, y0, y1, segment, segment_data);
Chipmunk2D/src/cpPolyShape.c view
@@ -117,7 +117,8 @@ 		if(d < 0.0f) continue; 		 		cpFloat bn = cpvdot(b, n);-		cpFloat t = d/(an - bn);+		// Avoid divide by zero. (d is always positive)+		cpFloat t = d/cpfmax(an - bn, CPFLOAT_MIN); 		if(t < 0.0f || 1.0f < t) continue; 		 		cpVect point = cpvlerp(a, b, t);
Chipmunk2D/src/cpShape.c view
@@ -303,7 +303,8 @@ 	cpFloat r = circle->r; 	 	info->shape = (cpShape *)circle;-	info->point = cpvadd(circle->tc, cpvmult(delta, r/d)); // TODO: div/0+	cpFloat r_over_d = d > 0.0f ? r/d : r;+	info->point = cpvadd(circle->tc, cpvmult(delta, r_over_d)); // TODO: div/0 	info->distance = d - r; 	 	// Use up for the gradient if the distance is very small.
Chipmunk2D/src/cpSimpleMotor.c view
@@ -110,14 +110,14 @@ cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint) {-	cpAssertHard(cpConstraintIsSimpleMotor(constraint), "Constraint is not a pin joint.");+	cpAssertHard(cpConstraintIsSimpleMotor(constraint), "Constraint is not a SimpleMotor."); 	return ((cpSimpleMotor *)constraint)->rate; }  void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate) {-	cpAssertHard(cpConstraintIsSimpleMotor(constraint), "Constraint is not a pin joint.");+	cpAssertHard(cpConstraintIsSimpleMotor(constraint), "Constraint is not a SimpleMotor."); 	cpConstraintActivateBodies(constraint); 	((cpSimpleMotor *)constraint)->rate = rate; }
Chipmunk2D/src/cpSpace.c view
@@ -64,27 +64,27 @@ // Default collision functions.  static cpBool-DefaultBegin(cpArbiter *arb, cpSpace *space, void *data){+DefaultBegin(cpArbiter *arb, cpSpace *space, cpDataPointer data){ 	cpBool retA = cpArbiterCallWildcardBeginA(arb, space); 	cpBool retB = cpArbiterCallWildcardBeginB(arb, space); 	return retA && retB; }  static cpBool-DefaultPreSolve(cpArbiter *arb, cpSpace *space, void *data){+DefaultPreSolve(cpArbiter *arb, cpSpace *space, cpDataPointer data){ 	cpBool retA = cpArbiterCallWildcardPreSolveA(arb, space); 	cpBool retB = cpArbiterCallWildcardPreSolveB(arb, space); 	return retA && retB; }  static void-DefaultPostSolve(cpArbiter *arb, cpSpace *space, void *data){+DefaultPostSolve(cpArbiter *arb, cpSpace *space, cpDataPointer data){ 	cpArbiterCallWildcardPostSolveA(arb, space); 	cpArbiterCallWildcardPostSolveB(arb, space); }  static void-DefaultSeparate(cpArbiter *arb, cpSpace *space, void *data){+DefaultSeparate(cpArbiter *arb, cpSpace *space, cpDataPointer data){ 	cpArbiterCallWildcardSeparateA(arb, space); 	cpArbiterCallWildcardSeparateB(arb, space); }@@ -95,8 +95,8 @@ 	DefaultBegin, DefaultPreSolve, DefaultPostSolve, DefaultSeparate, NULL }; -static cpBool AlwaysCollide(cpArbiter *arb, cpSpace *space, void *data){return cpTrue;}-static void DoNothing(cpArbiter *arb, cpSpace *space, void *data){}+static cpBool AlwaysCollide(cpArbiter *arb, cpSpace *space, cpDataPointer data){return cpTrue;}+static void DoNothing(cpArbiter *arb, cpSpace *space, cpDataPointer data){}  cpCollisionHandler cpCollisionHandlerDoNothing = { 	CP_WILDCARD_COLLISION_TYPE, CP_WILDCARD_COLLISION_TYPE,@@ -418,12 +418,13 @@ cpShape * cpSpaceAddShape(cpSpace *space, cpShape *shape) {-	cpBody *body = shape->body;-	 	cpAssertHard(shape->space != space, "You have already added this shape to this space. You must not add it a second time."); 	cpAssertHard(!shape->space, "You have already added this shape to another space. You cannot add it to a second.");-//	cpAssertHard(body->space == space, "The shape's body must be added to the space before the shape.");+	cpAssertHard(shape->body, "The shape's body is not defined.");+	cpAssertHard(shape->body->space == space, "The shape's body must be added to the space before the shape."); 	cpAssertSpaceUnlocked(space);+	+	cpBody *body = shape->body; 	 	cpBool isStatic = (cpBodyGetType(body) == CP_BODY_TYPE_STATIC); 	if(!isStatic) cpBodyActivate(body);
Chipmunk2D/src/cpSpaceHash.c view
@@ -168,7 +168,7 @@ 	hash->table = (cpSpaceHashBin **)cpcalloc(numcells, sizeof(cpSpaceHashBin *)); } -static inline cpSpatialIndexClass *Klass();+static inline cpSpatialIndexClass *Klass(void);  cpSpatialIndex * cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Chipmunk2D/src/cpSweep1D.c view
@@ -21,7 +21,7 @@  #include "chipmunk_private.h" -static inline cpSpatialIndexClass *Klass();+static inline cpSpatialIndexClass *Klass(void);  //MARK: Basic Structures 
+ Chipmunk2D/src/prime.h view
@@ -0,0 +1,68 @@+/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software+ * + * Permission is hereby granted, free of charge, to any person obtaining a copy+ * of this software and associated documentation files (the "Software"), to deal+ * in the Software without restriction, including without limitation the rights+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+ * copies of the Software, and to permit persons to whom the Software is+ * furnished to do so, subject to the following conditions:+ * + * The above copyright notice and this permission notice shall be included in+ * all copies or substantial portions of the Software.+ * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+ * SOFTWARE.+ */++// Used for resizing hash tables.+// Values approximately double.+// http://planetmath.org/encyclopedia/GoodHashTablePrimes.html+static int primes[] = {+	5,+	13,+	23,+	47,+	97,+	193,+	389,+	769,+	1543,+	3079,+	6151,+	12289,+	24593,+	49157,+	98317,+	196613,+	393241,+	786433,+	1572869,+	3145739,+	6291469,+	12582917,+	25165843,+	50331653,+	100663319,+	201326611,+	402653189,+	805306457,+	1610612741,+	0,+};++static inline int+next_prime(int n)+{+	int i = 0;+	while(n > primes[i]){+		i++;+		cpAssertHard(primes[i], "Tried to resize a hash table to a size greater than 1610612741 O_o"); // realistically this should never happen+	}+	+	return primes[i];+}
apecs-physics.cabal view
@@ -1,50 +1,23 @@-name:                apecs-physics-version:             0.4.4-synopsis:            2D physics for apecs-description:         2D physics for apecs. Uses Chipmunk physics library under the hood.-homepage:            https://github.com/jonascarpay/apecs#readme-license:             BSD3-license-file:        LICENSE-author:              Jonas Carpay-maintainer:          jonascarpay@gmail.com-copyright:           MIT-category:            Web-build-type:          Custom-cabal-version:       >=1.10+name:               apecs-physics+version:            0.4.5+synopsis:           2D physics for apecs+description:+  2D physics for apecs. Uses Chipmunk physics library under the hood.++homepage:           https://github.com/jonascarpay/apecs#readme+license:            BSD3+license-file:       LICENSE+author:             Jonas Carpay+maintainer:         jonascarpay@gmail.com+copyright:          MIT+category:           Web+build-type:         Custom+cabal-version:      >=1.10 extra-source-files:-  README.md,-  CHANGELOG.md,-  Chipmunk2D/include/chipmunk/prime.h,-  Chipmunk2D/include/chipmunk/chipmunk_private.h,-  Chipmunk2D/include/chipmunk/chipmunk_types.h,-  Chipmunk2D/include/chipmunk/cpSlideJoint.h,-  Chipmunk2D/include/chipmunk/cpBB.h,-  Chipmunk2D/include/chipmunk/cpPolyline.h,-  Chipmunk2D/include/chipmunk/cpBody.h,-  Chipmunk2D/include/chipmunk/chipmunk_unsafe.h,-  Chipmunk2D/include/chipmunk/cpSimpleMotor.h,-  Chipmunk2D/include/chipmunk/chipmunk.h,-  Chipmunk2D/include/chipmunk/cpSpatialIndex.h,-  Chipmunk2D/include/chipmunk/cpRobust.h,-  Chipmunk2D/include/chipmunk/chipmunk_structs.h,-  Chipmunk2D/include/chipmunk/cpMarch.h,-  Chipmunk2D/include/chipmunk/cpTransform.h,-  Chipmunk2D/include/chipmunk/cpShape.h,-  Chipmunk2D/include/chipmunk/cpConstraint.h,-  Chipmunk2D/include/chipmunk/cpGrooveJoint.h,-  Chipmunk2D/include/chipmunk/cpHastySpace.h,-  Chipmunk2D/include/chipmunk/cpGearJoint.h,-  Chipmunk2D/include/chipmunk/chipmunk_ffi.h,-  Chipmunk2D/include/chipmunk/cpRatchetJoint.h,-  Chipmunk2D/include/chipmunk/cpRotaryLimitJoint.h,-  Chipmunk2D/include/chipmunk/cpVect.h,-  Chipmunk2D/include/chipmunk/cpArbiter.h,-  Chipmunk2D/include/chipmunk/cpSpace.h,-  Chipmunk2D/include/chipmunk/cpDampedRotarySpring.h,-  Chipmunk2D/include/chipmunk/cpPinJoint.h,-  Chipmunk2D/include/chipmunk/cpDampedSpring.h,-  Chipmunk2D/include/chipmunk/cpPolyShape.h,-  Chipmunk2D/include/chipmunk/cpPivotJoint.h+  CHANGELOG.md+  Chipmunk2D/include/chipmunk/*.h+  Chipmunk2D/src/prime.h+  README.md  source-repository HEAD   type:     git@@ -52,56 +25,54 @@  custom-setup   setup-depends:-    base  >= 4.9 && < 5,-    Cabal >= 1.14+      base   >=4.9  && <5+    , Cabal  >=1.14  flag release-  description: Release mode, better performance but no longer provides debug info on the command line.-  Manual:  True-  default: False+  description:+    Release mode, better performance but no longer provides debug info on the command line. +  manual:      True+  default:     False+ library-  hs-source-dirs:-    src-  default-language:-    Haskell2010-  exposed-modules:-    Apecs.Physics+  hs-source-dirs:   src+  default-language: Haskell2010+  exposed-modules:  Apecs.Physics   other-modules:-    Apecs.Physics.Body,-    Apecs.Physics.Constraint,-    Apecs.Physics.Collision,-    Apecs.Physics.Geometry,-    Apecs.Physics.Shape,-    Apecs.Physics.Space,-    Apecs.Physics.Types+    Apecs.Physics.Body+    Apecs.Physics.Collision+    Apecs.Physics.Constraint+    Apecs.Physics.Geometry     Apecs.Physics.Query+    Apecs.Physics.Shape+    Apecs.Physics.Space+    Apecs.Physics.Types+   build-depends:-    apecs            >= 0.7  && < 0.10,-    base             >= 4.9  && < 5,-    containers       >= 0.5  && < 0.8,-    inline-c         >= 0.6  && < 1,-    linear           >= 1.20 && < 2,-    template-haskell >= 2.12 && < 3,-    vector           >= 0.10 && < 0.13+      apecs             >=0.7  && <0.10+    , base              >=4.9  && <5+    , containers        >=0.5  && <0.8+    , inline-c          >=0.6  && <1+    , linear            >=1.20 && <2+    , template-haskell  >=2.12 && <3+    , vector            >=0.10 && <0.13+   ghc-options:-    -Wall-    -O2-    -Wno-orphans-    -Wno-unused-do-bind-    -Wno-name-shadowing-  cc-options:-    -std=c99+    -Wall -O2 -Wno-orphans -Wno-unused-do-bind -Wno-name-shadowing++  cc-options:       -std=c99+   if flag(release)     cc-options: -DNDEBUG-  include-dirs:-    Chipmunk2D/include/chipmunk++  include-dirs:     Chipmunk2D/include/chipmunk   c-sources:     Chipmunk2D/src/chipmunk.c-    Chipmunk2D/src/cpBody.c     Chipmunk2D/src/cpArbiter.c     Chipmunk2D/src/cpArray.c     Chipmunk2D/src/cpBBTree.c+    Chipmunk2D/src/cpBody.c     Chipmunk2D/src/cpCollision.c     Chipmunk2D/src/cpConstraint.c     Chipmunk2D/src/cpDampedRotarySpring.c@@ -113,8 +84,8 @@     Chipmunk2D/src/cpMarch.c     Chipmunk2D/src/cpPinJoint.c     Chipmunk2D/src/cpPivotJoint.c-    Chipmunk2D/src/cpPolyShape.c     Chipmunk2D/src/cpPolyline.c+    Chipmunk2D/src/cpPolyShape.c     Chipmunk2D/src/cpRatchetJoint.c     Chipmunk2D/src/cpRobust.c     Chipmunk2D/src/cpRotaryLimitJoint.c