annotate trunk/chipmunkd/cpBB.d @ 31:4604c914f2ab default tip

removed workaround for dmd-bug #5249
author Extrawurst
date Thu, 30 Dec 2010 13:50:40 +0100
parents df4ebc8add66
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
1
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
2 // written in the D programming language
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
3
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
4 module chipmunkd.cpBB;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
5
15
df4ebc8add66 rename/refactoring
Extrawurst
parents: 4
diff changeset
6 import chipmunkd.cpVect;
df4ebc8add66 rename/refactoring
Extrawurst
parents: 4
diff changeset
7 import chipmunkd.chipmunk_types;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
8
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
9 struct cpBB{
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
10 cpFloat l, b, r ,t;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
11 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 static cpBB
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14 cpBBNew(const cpFloat l, const cpFloat b,
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15 const cpFloat r, const cpFloat t)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17 cpBB bb = {l, b, r, t};
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18 return bb;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21 static cpBool
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22 cpBBintersects(const cpBB a, const cpBB b)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 return (a.l<=b.r && b.l<=a.r && a.b<=b.t && b.b<=a.t);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27 static cpBool
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28 cpBBcontainsBB(const cpBB bb, const cpBB other)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 return (bb.l < other.l && bb.r > other.r && bb.b < other.b && bb.t > other.t);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
31 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
32
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
33 static cpBool
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
34 cpBBcontainsVect(const cpBB bb, const cpVect v)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
35 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36 return (bb.l < v.x && bb.r > v.x && bb.b < v.y && bb.t > v.y);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39 static cpBB
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40 cpBBmerge(const cpBB a, const cpBB b){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41 return cpBBNew(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 cpfmin(a.l, b.l),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43 cpfmin(a.b, b.b),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 cpfmax(a.r, b.r),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45 cpfmax(a.t, b.t)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 );
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49 static cpBB
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 cpBBexpand(const cpBB bb, const cpVect v){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51 return cpBBNew(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52 cpfmin(bb.l, v.x),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53 cpfmin(bb.b, v.y),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54 cpfmax(bb.r, v.x),
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 cpfmax(bb.t, v.y)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 );
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 cpVect
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60 cpBBClampVect(const cpBB bb, const cpVect v)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 cpFloat x = cpfmin(cpfmax(bb.l, v.x), bb.r);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63 cpFloat y = cpfmin(cpfmax(bb.b, v.y), bb.t);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 return cpv(x, y);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 cpVect
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 cpBBWrapVect(const cpBB bb, const cpVect v)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70 cpFloat ix = cpfabs(bb.r - bb.l);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 cpFloat modx = cpfmod(v.x - bb.l, ix);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 cpFloat x = (modx > 0.0f) ? modx : modx + ix;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 cpFloat iy = cpfabs(bb.t - bb.b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75 cpFloat mody = cpfmod(v.y - bb.b, iy);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 cpFloat y = (mody > 0.0f) ? mody : mody + iy;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 return cpv(x + bb.l, y + bb.b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 }