chipmunk 4.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/LICENSE +20 -0
  2. data/README +60 -0
  3. data/Rakefile +47 -40
  4. data/ext/chipmunk/chipmunk.c +39 -3
  5. data/ext/chipmunk/cpArbiter.c +91 -80
  6. data/ext/chipmunk/cpArray.c +24 -10
  7. data/ext/chipmunk/cpBB.c +5 -4
  8. data/ext/chipmunk/cpBody.c +30 -22
  9. data/ext/chipmunk/cpCollision.c +54 -53
  10. data/ext/chipmunk/cpConstraint.c +54 -0
  11. data/ext/chipmunk/cpDampedRotarySpring.c +106 -0
  12. data/ext/chipmunk/cpDampedSpring.c +117 -0
  13. data/ext/chipmunk/cpGearJoint.c +114 -0
  14. data/ext/chipmunk/cpGrooveJoint.c +138 -0
  15. data/ext/chipmunk/cpHashSet.c +74 -40
  16. data/ext/chipmunk/cpPinJoint.c +117 -0
  17. data/ext/chipmunk/cpPivotJoint.c +114 -0
  18. data/ext/chipmunk/cpPolyShape.c +117 -15
  19. data/ext/chipmunk/cpRatchetJoint.c +128 -0
  20. data/ext/chipmunk/cpRotaryLimitJoint.c +122 -0
  21. data/ext/chipmunk/cpShape.c +174 -18
  22. data/ext/chipmunk/cpSimpleMotor.c +99 -0
  23. data/ext/chipmunk/cpSlideJoint.c +131 -0
  24. data/ext/chipmunk/cpSpace.c +584 -215
  25. data/ext/chipmunk/cpSpaceHash.c +191 -105
  26. data/ext/chipmunk/cpVect.c +18 -10
  27. data/ext/chipmunk/extconf.rb +34 -4
  28. data/ext/chipmunk/{chipmunk.h → include/chipmunk/chipmunk.h} +63 -6
  29. data/ext/chipmunk/include/chipmunk/chipmunk_ffi.h +42 -0
  30. data/ext/chipmunk/include/chipmunk/chipmunk_types.h +80 -0
  31. data/ext/chipmunk/include/chipmunk/chipmunk_unsafe.h +54 -0
  32. data/ext/chipmunk/include/chipmunk/constraints/cpConstraint.h +92 -0
  33. data/ext/chipmunk/include/chipmunk/constraints/cpDampedRotarySpring.h +46 -0
  34. data/ext/chipmunk/include/chipmunk/constraints/cpDampedSpring.h +53 -0
  35. data/ext/chipmunk/include/chipmunk/constraints/cpGearJoint.h +41 -0
  36. data/ext/chipmunk/include/chipmunk/constraints/cpGrooveJoint.h +44 -0
  37. data/ext/chipmunk/include/chipmunk/constraints/cpPinJoint.h +43 -0
  38. data/ext/chipmunk/include/chipmunk/constraints/cpPivotJoint.h +42 -0
  39. data/ext/chipmunk/include/chipmunk/constraints/cpRatchetJoint.h +40 -0
  40. data/ext/chipmunk/include/chipmunk/constraints/cpRotaryLimitJoint.h +39 -0
  41. data/ext/chipmunk/include/chipmunk/constraints/cpSimpleMotor.h +37 -0
  42. data/ext/chipmunk/include/chipmunk/constraints/cpSlideJoint.h +44 -0
  43. data/ext/chipmunk/include/chipmunk/constraints/util.h +116 -0
  44. data/ext/chipmunk/{cpArbiter.h → include/chipmunk/cpArbiter.h} +66 -15
  45. data/ext/chipmunk/{cpArray.h → include/chipmunk/cpArray.h} +2 -1
  46. data/ext/chipmunk/{cpBB.h → include/chipmunk/cpBB.h} +21 -0
  47. data/ext/chipmunk/{cpBody.h → include/chipmunk/cpBody.h} +37 -9
  48. data/ext/chipmunk/{cpCollision.h → include/chipmunk/cpCollision.h} +1 -1
  49. data/ext/chipmunk/{cpHashSet.h → include/chipmunk/cpHashSet.h} +12 -9
  50. data/ext/chipmunk/{cpPolyShape.h → include/chipmunk/cpPolyShape.h} +13 -2
  51. data/ext/chipmunk/{cpShape.h → include/chipmunk/cpShape.h} +51 -18
  52. data/ext/chipmunk/include/chipmunk/cpSpace.h +180 -0
  53. data/ext/chipmunk/{cpSpaceHash.h → include/chipmunk/cpSpaceHash.h} +18 -9
  54. data/ext/chipmunk/{cpVect.h → include/chipmunk/cpVect.h} +61 -10
  55. data/ext/chipmunk/prime.h +32 -32
  56. data/ext/chipmunk/rb_chipmunk.c +125 -109
  57. data/ext/chipmunk/rb_chipmunk.h +96 -77
  58. data/ext/chipmunk/rb_cpArbiter.c +225 -0
  59. data/ext/chipmunk/rb_cpBB.c +174 -154
  60. data/ext/chipmunk/rb_cpBody.c +347 -239
  61. data/ext/chipmunk/rb_cpConstraint.c +346 -0
  62. data/ext/chipmunk/rb_cpShape.c +455 -292
  63. data/ext/chipmunk/rb_cpSpace.c +544 -330
  64. data/ext/chipmunk/rb_cpVect.c +321 -250
  65. data/lib/chipmunk.rb +28 -15
  66. data/lib/chipmunk/version.rb +3 -0
  67. metadata +74 -34
  68. data/ext/chipmunk/cpJoint.c +0 -553
  69. data/ext/chipmunk/cpJoint.h +0 -122
  70. data/ext/chipmunk/cpSpace.h +0 -120
  71. data/ext/chipmunk/rb_cpJoint.c +0 -136
@@ -1,122 +0,0 @@
1
- /* Copyright (c) 2007 Scott Lembcke
2
- *
3
- * Permission is hereby granted, free of charge, to any person obtaining a copy
4
- * of this software and associated documentation files (the "Software"), to deal
5
- * in the Software without restriction, including without limitation the rights
6
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- * copies of the Software, and to permit persons to whom the Software is
8
- * furnished to do so, subject to the following conditions:
9
- *
10
- * The above copyright notice and this permission notice shall be included in
11
- * all copies or substantial portions of the Software.
12
- *
13
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- * SOFTWARE.
20
- */
21
-
22
- // TODO: Comment me!
23
-
24
- extern cpFloat cp_joint_bias_coef;
25
-
26
- typedef enum cpJointType {
27
- CP_PIN_JOINT,
28
- CP_PIVOT_JOINT,
29
- CP_SLIDE_JOINT,
30
- CP_GROOVE_JOINT,
31
- CP_CUSTOM_JOINT, // For user definable joint types.
32
- } cpJointType;
33
-
34
- struct cpJoint;
35
- struct cpJointClass;
36
-
37
- typedef struct cpJointClass {
38
- cpJointType type;
39
-
40
- void (*preStep)(struct cpJoint *joint, cpFloat dt_inv);
41
- void (*applyImpulse)(struct cpJoint *joint);
42
- } cpJointClass;
43
-
44
- typedef struct cpJoint {
45
- const cpJointClass *klass;
46
-
47
- cpBody *a, *b;
48
- } cpJoint;
49
-
50
- void cpJointDestroy(cpJoint *joint);
51
- void cpJointFree(cpJoint *joint);
52
-
53
-
54
- typedef struct cpPinJoint {
55
- cpJoint joint;
56
- cpVect anchr1, anchr2;
57
- cpFloat dist;
58
-
59
- cpVect r1, r2;
60
- cpVect n;
61
- cpFloat nMass;
62
-
63
- cpFloat jnAcc, jBias;
64
- cpFloat bias;
65
- } cpPinJoint;
66
-
67
- cpPinJoint *cpPinJointAlloc(void);
68
- cpPinJoint *cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2);
69
- cpJoint *cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2);
70
-
71
-
72
- typedef struct cpSlideJoint {
73
- cpJoint joint;
74
- cpVect anchr1, anchr2;
75
- cpFloat min, max;
76
-
77
- cpVect r1, r2;
78
- cpVect n;
79
- cpFloat nMass;
80
-
81
- cpFloat jnAcc, jBias;
82
- cpFloat bias;
83
- } cpSlideJoint;
84
-
85
- cpSlideJoint *cpSlideJointAlloc(void);
86
- cpSlideJoint *cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max);
87
- cpJoint *cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat min, cpFloat max);
88
-
89
-
90
- typedef struct cpPivotJoint {
91
- cpJoint joint;
92
- cpVect anchr1, anchr2;
93
-
94
- cpVect r1, r2;
95
- cpVect k1, k2;
96
-
97
- cpVect jAcc, jBias;
98
- cpVect bias;
99
- } cpPivotJoint;
100
-
101
- cpPivotJoint *cpPivotJointAlloc(void);
102
- cpPivotJoint *cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect pivot);
103
- cpJoint *cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot);
104
-
105
-
106
- typedef struct cpGrooveJoint {
107
- cpJoint joint;
108
- cpVect grv_n, grv_a, grv_b;
109
- cpVect anchr2;
110
-
111
- cpVect grv_tn;
112
- cpFloat clamp;
113
- cpVect r1, r2;
114
- cpVect k1, k2;
115
-
116
- cpVect jAcc, jBias;
117
- cpVect bias;
118
- } cpGrooveJoint;
119
-
120
- cpGrooveJoint *cpGrooveJointAlloc(void);
121
- cpGrooveJoint *cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2);
122
- cpJoint *cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchr2);
@@ -1,120 +0,0 @@
1
- /* Copyright (c) 2007 Scott Lembcke
2
- *
3
- * Permission is hereby granted, free of charge, to any person obtaining a copy
4
- * of this software and associated documentation files (the "Software"), to deal
5
- * in the Software without restriction, including without limitation the rights
6
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- * copies of the Software, and to permit persons to whom the Software is
8
- * furnished to do so, subject to the following conditions:
9
- *
10
- * The above copyright notice and this permission notice shall be included in
11
- * all copies or substantial portions of the Software.
12
- *
13
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- * SOFTWARE.
20
- */
21
-
22
- // Number of frames that contact information should persist.
23
- extern int cp_contact_persistence;
24
-
25
- // User collision pair function.
26
- typedef int (*cpCollFunc)(cpShape *a, cpShape *b, cpContact *contacts, int numContacts, cpFloat normal_coef, void *data);
27
-
28
- // Structure for holding collision pair function information.
29
- // Used internally.
30
- typedef struct cpCollPairFunc {
31
- unsigned int a;
32
- unsigned int b;
33
- cpCollFunc func;
34
- void *data;
35
- } cpCollPairFunc;
36
-
37
- typedef struct cpSpace{
38
- // *** User definable fields
39
-
40
- // Number of iterations to use in the impulse solver to solve contacts.
41
- int iterations;
42
-
43
- // Number of iterations to use in the impulse solver to solve elastic collisions.
44
- int elasticIterations;
45
-
46
- // Default gravity to supply when integrating rigid body motions.
47
- cpVect gravity;
48
-
49
- // Default damping to supply when integrating rigid body motions.
50
- cpFloat damping;
51
-
52
- // *** Internally Used Fields
53
-
54
- // Time stamp. Is incremented on every call to cpSpaceStep().
55
- int stamp;
56
-
57
- // The static and active shape spatial hashes.
58
- cpSpaceHash *staticShapes;
59
- cpSpaceHash *activeShapes;
60
-
61
- // List of bodies in the system.
62
- cpArray *bodies;
63
- // List of active arbiters for the impulse solver.
64
- cpArray *arbiters;
65
- // Persistant contact set.
66
- cpHashSet *contactSet;
67
-
68
- // List of joints in the system.
69
- cpArray *joints;
70
-
71
- // Set of collisionpair functions.
72
- cpHashSet *collFuncSet;
73
- // Default collision pair function.
74
- cpCollPairFunc defaultPairFunc;
75
- } cpSpace;
76
-
77
- // Basic allocation/destruction functions.
78
- cpSpace* cpSpaceAlloc(void);
79
- cpSpace* cpSpaceInit(cpSpace *space);
80
- cpSpace* cpSpaceNew(void);
81
-
82
- void cpSpaceDestroy(cpSpace *space);
83
- void cpSpaceFree(cpSpace *space);
84
-
85
- // Convenience function. Frees all referenced entities. (bodies, shapes and joints)
86
- void cpSpaceFreeChildren(cpSpace *space);
87
-
88
- // Collision pair function management functions.
89
- void cpSpaceAddCollisionPairFunc(cpSpace *space, unsigned int a, unsigned int b,
90
- cpCollFunc func, void *data);
91
- void cpSpaceRemoveCollisionPairFunc(cpSpace *space, unsigned int a, unsigned int b);
92
- void cpSpaceSetDefaultCollisionPairFunc(cpSpace *space, cpCollFunc func, void *data);
93
-
94
- // Add and remove entities from the system.
95
- void cpSpaceAddShape(cpSpace *space, cpShape *shape);
96
- void cpSpaceAddStaticShape(cpSpace *space, cpShape *shape);
97
- void cpSpaceAddBody(cpSpace *space, cpBody *body);
98
- void cpSpaceAddJoint(cpSpace *space, cpJoint *joint);
99
-
100
- void cpSpaceRemoveShape(cpSpace *space, cpShape *shape);
101
- void cpSpaceRemoveStaticShape(cpSpace *space, cpShape *shape);
102
- void cpSpaceRemoveBody(cpSpace *space, cpBody *body);
103
- void cpSpaceRemoveJoint(cpSpace *space, cpJoint *joint);
104
-
105
- // Point query callback function
106
- typedef void (*cpSpacePointQueryFunc)(cpShape *shape, void *data);
107
- void cpSpaceShapePointQuery(cpSpace *space, cpVect point, cpSpacePointQueryFunc func, void *data);
108
- void cpSpaceStaticShapePointQuery(cpSpace *space, cpVect point, cpSpacePointQueryFunc func, void *data);
109
-
110
- // Iterator function for iterating the bodies in a space.
111
- typedef void (*cpSpaceBodyIterator)(cpBody *body, void *data);
112
- void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIterator func, void *data);
113
-
114
- // Spatial hash management functions.
115
- void cpSpaceResizeStaticHash(cpSpace *space, cpFloat dim, int count);
116
- void cpSpaceResizeActiveHash(cpSpace *space, cpFloat dim, int count);
117
- void cpSpaceRehashStatic(cpSpace *space);
118
-
119
- // Update the space.
120
- void cpSpaceStep(cpSpace *space, cpFloat dt);
@@ -1,136 +0,0 @@
1
- /* Copyright (c) 2007 Scott Lembcke
2
- *
3
- * Permission is hereby granted, free of charge, to any person obtaining a copy
4
- * of this software and associated documentation files (the "Software"), to deal
5
- * in the Software without restriction, including without limitation the rights
6
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- * copies of the Software, and to permit persons to whom the Software is
8
- * furnished to do so, subject to the following conditions:
9
- *
10
- * The above copyright notice and this permission notice shall be included in
11
- * all copies or substantial portions of the Software.
12
- *
13
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- * SOFTWARE.
20
- */
21
-
22
- #include "chipmunk.h"
23
-
24
- #include "ruby.h"
25
- #include "rb_chipmunk.h"
26
-
27
- VALUE m_cpJoint;
28
-
29
- static VALUE
30
- rb_cpPinJointAlloc(VALUE klass)
31
- {
32
- cpPinJoint *joint = cpPinJointAlloc();
33
- VALUE self = Data_Wrap_Struct(klass, NULL, cpJointFree, joint);
34
-
35
- return self;
36
- }
37
-
38
- static VALUE
39
- rb_cpPinJointInit(VALUE self, VALUE a, VALUE b, VALUE anchr1, VALUE anchr2)
40
- {
41
- cpPinJoint *joint = (cpPinJoint *)JOINT(self);
42
- cpPinJointInit(joint, BODY(a), BODY(b), *VGET(anchr1), *VGET(anchr2));
43
- rb_iv_set(self, "body_a", a);
44
- rb_iv_set(self, "body_b", b);
45
-
46
- return self;
47
- }
48
-
49
-
50
- static VALUE
51
- rb_cpSlideJointAlloc(VALUE klass)
52
- {
53
- cpSlideJoint *joint = cpSlideJointAlloc();
54
- VALUE self = Data_Wrap_Struct(klass, NULL, cpJointFree, joint);
55
-
56
- return self;
57
- }
58
-
59
- static VALUE
60
- rb_cpSlideJointInit(VALUE self, VALUE a, VALUE b, VALUE anchr1, VALUE anchr2, VALUE min, VALUE max)
61
- {
62
- cpSlideJoint *joint = (cpSlideJoint *)JOINT(self);
63
- cpSlideJointInit(joint, BODY(a), BODY(b), *VGET(anchr1), *VGET(anchr2), NUM2DBL(min), NUM2DBL(max));
64
- rb_iv_set(self, "body_a", a);
65
- rb_iv_set(self, "body_b", b);
66
-
67
- return self;
68
- }
69
-
70
-
71
- static VALUE
72
- rb_cpPivotJointAlloc(VALUE klass)
73
- {
74
- cpPivotJoint *joint = cpPivotJointAlloc();
75
- VALUE self = Data_Wrap_Struct(klass, NULL, cpJointFree, joint);
76
-
77
- return self;
78
- }
79
-
80
- static VALUE
81
- rb_cpPivotJointInit(VALUE self, VALUE a, VALUE b, VALUE pivot)
82
- {
83
- cpPivotJoint *joint = (cpPivotJoint *)JOINT(self);
84
- cpPivotJointInit(joint, BODY(a), BODY(b), *VGET(pivot));
85
- rb_iv_set(self, "body_a", a);
86
- rb_iv_set(self, "body_b", b);
87
-
88
- return self;
89
- }
90
-
91
-
92
- static VALUE
93
- rb_cpGrooveJointAlloc(VALUE klass)
94
- {
95
- cpGrooveJoint *joint = cpGrooveJointAlloc();
96
- VALUE self = Data_Wrap_Struct(klass, NULL, cpJointFree, joint);
97
-
98
- return self;
99
- }
100
-
101
- static VALUE
102
- rb_cpGrooveJointInit(VALUE self, VALUE a, VALUE b, VALUE grv_a, VALUE grv_b, VALUE anchr2)
103
- {
104
- cpGrooveJoint *joint = (cpGrooveJoint *)JOINT(self);
105
- cpGrooveJointInit(joint, BODY(a), BODY(b), *VGET(grv_a), *VGET(grv_b), *VGET(anchr2));
106
- rb_iv_set(self, "body_a", a);
107
- rb_iv_set(self, "body_b", b);
108
-
109
- return self;
110
- }
111
-
112
- void
113
- Init_cpJoint(void)
114
- {
115
- m_cpJoint = rb_define_module_under(m_Chipmunk, "Joint");
116
-
117
- VALUE c_cpPinJoint = rb_define_class_under(m_cpJoint, "Pin", rb_cObject);
118
- rb_include_module(c_cpPinJoint, m_cpJoint);
119
- rb_define_alloc_func(c_cpPinJoint, rb_cpPinJointAlloc);
120
- rb_define_method(c_cpPinJoint, "initialize", rb_cpPinJointInit, 4);
121
-
122
- VALUE c_cpSlideJoint = rb_define_class_under(m_cpJoint, "Slide", rb_cObject);
123
- rb_include_module(c_cpSlideJoint, m_cpJoint);
124
- rb_define_alloc_func(c_cpSlideJoint, rb_cpSlideJointAlloc);
125
- rb_define_method(c_cpSlideJoint, "initialize", rb_cpSlideJointInit, 6);
126
-
127
- VALUE c_cpPivotJoint = rb_define_class_under(m_cpJoint, "Pivot", rb_cObject);
128
- rb_include_module(c_cpPivotJoint, m_cpJoint);
129
- rb_define_alloc_func(c_cpPivotJoint, rb_cpPivotJointAlloc);
130
- rb_define_method(c_cpPivotJoint, "initialize", rb_cpPivotJointInit, 3);
131
-
132
- VALUE c_cpGrooveJoint = rb_define_class_under(m_cpJoint, "Groove", rb_cObject);
133
- rb_include_module(c_cpGrooveJoint, m_cpJoint);
134
- rb_define_alloc_func(c_cpGrooveJoint, rb_cpGrooveJointAlloc);
135
- rb_define_method(c_cpGrooveJoint, "initialize", rb_cpGrooveJointInit, 5);
136
- }