annotate trunk/tests/ChipmunkDemos/samples/UnsafeOps.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.UnsafeOps;
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 import gameApp;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
11
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
12 import std.math;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
13
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
14 static cpSpace *space;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
15
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
16 enum M_PI = PI;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
17 enum M_PI_2 = PI*0.5f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
18
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
19 enum NUM_CIRCLES = 30;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
20
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
21 static cpShape *circles[NUM_CIRCLES];
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
22 static cpFloat circleRadius = 30.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
23
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
24 static void
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
25 update(int ticks)
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
26 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
27 if(arrowDirection.y){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
28 circleRadius = cpfmax(10.0f, circleRadius + arrowDirection.y);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
29
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
30 for(int i=0; i<NUM_CIRCLES; i++){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
31 circles[i]._body.m = cpMomentForCircle(1.0f, 0.0f, circleRadius, cpvzero);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
32 cpCircleShapeSetRadius(circles[i], circleRadius);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
33 }
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 int steps = 1;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
37 cpFloat dt = 1.0f/60.0f/cast(cpFloat)steps;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
38
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
39 for(int i=0; i<steps; i++){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
40 cpSpaceStep(space, dt);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
41 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
42 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
43
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
44 static cpSpace *
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
45 init()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
46 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
47 cpResetShapeIdCounter();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
48
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
49 space = cpSpaceNew();
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
50 space.iterations = 5;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
51 space.gravity = cpv(0, -100);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
52
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
53 cpSpaceResizeStaticHash(space, 40.0f, 999);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
54 cpSpaceResizeActiveHash(space, 30.0f, 2999);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
55
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
56 cpBody *_body, 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 shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(-320,240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
60 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
61 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
62
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
63 shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(320,-240), cpv(320,240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
64 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
65 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
66
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
67 shape = cpSpaceAddStaticShape(space, cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
68 shape.e = 1.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
69 shape.layers = NOT_GRABABLE_MASK;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
70
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
71 for(int i=0; i<NUM_CIRCLES; i++){
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
72 _body = cpSpaceAddBody(space, cpBodyNew(1.0f, cpMomentForCircle(1.0f, 0.0f, circleRadius, cpvzero)));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
73 _body.p = cpvmult(cpv(frand()*2.0f - 1.0f, frand()*2.0f - 1.0f), circleRadius*5.0f);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
74
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
75 circles[i] = shape = cpSpaceAddShape(space, cpCircleShapeNew(_body, circleRadius, cpvzero));
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
76 shape.e = 0.0f; shape.u = 1.0f;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
77 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
78
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
79 //strcat(messageString,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
80 // "chipmunk_unsafe.h Contains functions for changing shapes, but they can cause severe stability problems if used incorrectly.\n"
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
81 // "Shape changes occur as instantaneous changes to position without an accompanying velocity change. USE WITH CAUTION!");
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
82 return space;
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
83 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
84
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
85 static void
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
86 destroy()
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
87 {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
88 cpSpaceFreeChildren(space);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
89 cpSpaceFree(space);
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
90 }
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
91
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
92 chipmunkDemo UnsafeOps = {
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
93 "Unsafe Operations",
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
94 null,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
95 &init,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
96 &update,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
97 &destroy,
af2f61a96318 ported chipmunk demos
Extrawurst
parents:
diff changeset
98 };