diff --git a/chipmunk/Demo/Bounce.c b/chipmunk/Demo/Bounce.c deleted file mode 100644 index 292bf095ae..0000000000 --- a/chipmunk/Demo/Bounce.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static void -update(int ticks) -{ - int steps = 3; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip = cpv(frand()*(640 - 2*radius) - (320 - radius), frand()*(480 - 2*radius) - (240 - radius)); - body->v = cpvmult(cpv(2*frand() - 1, 2*frand() - 1), 200); - - cpShape *shape = cpSpaceAddShape(space, cpPolyShapeNew(body, 4, verts, cpvzero)); - shape->e = 1.0f; shape->u = 0.0f; -} - -static cpSpace * -init(void) -{ - staticBody = cpBodyNew(INFINITY, INFINITY); - - cpResetShapeIdCounter(); - - space = cpSpaceNew(); - cpSpaceResizeActiveHash(space, 30.0f, 1000); - space->iterations = 10; - - cpShape *shape; - - // Create segments around the edge of the screen. - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - for(int i=0; i<10; i++) - add_box(); - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(100.0f, 10000.0f)); - - shape = cpSpaceAddShape(space, cpSegmentShapeNew(body, cpv(-75,0), cpv(75,0), 5.0f)); - shape->e = 1.0f; shape->u = 1.0f; - - cpSpaceAddConstraint(space, cpPivotJointNew2(body, staticBody, cpvzero, cpvzero)); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Bounce = { - "Bounce", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/ChipmunkDemo.h b/chipmunk/Demo/ChipmunkDemo.h deleted file mode 100644 index 1f0e32b0ac..0000000000 --- a/chipmunk/Demo/ChipmunkDemo.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -struct chipmunkDemo; - -typedef cpSpace *(*demoInitFunc)(void); -typedef void (*demoUpdateFunc)(int ticks); -typedef void (*demoDestroyFunc)(void); - -typedef struct chipmunkDemo { - char *name; - - drawSpaceOptions *drawOptions; - - demoInitFunc initFunc; - demoUpdateFunc updateFunc; - demoDestroyFunc destroyFunc; -} chipmunkDemo; - -static inline cpFloat -frand(void) -{ - return (cpFloat)rand()/(cpFloat)RAND_MAX; -} - -extern cpVect arrowDirection; -extern char messageString[1024]; - -#define GRABABLE_MASK_BIT (1<<31) -#define NOT_GRABABLE_MASK (~GRABABLE_MASK_BIT) diff --git a/chipmunk/Demo/Joints.c b/chipmunk/Demo/Joints.c deleted file mode 100644 index 03f8af4677..0000000000 --- a/chipmunk/Demo/Joints.c +++ /dev/null @@ -1,296 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static cpBody * -addBall(cpVect pos, cpVect boxOffset) -{ - cpFloat radius = 15.0f; - cpFloat mass = 1.0f; - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero))); - body->p = cpvadd(pos, boxOffset); - - cpShape *shape = cpSpaceAddShape(space, cpCircleShapeNew(body, radius, cpvzero)); - shape->e = 0.0f; shape->u = 0.7f; - - return body; -} - -static cpBody * -addLever(cpVect pos, cpVect boxOffset) -{ - cpFloat mass = 1.0f; - cpVect a = cpv(0, 15); - cpVect b = cpv(0, -15); - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForSegment(mass, a, b))); - body->p = cpvadd(pos, cpvadd(boxOffset, cpv(0, -15))); - - cpShape *shape = cpSpaceAddShape(space, cpSegmentShapeNew(body, a, b, 5.0f)); - shape->e = 0.0f; shape->u = 0.7f; - - return body; -} - -static cpBody * -addBar(cpVect pos, cpVect boxOffset) -{ - cpFloat mass = 2.0f; - cpVect a = cpv(0, 30); - cpVect b = cpv(0, -30); - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForSegment(mass, a, b))); - body->p = cpvadd(pos, boxOffset); - - cpShape *shape = cpSpaceAddShape(space, cpSegmentShapeNew(body, a, b, 5.0f)); - shape->e = 0.0f; shape->u = 0.7f; - - return body; -} - -static cpBody * -addWheel(cpVect pos, cpVect boxOffset) -{ - cpFloat radius = 15.0f; - cpFloat mass = 1.0f; - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero))); - body->p = cpvadd(pos, boxOffset); - - cpShape *shape = cpSpaceAddShape(space, cpCircleShapeNew(body, radius, cpvzero)); - shape->e = 0.0f; shape->u = 0.7f; - shape->group = 1; // use a group to keep the car parts from colliding - - return body; -} - -static cpBody * -addChassis(cpVect pos, cpVect boxOffset) -{ - int num = 4; - cpVect verts[] = { - cpv(-40,-15), - cpv(-40, 15), - cpv( 40, 15), - cpv( 40,-15), - }; - - - cpFloat mass = 5.0f; - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForPoly(mass, num, verts, cpvzero))); - body->p = cpvadd(pos, boxOffset); - - cpShape *shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = 0.7f; - shape->group = 1; // use a group to keep the car parts from colliding - - return body; -} - -static cpSpace * -init(void) -{ - staticBody = cpBodyNew(INFINITY, INFINITY); - - space = cpSpaceNew(); - space->iterations = 10; - space->gravity = cpv(0, -100); - - cpShape *shape; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,120), cpv(320,120), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,0), cpv(320,0), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-120), cpv(320,-120), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-160,-240), cpv(-160,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(0,-240), cpv(0,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(160,-240), cpv(160,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - cpVect boxOffset; - cpBody *body1, *body2; - - cpVect posA = cpv( 50, 60); - cpVect posB = cpv(110, 60); - - #define POS_A cpvadd(boxOffset, posA) - #define POS_B cpvadd(boxOffset, posB) - - // Pin Joints - Link shapes with a solid bar or pin. - // Keeps the anchor points the same distance apart from when the joint was created. - boxOffset = cpv(-320, -240); - body1 = addBall(posA, boxOffset); - body2 = addBall(posB, boxOffset); - cpSpaceAddConstraint(space, cpPinJointNew(body1, body2, cpv(15,0), cpv(-15,0))); - - // Slide Joints - Like pin joints but with a min/max distance. - // Can be used for a cheap approximation of a rope. - boxOffset = cpv(-160, -240); - body1 = addBall(posA, boxOffset); - body2 = addBall(posB, boxOffset); - cpSpaceAddConstraint(space, cpSlideJointNew(body1, body2, cpv(15,0), cpv(-15,0), 20.0f, 40.0f)); - - // Pivot Joints - Holds the two anchor points together. Like a swivel. - boxOffset = cpv(0, -240); - body1 = addBall(posA, boxOffset); - body2 = addBall(posB, boxOffset); - cpSpaceAddConstraint(space, cpPivotJointNew(body1, body2, cpvadd(boxOffset, cpv(80,60)))); - // cpPivotJointNew() takes it's anchor parameter in world coordinates. The anchors are calculated from that - // cpPivotJointNew2() lets you specify the two anchor points explicitly - - // Groove Joints - Like a pivot joint, but one of the anchors is a line segment that the pivot can slide in - boxOffset = cpv(160, -240); - body1 = addBall(posA, boxOffset); - body2 = addBall(posB, boxOffset); - cpSpaceAddConstraint(space, cpGrooveJointNew(body1, body2, cpv(30,30), cpv(30,-30), cpv(-30,0))); - - // Damped Springs - boxOffset = cpv(-320, -120); - body1 = addBall(posA, boxOffset); - body2 = addBall(posB, boxOffset); - cpSpaceAddConstraint(space, cpDampedSpringNew(body1, body2, cpv(15,0), cpv(-15,0), 20.0f, 5.0f, 0.3f)); - - // Damped Rotary Springs - boxOffset = cpv(-160, -120); - body1 = addBar(posA, boxOffset); - body2 = addBar(posB, boxOffset); - // Add some pin joints to hold the circles in place. - cpSpaceAddConstraint(space, cpPivotJointNew(body1, staticBody, POS_A)); - cpSpaceAddConstraint(space, cpPivotJointNew(body2, staticBody, POS_B)); - cpSpaceAddConstraint(space, cpDampedRotarySpringNew(body1, body2, 0.0f, 3000.0f, 60.0f)); - - // Rotary Limit Joint - boxOffset = cpv(0, -120); - body1 = addLever(posA, boxOffset); - body2 = addLever(posB, boxOffset); - // Add some pin joints to hold the circles in place. - cpSpaceAddConstraint(space, cpPivotJointNew(body1, staticBody, POS_A)); - cpSpaceAddConstraint(space, cpPivotJointNew(body2, staticBody, POS_B)); - // Hold their rotation within 90 degrees of each other. - cpSpaceAddConstraint(space, cpRotaryLimitJointNew(body1, body2, -(cpFloat)M_PI_2, (cpFloat)M_PI_2)); - - // Ratchet Joint - A rotary ratchet, like a socket wrench - boxOffset = cpv(160, -120); - body1 = addLever(posA, boxOffset); - body2 = addLever(posB, boxOffset); - // Add some pin joints to hold the circles in place. - cpSpaceAddConstraint(space, cpPivotJointNew(body1, staticBody, POS_A)); - cpSpaceAddConstraint(space, cpPivotJointNew(body2, staticBody, POS_B)); - // Ratchet every 90 degrees - cpSpaceAddConstraint(space, cpRatchetJointNew(body1, body2, 0.0f, (cpFloat)M_PI_2)); - - // Gear Joint - Maintain a specific angular velocity ratio - boxOffset = cpv(-320, 0); - body1 = addBar(posA, boxOffset); - body2 = addBar(posB, boxOffset); - // Add some pin joints to hold the circles in place. - cpSpaceAddConstraint(space, cpPivotJointNew(body1, staticBody, POS_A)); - cpSpaceAddConstraint(space, cpPivotJointNew(body2, staticBody, POS_B)); - // Force one to sping 2x as fast as the other - cpSpaceAddConstraint(space, cpGearJointNew(body1, body2, 0.0f, 2.0f)); - - // Simple Motor - Maintain a specific angular relative velocity - boxOffset = cpv(-160, 0); - body1 = addBar(posA, boxOffset); - body2 = addBar(posB, boxOffset); - // Add some pin joints to hold the circles in place. - cpSpaceAddConstraint(space, cpPivotJointNew(body1, staticBody, POS_A)); - cpSpaceAddConstraint(space, cpPivotJointNew(body2, staticBody, POS_B)); - // Make them spin at 1/2 revolution per second in relation to each other. - cpSpaceAddConstraint(space, cpSimpleMotorNew(body1, body2, (cpFloat)M_PI)); - - // Make a car with some nice soft suspension - boxOffset = cpv(0, 0); - cpBody *wheel1 = addWheel(posA, boxOffset); - cpBody *wheel2 = addWheel(posB, boxOffset); - cpBody *chassis = addChassis(cpv(80, 100), boxOffset); - - cpSpaceAddConstraint(space, cpGrooveJointNew(chassis, wheel1, cpv(-30, -10), cpv(-30, -40), cpvzero)); - cpSpaceAddConstraint(space, cpGrooveJointNew(chassis, wheel2, cpv( 30, -10), cpv( 30, -40), cpvzero)); - - cpSpaceAddConstraint(space, cpDampedSpringNew(chassis, wheel1, cpv(-30, 0), cpvzero, 50.0f, 20.0f, 1.5f)); - cpSpaceAddConstraint(space, cpDampedSpringNew(chassis, wheel2, cpv( 30, 0), cpvzero, 50.0f, 20.0f, 1.5f)); - - return space; -} - -static void -update(int ticks) -{ - cpSpaceStep(space, 1.0f/60.0f); -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Joints = { - "Joints and Constraints", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/LogoSmash.c b/chipmunk/Demo/LogoSmash.c deleted file mode 100644 index 7e1ea9fb50..0000000000 --- a/chipmunk/Demo/LogoSmash.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static const int image_width = 188; -static const int image_height = 35; -static const int image_row_length = 24; - -static const unsigned char image_bitmap[] = { - 15,-16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-64,15,63,-32,-2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,31,-64,15,127,-125,-1,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,127,-64,15,127,15,-1,-64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-64,15,-2, - 31,-1,-64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-64,0,-4,63,-1,-32,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,1,-1,-64,15,-8,127,-1,-32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,-1,-64,0,-8,-15,-1,-32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-31,-1,-64,15,-8,-32, - -1,-32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,-15,-1,-64,9,-15,-32,-1,-32,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,31,-15,-1,-64,0,-15,-32,-1,-32,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,63,-7,-1,-64,9,-29,-32,127,-61,-16,63,15,-61,-1,-8,31,-16,15,-8,126,7,-31, - -8,31,-65,-7,-1,-64,9,-29,-32,0,7,-8,127,-97,-25,-1,-2,63,-8,31,-4,-1,15,-13, - -4,63,-1,-3,-1,-64,9,-29,-32,0,7,-8,127,-97,-25,-1,-2,63,-8,31,-4,-1,15,-13, - -2,63,-1,-3,-1,-64,9,-29,-32,0,7,-8,127,-97,-25,-1,-1,63,-4,63,-4,-1,15,-13, - -2,63,-33,-1,-1,-32,9,-25,-32,0,7,-8,127,-97,-25,-1,-1,63,-4,63,-4,-1,15,-13, - -1,63,-33,-1,-1,-16,9,-25,-32,0,7,-8,127,-97,-25,-1,-1,63,-4,63,-4,-1,15,-13, - -1,63,-49,-1,-1,-8,9,-57,-32,0,7,-8,127,-97,-25,-8,-1,63,-2,127,-4,-1,15,-13, - -1,-65,-49,-1,-1,-4,9,-57,-32,0,7,-8,127,-97,-25,-8,-1,63,-2,127,-4,-1,15,-13, - -1,-65,-57,-1,-1,-2,9,-57,-32,0,7,-8,127,-97,-25,-8,-1,63,-2,127,-4,-1,15,-13, - -1,-1,-57,-1,-1,-1,9,-57,-32,0,7,-1,-1,-97,-25,-8,-1,63,-1,-1,-4,-1,15,-13,-1, - -1,-61,-1,-1,-1,-119,-57,-32,0,7,-1,-1,-97,-25,-8,-1,63,-1,-1,-4,-1,15,-13,-1, - -1,-61,-1,-1,-1,-55,-49,-32,0,7,-1,-1,-97,-25,-8,-1,63,-1,-1,-4,-1,15,-13,-1, - -1,-63,-1,-1,-1,-23,-49,-32,127,-57,-1,-1,-97,-25,-1,-1,63,-1,-1,-4,-1,15,-13, - -1,-1,-63,-1,-1,-1,-16,-49,-32,-1,-25,-1,-1,-97,-25,-1,-1,63,-33,-5,-4,-1,15, - -13,-1,-1,-64,-1,-9,-1,-7,-49,-32,-1,-25,-8,127,-97,-25,-1,-1,63,-33,-5,-4,-1, - 15,-13,-1,-1,-64,-1,-13,-1,-32,-49,-32,-1,-25,-8,127,-97,-25,-1,-2,63,-49,-13, - -4,-1,15,-13,-1,-1,-64,127,-7,-1,-119,-17,-15,-1,-25,-8,127,-97,-25,-1,-2,63, - -49,-13,-4,-1,15,-13,-3,-1,-64,127,-8,-2,15,-17,-1,-1,-25,-8,127,-97,-25,-1, - -8,63,-49,-13,-4,-1,15,-13,-3,-1,-64,63,-4,120,0,-17,-1,-1,-25,-8,127,-97,-25, - -8,0,63,-57,-29,-4,-1,15,-13,-4,-1,-64,63,-4,0,15,-17,-1,-1,-25,-8,127,-97, - -25,-8,0,63,-57,-29,-4,-1,-1,-13,-4,-1,-64,31,-2,0,0,103,-1,-1,-57,-8,127,-97, - -25,-8,0,63,-57,-29,-4,-1,-1,-13,-4,127,-64,31,-2,0,15,103,-1,-1,-57,-8,127, - -97,-25,-8,0,63,-61,-61,-4,127,-1,-29,-4,127,-64,15,-8,0,0,55,-1,-1,-121,-8, - 127,-97,-25,-8,0,63,-61,-61,-4,127,-1,-29,-4,63,-64,15,-32,0,0,23,-1,-2,3,-16, - 63,15,-61,-16,0,31,-127,-127,-8,31,-1,-127,-8,31,-128,7,-128,0,0 -}; - -static inline int -get_pixel(int x, int y) -{ - return (image_bitmap[(x>>3) + y*image_row_length]>>(~x&0x7)) & 1; -} - -static cpSpace *space; - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip = cpv(x, y); - - cpShape *shape = cpCircleShapeNew(body, 0.95f, cpvzero); - shape->e = 0.0f; shape->u = 0.0f; - - return shape; -} - -static cpSpace * -init(void) -{ - space = cpSpaceNew(); - cpSpaceResizeActiveHash(space, 2.0f, 10000); - space->iterations = 1; - - cpBody *body; - cpShape *shape; - - for(int y=0; ybody); - cpSpaceAddShape(space, shape); - } - } - - body = cpSpaceAddBody(space, cpBodyNew(INFINITY, INFINITY)); - body->p = cpv(-1000.0f, -10.0f); - body->v = cpv(400.0f, 0.0f); - - shape = cpSpaceAddShape(space, cpCircleShapeNew(body, 8.0f, cpvzero)); - shape->e = 0.0f; shape->u = 0.0f; - shape->layers = NOT_GRABABLE_MASK; - - return space; -} - -static void -destroy(void) -{ - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -drawSpaceOptions draw_options = { - 0, 0, 0, 2.0f, 3.0f, 0.0f, -}; - -chipmunkDemo LogoSmash = { - "Logo Smash", - &draw_options, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/MagnetsElectric.c b/chipmunk/Demo/MagnetsElectric.c deleted file mode 100644 index 78997d86b5..0000000000 --- a/chipmunk/Demo/MagnetsElectric.c +++ /dev/null @@ -1,506 +0,0 @@ -// This Demo was written by Juan Pablo Carbajal. Nov 2008. - -#include -#include -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -#define WIDTH 600 -#define HEIGHT 400 - -#define SINGMAX 10 // Maximum number of singularities per body -#define NMAG 10 // Number of magnets -#define NCHG 10 // Number of charged bodies -#define NMIX 10 // Number of charged magnets - -#define COU_MKS 8.987551787e9 // Some physical constants -#define MAG_MKS 1e-7 - -// Prototypes -struct DataforForce; -typedef void (*SingForceFunc)(struct DataforForce* data); - -// Structures -// Singularities -typedef struct ActorSingularity{ - // Number of singularities - int Nsing; - // Value of the singularities - cpFloat value[SINGMAX]; - // Type of the singularities - char type[SINGMAX][100]; - // Global position of the singularities - cpVect Gpos[SINGMAX]; - // Local position of the singularities - cpVect position[SINGMAX]; - // Angle of the singularities measured in the body axes - cpFloat angle[SINGMAX]; - // Angle of the singularities measured from x - cpFloat Gangle[SINGMAX]; - // Force function - SingForceFunc force_func[SINGMAX]; - // Force function - SingForceFunc torque_func[SINGMAX]; -}Sing; - -// Data for the force functions -typedef struct DataforForce{ - //Everything in global coordinates - // Position of the source - cpVect p0; - // Observed position - cpVect p; - // Relative position source-observed - cpVect relp; - // distance, disntace^2, ditance ^3 - cpFloat r[3]; - // angle of the source - cpFloat ang0; - // angle of the observed singularity - cpFloat ang; - // Foce value - cpVect F; - // Torque value - cpFloat T; -}ForceData; - -// Global Varibales -static cpSpace *space; -static cpBody *staticBody; - - -// **** Forces ****** // -// Calculate the forces between two bodies. all this functions requieres -// a pointer to an structure with the necessary fields. - -// forces between charges -static void -CoulombForce(ForceData* data){ - data->F=cpvmult(cpvnormalize(data->relp),(cpFloat)COU_MKS/data->r[1]); -} - -// forces between magnets -static void -MagDipoleForce(ForceData* data){ - static cpFloat phi,alpha,beta,Fr,Fphi; - - // Angle of the relative position vector - phi=cpvtoangle(data->relp); - alpha=data->ang0; - beta=data->ang; - - alpha =phi - alpha; - beta = phi - beta; - - - // Components in polar coordinates - Fr=((cpFloat)2.0e0*cpfcos(alpha)*cpfcos(beta) - cpfsin(alpha)*cpfsin(beta)); - Fphi=cpfsin(alpha+beta); -// printf("%g %g %g %g %g\n",phi,alpha,beta,Fphi); - - // Cartesian coordinates - data->F=cpv(Fr*cpfcos(phi)-Fphi*cpfsin(phi),Fr*cpfsin(phi)+Fphi*cpfcos(phi)); - data->F=cpvmult(data->F,(cpFloat)-3.e0*(cpFloat)MAG_MKS/(data->r[1]*data->r[1])); -} - -static void -MagDipoleTorque(ForceData* data){ - static cpFloat phi,alpha,beta; - - phi=cpvtoangle(data->relp); - alpha=data->ang0; - beta=data->ang; - alpha =phi - alpha; - beta = phi - beta; - - // Torque. Though we could use a component of F to save some space, - // we use another variables for the sake of clarity. - - data->T=((cpFloat)MAG_MKS/data->r[2])*((cpFloat)3.0e0*cpfcos(alpha)*cpfsin(beta) + cpfsin(alpha-beta)); -} -// ******* // - -// This function fills the data structure for the force functions -// The structure Sing has the information about the singularity (charge or magnet) -static void -FillForceData(Sing* source,int inds, Sing* obs,int indo, ForceData* data) -{ - // Global Position and orientation of the source singularity - data->p0=source->Gpos[inds]; - data->ang0=source->Gangle[inds]; - - // Global Position and orientation of the observed singularity - data->p=obs->Gpos[indo]; - data->ang=obs->Gangle[indo]; - - // Derived magnitudes - data->relp=cpvsub(data->p,data->p0); //Relative position - data->r[0]=cpvlength(data->relp); // Distance - data->r[1]=cpvlengthsq(data->relp); // Square Distance - data->r[2]=data->r[0]*data->r[1]; // Cubic distance - - source->force_func[inds](data); // The value of the force - data->F= cpvmult(data->F,source->value[inds]*obs->value[indo]); -} - -// Calculation of the interaction -static void -LRangeForceApply(cpBody *a, cpBody *b){ - - Sing* aux = (Sing*)a->data; - Sing* aux2 = (Sing*)b->data; - cpVect delta; - // General data needed to calculate interaction - static ForceData fdata; - fdata.F=cpvzero; - - // Calculate the forces between the charges of different bodies - for (int i=0; iNsing; i++) - { - for (int j=0; jNsing; j++) - { - if(!strcmp(aux->type[i],aux2->type[j])) - { - //printf("%s %s\n",aux->type[i],aux2->type[j]); - FillForceData (aux2,j,aux,i,&fdata); - - //Force applied to body A - delta=cpvsub(aux->Gpos[i], a->p); - cpBodyApplyForce(a,fdata.F, delta); - - if(aux->torque_func[i] != NULL) - { - //Torque on A - aux->torque_func[i](&fdata); - a->t += aux->value[i]*aux2->value[j]*fdata.T; - - } - } - } - } -} - -// function for the integration of the positions -// The following functions are variations to the starndrd integration in Chipmunk -// you can go ack to the standard ones by doing the appropiate changes. -static void -ChargedBodyUpdatePositionVerlet(cpBody *body, cpFloat dt) -{ - // Long range interaction - cpArray *bodies = space->bodies; - static cpBody* B; - Sing* aux=(Sing*)body->data; - Sing* aux2; - - // General data needed to calculate interaction - static ForceData fdata; - fdata.F=cpvzero; - - for(int i=0; i< bodies->num; i++) - { - B=(cpBody*)bodies->arr[i]; - aux2=(Sing*)B->data; - - if(B != body) - { - // Calculate the forces between the singularities of different bodies - LRangeForceApply(body, B); - } - } - - cpVect dp = cpvmult(cpvadd(body->v, body->v_bias), dt); - dp = cpvadd(dp,cpvmult(cpvmult(body->f, body->m_inv), (cpFloat)0.5e0*dt*dt)); - body->p = cpvadd(body->p, dp); - - cpBodySetAngle(body, body->a + (body->w + body->w_bias)*dt - + 0.5f*body->t*body->i_inv*dt*dt); - - // Update position of the singularities - aux = (Sing*)body->data; - for (int i=0; iNsing; i++) - { - aux->Gpos[i]=cpvadd(body->p,cpvrotate(cpv(aux->position[i].x, - aux->position[i].y), body->rot)); - aux->Gangle[i]= aux->angle[i] + body->a; - } - - - body->v_bias = cpvzero; - body->w_bias = 0.0f; -} - -// function for the integration of the velocities -static void -ChargedBodyUpdateVelocityVerlet(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt) -{ - body->v = cpvadd(body->v, cpvmult(cpvadd(gravity, cpvmult(body->f, body->m_inv)), (cpFloat)0.5e0*dt)); - body->w = body->w + body->t*body->i_inv*(cpFloat)0.5e0*dt; - - body->f = cpvzero; - body->t = 0; - - // Long range interaction - cpArray *bodies = space->bodies; - static cpBody* B; - - // General data needed to calculate interaction - static ForceData fdata; - fdata.F=cpvzero; - - for(int i=0; i< bodies->num; i++) - { - B=(cpBody*)bodies->arr[i]; - - if(B != body) - { - // Calculate the forces between the singularities of different bodies - LRangeForceApply(body, B); - } - } - body->v = cpvadd(cpvmult(body->v,damping), cpvmult(cpvadd(gravity, cpvmult(body->f, body->m_inv)), (cpFloat)0.5e0*dt)); - body->w = body->w*damping + body->t*body->i_inv*(cpFloat)0.5e0*dt; -} - -static void -update(int ticks) -{ - int steps = 10; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - cpArray *bodies = space->bodies; - - for(int i=0; i< bodies->num; i++) - cpBodyResetForces((cpBody*)bodies->arr[i]); - - for(int i=0; ip = p; - body->v = cpvzero; - cpBodySetAngle(body, ang); - body->w = 0; - - // Load the singularities - Sing *magnet=(Sing*)cpmalloc(sizeof(Sing)); - magnet->Nsing=1; - magnet->value[0]=mag; - sprintf(magnet->type[0],"magdipole"); - - // The position and angle could be different form the one of the body - magnet->position[0]=cpvzero; - magnet->Gpos[0]=cpvadd(p,magnet->position[0]); - magnet->angle[0]=0.0f; - magnet->Gangle[0]=ang; - - magnet->force_func[0]=MagDipoleForce; - magnet->torque_func[0]=MagDipoleTorque; - - body->data=magnet; - - body->position_func=ChargedBodyUpdatePositionVerlet; - body->velocity_func=ChargedBodyUpdateVelocityVerlet; - cpSpaceAddBody(space, body); - - cpShape *shape = cpPolyShapeNew(body, nverts, verts, cpvzero); - shape->e = 0; shape->u = 0.7f; - cpSpaceAddShape(space, shape); -} - -static void -make_charged(cpVect p, cpFloat chg) -{ - int nverts=4; - cpVect verts[] = { - cpv(-10,-10), - cpv(-10, 10), - cpv( 10, 10), - cpv( 10,-10) - }; - - cpBody *body = cpBodyNew(1, cpMomentForPoly(1, nverts, verts, cpvzero)); - body->p = p; - body->v = cpvzero; - cpBodySetAngle(body, 0); - body->w = 0; - - // Load the singularities - Sing *charge=(Sing*)cpmalloc(sizeof(Sing));; - charge->Nsing=1; - charge->value[0]=chg; - sprintf(charge->type[0],"electrical"); - - // The position and angle could be different form the one of the body - charge->position[0]=cpvzero; - charge->Gpos[0]=cpvadd(p,charge->position[0]); - charge->Gangle[0]=0; - - charge->force_func[0]=CoulombForce; - charge->torque_func[0]=NULL; - - body->data=charge; - - body->position_func=ChargedBodyUpdatePositionVerlet; - body->velocity_func=ChargedBodyUpdateVelocityVerlet; - cpSpaceAddBody(space, body); - - cpShape *shape = cpPolyShapeNew(body, nverts, verts, cpvzero); - shape->e = 0; shape->u = 0.7f; - cpSpaceAddShape(space, shape); -} -void -make_mix(cpVect p, cpFloat ang, cpFloat mag,cpFloat chg) -{ - int nverts=5; - cpVect verts[] = { - cpv(-10,-10), - cpv(-10, 10), - cpv( 10, 10), - cpv( 20, 0), - cpv( 10,-10) - }; - - cpBody *body = cpBodyNew(1, cpMomentForPoly(1, nverts, verts, cpvzero)); - body->p = p; - body->v = cpvzero; - cpBodySetAngle(body, ang); - body->w = 0; - - // Load the singularities - Sing *mix=(Sing*)cpmalloc(sizeof(Sing));; - mix->Nsing=2; - mix->value[0]=mag; - mix->value[1]=chg; - sprintf(mix->type[0],"magdipole"); - sprintf(mix->type[1],"electrical"); - - // The position and angle could be different form the one of the body - mix->position[0]=cpvzero; - mix->Gpos[0]=cpvadd(p,mix->position[0]); - mix->position[1]=cpvzero; - mix->Gpos[1]=cpvadd(p,mix->position[1]); - mix->Gangle[0]=ang; - mix->Gangle[1]=ang; - - mix->force_func[0]=MagDipoleForce; - mix->force_func[1]=CoulombForce; - mix->torque_func[0]=MagDipoleTorque; - mix->torque_func[1]=NULL; - - body->data=mix; - - body->position_func=ChargedBodyUpdatePositionVerlet; - body->velocity_func=ChargedBodyUpdateVelocityVerlet; - cpSpaceAddBody(space, body); - - cpShape *shape = cpPolyShapeNew(body, nverts, verts, cpvzero); - shape->e = 0; shape->u = 0.7f; - cpSpaceAddShape(space, shape); -} - - -static cpSpace* -init(void) -{ - - staticBody = cpBodyNew(INFINITY, INFINITY); - - cpResetShapeIdCounter(); - space = cpSpaceNew(); - space->iterations = 5; - space->gravity = cpvzero; //cpv(0,-100); - - cpSpaceResizeActiveHash(space, 30, 2999); - - // Screen border -/* shape = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f); - shape->e = 1.0; shape->u = 1.0; - cpSpaceAddStaticShape(space, shape); - - shape = cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f); - shape->e = 1.0; shape->u = 1.0; - cpSpaceAddStaticShape(space, shape); - - shape = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f); - shape->e = 1.0; shape->u = 1.0; - cpSpaceAddStaticShape(space, shape); - - // Reference line - // Does not collide with other objects, we just want to draw it. - shape = cpSegmentShapeNew(staticBody, cpv(-320,0), cpv(320,0), 0.0f); - shape->collision_type = 1; - cpSpaceAddStaticShape(space, shape); - // Add a collision pair function to filter collisions - cpSpaceAddCollisionPairFunc(space, 0, 1, NULL, NULL); -*/ - - srand(time(NULL)); - cpVect p; - cpFloat ang; - - // Create magnets - for(int i=0; i -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -typedef struct OneWayPlatform { - cpVect n; // direction objects may pass through - cpArray *passThruList; // list of objects passing through -} OneWayPlatform; - -static OneWayPlatform platformInstance; - -static int -preSolve(cpArbiter *arb, cpSpace *space, void *ignore) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - OneWayPlatform *platform = (OneWayPlatform*)(a->data); - - if(cpArrayContains(platform->passThruList, b)){ - // The object is in the pass thru list, ignore it until separates. - return 0; - } else { - cpFloat dot = cpvdot(cpArbiterGetNormal(arb, 0), platform->n); - - if(dot < 0){ - // Add the object to the pass thrru list - cpArrayPush(platform->passThruList, b); - return 0; - } else { - return 1; - } - } -} - -static void -separate(cpArbiter *arb, cpSpace *space, void *ignore) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - - // remove the object from the pass thru list - cpArrayDeleteObj(((OneWayPlatform *)a->data)->passThruList, b); -} - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; iiterations = 10; - space->gravity = cpv(0, -100); - - cpBody *body; - cpShape *shape; - - // Create segments around the edge of the screen. - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - // Add our one way segment - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-160,-100), cpv(160,-100), 10.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->collision_type = 1; - shape->layers = NOT_GRABABLE_MASK; - - // We'll use the data pointer for the OneWayPlatform struct - platformInstance.n = cpv(0, 1); // let objects pass upwards - platformInstance.passThruList = cpArrayNew(0); - shape->data = &platformInstance; - - - // Add a ball to make things more interesting - cpFloat radius = 15.0f; - body = cpSpaceAddBody(space, cpBodyNew(10.0f, cpMomentForCircle(10.0f, 0.0f, radius, cpvzero))); - body->p = cpv(0, -200); - body->v = cpv(0, 170); - - shape = cpSpaceAddShape(space, cpCircleShapeNew(body, radius, cpvzero)); - shape->e = 0.0f; shape->u = 0.9f; - shape->collision_type = 2; - - cpSpaceAddCollisionHandler(space, 1, 2, NULL, preSolve, NULL, separate, NULL); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); - - cpArrayFree(platformInstance.passThruList); -} - -chipmunkDemo OneWay = { - "One Way Platforms", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Planet.c b/chipmunk/Demo/Planet.c deleted file mode 100644 index e76b4f2af5..0000000000 --- a/chipmunk/Demo/Planet.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip; - cpVect g = cpvmult(p, -50000.0f/cpvdot(p, p)); - - cpBodyUpdateVelocity(body, g, damping, dt); -} - -static cpVect -rand_pos(cpFloat radius) -{ - cpVect v; - do { - v = cpv(frand()*(640 - 2*radius) - (320 - radius), frand()*(480 - 2*radius) - (240 - radius)); - } while(cpvlength(v) < 100.0f); - - return v; -} - -static void -add_box() -{ - const cpFloat size = 10.0f; - const cpFloat mass = 1.0f; - - cpVect verts[] = { - cpv(-size,-size), - cpv(-size, size), - cpv( size, size), - cpv( size,-size), - }; - - cpFloat radius = cpvlength(cpv(size, size)); - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForPoly(mass, 4, verts, cpvzero))); - body->velocity_func = planetGravityVelocityFunc; - body->p = rand_pos(radius); - body->v = cpvmult(cpv(2*frand() - 1, 2*frand() - 1), 200); - - cpShape *shape = cpSpaceAddShape(space, cpPolyShapeNew(body, 4, verts, cpvzero)); - shape->e = 0.0f; shape->u = 0.7f; -} - -static cpSpace * -init(void) -{ - staticBody = cpBodyNew(INFINITY, INFINITY); - staticBody->w = 0.2f; - - cpResetShapeIdCounter(); - - space = cpSpaceNew(); - cpSpaceResizeActiveHash(space, 30.0f, 10000); - space->iterations = 20; - - for(int i=0; i<30; i++) - add_box(); - - cpShape *shape = cpSpaceAddStaticShape(space, cpCircleShapeNew(staticBody, 70.0f, cpvzero)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Planet = { - "Planet", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Player.c b/chipmunk/Demo/Player.c deleted file mode 100644 index 32c5a6c713..0000000000 --- a/chipmunk/Demo/Player.c +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -typedef struct PlayerStruct { - cpFloat u; - cpShape *shape; - cpVect groundNormal; - cpArray *groundShapes; -} PlayerStruct; - -PlayerStruct playerInstance; - -static int -begin(cpArbiter *arb, cpSpace *space, void *ignore) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - PlayerStruct *player = (PlayerStruct*)(a->data); - - cpVect n = cpvneg(cpArbiterGetNormal(arb, 0)); - if(n.y > 0.0f){ - cpArrayPush(player->groundShapes, b); - } - - return 1; -} - -static int -preSolve(cpArbiter *arb, cpSpace *space, void *ignore) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - PlayerStruct *player = (PlayerStruct*)(a->data); - - if(arb->stamp > 0){ - a->u = player->u; - - // pick the most upright jump normal each frame - cpVect n = cpvneg(cpArbiterGetNormal(arb, 0)); - if(n.y >= player->groundNormal.y){ - player->groundNormal = n; - } - } - - return 1; -} - -static void -separate(cpArbiter *arb, cpSpace *space, void *ignore) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - PlayerStruct *player = (PlayerStruct*)(a->data); - - cpArrayDeleteObj(player->groundShapes, b); - - if(player->groundShapes->num == 0){ - a->u = 0.0f; - } -} - -static void -playerUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt) -{ - cpBodyUpdateVelocity(body, gravity, damping, dt); - body->v.y = cpfmax(body->v.y, -700); - body->v.x = cpfclamp(body->v.x, -400, 400); -} - - -static void -update(int ticks) -{ - static int lastJumpState = 0; - int jumpState = (arrowDirection.y > 0.0f); - - cpVect groundNormal = playerInstance.groundNormal; - if(groundNormal.y > 0.0f){ - playerInstance.shape->surface_v = cpvmult(cpvperp(groundNormal), 400.0f*arrowDirection.x); - } else { - playerInstance.shape->surface_v = cpvzero; - } - - cpBody *body = playerInstance.shape->body; - - // apply jump - if(jumpState && !lastJumpState && cpvlengthsq(groundNormal)){ -// body->v = cpvmult(cpvslerp(groundNormal, cpv(0.0f, 1.0f), 0.5f), 500.0f); - body->v = cpvadd(body->v, cpvmult(cpvslerp(groundNormal, cpv(0.0f, 1.0f), 0.75f), 500.0f)); - } - - if(playerInstance.groundShapes->num == 0){ - cpFloat air_accel = body->v.x + arrowDirection.x*(2000.0f); - body->f.x = body->m*air_accel; -// body->v.x = cpflerpconst(body->v.x, 400.0f*arrowDirection.x, 2000.0f/60.0f); - } - - int steps = 3; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - playerInstance.groundNormal = cpvzero; - for(int i=0; iiterations = 10; - space->gravity = cpv(0, -1500); - - cpBody *body; - cpShape *shape; - - // Create segments around the edge of the screen. - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - // add some other segments to play with - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-220,-200), cpv(-220,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(0,-240), cpv(320,-200), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(200,-240), cpv(320,-100), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-220,-80), cpv(200,-80), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - shape->collision_type = 2; - - // Set up the player - cpFloat radius = 15.0f; - body = cpSpaceAddBody(space, cpBodyNew(10.0f, INFINITY)); - body->p = cpv(0, -220); - body->velocity_func = playerUpdateVelocity; - - shape = cpSpaceAddShape(space, cpCircleShapeNew(body, radius, cpvzero)); - shape->e = 0.0f; shape->u = 2.0f; - shape->collision_type = 1; - - playerInstance.u = shape->u; - playerInstance.shape = shape; - playerInstance.groundShapes = cpArrayNew(0); - shape->data = &playerInstance; - - cpSpaceAddCollisionHandler(space, 1, 2, begin, preSolve, NULL, separate, NULL); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); - - cpArrayFree(playerInstance.groundShapes); -} - -chipmunkDemo Player = { - "Player", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Plink.c b/chipmunk/Demo/Plink.c deleted file mode 100644 index bdbe05df96..0000000000 --- a/chipmunk/Demo/Plink.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -// Iterate over all of the bodies and reset the ones that have fallen offscreen. -static void -eachBody(cpBody *body, void *unused) -{ - if(body->p.y < -260 || fabsf(body->p.x) > 340){ - cpFloat x = rand()/(cpFloat)RAND_MAX*640 - 320; - body->p = cpv(x, 260); - } -} - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; iiterations = 5; - space->gravity = cpv(0, -100); - - cpSpaceResizeStaticHash(space, 40.0f, 999); - cpSpaceResizeActiveHash(space, 30.0f, 2999); - - cpBody *body; - cpShape *shape; - - // Create vertexes for a pentagon shape. - cpVect verts[NUM_VERTS]; - for(int i=0; ie = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - } - } - - // Add lots of pentagons. - for(int i=0; i<300; i++){ - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, NUM_VERTS, verts, cpvzero))); - cpFloat x = rand()/(cpFloat)RAND_MAX*640 - 320; - body->p = cpv(x, 350); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, NUM_VERTS, verts, cpvzero)); - shape->e = 0.0f; shape->u = 0.4f; - } - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Plink = { - "Plink", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Pump.c b/chipmunk/Demo/Pump.c deleted file mode 100644 index 56e52333a4..0000000000 --- a/chipmunk/Demo/Pump.c +++ /dev/null @@ -1,188 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; -static cpConstraint *motor; - -#define numBalls 5 -static cpBody *balls[numBalls]; - -static void -update(int ticks) -{ - cpFloat coef = (2.0f + arrowDirection.y)/3.0f; - cpFloat rate = arrowDirection.x*30.0f*coef; - cpSimpleMotorSetRate(motor, rate); - motor->maxForce = (rate) ? 1000000.0f : 0.0f; - - int steps = 2; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip.x > 320.0f){ - ball->v = cpvzero; - ball->p = cpv(-224.0f, 200.0f); - } - } - } -} - -static cpBody * -add_ball(cpVect pos) -{ - cpBody *body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForCircle(1.0f, 30, 0, cpvzero))); - body->p = pos; - - cpShape *shape = cpSpaceAddShape(space, cpCircleShapeNew(body, 30, cpvzero)); - shape->e = 0.0f; shape->u = 0.5f; - - return body; -} - -static cpSpace * -init(void) -{ - staticBody = cpBodyNew(INFINITY, INFINITY); - - space = cpSpaceNew(); - space->gravity = cpv(0, -600); - - cpShape *shape; - - // beveling all of the line segments helps prevent things from getting stuck on cracks - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-256,16), cpv(-256,240), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-256,16), cpv(-192,0), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-192,0), cpv(-192, -64), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-128,-64), cpv(-128,144), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-192,80), cpv(-192,176), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-192,176), cpv(-128,240), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-128,144), cpv(192,64), 2.0f)); - shape->e = 0.0f; shape->u = 0.5f; shape->layers = 1; - shape->layers = NOT_GRABABLE_MASK; - - cpVect verts[] = { - cpv(-30,-80), - cpv(-30, 80), - cpv( 30, 64), - cpv( 30,-80), - }; - - cpBody *plunger = cpSpaceAddBody(space, cpBodyNew(1.0f, INFINITY)); - plunger->p = cpv(-160,-80); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(plunger, 4, verts, cpvzero)); - shape->e = 1.0f; shape->u = 0.5f; shape->layers = 1; - - // add balls to hopper - for(int i=0; ip = cpv(-160,-160); - cpBodySetAngle(smallGear, (cpFloat)-M_PI_2); - - shape = cpSpaceAddShape(space, cpCircleShapeNew(smallGear, 80.0f, cpvzero)); - shape->layers = 0; - - cpSpaceAddConstraint(space, cpPivotJointNew2(staticBody, smallGear, cpv(-160,-160), cpvzero)); - - // add big gear - cpBody *bigGear = cpSpaceAddBody(space, cpBodyNew(40.0f, cpMomentForCircle(40.0f, 160, 0, cpvzero))); - bigGear->p = cpv(80,-160); - cpBodySetAngle(bigGear, (cpFloat)M_PI_2); - - shape = cpSpaceAddShape(space, cpCircleShapeNew(bigGear, 160.0f, cpvzero)); - shape->layers = 0; - - cpSpaceAddConstraint(space, cpPivotJointNew2(staticBody, bigGear, cpv(80,-160), cpvzero)); - - // connect the plunger to the small gear. - cpSpaceAddConstraint(space, cpPinJointNew(smallGear, plunger, cpv(80,0), cpv(0,0))); - // connect the gears. - cpSpaceAddConstraint(space, cpGearJointNew(smallGear, bigGear, (cpFloat)-M_PI_2, -2.0f)); - - - // feeder mechanism - cpFloat bottom = -300.0f; - cpFloat top = 32.0f; - cpBody *feeder = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForSegment(1.0f, cpv(-224.0f, bottom), cpv(-224.0f, top)))); - feeder->p = cpv(-224, (bottom + top)/2.0f); - - cpFloat len = top - bottom; - cpSpaceAddShape(space, cpSegmentShapeNew(feeder, cpv(0.0f, len/2.0f), cpv(0.0f, -len/2.0f), 20.0f)); - - cpSpaceAddConstraint(space, cpPivotJointNew2(staticBody, feeder, cpv(-224.0f, bottom), cpv(0.0f, -len/2.0f))); - cpVect anchr = cpBodyWorld2Local(feeder, cpv(-224.0f, -160.0f)); - cpSpaceAddConstraint(space, cpPinJointNew(feeder, smallGear, anchr, cpv(0.0f, 80.0f))); - - // motorize the second gear - motor = cpSpaceAddConstraint(space, cpSimpleMotorNew(staticBody, bigGear, 3.0f)); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Pump = { - "Pump", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/PyramidStack.c b/chipmunk/Demo/PyramidStack.c deleted file mode 100644 index fca9436bec..0000000000 --- a/chipmunk/Demo/PyramidStack.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static void -update(int ticks) -{ - int steps = 3; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; iiterations = 20; - cpSpaceResizeStaticHash(space, 40.0f, 1000); - cpSpaceResizeActiveHash(space, 40.0f, 1000); - space->gravity = cpv(0, -100); - - cpBody *body; - cpShape *shape; - - int num = 4; - cpVect verts[] = { - cpv(-15,-15), - cpv(-15, 15), - cpv( 15, 15), - cpv( 15,-15), - }; - - // Create segments around the edge of the screen. - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - // Add lots of boxes. - for(int i=0; i<14; i++){ - for(int j=0; j<=i; j++){ - body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero)); - body->p = cpv(j*32 - i*16, 300 - i*32); - cpSpaceAddBody(space, body); - shape = cpPolyShapeNew(body, num, verts, cpvzero); - shape->e = 0.0f; shape->u = 0.8f; - cpSpaceAddShape(space, shape); - } - } - - // Add a ball to make things more interesting - cpFloat radius = 15.0f; - body = cpSpaceAddBody(space, cpBodyNew(10.0f, cpMomentForCircle(10.0f, 0.0f, radius, cpvzero))); - body->p = cpv(0, -240 + radius+5); - - shape = cpSpaceAddShape(space, cpCircleShapeNew(body, radius, cpvzero)); - shape->e = 0.0f; shape->u = 0.9f; - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo PyramidStack = { - "Pyramid Stack", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/PyramidTopple.c b/chipmunk/Demo/PyramidTopple.c deleted file mode 100644 index 64abfd76d6..0000000000 --- a/chipmunk/Demo/PyramidTopple.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static void -update(int ticks) -{ - int steps = 2; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; iiterations = 20; - cpSpaceResizeActiveHash(space, 30.0f, 2999); - cpSpaceResizeStaticHash(space, 30.0f, 999); - space->gravity = cpv(0, -300); - - cpBody *body; - - cpShape *shape; - - // Vertexes for the dominos. - int num = 4; - cpVect verts[] = { - cpv(-3,-20), - cpv(-3, 20), - cpv( 3, 20), - cpv( 3,-20), - }; - - // Add a floor. - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-600,-240), cpv(600,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - // Shared friction constant. - cpFloat u = 0.6f; - - // Add the dominoes. Skim over this. It doesn't do anything fancy, and it's hard to follow. - int n = 9; - for(int i=1; i<=n; i++){ - cpVect offset = cpv(-i*60/2.0f, (n - i)*52); - - for(int j=0; jp = cpvadd(cpv(j*60, -220), offset); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = u; - - - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero))); - body->p = cpvadd(cpv(j*60, -197), offset); - cpBodySetAngle(body, (cpFloat)M_PI/2.0f); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = u; - - - if(j == (i - 1)) continue; - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero))); - body->p = cpvadd(cpv(j*60 + 30, -191), offset); - cpBodySetAngle(body, (cpFloat)M_PI/2.0f); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = u; - } - - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero))); - body->p = cpvadd(cpv(-17, -174), offset); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = u; - - - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero))); - body->p = cpvadd(cpv((i - 1)*60 + 17, -174), offset); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = u; - } - - // Give the last domino a little tap. -// body->w = -1; -// body->v = cpv(-body->w*20, 0); - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo PyramidTopple = { - "Pyramid Topple", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Query.c b/chipmunk/Demo/Query.c deleted file mode 100644 index b2236ca7ad..0000000000 --- a/chipmunk/Demo/Query.c +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -#include "chipmunk_unsafe.h" - -extern cpSpace *space; -extern cpBody *staticBody; -extern cpVect mousePoint; - -cpShape *querySeg = NULL; - - -static void -update(int ticks) -{ - messageString[0] = '\0'; - - cpVect start = cpvzero; - cpVect end = /*cpv(0, 85);//*/mousePoint; - cpVect lineEnd = end; - - { - char infoString[1024]; - sprintf(infoString, "Query: Dist(%f) Point%s, ", cpvdist(start, end), cpvstr(end)); - strcat(messageString, infoString); - } - - cpSegmentQueryInfo info = {}; - if(cpSpaceSegmentQueryFirst(space, start, end, -1, 0, &info)){ - cpVect point = cpSegmentQueryHitPoint(start, end, info); - lineEnd = cpvadd(point, cpvzero);//cpvmult(info.n, 4.0f)); - - char infoString[1024]; - sprintf(infoString, "Segment Query: Dist(%f) Normal%s", cpSegmentQueryHitDist(start, end, info), cpvstr(info.n)); - strcat(messageString, infoString); - } else { - strcat(messageString, "Segment Query (None)"); - } - - cpSegmentShapeSetEndpoints(querySeg, cpvzero, lineEnd); - - // normal other stuff. - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ielasticIterations = 0; - space->iterations = 5; - - cpSpaceResizeStaticHash(space, 40.0f, 999); - cpSpaceResizeActiveHash(space, 30.0f, 2999); - - cpShape *shape; - - // add a non-collidable segment as a quick and dirty way to draw the query line - shape = cpSegmentShapeNew(staticBody, cpvzero, cpv(100.0f, 0.0f), 4.0f); - cpSpaceAddStaticShape(space, shape); - shape->layers = 0; - querySeg = shape; - - { // add a fat segment - cpFloat mass = 1.0f; - cpFloat length = 100.0f; - cpVect a = cpv(-length/2.0f, 0.0f), b = cpv(length/2.0f, 0.0f); - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForSegment(mass, a, b))); - body->p = cpv(0.0f, 100.0f); - - cpSpaceAddShape(space, cpSegmentShapeNew(body, a, b, 20.0f)); - } - - { // add a static segment - cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(0, 300), cpv(300, 0), 0.0f)); - } - - { // add a pentagon - cpFloat mass = 1.0f; - const int NUM_VERTS = 5; - - cpVect verts[NUM_VERTS]; - for(int i=0; ip = cpv(50.0f, 50.0f); - - cpSpaceAddShape(space, cpPolyShapeNew(body, NUM_VERTS, verts, cpvzero)); - } - - { // add a circle - cpFloat mass = 1.0f; - cpFloat r = 20.0f; - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, r, cpvzero))); - body->p = cpv(100.0f, 100.0f); - - cpSpaceAddShape(space, cpCircleShapeNew(body, r, cpvzero)); - } - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -const chipmunkDemo Query = { - "Segment Query", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Sensors.c b/chipmunk/Demo/Sensors.c deleted file mode 100644 index a18db71054..0000000000 --- a/chipmunk/Demo/Sensors.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -enum { - BALL_TYPE, - BLOCKING_SENSOR_TYPE, - CATCH_SENSOR_TYPE, -} CollisionTypes; - -typedef struct Emitter { - int queue; - int blocked; - cpVect position; -} Emitter; - -static Emitter emitterInstance; - -static int -blockerBegin(cpArbiter *arb, cpSpace *space, void *unused) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - Emitter *emitter = (Emitter*)(a->data); - - emitter->blocked++; - - return 0; // Return values from sensors callbacks are ignored, -} - -static void -blockerSeparate(cpArbiter *arb, cpSpace *space, void *unused) -{ - CP_ARBITER_GET_SHAPES(arb, a, b); - Emitter *emitter = (Emitter*)(a->data); - - emitter->blocked--; -} - -static void -postStepRemove(cpSpace *space, cpShape *shape, void *unused) -{ - cpSpaceRemoveBody(space, shape->body); - cpBodyFree(shape->body); - - cpSpaceRemoveShape(space, shape); - cpShapeFree(shape); -} - -static int -catcherBarBegin(cpArbiter *arb, cpSpace *space, void *unused) -{ - cpShape *a, *b; cpArbiterGetShapes(arb, &a, &b); - Emitter *emitter = (Emitter*)(a->data); - - emitter->queue++; - cpSpaceAddPostStepCallback(space, (cpPostStepFunc)postStepRemove, b, NULL); - - return 0; -} - -static cpFloat frand_unit(){return 2.0f*((cpFloat)rand()/(cpFloat)RAND_MAX) - 1.0f;} - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - if(!emitterInstance.blocked && emitterInstance.queue){ - emitterInstance.queue--; - - cpBody *body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForCircle(1.0f, 15.0f, 0.0f, cpvzero))); - body->p = emitterInstance.position; - body->v = cpvmult(cpv(frand_unit(), frand_unit()), 100.0f); - - cpShape *shape = cpSpaceAddShape(space, cpCircleShapeNew(body, 15.0f, cpvzero)); - shape->collision_type = BALL_TYPE; - } - - for(int i=0; iiterations = 10; - space->gravity = cpv(0, -100); - - cpShape *shape; - - // Data structure for our ball emitter - // We'll use two sensors for it, one to see if the emitter is blocked - // a second to catch the balls and add them back to the emitter - emitterInstance.queue = 5; - emitterInstance.blocked = 0; - emitterInstance.position = cpv(0, 150); - - // Create our blocking sensor, so we know when the emitter is clear to emit another ball - shape = cpSpaceAddStaticShape(space, cpCircleShapeNew(staticBody, 15.0f, emitterInstance.position)); - shape->sensor = 1; - shape->collision_type = BLOCKING_SENSOR_TYPE; - shape->data = &emitterInstance; - - // Create our catch sensor to requeue the balls when they reach the bottom of the screen - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-2000, -200), cpv(2000, -200), 15.0f)); - shape->sensor = 1; - shape->collision_type = CATCH_SENSOR_TYPE; - shape->data = &emitterInstance; - - cpSpaceAddCollisionHandler(space, BLOCKING_SENSOR_TYPE, BALL_TYPE, blockerBegin, NULL, NULL, blockerSeparate, NULL); - cpSpaceAddCollisionHandler(space, CATCH_SENSOR_TYPE, BALL_TYPE, catcherBarBegin, NULL, NULL, NULL, NULL); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Sensors = { - "Sensors", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Simple.c b/chipmunk/Demo/Simple.c deleted file mode 100644 index f7ad193c83..0000000000 --- a/chipmunk/Demo/Simple.c +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -// Init is called by the demo code to set up the demo. -static cpSpace * -init(void) -{ - // Create an infinite mass body to attach ground segments and other static geometry to. - // We won't be adding this body to the space, because we don't want it to be simulated at all. - // Adding bodies to the space simulates them. (fall under the influence of gravity, etc) - // We want the static body to stay right where it is at all times. - staticBody = cpBodyNew(INFINITY, INFINITY); - - // Create a space, a space is a simulation world. It simulates the motions of rigid bodies, - // handles collisions between them, and simulates the joints between them. - space = cpSpaceNew(); - - // Lets set some parameters of the space: - // More iterations make the simulation more accurate but slower - space->iterations = 10; - // These parameters tune the efficiency of the collision detection. - // For more info: http://code.google.com/p/chipmunk-physics/wiki/cpSpace - cpSpaceResizeStaticHash(space, 30.0f, 1000); - cpSpaceResizeActiveHash(space, 30.0f, 1000); - // Give it some gravity - space->gravity = cpv(0, -100); - - // Create A ground segment along the bottom of the screen - cpShape *ground = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f); - // Set some parameters of the shape. - // For more info: http://code.google.com/p/chipmunk-physics/wiki/cpShape - ground->e = 1.0f; ground->u = 1.0f; - ground->layers = NOT_GRABABLE_MASK; // Used by the Demo mouse grabbing code - // Add the shape to the space as a static shape - // If a shape never changes position, add it as static so Chipmunk knows it only needs to - // calculate collision information for it once when it is added. - // Do not change the postion of a static shape after adding it. - cpSpaceAddStaticShape(space, ground); - - // Add a moving circle object. - cpFloat radius = 15.0f; - cpFloat mass = 10.0f; - // This time we need to give a mass and moment of inertia when creating the circle. - cpBody *ballBody = cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero)); - // Set some parameters of the body: - // For more info: http://code.google.com/p/chipmunk-physics/wiki/cpBody - ballBody->p = cpv(0, -240 + radius+5); - // Add the body to the space so it will be simulated and move around. - cpSpaceAddBody(space, ballBody); - - - // Add a circle shape for the ball. - // Shapes are always defined relative to the center of gravity of the body they are attached to. - // When the body moves or rotates, the shape will move with it. - // Additionally, all of the cpSpaceAdd*() functions return the thing they added so you can create and add in one go. - cpShape *ballShape = cpSpaceAddShape(space, cpCircleShapeNew(ballBody, radius, cpvzero)); - ballShape->e = 0.0f; ballShape->u = 0.9f; - - return space; -} - -// Update is called by the demo code each frame. -static void -update(int ticks) -{ - // Chipmunk allows you to use a different timestep each frame, but it works much better when you use a fixed timestep. - // An excellent article on why fixed timesteps for game logic can be found here: http://gafferongames.com/game-physics/fix-your-timestep/ - cpSpaceStep(space, 1.0f/60.0f); -} - -// destroy is called by the demo code to free all the memory we've allocated -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Simple = { - "Simple", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/Springies.c b/chipmunk/Demo/Springies.c deleted file mode 100644 index 9f203b99a0..0000000000 --- a/chipmunk/Demo/Springies.c +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static cpFloat -springForce(cpConstraint *spring, cpFloat dist) -{ - cpFloat clamp = 20.0f; - return cpfclamp(cpDampedSpringGetRestLength(spring) - dist, -clamp, clamp)*cpDampedSpringGetStiffness(spring); -} - -static cpConstraint * -new_spring(cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2, cpFloat restLength, cpFloat stiff, cpFloat damp) -{ - cpConstraint *spring = cpDampedSpringNew(a, b, anchr1, anchr2, restLength, stiff, damp); - cpDampedSpringSetSpringForceFunc(spring, springForce); - - return spring; -} - -static void -update(int ticks) -{ - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip = center; - - cpShape *shape = cpSpaceAddShape(space, cpSegmentShapeNew(body, cpvsub(a, center), cpvsub(b, center), 10.0f)); - shape->group = group; - - return body; -} - -static cpSpace * -init(void) -{ - staticBody = cpBodyNew(INFINITY, INFINITY); - - space = cpSpaceNew(); - - cpBody *body1 = add_bar(cpv(-240, 160), cpv(-160, 80), 1); - cpBody *body2 = add_bar(cpv(-160, 80), cpv( -80, 160), 1); - cpBody *body3 = add_bar(cpv( 0, 160), cpv( 80, 0), 0); - cpBody *body4 = add_bar(cpv( 160, 160), cpv( 240, 160), 0); - cpBody *body5 = add_bar(cpv(-240, 0), cpv(-160, -80), 2); - cpBody *body6 = add_bar(cpv(-160, -80), cpv( -80, 0), 2); - cpBody *body7 = add_bar(cpv( -80, 0), cpv( 0, 0), 2); - cpBody *body8 = add_bar(cpv( 0, -80), cpv( 80, -80), 0); - cpBody *body9 = add_bar(cpv( 240, 80), cpv( 160, 0), 3); - cpBody *body10 = add_bar(cpv( 160, 0), cpv( 240, -80), 3); - cpBody *body11 = add_bar(cpv(-240, -80), cpv(-160, -160), 4); - cpBody *body12 = add_bar(cpv(-160, -160), cpv( -80, -160), 0); - cpBody *body13 = add_bar(cpv( 0, -160), cpv( 80, -160), 0); - cpBody *body14 = add_bar(cpv( 160, -160), cpv( 240, -160), 0); - - cpSpaceAddConstraint(space, cpPivotJointNew2( body1, body2, cpv( 40,-40), cpv(-40,-40))); - cpSpaceAddConstraint(space, cpPivotJointNew2( body5, body6, cpv( 40,-40), cpv(-40,-40))); - cpSpaceAddConstraint(space, cpPivotJointNew2( body6, body7, cpv( 40, 40), cpv(-40, 0))); - cpSpaceAddConstraint(space, cpPivotJointNew2( body9, body10, cpv(-40,-40), cpv(-40, 40))); - cpSpaceAddConstraint(space, cpPivotJointNew2(body11, body12, cpv( 40,-40), cpv(-40, 0))); - - cpFloat stiff = 100.0f; - cpFloat damp = 0.5f; - cpSpaceAddConstraint(space, new_spring(staticBody, body1, cpv(-320, 240), cpv(-40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body1, cpv(-320, 80), cpv(-40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body1, cpv(-160, 240), cpv(-40, 40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body2, cpv(-160, 240), cpv( 40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body2, cpv( 0, 240), cpv( 40, 40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body3, cpv( 80, 240), cpv(-40, 80), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body4, cpv( 80, 240), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body4, cpv( 320, 240), cpv( 40, 0), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body5, cpv(-320, 80), cpv(-40, 40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body9, cpv( 320, 80), cpv( 40, 40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body10, cpv( 320, 0), cpv( 40,-40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body10, cpv( 320,-160), cpv( 40,-40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body11, cpv(-320,-160), cpv(-40, 40), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body12, cpv(-240,-240), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body12, cpv( 0,-240), cpv( 40, 0), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body13, cpv( 0,-240), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body13, cpv( 80,-240), cpv( 40, 0), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring(staticBody, body14, cpv( 80,-240), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body14, cpv( 240,-240), cpv( 40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(staticBody, body14, cpv( 320,-160), cpv( 40, 0), 0.0f, stiff, damp)); - - cpSpaceAddConstraint(space, new_spring( body1, body5, cpv( 40,-40), cpv(-40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body1, body6, cpv( 40,-40), cpv( 40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body2, body3, cpv( 40, 40), cpv(-40, 80), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body4, cpv(-40, 80), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body4, cpv( 40,-80), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body7, cpv( 40,-80), cpv( 40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body7, cpv(-40, 80), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body8, cpv( 40,-80), cpv( 40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body3, body9, cpv( 40,-80), cpv(-40,-40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body4, body9, cpv( 40, 0), cpv( 40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body5, body11, cpv(-40, 40), cpv(-40, 40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body5, body11, cpv( 40,-40), cpv( 40,-40), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body7, body8, cpv( 40, 0), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body8, body12, cpv(-40, 0), cpv( 40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body8, body13, cpv(-40, 0), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body8, body13, cpv( 40, 0), cpv( 40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring( body8, body14, cpv( 40, 0), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(body10, body14, cpv( 40,-40), cpv(-40, 0), 0.0f, stiff, damp)); - cpSpaceAddConstraint(space, new_spring(body10, body14, cpv( 40,-40), cpv(-40, 0), 0.0f, stiff, damp)); - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Springies = { - "Springies", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/TheoJansen.c b/chipmunk/Demo/TheoJansen.c deleted file mode 100644 index 6813e1715b..0000000000 --- a/chipmunk/Demo/TheoJansen.c +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* - * The previous WalkBot demo I designed was fairly disappointing, so I implemented - * the mechanism that Theo Jansen uses in his kinetic sculptures. Brilliant. - * Read more here: http://en.wikipedia.org/wiki/Theo_Jansen - */ - -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static cpConstraint *motor; - -static void -update(int ticks) -{ - cpFloat coef = (2.0f + arrowDirection.y)/3.0f; - cpFloat rate = arrowDirection.x*10.0f*coef; - cpSimpleMotorSetRate(motor, rate); - motor->maxForce = (rate) ? 100000.0f : 0.0f; - - int steps = 3; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; ip = cpv(offset, 0.0f); - cpSpaceAddBody(space, upper_leg); - cpSpaceAddShape(space, cpSegmentShapeNew(upper_leg, a, b, seg_radius)); - cpSpaceAddConstraint(space, cpPivotJointNew2(chassis, upper_leg, cpv(offset, 0.0f), cpvzero)); - - // lower leg - a = cpvzero, b = cpv(0.0f, -1.0f*side); - cpBody *lower_leg = cpBodyNew(leg_mass, cpMomentForSegment(leg_mass, a, b)); - lower_leg->p = cpv(offset, -side); - cpSpaceAddBody(space, lower_leg); - shape = cpSegmentShapeNew(lower_leg, a, b, seg_radius); - shape->group = 1; - cpSpaceAddShape(space, shape); - shape = cpCircleShapeNew(lower_leg, seg_radius*2.0f, b); - shape->group = 1; - shape->e = 0.0f; shape->u = 1.0f; - cpSpaceAddShape(space, shape); - cpSpaceAddConstraint(space, cpPinJointNew(chassis, lower_leg, cpv(offset, 0.0f), cpvzero)); - - cpSpaceAddConstraint(space, cpGearJointNew(upper_leg, lower_leg, 0.0f, 1.0f)); - - cpConstraint *constraint; - cpFloat diag = sqrtf(side*side + offset*offset); - - constraint = cpPinJointNew(crank, upper_leg, anchor, cpv(0.0f, side)); - cpPinJointSetDist(constraint, diag); - cpSpaceAddConstraint(space, constraint); - constraint = cpPinJointNew(crank, lower_leg, anchor, cpvzero); - cpPinJointSetDist(constraint, diag); - cpSpaceAddConstraint(space, constraint); -} - -static cpSpace * -init(void) -{ - space = cpSpaceNew(); - staticBody = cpBodyNew(INFINITY, INFINITY); - - cpResetShapeIdCounter(); - - space = cpSpaceNew(); - space->iterations = 20; - space->gravity = cpv(0,-500); - - cpShape *shape; - cpVect a, b; - - // Create segments around the edge of the screen. - shape = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - cpSpaceAddStaticShape(space, shape); - - shape = cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - cpSpaceAddStaticShape(space, shape); - - shape = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - cpSpaceAddStaticShape(space, shape); - - cpFloat offset = 30.0f; - - // make chassis - cpFloat chassis_mass = 2.0f; - a = cpv(-offset, 0.0f), b = cpv(offset, 0.0f); - cpBody *chassis = cpBodyNew(chassis_mass, cpMomentForSegment(chassis_mass, a, b)); - cpSpaceAddBody(space, chassis); - shape = cpSegmentShapeNew(chassis, a, b, seg_radius); - shape->group = 1; - cpSpaceAddShape(space, shape); - - // make crank - cpFloat crank_mass = 1.0f; - cpFloat crank_radius = 13.0f; - cpBody *crank = cpBodyNew(crank_mass, cpMomentForCircle(crank_mass, crank_radius, 0.0f, cpvzero)); - cpSpaceAddBody(space, crank); - shape = cpCircleShapeNew(crank, crank_radius, cpvzero); - shape->group = 1; - cpSpaceAddShape(space, shape); - cpSpaceAddConstraint(space, cpPivotJointNew2(chassis, crank, cpvzero, cpvzero)); - - cpFloat side = 30.0f; - - int num_legs = 2; - for(int i=0; i -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -static void -update(int ticks) -{ - int steps = 3; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; igravity = cpv(0, -600); - - cpBody *body; - cpShape *shape; - - // Vertexes for the bricks - int num = 4; - cpVect verts[] = { - cpv(-30,-15), - cpv(-30, 15), - cpv( 30, 15), - cpv( 30,-15), - }; - - // Set up the static box. - cpVect a = cpv(-200, -200); - cpVect b = cpv(-200, 200); - cpVect c = cpv( 200, 200); - cpVect d = cpv( 200, -200); - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, a, b, 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, b, c, 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, c, d, 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, d, a, 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - // Give the box a little spin. - // Because staticBody is never added to the space, we will need to - // update it ourselves. (see above). - // NOTE: Normally you would want to add the segments as normal and not static shapes. - // I'm just doing it to demonstrate the cpSpaceRehashStatic() function. - staticBody->w = 0.4f; - - // Add the bricks. - for(int i=0; i<3; i++){ - for(int j=0; j<7; j++){ - body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero))); - body->p = cpv(i*60 - 150, j*30 - 150); - - shape = cpSpaceAddShape(space, cpPolyShapeNew(body, num, verts, cpvzero)); - shape->e = 0.0f; shape->u = 0.7f; - } - } - - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo Tumble = { - "Tumble", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/UnsafeOps.c b/chipmunk/Demo/UnsafeOps.c deleted file mode 100644 index 9503807c42..0000000000 --- a/chipmunk/Demo/UnsafeOps.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include -#include - -#include "chipmunk.h" -#include "chipmunk_unsafe.h" -#include "drawSpace.h" -#include "ChipmunkDemo.h" - -static cpSpace *space; -static cpBody *staticBody; - -#define NUM_CIRCLES 30 -cpShape *circles[NUM_CIRCLES]; -cpFloat circleRadius = 30.0f; - -static void -update(int ticks) -{ - if(arrowDirection.y){ - circleRadius = cpfmax(10.0f, circleRadius + arrowDirection.y); - - for(int i=0; ibody->m = cpMomentForCircle(1.0f, 0.0f, circleRadius, cpvzero); - cpCircleShapeSetRadius(circles[i], circleRadius); - } - } - - int steps = 1; - cpFloat dt = 1.0f/60.0f/(cpFloat)steps; - - for(int i=0; iiterations = 5; - space->gravity = cpv(0, -100); - - cpSpaceResizeStaticHash(space, 40.0f, 999); - cpSpaceResizeActiveHash(space, 30.0f, 2999); - - cpBody *body; - cpShape *shape; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f)); - shape->e = 1.0f; shape->u = 1.0f; - shape->layers = NOT_GRABABLE_MASK; - - for(int i=0; ip = cpvmult(cpv(frand()*2.0f - 1.0f, frand()*2.0f - 1.0f), circleRadius*5.0f); - - circles[i] = shape = cpSpaceAddShape(space, cpCircleShapeNew(body, circleRadius, cpvzero)); - shape->e = 0.0f; shape->u = 1.0f; - } - - strcat(messageString, - "chipmunk_unsafe.h Contains functions for changing shapes, but they can cause severe stability problems if used incorrectly.\n" - "Shape changes occur as instantaneous changes to position without an accompanying velocity change. USE WITH CAUTION!"); - return space; -} - -static void -destroy(void) -{ - cpBodyFree(staticBody); - cpSpaceFreeChildren(space); - cpSpaceFree(space); -} - -chipmunkDemo UnsafeOps = { - "Unsafe Operations", - NULL, - init, - update, - destroy, -}; diff --git a/chipmunk/Demo/cocos2dChipmunkDemo.cpp b/chipmunk/Demo/cocos2dChipmunkDemo.cpp deleted file mode 100644 index 073336403c..0000000000 --- a/chipmunk/Demo/cocos2dChipmunkDemo.cpp +++ /dev/null @@ -1,486 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* - IMPORTANT - READ ME! - - This file sets up a simple interface that the individual demos can use to get - a Chipmunk space running and draw what's in it. In order to keep the Chipmunk - examples clean and simple, they contain no graphics code. All drawing is done - by accessing the Chipmunk structures at a very low level. It is NOT - recommended to write a game or application this way as it does not scale - beyond simple shape drawing and is very dependent on implementation details - about Chipmunk which may change with little to no warning. -*/ - - -#include -#include -#include -#include -#include - -#include "cocos2d.h" -#include "cocos2dChipmunkDemo.h" - -#define SLEEP_TICKS 16 - -//extern chipmunkDemo Test; -extern chipmunkDemo LogoSmash; -extern chipmunkDemo Simple; -extern chipmunkDemo PyramidStack; -extern chipmunkDemo Plink; -extern chipmunkDemo Tumble; -extern chipmunkDemo PyramidTopple; -extern chipmunkDemo Bounce; -extern chipmunkDemo Planet; -extern chipmunkDemo Springies; -extern chipmunkDemo Pump; -extern chipmunkDemo TheoJansen; -extern chipmunkDemo MagnetsElectric; -extern chipmunkDemo UnsafeOps; -extern chipmunkDemo Query; -extern chipmunkDemo OneWay; -extern chipmunkDemo Player; -extern chipmunkDemo Sensors; -extern chipmunkDemo Joints; - -//extern chipmunkDemo Test; - -static chipmunkDemo *demos[] = { - &LogoSmash, - &Simple, - &PyramidStack, - &Plink, - &Tumble, - &PyramidTopple, - &Bounce, - &Planet, - &Springies, - &Pump, - &TheoJansen, - &MagnetsElectric, - &UnsafeOps, -// &Query, - &OneWay, - &Player, - &Sensors, - &Joints, -}; - -static int maxDemos = sizeof(demos) / sizeof(demos[0]); - -static const int demoCount = sizeof(demos)/sizeof(chipmunkDemo *); -static chipmunkDemo *currDemo = NULL; -static const int firstDemoIndex = 'a' - 'a'; - -static int ticks = 0; -static cpSpace *space; - -cpVect mousePoint; -cpVect mousePoint_last; -cpBody *mouseBody = NULL; -cpConstraint *mouseJoint = NULL; - -char messageString[1024] = {}; - -int key_up = 0; -int key_down = 0; -int key_left = 0; -int key_right = 0; - -cpVect arrowDirection = {}; - -drawSpaceOptions options = { - 0, - 0, - 1, - 4.0f, - 0.0f, - 1.5f, -}; - -static void -drawString(int x, int y, char *str) -{ - // implement me -} - -static void -drawInstructions() -{ - drawString(-300, 220, - "Controls:\n" - "A - * Switch demos. (return restarts)\n" - "Use the mouse to grab objects.\n" - "Arrow keys control some demos.\n" - "\\ enables anti-aliasing.\n" - "- toggles spatial hash visualization.\n" - "= toggles bounding boxes." - ); -} - -static int maxArbiters = 0; -static int maxPoints = 0; -static int maxConstraints = 0; - -static void -drawInfo() -{ - int arbiters = space->arbiters->num; - int points = 0; - - for(int i=0; iarbiters->arr[i]))->numContacts; - - int constraints = (space->constraints->num + points)*(space->iterations + space->elasticIterations); - - maxArbiters = arbiters > maxArbiters ? arbiters : maxArbiters; - maxPoints = points > maxPoints ? points : maxPoints; - maxConstraints = constraints > maxConstraints ? constraints : maxConstraints; - - char buffer[1000]; - char *format = - "Arbiters: %d (%d) - " - "Contact Points: %d (%d)\n" - "Other Constraints: %d, Iterations: %d\n" - "Constraints x Iterations: %d (%d)"; - - sprintf(buffer, format, - arbiters, maxArbiters, - points, maxPoints, - space->constraints->num, space->iterations + space->elasticIterations, - constraints, maxConstraints - ); - - drawString(0, 220, buffer); -} - -static void -display(void) -{ -// glClear(GL_COLOR_BUFFER_BIT); -// -// drawSpace(space, currDemo->drawOptions ? currDemo->drawOptions : &options); -// drawInstructions(); -// drawInfo(); -// drawString(-300, -210, messageString); -// -// glutSwapBuffers(); - ticks++; - - cpVect newPoint = cpvlerp(mousePoint_last, mousePoint, 0.25f); - mouseBody->p = newPoint; - mouseBody->v = cpvmult(cpvsub(newPoint, mousePoint_last), 60.0f); - mousePoint_last = newPoint; - currDemo->updateFunc(ticks); -} - -static char * -demoTitle(chipmunkDemo *demo) -{ - static char title[1024]; - sprintf(title, "Demo: %s", demo->name); - - return title; -} - -static void -runDemo(chipmunkDemo *demo) -{ - if(currDemo) - currDemo->destroyFunc(); - - currDemo = demo; - ticks = 0; - mouseJoint = NULL; - messageString[0] = '\0'; - maxArbiters = 0; - maxPoints = 0; - maxConstraints = 0; - space = currDemo->initFunc(); - -// glutSetWindowTitle(demoTitle(currDemo)); -} - -static void -keyboard(unsigned char key, int x, int y) -{ - int index = key - 'a'; - - if(0 <= index && index < demoCount){ - runDemo(demos[index]); - } else if(key == '\r'){ - runDemo(currDemo); - } else if(key == '-'){ - options.drawHash = !options.drawHash; - } else if(key == '='){ - options.drawBBs = !options.drawBBs; - } else if(key == '\\'){ - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE); - } -} - -static cpVect -mouseToSpace(int x, int y) -{ -// GLdouble model[16]; -// glGetDoublev(GL_MODELVIEW_MATRIX, model); -// -// GLdouble proj[16]; -// glGetDoublev(GL_PROJECTION_MATRIX, proj); -// -// GLint view[4]; -// glGetIntegerv(GL_VIEWPORT, view); -// -// GLdouble mx, my, mz; -// gluUnProject(x, glutGet(GLUT_WINDOW_HEIGHT) - y, 0.0f, model, proj, view, &mx, &my, &mz); - -// return cpv(mx, my); - return cpv(x,y); -} - -static void -mouse(int x, int y) -{ - mousePoint = mouseToSpace(x, y); -} - -static void -click(int button, int state, int x, int y) -{ -// if(button == GLUT_LEFT_BUTTON){ -// if(state == GLUT_DOWN){ -// cpVect point = mouseToSpace(x, y); -// -// cpShape *shape = cpSpacePointQueryFirst(space, point, GRABABLE_MASK_BIT, 0); -// if(shape){ -// cpBody *body = shape->body; -// mouseJoint = cpPivotJointNew2(mouseBody, body, cpvzero, cpBodyWorld2Local(body, point)); -// mouseJoint->maxForce = 50000.0f; -// mouseJoint->biasCoef = 0.15f; -// cpSpaceAddConstraint(space, mouseJoint); -// } -// } else if(mouseJoint){ -// cpSpaceRemoveConstraint(space, mouseJoint); -// cpConstraintFree(mouseJoint); -// mouseJoint = NULL; -// } -// } -} - -static void -timercall(int value) -{ -// glutTimerFunc(SLEEP_TICKS, timercall, 0); -// -// glutPostRedisplay(); -} - -static void -set_arrowDirection() -{ - int x = 0, y = 0; - - if(key_up) y += 1; - if(key_down) y -= 1; - if(key_right) x += 1; - if(key_left) x -= 1; - - arrowDirection = cpv(x, y); -} - -static void -arrowKeyDownFunc(int key, int x, int y) -{ -// if(key == GLUT_KEY_UP) key_up = 1; -// else if(key == GLUT_KEY_DOWN) key_down = 1; -// else if(key == GLUT_KEY_LEFT) key_left = 1; -// else if(key == GLUT_KEY_RIGHT) key_right = 1; - - set_arrowDirection(); -} - -static void -arrowKeyUpFunc(int key, int x, int y) -{ -// if(key == GLUT_KEY_UP) key_up = 0; -// else if(key == GLUT_KEY_DOWN) key_down = 0; -// else if(key == GLUT_KEY_LEFT) key_left = 0; -// else if(key == GLUT_KEY_RIGHT) key_right = 0; - - set_arrowDirection(); -} - -static void -idle(void) -{ -// glutPostRedisplay(); -} - -static void -initGL(void) -{ -// glClearColor(1.0f, 1.0f, 1.0f, 0.0f); -// -// glMatrixMode(GL_PROJECTION); -// glLoadIdentity(); -// glOrtho(-320.0f, 320.0f, -240.0f, 240.0f, -1.0f, 1.0f); -// glTranslatef(0.5f, 0.5f, 0.0f); -// -// glEnableClientState(GL_VERTEX_ARRAY); -} - -static void -glutStuff(int argc, const char *argv[]) -{ -// glutInit(&argc, (char**)argv); -// -// glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); -// -// glutInitWindowSize(640, 480); -// glutCreateWindow(demoTitle(demos[firstDemoIndex])); -// -// initGL(); -// -// glutDisplayFunc(display); -//// glutIdleFunc(idle); -// glutTimerFunc(SLEEP_TICKS, timercall, 0); -// -// glutIgnoreKeyRepeat(1); -// glutKeyboardFunc(keyboard); -// -// glutSpecialFunc(arrowKeyDownFunc); -// glutSpecialUpFunc(arrowKeyUpFunc); -// -// glutMotionFunc(mouse); -// glutPassiveMotionFunc(mouse); -// glutMouseFunc(click); -} - -//#include -//void time_trial(char index, int count) -//{ -// currDemo = demos[index]; -// space = currDemo->initFunc(); -// -// struct timeval start_time, end_time; -// gettimeofday(&start_time, NULL); -// -// for(int i=0; iupdateFunc(i); -// -// gettimeofday(&end_time, NULL); -// long millisecs = (end_time.tv_sec - start_time.tv_sec)*1000; -// millisecs += (end_time.tv_usec - start_time.tv_usec)/1000; -// -// currDemo->destroyFunc(); -// -// printf("Time(%c) = %ldms\n", index + 'a', millisecs); -//} - -void ChipmunkTestScene::runThisTest() -{ - // create layer - ChipmunkTestLayer* pLayer = new ChipmunkTestLayer(); - pLayer->init(); - pLayer->autorelease(); - - addChild(pLayer); - - CCDirector::getSharedDirector()->replaceScene(this); -} - -void ChipmunkTestLayer::init() -{ - CCLayer::init(); - CCLayer::setIsTouchEnabled(TRUE); - - demoIndex = 0; - - cpInitChipmunk(); - mouseBody = cpBodyNew(INFINITY, INFINITY); - - runDemo(demos[firstDemoIndex]); - - label = CCLabel::labelWithString(demos[firstDemoIndex]->name, "Arial", 32); - label->setPosition( ccp(0, -300) ); - label->setColor(ccBLACK); - addChild(label); - - // [self schedule: @selector(step:)]; - schedule( schedule_selector(ChipmunkTestLayer::step)); -} - -void ChipmunkTestLayer::onEnter() -{ - CCLayer::onEnter(); - - glClearColor(1,1,1,1); - float factor = 1.0f; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - // portraint - glOrthof(-320/factor, 320/factor, -480/factor, 480/factor, -1.0f, 1.0f); - // landscape - // glOrthof(-480/factor, 480/factor, -320/factor, 320/factor, 1.0f, -1.0f); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glPointSize(3.0f); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth(1.5f); -} - -void ChipmunkTestLayer::step(ccTime dt) -{ - // call chipmunk demo c function - display(); -} - -void ChipmunkTestLayer::draw() -{ - drawSpace(space, currDemo->drawOptions ? currDemo->drawOptions : &options); -} - -void ChipmunkTestLayer::ccTouchesEnded(NSSet* touches, UIEvent *event) -{ - demoIndex++; - if( demoIndex >= maxDemos ) - demoIndex = 0; - - runDemo(demos[demoIndex]); - - label->setString( demos[demoIndex]->name ); -} - diff --git a/chipmunk/Demo/cocos2dChipmunkDemo.h b/chipmunk/Demo/cocos2dChipmunkDemo.h deleted file mode 100644 index 3b700e202b..0000000000 --- a/chipmunk/Demo/cocos2dChipmunkDemo.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include "chipmunk.h" -#include "drawSpace.h" -#include "testBasic.h" - -struct chipmunkDemo; - -typedef cpSpace *(*demoInitFunc)(void); -typedef void (*demoUpdateFunc)(int ticks); -typedef void (*demoDestroyFunc)(void); - -typedef struct chipmunkDemo { - char *name; - - drawSpaceOptions *drawOptions; - - demoInitFunc initFunc; - demoUpdateFunc updateFunc; - demoDestroyFunc destroyFunc; -} chipmunkDemo; - -static inline cpFloat -frand(void) -{ - return (cpFloat)rand()/(cpFloat)RAND_MAX; -} - -extern cpVect arrowDirection; -extern char messageString[1024]; - -#define GRABABLE_MASK_BIT (1<<31) -#define NOT_GRABABLE_MASK (~GRABABLE_MASK_BIT) - -// cocos2d-x test interface decalre -class ChipmunkTestScene : public TestScene -{ -public: - virtual void runThisTest(); -}; - -class ChipmunkTestLayer : public CCLayer -{ -protected: - std::string m_strTitle; - int demoIndex; - CCLabel *label; - -public: - void init(); - // virtual std::string title(); - virtual void onEnter(); - void step(ccTime dt); - void draw(); - void ccTouchesEnded(NSSet* touches, UIEvent *event); - - // void restartCallback(NSObject* pSender); - // void nextCallback(NSObject* pSender); - // void backCallback(NSObject* pSender); -}; \ No newline at end of file diff --git a/chipmunk/Demo/drawSpace.cpp b/chipmunk/Demo/drawSpace.cpp deleted file mode 100644 index be562fe60d..0000000000 --- a/chipmunk/Demo/drawSpace.cpp +++ /dev/null @@ -1,527 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#include -#include -#include -#include -#include - -#include "chipmunk.h" -#include "drawSpace.h" -#include "cocos2d.h" - -/* - IMPORTANT - READ ME! - - This file sets up a simple interface that the individual demos can use to get - a Chipmunk space running and draw what's in it. In order to keep the Chipmunk - examples clean and simple, they contain no graphics code. All drawing is done - by accessing the Chipmunk structures at a very low level. It is NOT - recommended to write a game or application this way as it does not scale - beyond simple shape drawing and is very dependent on implementation details - about Chipmunk which may change with little to no warning. -*/ - -#define LINE_COLOR 0.0f, 0.0f, 0.0f, 1.0f -#define COLLISION_COLOR 1.0f, 0.0f, 0.0f, 1.0f -#define BODY_COLOR 0.0f, 0.0f, 1.0f - -using namespace cocos2d; - -static void -glColor_from_pointer(void *ptr) -{ - unsigned long val = (long)ptr; - - // hash the pointer up nicely - val = (val+0x7ed55d16) + (val<<12); - val = (val^0xc761c23c) ^ (val>>19); - val = (val+0x165667b1) + (val<<5); - val = (val+0xd3a2646c) ^ (val<<9); - val = (val+0xfd7046c5) + (val<<3); - val = (val^0xb55a4f09) ^ (val>>16); - -// GLfloat v = (GLfloat)val/(GLfloat)ULONG_MAX; -// v = 0.95f - v*0.15f; -// -// glColor3f(v, v, v); - - GLubyte r = (val>>0) & 0xFF; - GLubyte g = (val>>8) & 0xFF; - GLubyte b = (val>>16) & 0xFF; - - GLubyte max = r>g ? (r>b ? r : b) : (g>b ? g : b); - - const int mult = 127; - const int add = 63; - r = (r*mult)/max + add; - g = (g*mult)/max + add; - b = (b*mult)/max + add; - - glColor4ub(r, g, b, 255); -} - -static const GLfloat circleVAR[] = { - 0.0000f, 1.0000f, - 0.2588f, 0.9659f, - 0.5000f, 0.8660f, - 0.7071f, 0.7071f, - 0.8660f, 0.5000f, - 0.9659f, 0.2588f, - 1.0000f, 0.0000f, - 0.9659f, -0.2588f, - 0.8660f, -0.5000f, - 0.7071f, -0.7071f, - 0.5000f, -0.8660f, - 0.2588f, -0.9659f, - 0.0000f, -1.0000f, - -0.2588f, -0.9659f, - -0.5000f, -0.8660f, - -0.7071f, -0.7071f, - -0.8660f, -0.5000f, - -0.9659f, -0.2588f, - -1.0000f, -0.0000f, - -0.9659f, 0.2588f, - -0.8660f, 0.5000f, - -0.7071f, 0.7071f, - -0.5000f, 0.8660f, - -0.2588f, 0.9659f, - 0.0000f, 1.0000f, - 0.0f, 0.0f, // For an extra line to see the rotation. -}; -static const int circleVAR_count = sizeof(circleVAR)/sizeof(GLfloat)/2; - -static void -drawCircleShape(cpBody *body, cpCircleShape *circle) -{ - glVertexPointer(2, GL_FLOAT, 0, circleVAR); - - // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - // Needed states: GL_VERTEX_ARRAY, - // Unneeded states: GL_TEXTURE_2D, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - glDisable(GL_TEXTURE_2D); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - glPushMatrix(); { - cpVect center = cpvadd(body->p, cpvrotate(circle->c, body->rot)); - glTranslatef(center.x, center.y, 0.0f); - glRotatef(body->a*180.0f/(cpFloat)M_PI, 0.0f, 0.0f, 1.0f); - glScalef(circle->r, circle->r, 1.0f); - - if(!circle->shape.sensor){ - glColor_from_pointer(circle); - glDrawArrays(GL_TRIANGLE_FAN, 0, circleVAR_count - 1); - } - - glColor4f(LINE_COLOR); - glDrawArrays(GL_LINE_STRIP, 0, circleVAR_count); - } glPopMatrix(); - - // restore default GL state - glEnable(GL_TEXTURE_2D); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); -} - -static const GLfloat pillVAR[] = { - 0.0000f, 1.0000f, - 0.2588f, 0.9659f, - 0.5000f, 0.8660f, - 0.7071f, 0.7071f, - 0.8660f, 0.5000f, - 0.9659f, 0.2588f, - 1.0000f, 0.0000f, - 0.9659f, -0.2588f, - 0.8660f, -0.5000f, - 0.7071f, -0.7071f, - 0.5000f, -0.8660f, - 0.2588f, -0.9659f, - 0.0000f, -1.0000f, - - 0.0000f, -1.0000f, - -0.2588f, -0.9659f, - -0.5000f, -0.8660f, - -0.7071f, -0.7071f, - -0.8660f, -0.5000f, - -0.9659f, -0.2588f, - -1.0000f, -0.0000f, - -0.9659f, 0.2588f, - -0.8660f, 0.5000f, - -0.7071f, 0.7071f, - -0.5000f, 0.8660f, - -0.2588f, 0.9659f, - 0.0000f, 1.0000f, -}; -static const int pillVAR_count = sizeof(pillVAR)/sizeof(GLfloat)/2; - -static void -drawSegmentShape(cpBody *body, cpSegmentShape *seg) -{ - cpVect a = cpvadd(body->p, cpvrotate(seg->a, body->rot)); - cpVect b = cpvadd(body->p, cpvrotate(seg->b, body->rot)); - - if(seg->r){ - cpVect delta = cpvsub(b, a); - cpFloat len = cpvlength(delta)/seg->r; - - GLfloat VAR[pillVAR_count*2]; - memcpy(VAR, pillVAR, sizeof(pillVAR)); - - for(int i=0, half=pillVAR_count; ishape.sensor){ - glColor_from_pointer(seg); - glDrawArrays(GL_TRIANGLE_FAN, 0, pillVAR_count); - } - - glColor4f(LINE_COLOR); - glDrawArrays(GL_LINE_LOOP, 0, pillVAR_count); - } glPopMatrix(); - - // Restore Default GL states - glEnable(GL_TEXTURE_2D); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - } else { - glColor4f(LINE_COLOR); - ccDrawLine(ccp(a.x, a.y),ccp(b.x, b.y)); - } -} - -static void -drawPolyShape(cpBody *body, cpPolyShape *poly) -{ - int count = count=poly->numVerts; - //GLfloat VAR[count*2]; - GLfloat *VAR = new GLfloat[count*2]; - - // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - // Needed states: GL_VERTEX_ARRAY, - // Unneeded states: GL_TEXTURE_2D, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - glDisable(GL_TEXTURE_2D); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - glVertexPointer(2, GL_FLOAT, 0, VAR); - - cpVect *verts = poly->verts; - for(int i=0; ip, cpvrotate(verts[i], body->rot)); - VAR[2*i ] = v.x; - VAR[2*i + 1] = v.y; - } - - - if(!poly->shape.sensor){ - glColor_from_pointer(poly); - glDrawArrays(GL_TRIANGLE_FAN, 0, count); - } - - glColor4f(LINE_COLOR); - glDrawArrays(GL_LINE_LOOP, 0, count); - - // Restore Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - glEnable(GL_TEXTURE_2D); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - delete VAR; -} - -static void -drawObject(void *ptr, void *unused) -{ - cpShape *shape = (cpShape *)ptr; - cpBody *body = shape->body; - - switch(shape->klass->type){ - case CP_CIRCLE_SHAPE: - drawCircleShape(body, (cpCircleShape *)shape); - break; - case CP_SEGMENT_SHAPE: - drawSegmentShape(body, (cpSegmentShape *)shape); - break; - case CP_POLY_SHAPE: - drawPolyShape(body, (cpPolyShape *)shape); - break; - default: - // printf("Bad enumeration in drawObject().\n"); - break; - } -} - -static const GLfloat springVAR[] = { - 0.00f, 0.0f, - 0.20f, 0.0f, - 0.25f, 3.0f, - 0.30f,-6.0f, - 0.35f, 6.0f, - 0.40f,-6.0f, - 0.45f, 6.0f, - 0.50f,-6.0f, - 0.55f, 6.0f, - 0.60f,-6.0f, - 0.65f, 6.0f, - 0.70f,-3.0f, - 0.75f, 6.0f, - 0.80f, 0.0f, - 1.00f, 0.0f, -}; -static const int springVAR_count = sizeof(springVAR)/sizeof(GLfloat)/2; - -static void -drawSpring(cpDampedSpring *spring, cpBody *body_a, cpBody *body_b) -{ - cpVect a = cpvadd(body_a->p, cpvrotate(spring->anchr1, body_a->rot)); - cpVect b = cpvadd(body_b->p, cpvrotate(spring->anchr2, body_b->rot)); - - glPointSize(5.0f); - ccDrawLine( ccp(a.x, a.y), ccp(b.x, b.y) ); - - cpVect delta = cpvsub(b, a); - - // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - // Needed states: GL_VERTEX_ARRAY, - // Unneeded states: GL_TEXTURE_2D, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY - glDisable(GL_TEXTURE_2D); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - - glVertexPointer(2, GL_FLOAT, 0, springVAR); - glPushMatrix(); { - GLfloat x = a.x; - GLfloat y = a.y; - GLfloat cos = delta.x; - GLfloat sin = delta.y; - GLfloat s = 1.0f/cpvlength(delta); - - const GLfloat matrix[] = { - cos, sin, 0.0f, 0.0f, - -sin*s, cos*s, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 1.0f, - x, y, 0.0f, 1.0f, - }; - - glMultMatrixf(matrix); - glDrawArrays(GL_LINE_STRIP, 0, springVAR_count); - } glPopMatrix(); - - // Restore Default GL states - glEnable(GL_TEXTURE_2D); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); -} - -static void -drawConstraint(cpConstraint *constraint) -{ - cpBody *body_a = constraint->a; - cpBody *body_b = constraint->b; - - const cpConstraintClass *klass = constraint->klass; - if(klass == cpPinJointGetClass()){ - cpPinJoint *joint = (cpPinJoint *)constraint; - - cpVect a = cpvadd(body_a->p, cpvrotate(joint->anchr1, body_a->rot)); - cpVect b = cpvadd(body_b->p, cpvrotate(joint->anchr2, body_b->rot)); - - glPointSize(5.0f); - ccDrawPoint( ccp(a.x, a.y) ); - ccDrawPoint( ccp(b.x, b.y) ); - - ccDrawLine( ccp(a.x, a.y), ccp(b.x, b.y) ); - } else if(klass == cpSlideJointGetClass()){ - cpSlideJoint *joint = (cpSlideJoint *)constraint; - - cpVect a = cpvadd(body_a->p, cpvrotate(joint->anchr1, body_a->rot)); - cpVect b = cpvadd(body_b->p, cpvrotate(joint->anchr2, body_b->rot)); - - glPointSize(5.0f); - ccDrawPoint( ccp(a.x, a.y) ); - ccDrawPoint( ccp(b.x, b.y) ); - - ccDrawLine( ccp(a.x, a.y), ccp(b.x, b.y) ); - } else if(klass == cpPivotJointGetClass()){ - cpPivotJoint *joint = (cpPivotJoint *)constraint; - - cpVect a = cpvadd(body_a->p, cpvrotate(joint->anchr1, body_a->rot)); - cpVect b = cpvadd(body_b->p, cpvrotate(joint->anchr2, body_b->rot)); - - glPointSize(10.0f); - ccDrawPoint( ccp(a.x, a.y) ); - ccDrawPoint( ccp(b.x, b.y) ); - } else if(klass == cpGrooveJointGetClass()){ - cpGrooveJoint *joint = (cpGrooveJoint *)constraint; - - cpVect a = cpvadd(body_a->p, cpvrotate(joint->grv_a, body_a->rot)); - cpVect b = cpvadd(body_a->p, cpvrotate(joint->grv_b, body_a->rot)); - cpVect c = cpvadd(body_b->p, cpvrotate(joint->anchr2, body_b->rot)); - - glPointSize(5.0f); - ccDrawPoint( ccp(c.x, c.y) ); - ccDrawLine( ccp(a.x, a.y), ccp(b.x, b.y) ); - } else if(klass == cpDampedSpringGetClass()){ - drawSpring((cpDampedSpring *)constraint, body_a, body_b); - } else { -// printf("Cannot draw constraint\n"); - } -} - -static void -drawBB(void *ptr, void *unused) -{ - cpShape *shape = (cpShape *)ptr; - - CGPoint vertices[] = { - ccp(shape->bb.l, shape->bb.b), - ccp(shape->bb.l, shape->bb.t), - ccp(shape->bb.r, shape->bb.t), - ccp(shape->bb.r, shape->bb.b), - }; - - ccDrawPoly(vertices, 4, false); -} - -static void -drawCollisions(void *ptr, void *data) -{ - cpArbiter *arb = (cpArbiter *)ptr; - CGPoint *aPoints = new CGPoint[arb->numContacts]; - - for(int i=0; inumContacts; i++){ - aPoints[i] = CGPoint(arb->contacts[i].p.x, arb->contacts[i].p.y); - } - - ccDrawPoints( aPoints, arb->numContacts ); - delete aPoints; -} - -// copied from cpSpaceHash.c -static inline cpHashValue -hash_func(cpHashValue x, cpHashValue y, cpHashValue n) -{ - return (x*1640531513ul ^ y*2654435789ul) % n; -} - -static void -drawSpatialHash(cpSpaceHash *hash) -{ - cpBB bb = cpBBNew(-320, -240, 320, 240); - - cpFloat dim = hash->celldim; - int n = hash->numcells; - - int l = (int)floor(bb.l/dim); - int r = (int)floor(bb.r/dim); - int b = (int)floor(bb.b/dim); - int t = (int)floor(bb.t/dim); - - for(int i=l; i<=r; i++){ - for(int j=b; j<=t; j++){ - int cell_count = 0; - - int index = hash_func(i,j,n); - for(cpSpaceHashBin *bin = hash->table[index]; bin; bin = bin->next) - cell_count++; - - GLfloat v = 1.0f - (GLfloat)cell_count/10.0f; - glColor4f(v,v,v,1.0f); -// glRectf(i*dim, j*dim, (i + 1)*dim, (j + 1)*dim); - } - } -} - -void -drawSpace(cpSpace *space, drawSpaceOptions *options) -{ - if(options->drawHash) - drawSpatialHash(space->activeShapes); - - glLineWidth(1.0f); - if(options->drawBBs){ - glColor4f(0.3f, 0.5f, 0.3f, 1.0f); - cpSpaceHashEach(space->activeShapes, &drawBB, NULL); - cpSpaceHashEach(space->staticShapes, &drawBB, NULL); - } - - glLineWidth(options->lineThickness); - if(options->drawShapes){ - cpSpaceHashEach(space->activeShapes, &drawObject, NULL); - cpSpaceHashEach(space->staticShapes, &drawObject, NULL); - } - - cpArray *constraints = space->constraints; - - glColor4f(0.5f, 1.0f, 0.5f, 1.0f); - for(int i=0, count = constraints->num; iarr[i]) ); - } - - if(options->bodyPointSize){ - cpArray *bodies = space->bodies; - - glPointSize(options->bodyPointSize); - glColor4f(LINE_COLOR); - - CGPoint *aPoints = new CGPoint[bodies->num]; - - for(int i=0, count = bodies->num; iarr[i]; - - aPoints[i] = CGPoint(body->p.x, body->p.y); - } - - ccDrawPoints( aPoints, bodies->num ); - delete aPoints; - } - - if(options->collisionPointSize){ - glPointSize(options->collisionPointSize); - glColor4f(COLLISION_COLOR); - cpArrayEach(space->arbiters, &drawCollisions, NULL); - } -} diff --git a/chipmunk/Demo/drawSpace.h b/chipmunk/Demo/drawSpace.h deleted file mode 100644 index 36f399b9bd..0000000000 --- a/chipmunk/Demo/drawSpace.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -#ifndef _DRAW_SPACE_H_ -#define _DRAW_SPACE_H_ - -typedef struct drawSpaceOptions { - int drawHash; - int drawBBs; - int drawShapes; - float collisionPointSize; - float bodyPointSize; - float lineThickness; -} drawSpaceOptions; - -void drawSpace(cpSpace *space, drawSpaceOptions *options); - -#endif //_DRAW_SPACE_H_ \ No newline at end of file diff --git a/chipmunk/Demo/iphone-ChipmunkDemo.h b/chipmunk/Demo/iphone-ChipmunkDemo.h deleted file mode 100644 index ddb30302a3..0000000000 --- a/chipmunk/Demo/iphone-ChipmunkDemo.h +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - - -struct chipmunkDemo; - -typedef cpSpace *(*demoInitFunc)(void); -typedef void (*demoUpdateFunc)(int ticks); -typedef void (*demoDestroyFunc)(void); - -typedef struct chipmunkDemo { - char *name; - - drawSpaceOptions *drawOptions; - - demoInitFunc initFunc; - demoUpdateFunc updateFunc; - demoDestroyFunc destroyFunc; -} chipmunkDemo; - -static inline cpFloat -frand(void) -{ - return (cpFloat)rand()/(cpFloat)RAND_MAX; -} - -extern cpVect arrowDirection; -extern char messageString[1024]; - -#define GRABABLE_MASK_BIT (1<<31) -#define NOT_GRABABLE_MASK (~GRABABLE_MASK_BIT) - - -//CLASS INTERFACE - -#import "cocos2d.h" - -@interface AppController : NSObject -{ - UIWindow *window; -} -@end - -@interface MainLayer : CCLayer -{ - int demoIndex; - CCLabel *label; -} -@end diff --git a/chipmunk/Demo/iphone-ChipmunkDemo.m b/chipmunk/Demo/iphone-ChipmunkDemo.m deleted file mode 100644 index e828529b61..0000000000 --- a/chipmunk/Demo/iphone-ChipmunkDemo.m +++ /dev/null @@ -1,548 +0,0 @@ -/* Copyright (c) 2007 Scott Lembcke - * - * 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. - */ - -/* - IMPORTANT - READ ME! - - This file sets up a simple interface that the individual demos can use to get - a Chipmunk space running and draw what's in it. In order to keep the Chipmunk - examples clean and simple, they contain no graphics code. All drawing is done - by accessing the Chipmunk structures at a very low level. It is NOT - recommended to write a game or application this way as it does not scale - beyond simple shape drawing and is very dependent on implementation details - about Chipmunk which may change with little to no warning. -*/ - -#import "cocos2d.h" - -#include -#include -#include -#include -#include - -#ifdef __IPHONE_2_0 -#endif - -#include "chipmunk.h" -#include "drawSpace.h" -#include "cocos2dChipmunkDemo.h" - -#define SLEEP_TICKS 16 - -//extern chipmunkDemo Test; -extern chipmunkDemo LogoSmash; -extern chipmunkDemo Simple; -extern chipmunkDemo PyramidStack; -extern chipmunkDemo Plink; -extern chipmunkDemo Tumble; -extern chipmunkDemo PyramidTopple; -extern chipmunkDemo Bounce; -extern chipmunkDemo Planet; -extern chipmunkDemo Springies; -extern chipmunkDemo Pump; -extern chipmunkDemo TheoJansen; -extern chipmunkDemo MagnetsElectric; -extern chipmunkDemo UnsafeOps; -extern chipmunkDemo Query; -extern chipmunkDemo OneWay; -extern chipmunkDemo Player; -extern chipmunkDemo Sensors; -extern chipmunkDemo Joints; - -//extern chipmunkDemo Test; - -static chipmunkDemo *demos[] = { - &LogoSmash, - &Simple, - &PyramidStack, - &Plink, - &Tumble, - &PyramidTopple, - &Bounce, - &Planet, - &Springies, - &Pump, - &TheoJansen, - &MagnetsElectric, - &UnsafeOps, -// &Query, - &OneWay, - &Player, - &Sensors, - &Joints, -}; - -static int maxDemos = sizeof(demos) / sizeof(demos[0]); - -static const int demoCount = sizeof(demos)/sizeof(chipmunkDemo *); -static chipmunkDemo *currDemo = NULL; -static const int firstDemoIndex = 'a' - 'a'; - -static int ticks = 0; -static cpSpace *space; - -cpVect mousePoint; -cpVect mousePoint_last; -cpBody *mouseBody = NULL; -cpConstraint *mouseJoint = NULL; - -char messageString[1024] = {}; - -int key_up = 0; -int key_down = 0; -int key_left = 0; -int key_right = 0; - -cpVect arrowDirection = {}; - -drawSpaceOptions options = { - 0, - 0, - 1, - 4.0f, - 0.0f, - 1.5f, -}; - -static void -drawString(int x, int y, char *str) -{ - // implement me -} - -static void -drawInstructions() -{ - drawString(-300, 220, - "Controls:\n" - "A - * Switch demos. (return restarts)\n" - "Use the mouse to grab objects.\n" - "Arrow keys control some demos.\n" - "\\ enables anti-aliasing.\n" - "- toggles spatial hash visualization.\n" - "= toggles bounding boxes." - ); -} - -static int maxArbiters = 0; -static int maxPoints = 0; -static int maxConstraints = 0; - -static void -drawInfo() -{ - int arbiters = space->arbiters->num; - int points = 0; - - for(int i=0; iarbiters->arr[i]))->numContacts; - - int constraints = (space->constraints->num + points)*(space->iterations + space->elasticIterations); - - maxArbiters = arbiters > maxArbiters ? arbiters : maxArbiters; - maxPoints = points > maxPoints ? points : maxPoints; - maxConstraints = constraints > maxConstraints ? constraints : maxConstraints; - - char buffer[1000]; - char *format = - "Arbiters: %d (%d) - " - "Contact Points: %d (%d)\n" - "Other Constraints: %d, Iterations: %d\n" - "Constraints x Iterations: %d (%d)"; - - snprintf(buffer, 1000, format, - arbiters, maxArbiters, - points, maxPoints, - space->constraints->num, space->iterations + space->elasticIterations, - constraints, maxConstraints - ); - - drawString(0, 220, buffer); -} - -static void -display(void) -{ -// glClear(GL_COLOR_BUFFER_BIT); -// -// drawSpace(space, currDemo->drawOptions ? currDemo->drawOptions : &options); -// drawInstructions(); -// drawInfo(); -// drawString(-300, -210, messageString); -// -// glutSwapBuffers(); - ticks++; - - cpVect newPoint = cpvlerp(mousePoint_last, mousePoint, 0.25f); - mouseBody->p = newPoint; - mouseBody->v = cpvmult(cpvsub(newPoint, mousePoint_last), 60.0f); - mousePoint_last = newPoint; - currDemo->updateFunc(ticks); -} - -static char * -demoTitle(chipmunkDemo *demo) -{ - static char title[1024]; - sprintf(title, "Demo: %s", demo->name); - - return title; -} - -static void -runDemo(chipmunkDemo *demo) -{ - if(currDemo) - currDemo->destroyFunc(); - - currDemo = demo; - ticks = 0; - mouseJoint = NULL; - messageString[0] = '\0'; - maxArbiters = 0; - maxPoints = 0; - maxConstraints = 0; - space = currDemo->initFunc(); - -// glutSetWindowTitle(demoTitle(currDemo)); -} - -static void -keyboard(unsigned char key, int x, int y) -{ - int index = key - 'a'; - - if(0 <= index && index < demoCount){ - runDemo(demos[index]); - } else if(key == '\r'){ - runDemo(currDemo); - } else if(key == '-'){ - options.drawHash = !options.drawHash; - } else if(key == '='){ - options.drawBBs = !options.drawBBs; - } else if(key == '\\'){ - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE); - } -} - -static cpVect -mouseToSpace(int x, int y) -{ -// GLdouble model[16]; -// glGetDoublev(GL_MODELVIEW_MATRIX, model); -// -// GLdouble proj[16]; -// glGetDoublev(GL_PROJECTION_MATRIX, proj); -// -// GLint view[4]; -// glGetIntegerv(GL_VIEWPORT, view); -// -// GLdouble mx, my, mz; -// gluUnProject(x, glutGet(GLUT_WINDOW_HEIGHT) - y, 0.0f, model, proj, view, &mx, &my, &mz); - -// return cpv(mx, my); - return cpv(x,y); -} - -static void -mouse(int x, int y) -{ - mousePoint = mouseToSpace(x, y); -} - -static void -click(int button, int state, int x, int y) -{ -// if(button == GLUT_LEFT_BUTTON){ -// if(state == GLUT_DOWN){ -// cpVect point = mouseToSpace(x, y); -// -// cpShape *shape = cpSpacePointQueryFirst(space, point, GRABABLE_MASK_BIT, 0); -// if(shape){ -// cpBody *body = shape->body; -// mouseJoint = cpPivotJointNew2(mouseBody, body, cpvzero, cpBodyWorld2Local(body, point)); -// mouseJoint->maxForce = 50000.0f; -// mouseJoint->biasCoef = 0.15f; -// cpSpaceAddConstraint(space, mouseJoint); -// } -// } else if(mouseJoint){ -// cpSpaceRemoveConstraint(space, mouseJoint); -// cpConstraintFree(mouseJoint); -// mouseJoint = NULL; -// } -// } -} - -static void -timercall(int value) -{ -// glutTimerFunc(SLEEP_TICKS, timercall, 0); -// -// glutPostRedisplay(); -} - -static void -set_arrowDirection() -{ - int x = 0, y = 0; - - if(key_up) y += 1; - if(key_down) y -= 1; - if(key_right) x += 1; - if(key_left) x -= 1; - - arrowDirection = cpv(x, y); -} - -static void -arrowKeyDownFunc(int key, int x, int y) -{ -// if(key == GLUT_KEY_UP) key_up = 1; -// else if(key == GLUT_KEY_DOWN) key_down = 1; -// else if(key == GLUT_KEY_LEFT) key_left = 1; -// else if(key == GLUT_KEY_RIGHT) key_right = 1; - - set_arrowDirection(); -} - -static void -arrowKeyUpFunc(int key, int x, int y) -{ -// if(key == GLUT_KEY_UP) key_up = 0; -// else if(key == GLUT_KEY_DOWN) key_down = 0; -// else if(key == GLUT_KEY_LEFT) key_left = 0; -// else if(key == GLUT_KEY_RIGHT) key_right = 0; - - set_arrowDirection(); -} - -static void -idle(void) -{ -// glutPostRedisplay(); -} - -static void -initGL(void) -{ -// glClearColor(1.0f, 1.0f, 1.0f, 0.0f); -// -// glMatrixMode(GL_PROJECTION); -// glLoadIdentity(); -// glOrtho(-320.0f, 320.0f, -240.0f, 240.0f, -1.0f, 1.0f); -// glTranslatef(0.5f, 0.5f, 0.0f); -// -// glEnableClientState(GL_VERTEX_ARRAY); -} - -static void -glutStuff(int argc, const char *argv[]) -{ -// glutInit(&argc, (char**)argv); -// -// glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); -// -// glutInitWindowSize(640, 480); -// glutCreateWindow(demoTitle(demos[firstDemoIndex])); -// -// initGL(); -// -// glutDisplayFunc(display); -//// glutIdleFunc(idle); -// glutTimerFunc(SLEEP_TICKS, timercall, 0); -// -// glutIgnoreKeyRepeat(1); -// glutKeyboardFunc(keyboard); -// -// glutSpecialFunc(arrowKeyDownFunc); -// glutSpecialUpFunc(arrowKeyUpFunc); -// -// glutMotionFunc(mouse); -// glutPassiveMotionFunc(mouse); -// glutMouseFunc(click); -} - -//#include -//void time_trial(char index, int count) -//{ -// currDemo = demos[index]; -// space = currDemo->initFunc(); -// -// struct timeval start_time, end_time; -// gettimeofday(&start_time, NULL); -// -// for(int i=0; iupdateFunc(i); -// -// gettimeofday(&end_time, NULL); -// long millisecs = (end_time.tv_sec - start_time.tv_sec)*1000; -// millisecs += (end_time.tv_usec - start_time.tv_usec)/1000; -// -// currDemo->destroyFunc(); -// -// printf("Time(%c) = %ldms\n", index + 'a', millisecs); -//} - -#pragma mark - -#pragma mark MainLayer - -@implementation MainLayer --(id) init -{ - if( (self=[super init]) ) { - self.isTouchEnabled = YES; - cpInitChipmunk(); - mouseBody = cpBodyNew(INFINITY, INFINITY); - - runDemo(demos[firstDemoIndex]); - - label = [CCLabel labelWithString:[NSString stringWithUTF8String:demos[firstDemoIndex]->name ] fontName:@"Marker Felt" fontSize:32]; - label.position = ccp(0,-300); - label.color = ccBLACK; - [self addChild:label]; - - [self schedule: @selector(step:)]; - } - - return self; -} - --(void) onEnter -{ - [super onEnter]; - - glClearColor(1,1,1,1); - float factor = 1.0f; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrthof(-320/factor, 320/factor, -480/factor, 480/factor, -1.0f, 1.0f); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glPointSize(3.0f); - glEnable(GL_LINE_SMOOTH); - glEnable(GL_POINT_SMOOTH); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE); - glLineWidth(1.5f); -} - --(void) step: (ccTime) dt -{ - display(); -} - --(void) draw -{ - drawSpace(space, currDemo->drawOptions ? currDemo->drawOptions : &options); -} - -- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - - demoIndex++; - if( demoIndex >= maxDemos ) - demoIndex = 0; - - runDemo(demos[demoIndex]); - - [label setString: [NSString stringWithUTF8String:demos[demoIndex]->name ] ]; -} -@end - -#pragma mark - -#pragma mark AppController - -@implementation AppController -- (void) applicationDidFinishLaunching:(UIApplication*)application -{ - // CC_DIRECTOR_INIT() - // - // 1. Initializes an EAGLView with 0-bit depth format, and RGB565 render buffer - // 2. Attaches to the main window - // 3. Creates Display Link Director - // 3a. If it fails, it will use an NSTimer director - // 4. It will try to run at 60 FPS - // 4. Display FPS: NO - // 5. Device orientation: Portrait - // 6. Connect the director to the EAGLView - // - CC_DIRECTOR_INIT(); - - // Obtain the shared director in order to... - CCDirector *director = [CCDirector sharedDirector]; - - // Turn on display FPS - [director setDisplayFPS:YES]; - - CCScene *scene = [CCScene node]; - - MainLayer * mainLayer =[MainLayer node]; - - [scene addChild: mainLayer]; - - [director runWithScene: scene]; -} - -// getting a call, pause the game --(void) applicationWillResignActive:(UIApplication *)application -{ - [[CCDirector sharedDirector] pause]; -} - -// call got rejected --(void) applicationDidBecomeActive:(UIApplication *)application -{ - [[CCDirector sharedDirector] resume]; -} - -// next delta time will be zero --(void) applicationSignificantTimeChange:(UIApplication *)application -{ - [[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; -} - -- (void) dealloc -{ - [window release]; - [super dealloc]; -} - - -@end - - -int main(int argc, char *argv[]) { - - NSAutoreleasePool *pool = [NSAutoreleasePool new]; - UIApplicationMain(argc, argv, nil, @"AppController"); - [pool release]; - return 0; -} diff --git a/chipmunk/Makefile.ARM b/chipmunk/Makefile.ARM index 4f7d0320b9..cb01750bc0 100644 --- a/chipmunk/Makefile.ARM +++ b/chipmunk/Makefile.ARM @@ -1 +1,141 @@ -this file need to run .tmk3 file to rebuild. + +############################################################################ +# +# Makefile for building : chipmunk_Arm.TMK3 +# Created by TMK3_V2.3, please do not modify. +# +############################################################################# + +TO_PROJECT_ROOT = ../../PRJ_TG3 +OUTPUT_FILENAME = libchipmunk.so + +include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_Base_DynamicLib.ARM +include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_TOPS_Def.ARM + +DEFINES += -DCCX_UNDER_UPHONE +INCLUDE_PATH += -I. -I./Res \ + -I../cocos2dx -I../cocos2dx/include \ + -I./include -I./include/chipmunk -I./include/chipmunk/contains \ + +CC_FLAGS += -std=c99 + +OBJECTS_DIR = ./Debug-ARM +DESTDIR = $(TO_PROJECT_ROOT)/$(BIN_OUTPUT_DIR) +TARGET = $(DESTDIR)/$(OUTPUT_FILENAME) + +DEL_FILE = rm -f +MKDIR = mkdir -p + +first: all + +OBJECTS = \ + $(OBJECTS_DIR)/chipmunk.o \ + $(OBJECTS_DIR)/cpArbiter.o \ + $(OBJECTS_DIR)/cpArray.o \ + $(OBJECTS_DIR)/cpBB.o \ + $(OBJECTS_DIR)/cpBody.o \ + $(OBJECTS_DIR)/cpCollision.o \ + $(OBJECTS_DIR)/cpHashSet.o \ + $(OBJECTS_DIR)/cpPolyShape.o \ + $(OBJECTS_DIR)/cpShape.o \ + $(OBJECTS_DIR)/cpSpace.o \ + $(OBJECTS_DIR)/cpSpaceHash.o \ + $(OBJECTS_DIR)/cpVect.o \ + $(OBJECTS_DIR)/cpConstraint.o \ + $(OBJECTS_DIR)/cpDampedRotarySpring.o \ + $(OBJECTS_DIR)/cpDampedSpring.o \ + $(OBJECTS_DIR)/cpGearJoint.o \ + $(OBJECTS_DIR)/cpGrooveJoint.o \ + $(OBJECTS_DIR)/cpPinJoint.o \ + $(OBJECTS_DIR)/cpPivotJoint.o \ + $(OBJECTS_DIR)/cpRatchetJoint.o \ + $(OBJECTS_DIR)/cpRotaryLimitJoint.o \ + $(OBJECTS_DIR)/cpSimpleMotor.o \ + $(OBJECTS_DIR)/cpSlideJoint.o + +ADD_OBJECTS += + +$(OBJECTS_DIR) : + $(MKDIR) $(OBJECTS_DIR) + +$(DESTDIR) : + $(MKDIR) $(DESTDIR) + +all : $(OBJECTS_DIR) $(DESTDIR) $(TARGET) + +$(TARGET) : $(OBJECTS) + $(LINK) $(LINK_FLAGS) -o $(TARGET) $(SYS_OBJECTS) $(OBJECTS) $(ADD_OBJECTS) $(LIBS) $(SYS_LIBS) + +clean : + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) $(TARGET) + +$(OBJECTS_DIR)/chipmunk.o : ./src/chipmunk.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/chipmunk.o ./src/chipmunk.c + +$(OBJECTS_DIR)/cpArbiter.o : ./src/cpArbiter.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpArbiter.o ./src/cpArbiter.c + +$(OBJECTS_DIR)/cpArray.o : ./src/cpArray.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpArray.o ./src/cpArray.c + +$(OBJECTS_DIR)/cpBB.o : ./src/cpBB.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpBB.o ./src/cpBB.c + +$(OBJECTS_DIR)/cpBody.o : ./src/cpBody.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpBody.o ./src/cpBody.c + +$(OBJECTS_DIR)/cpCollision.o : ./src/cpCollision.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpCollision.o ./src/cpCollision.c + +$(OBJECTS_DIR)/cpHashSet.o : ./src/cpHashSet.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpHashSet.o ./src/cpHashSet.c + +$(OBJECTS_DIR)/cpPolyShape.o : ./src/cpPolyShape.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpPolyShape.o ./src/cpPolyShape.c + +$(OBJECTS_DIR)/cpShape.o : ./src/cpShape.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpShape.o ./src/cpShape.c + +$(OBJECTS_DIR)/cpSpace.o : ./src/cpSpace.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpSpace.o ./src/cpSpace.c + +$(OBJECTS_DIR)/cpSpaceHash.o : ./src/cpSpaceHash.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpSpaceHash.o ./src/cpSpaceHash.c + +$(OBJECTS_DIR)/cpVect.o : ./src/cpVect.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpVect.o ./src/cpVect.c + +$(OBJECTS_DIR)/cpConstraint.o : ./src/constraints/cpConstraint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpConstraint.o ./src/constraints/cpConstraint.c + +$(OBJECTS_DIR)/cpDampedRotarySpring.o : ./src/constraints/cpDampedRotarySpring.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpDampedRotarySpring.o ./src/constraints/cpDampedRotarySpring.c + +$(OBJECTS_DIR)/cpDampedSpring.o : ./src/constraints/cpDampedSpring.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpDampedSpring.o ./src/constraints/cpDampedSpring.c + +$(OBJECTS_DIR)/cpGearJoint.o : ./src/constraints/cpGearJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpGearJoint.o ./src/constraints/cpGearJoint.c + +$(OBJECTS_DIR)/cpGrooveJoint.o : ./src/constraints/cpGrooveJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpGrooveJoint.o ./src/constraints/cpGrooveJoint.c + +$(OBJECTS_DIR)/cpPinJoint.o : ./src/constraints/cpPinJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpPinJoint.o ./src/constraints/cpPinJoint.c + +$(OBJECTS_DIR)/cpPivotJoint.o : ./src/constraints/cpPivotJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpPivotJoint.o ./src/constraints/cpPivotJoint.c + +$(OBJECTS_DIR)/cpRatchetJoint.o : ./src/constraints/cpRatchetJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpRatchetJoint.o ./src/constraints/cpRatchetJoint.c + +$(OBJECTS_DIR)/cpRotaryLimitJoint.o : ./src/constraints/cpRotaryLimitJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpRotaryLimitJoint.o ./src/constraints/cpRotaryLimitJoint.c + +$(OBJECTS_DIR)/cpSimpleMotor.o : ./src/constraints/cpSimpleMotor.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpSimpleMotor.o ./src/constraints/cpSimpleMotor.c + +$(OBJECTS_DIR)/cpSlideJoint.o : ./src/constraints/cpSlideJoint.c + $(CC) -c $(CC_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cpSlideJoint.o ./src/constraints/cpSlideJoint.c + diff --git a/chipmunk/chipmunk_Arm.TMK3 b/chipmunk/chipmunk_Arm.TMK3 index ccd48ca21f..1407902144 100644 --- a/chipmunk/chipmunk_Arm.TMK3 +++ b/chipmunk/chipmunk_Arm.TMK3 @@ -29,15 +29,19 @@ INCLUDE_TMK3=$(TO_PROJECT_ROOT)/MakeInclude/TG3_APP_Arm.TMK3 ;TOPS ;PRE_DEFINE=USE_MTAPI=1 ;使用 MTAPI 库,此时生成的 Makefile 会自动连接有关的LIB ;C、C++预定义宏,可以使用多个DEFINES串,也可以使用DEFINES1、DEFINES2等方式,MakeFile中依据出现顺序(不是数字大小)排列 -DEFINES=-D_MY_MARCO_ ;这里填入应用的自定义宏。注意:ITOPS自己的所需定义会自动包含,故此这里仅仅包含应用自己特有的定义即可 +DEFINES=-DCCX_UNDER_UPHONE ;这里填入应用的自定义宏。注意:ITOPS自己的所需定义会自动包含,故此这里仅仅包含应用自己特有的定义即可 ;DEFINES=-D__TG3_PURE_DLL__ ;生成的是纯动态库(意思是:不是TOPS应用,但可以是TCOM组件) ;DEFINES=-D__TCOM_SUPPORT__ ;生成的是TCOM组件(注意:TOPS应用也可以同时是TCOM组件) ;包含路径,可以使用多个INCLUDE_PATH串,也可以使用INCLUDE_PATH1、INCLUDE_PATH2等方式,MakeFile中依据出现顺序(不是数字大小)排列 -INCLUDE_PATH= ;应用额外的包含路径。注意:ITOPS自己的所有路径都会自动包含,故此这里仅仅包含应用自己特有的路径即可 +INCLUDE_PATH=-I../cocos2dx -I../cocos2dx/include +INCLUDE_PATH=-I./include -I./include/chipmunk -I./include/chipmunk/contains +INCLUDE_PATH=-I../test_uphone/tests ;连接的库文件,可以使用多个LIBS串,也可以使用LIBS1、LIBS2等方式,MakeFile中依据出现顺序(不是数字大小)排列 -LIBS=-lMyLib ;应用额外的连接库。注意:ITOPS自己的所需库自动包含,而且库包含路径也已经包含,故此这里仅仅包含应用自己特有的库的名字即可 +LIBS=-lcocos2d ;应用额外的连接库。注意:ITOPS自己的所需库自动包含,而且库包含路径也已经包含,故此这里仅仅包含应用自己特有的库的名字即可 + +CC_FLAGS= -std=c99 ;强制包含文件的名字,不能使用通配符,一定要使用相对或者绝对路径 ;极力要求使用相对路径,多个文件之间使用“|”分隔 @@ -50,4 +54,3 @@ INCLUDEFILE= ;只能对.c、.cpp文件进行排除 ;如果要排除本目录的文件也要加入"./" ;可以使用多个EXCLUDEFILE串,也可以使用EXCLUDEFILE1、EXCLUDEFILE2等方式,MakeFile中依据出现顺序(不是数字大小)排列 -EXCLUDEFILE= diff --git a/chipmunk/uphonefw/NewDeleteOp.cpp b/chipmunk/uphonefw/NewDeleteOp.cpp deleted file mode 100644 index e773818e7a..0000000000 --- a/chipmunk/uphonefw/NewDeleteOp.cpp +++ /dev/null @@ -1,82 +0,0 @@ - -/*! -* @file NewDeleteOp.cpp -* @author 全智达 -* @brief -* -* @section Copyright -* =======================================================================
-*
-* Copyright (c) 2005-2010 Tranzda Technologies Co.,Ltd.
-* 深圳市全智达科技有限公司 版权所有2005-2010
-*
-* PROPRIETARY RIGHTS of Tranzda Technologies Co.,Ltd. are involved in
-* the subject matter of this material. All manufacturing, reproduction,
-* use, and sales rights pertaining to this subject matter are governed
-* by the license agreement. The recipient of this software implicitly
-* accepts the terms of the license.
-* 本软件文档资料是深圳市全智达科技有限公司的合法资产,任何人士阅读和使
-* 用本资料必须获得相应的书面授权,承担保密责任和接受相应的法律约束。
-*
-* 公司网址: http://www.tranzda.com
-* 公司邮箱:support@tranzda.com
-* =======================================================================
-*/ - -#include "ssTypes.h" -#include "TG3_Type.h" -#include "TG3_Memory.h" - -#ifdef new -#undef new -#endif - -#ifdef delete -#undef delete -#endif - -#ifndef _WIN32 - #define __cdecl -#endif - -void * __cdecl operator new(unsigned int size) -{ - return TMalloc(size); -} - -void * __cdecl operator new[](unsigned int size) -{ - return TMalloc(size); -} - -void * __cdecl operator new(unsigned int size, const unsigned short * fileName, int lineNo) -{ - return TMallocEx(size, fileName, lineNo); -} - -void * __cdecl operator new[](unsigned int size, const unsigned short * fileName, int lineNo) -{ - return TMallocEx(size, fileName, lineNo); -} - -void __cdecl operator delete(void *p) -{ - TFree(p); -} - -void __cdecl operator delete[](void *p) -{ - TFree(p); -} - -void __cdecl operator delete(void *p, const unsigned short * fileName, int lineNo) -{ - TFreeEx(p, fileName, lineNo); -} - -void __cdecl operator delete[](void *p, const unsigned short * fileName, int lineNo) -{ - TFreeEx(p, fileName, lineNo); -} - - diff --git a/chipmunk/uphonefw/TG3AppDllEntry.cpp b/chipmunk/uphonefw/TG3AppDllEntry.cpp deleted file mode 100644 index ab172cae7a..0000000000 --- a/chipmunk/uphonefw/TG3AppDllEntry.cpp +++ /dev/null @@ -1,231 +0,0 @@ - -#include "ssGlobal.h" -#include "ssTsd.h" -#include "TG3_Type.h" -#include -#include "TCOM.h" -#include "ssAppMgr.h" -#include "TG3AppDllEntry.h" - -#ifdef __TCOM_SUPPORT__ - -#ifdef __cplusplus -extern "C" { -#endif - - //实现TCOM所需要的DLL函数 - - //DLL提供的获取指定CLSID的指定接口 - SS_EXPORT HRESULT TDllGetClassObject(TREFCLSID rclsid, TREFIID riid, LPVOID * ppv); - - //DLL提供的查询DLL能否被Unload - SS_EXPORT HRESULT TDllCanUnloadNow(void); - - //DLL提供的把DLL的TCOM信息加入到注册表 - SS_EXPORT HRESULT TDllRegisterServer(void); - - //DLL提供的把DLL的TCOM信息从注册表中删除 - SS_EXPORT HRESULT TDllUnregisterServer(void); - -#ifdef __cplusplus -} -#endif - -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ -#include -#endif - -//TCOM实现中需要用到的函数和数据 - -//实例对象被引用的次数 -static Int32 __TCOM_ClsidInstanceRefCount; - -//ClassFactory被Locked的次数 -static Int32 __TCOM_CalssFactoryLockedCount; - -//做必要的初始化 -static Int32 __TCOM_Init() -{ - __TCOM_ClsidInstanceRefCount = 0; - __TCOM_CalssFactoryLockedCount = 0; - return 0; -} - -//做必要的清除工作 -static Int32 __TCOM_DeInit() -{ - return 0; -} - -//DLL全局使用:增加对象实例被引用次数 -Int32 TCOM_AddClsidInstanceRefCount() -{ - __TCOM_ClsidInstanceRefCount++; -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ - SS_printf("[TCOM_SYSTEM] TCOM_AddClsidInstanceRefCount: address: %p, value: %d.\n", - &__TCOM_ClsidInstanceRefCount, __TCOM_ClsidInstanceRefCount); -#endif - if(__TCOM_ClsidInstanceRefCount <= 0) - { - return 0; - } - return __TCOM_ClsidInstanceRefCount; -} - -//DLL全局使用:减少对象实例被引用次数 -Int32 TCOM_DecClsidInstanceRefCount() -{ - __TCOM_ClsidInstanceRefCount--; -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ - SS_printf("[TCOM_SYSTEM] TCOM_DecClsidInstanceRefCount: address: %p, value: %d.\n", - &__TCOM_ClsidInstanceRefCount, __TCOM_ClsidInstanceRefCount); -#endif - if(__TCOM_ClsidInstanceRefCount <= 0) - { - return 0; - } - return __TCOM_ClsidInstanceRefCount; -} - -//DLL全局使用:增加ClassFactory被Locked的次数 -Int32 TCOM_AddCalssFactoryLockedCount() -{ - __TCOM_CalssFactoryLockedCount++; -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ - SS_printf("[TCOM_SYSTEM] TCOM_AddCalssFactoryLockedCount: address: %p, value: %d.\n", - &__TCOM_CalssFactoryLockedCount, __TCOM_CalssFactoryLockedCount); -#endif - if(__TCOM_CalssFactoryLockedCount <= 0) - { - return 0; - } - return __TCOM_CalssFactoryLockedCount; -} - -//DLL全局使用:减少ClassFactory被Locked的次数 -Int32 TCOM_DecCalssFactoryLockedCount() -{ - __TCOM_CalssFactoryLockedCount--; -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ - SS_printf("[TCOM_SYSTEM] TCOM_DecCalssFactoryLockedCount: address: %p, value: %d.\n", - &__TCOM_CalssFactoryLockedCount, __TCOM_CalssFactoryLockedCount); -#endif - if(__TCOM_CalssFactoryLockedCount <= 0) - { - return 0; - } - return __TCOM_CalssFactoryLockedCount; -} - -//实现TCOM所需要的DLL函数 - -//DLL提供的获取指定CLSID的指定接口 -SS_EXPORT HRESULT TDllGetClassObject(TREFCLSID rclsid, TREFIID riid, LPVOID * ppv) -{ - return TCOM_Srv_GetClassObject(rclsid, riid, ppv); -} - -//DLL提供的查询DLL能否被Unload -SS_EXPORT HRESULT TDllCanUnloadNow(void) -{ -#ifdef __TCOM_OUTPUT_DEBUG_INFO__ - SS_printf("[TCOM_SYSTEM] TDllCanUnloadNow: address1: %p, address2: %p, value1: %d, value2: %d.\n", - &__TCOM_ClsidInstanceRefCount, &__TCOM_CalssFactoryLockedCount, __TCOM_ClsidInstanceRefCount, - __TCOM_CalssFactoryLockedCount); -#endif - if((__TCOM_ClsidInstanceRefCount <= 0) && (__TCOM_CalssFactoryLockedCount <= 0)) - return TCOM_S_TRUE; - return TCOM_S_FALSE; -} - -//DLL提供的把DLL的TCOM信息加入到注册表 -SS_EXPORT HRESULT TDllRegisterServer(void) -{ - return TCOM_Srv_RegisterServer(); -} - -//DLL提供的把DLL的TCOM信息从注册表中删除 -SS_EXPORT HRESULT TDllUnregisterServer(void) -{ - return TCOM_Srv_UnregisterServer(); -} - -#endif //__TCOM_SUPPORT__ - -#ifdef _WIN32 - -#ifndef SS_MAKEDLL - #error Error!!! SS_MAKEDLL Must defined! -#endif - -BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - //进程加载动态库进行的操作 -#ifdef __TCOM_SUPPORT__ - __TCOM_Init(); -#endif - break; - case DLL_THREAD_ATTACH: - //线程加载动态库进行的操作 - break; - case DLL_THREAD_DETACH: - //线程卸载动态库进行的操作 - break; - case DLL_PROCESS_DETACH: - //进程卸载动态库进行的操作 -#ifdef __TCOM_SUPPORT__ - __TCOM_DeInit(); -#endif - break; - } - return TRUE; -} -#else //linux - -#ifndef SS_SHARED - #error Error!!! SS_SHARED Must defined! -#endif - -void __attribute((constructor)) TG3_Dll_Attach() -{ - //进程加载动态库进行的操作 -#ifdef __TCOM_SUPPORT__ - __TCOM_Init(); -#endif -} - -void __attribute((destructor)) TG3_Dll_Detach() -{ - //进程卸载动态库进行的操作 -#ifdef __TCOM_SUPPORT__ - __TCOM_DeInit(); -#endif -} - -#endif - -//如果不是作为TG3的动态库应用,请在VC项目中和TMK3文件中定义 __TG3_PURE_DLL__ 宏 -#ifndef __TG3_PURE_DLL__ - -//动态库应用使用的统一导出名字的入口函数 -SS_EXPORT Int32 TDllTG3AppMain(const TUChar * pAppID, UInt32 nCmd, void * pCmdParam) -{ - Int32 retValue; - - //初始化TCOM - TCoInitialize(NULL); - - retValue = TG3AppMain(pAppID, nCmd, pCmdParam); - - //释放TCOM - TCoUninitialize(); - - return retValue; -} - -#endif - - diff --git a/chipmunk/uphonefw/TG3AppDllEntry.h b/chipmunk/uphonefw/TG3AppDllEntry.h deleted file mode 100644 index e91464ed88..0000000000 --- a/chipmunk/uphonefw/TG3AppDllEntry.h +++ /dev/null @@ -1,53 +0,0 @@ - -#ifndef __TG3_APP_DLL_ENTRY_H__ -#define __TG3_APP_DLL_ENTRY_H__ - -#ifndef __cplusplus - #error This file need C++ support -#endif - -#if TG3_APP_ENTRY_MINIMUM_VERSION > 200 -#error Please replace TG3AppDllEntry.h and TG3AppDllEntry.cpp to newest version! -#endif - -#ifdef __TCOM_SUPPORT__ - -#include "TCOM.h" - -//提供给DLL实现者调用的函数,用于在全局记录实例和ClassFactory被引用的次数, -//这两个计数影响DLL是否可能被从内存中卸载,请大家在实例中内部实现计数的同时更新全局计数, -//否则DLL很有可能会在实例还存在的时候被系统自动强制卸载 - -//DLL全局使用:增加对象实例被引用次数 -Int32 TCOM_AddClsidInstanceRefCount(); - -//DLL全局使用:减少对象实例被引用次数 -Int32 TCOM_DecClsidInstanceRefCount(); - -//DLL全局使用:增加ClassFactory被Locked的次数 -Int32 TCOM_AddCalssFactoryLockedCount(); - -//DLL全局使用:减少ClassFactory被Locked的次数 -Int32 TCOM_DecCalssFactoryLockedCount(); - - -//应用DLL在支持TCOM的时候提供给导出函数使用的函数 - -//应用根据给出的CLSID和ClassFactory接口IID返回ClassFactory的接口 -//返回值:参考TCOM_S_系列宏定义 -HRESULT TCOM_Srv_GetClassObject(TREFCLSID rclsid, TREFIID riid, LPVOID * ppv); - -//应用提供的把TCOM信息加入到注册表 -//返回值:参考TCOM_S_系列宏定义 -HRESULT TCOM_Srv_RegisterServer(void); - -//应用提供的把TCOM信息从注册表中删除 -//返回值:参考TCOM_S_系列宏定义 -HRESULT TCOM_Srv_UnregisterServer(void); - -#endif //__TCOM_SUPPORT__ - -#endif //__TG3_APP_DLL_ENTRY_H__ - - - diff --git a/chipmunk/uphonefw/chipmunkUnicodeScript.h b/chipmunk/uphonefw/chipmunkUnicodeScript.h deleted file mode 100644 index e5f863670c..0000000000 --- a/chipmunk/uphonefw/chipmunkUnicodeScript.h +++ /dev/null @@ -1,10 +0,0 @@ -// Unicode string resource scrip file,DOT NOT include it. - -// Original file name: chipmunkUnicodeScript.h -// Generated by TOPS Builder:Project wizard,Date:2010-09-03 - - - -#define TZD_CONV(x, y) -TZD_CONV(AppName_chipmunk, "chipmunk") - diff --git a/chipmunk/uphonefw/chipmunkUnicodeScript_str.h b/chipmunk/uphonefw/chipmunkUnicodeScript_str.h deleted file mode 100644 index f5c74522a0..0000000000 --- a/chipmunk/uphonefw/chipmunkUnicodeScript_str.h +++ /dev/null @@ -1,26 +0,0 @@ -// Unicode string resource file - -// Original file name: chipmunkUnicodeScript_str.h -// Generated by TOPS Builder:Project wizard,Date:2010-09-03 - - -#ifndef __chipmunk_STR_STR_H__ -#define __chipmunk_STR_STR_H__ - - -#define AppName_chipmunk__N \ - "A\x00p\x00p\x00_\x00T\x00\x65\x00s\x00t\x00" -#define AppName_chipmunk__C \ - AppName_chipmunk__N"\x00\x00" -#define AppName_chipmunk \ - ((const unsigned short *)(AppName_chipmunk__C)) -#define AppName_chipmunk__N16 \ - 0x0041,0x0070,0x0070,0x005f,0x0054,0x0065,0x0073,0x0074 -#define AppName_chipmunk_16 \ - {AppName_chipmunk__N16,0x0000} -// 原始串信息: -// chipmunk - - -#endif -