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