Mercurial > skaapsteker
comparison skaapsteker/utils.py @ 627:35919d12b792
Path-based collision minimisation and axis-projection backout.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 07 May 2011 20:28:06 +0200 |
parents | 4ffa9d159588 |
children | 0675f390653c |
comparison
equal
deleted
inserted
replaced
626:1abb53ae1a6a | 627:35919d12b792 |
---|---|
25 cadd = mk_cop(operator.add) | 25 cadd = mk_cop(operator.add) |
26 csub = mk_cop(operator.sub) | 26 csub = mk_cop(operator.sub) |
27 cmul = mk_cop(operator.mul) | 27 cmul = mk_cop(operator.mul) |
28 cdiv = mk_cop(operator.div) | 28 cdiv = mk_cop(operator.div) |
29 cclamp = mk_cop(lambda a, b: max(min(a, b), -b)) | 29 cclamp = mk_cop(lambda a, b: max(min(a, b), -b)) |
30 cabsmax = mk_cop(lambda a, b: a if abs(a) > abs(b) else b) | |
30 | 31 |
31 cint = mk_cuop(int) | 32 cint = mk_cuop(int) |
32 cneg = mk_cuop(lambda a: -a) | 33 cneg = mk_cuop(lambda a: -a) |
33 cabs = mk_cuop(abs) | 34 cabs = mk_cuop(abs) |
34 | 35 |
36 | |
37 def rect_projection(rect1, rect2): | |
38 if not rect1.colliderect(rect2): | |
39 # No collision? | |
40 return (0, 0) | |
41 | |
42 if rect1.center[0] < rect2.center[0]: | |
43 x_projection = rect2.left - rect1.right | |
44 else: | |
45 x_projection = rect2.right - rect1.left | |
46 | |
47 if rect1.center[1] < rect2.center[1]: | |
48 y_projection = rect2.top - rect1.bottom | |
49 else: | |
50 y_projection = rect2.bottom - rect1.top | |
51 | |
52 if abs(x_projection) < abs(y_projection): | |
53 return (x_projection, 0) | |
54 return (0, y_projection) | |
55 |