Mercurial > touhou
diff pytouhou/game/eclrunner.py @ 59:4fe37a620b22
Handle set_random_angle properly! At last!
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Wed, 24 Aug 2011 01:34:11 +0200 |
parents | 3da4de9decd0 |
children | 1f591adcea04 |
line wrap: on
line diff
--- a/pytouhou/game/eclrunner.py +++ b/pytouhou/game/eclrunner.py @@ -218,6 +218,11 @@ class ECLRunner(object): self._setval(variable_id, self._getval(maxval) * self._game_state.prng.rand_double()) + @instruction(9) + def set_random_float2(self, variable_id, minval, amp): + self._setval(variable_id, self._getval(minval) + self._getval(amp) * self._game_state.prng.rand_double()) + + @instruction(20) def add(self, variable_id, a, b): #TODO: int vs float thing @@ -297,9 +302,27 @@ class ECLRunner(object): @instruction(50) def set_random_angle(self, min_angle, max_angle): - #TODO: This thing is really odd, check, double check, triple check, disassemble... + if self._enemy.screen_box: + minx, miny, maxx, maxy = self._enemy.screen_box + else: + minx, miny, maxx, maxy = (0., 0., 0., 0.) + angle = self._game_state.prng.rand_double() * (max_angle - min_angle) + min_angle - self._enemy.angle = atan2(-abs(sin(angle)), -abs(cos(angle))) + sa, ca = sin(angle), cos(angle) + + distx = min(96.0, (maxx - minx) / 2.) + disty = min(96.0, (maxy - miny) / 2.) + + if self._enemy.x > maxx - 96.0: + ca = -abs(ca) + elif self._enemy.x < minx + 96.0: + ca = abs(ca) + + if self._enemy.y > maxy - 48.0: + sa = -abs(sa) + elif self._enemy.y < miny + 48.0: + sa = abs(sa) + self._enemy.angle = atan2(sa, ca) @instruction(51)