annotate trunk/tests/ChipmunkDemos/samples/Bounce.d @ 16:af2f61a96318

ported chipmunk demos
author Extrawurst
date Sat, 04 Dec 2010 02:02:29 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
1
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
2 // written in the D programming language
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
3
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
4 module samples.Bounce;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
5
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
6 import chipmunkd.chipmunk;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
7
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
8 import samples.ChipmunkDemo;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
9
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
10 static cpSpace *space;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
11
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
12 static void
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
13 update(int ticks)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
14 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
15 enum int steps = 3;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
16 enum cpFloat dt = 1.0f/60.0f/cast(cpFloat)steps;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
17
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
18 for(int i=0; i<steps; i++){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
19 cpSpaceStep(space, dt);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
20 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
21 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
22
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
23 static void
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
24 add_box()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
25 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
26 enum cpFloat size = 10.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
27 enum cpFloat mass = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
28
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
29 cpVect verts[] = [
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
30 cpv(-size,-size),
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
31 cpv(-size, size),
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
32 cpv( size, size),
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
33 cpv( size,-size),
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
34 ];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
35
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
36 cpFloat radius = cpvlength(cpv(size, size));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
37
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
38 cpBody *_body = cpSpaceAddBody(space, cpBodyNew(mass, cpMomentForPoly(mass, 4, verts.ptr, cpvzero)));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
39 _body.p = cpv(frand()*(640 - 2*radius) - (320 - radius), frand()*(480 - 2*radius) - (240 - radius));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
40 _body.v = cpvmult(cpv(2*frand() - 1, 2*frand() - 1), 200);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
41
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
42 cpShape *shape = cpSpaceAddShape(space, cpPolyShapeNew(_body, 4, verts.ptr, cpvzero));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
43 shape.e = 1.0f; shape.u = 0.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
44 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
45
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
46 static cpSpace *
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
47 init()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
48 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
49 cpResetShapeIdCounter();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
50
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
51 space = cpSpaceNew();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
52 cpSpaceResizeActiveHash(space, 30.0f, 1000);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
53 space.iterations = 10;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
54
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
55 cpBody *_body;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
56 cpBody *staticBody = &space.staticBody;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
57 cpShape *shape;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
58
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
59 // Create segments around the edge of the screen.
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
60 shape = cpSpaceAddShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
61 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
62 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
63
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
64 shape = cpSpaceAddShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
65 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
66 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
67
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
68 shape = cpSpaceAddShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
69 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
70 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
71
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
72 shape = cpSpaceAddShape(space, cpSegmentShapeNew(staticBody, cpv(-320,240), cpv(320,240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
73 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
74 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
75
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
76 for(int i=0; i<10; i++)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
77 add_box();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
78
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
79 _body = cpSpaceAddBody(space, cpBodyNew(100.0f, 10000.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
80
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
81 shape = cpSpaceAddShape(space, cpSegmentShapeNew(_body, cpv(-75,0), cpv(75,0), 5.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
82 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
83
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
84 cpSpaceAddConstraint(space, cpPivotJointNew2(_body, staticBody, cpvzero, cpvzero));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
85
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
86 return space;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
87 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
88
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
89 static void
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
90 destroy()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
91 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
92 cpSpaceFreeChildren(space);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
93 cpSpaceFree(space);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
94 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
95
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
96 chipmunkDemo Bounce = {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
97 "Bounce",
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
98 null,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
99 &init,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
100 &update,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
101 &destroy,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
102 };