Mercurial > touhou
comparison pytouhou/game/bullet.py @ 123:d1c82d43bbf3
Various optimizations
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Sat, 10 Sep 2011 11:58:24 +0200 |
parents | 174324a4da51 |
children | f06e96dbed4e |
comparison
equal
deleted
inserted
replaced
122:174324a4da51 | 123:d1c82d43bbf3 |
---|---|
18 from pytouhou.vm.anmrunner import ANMRunner | 18 from pytouhou.vm.anmrunner import ANMRunner |
19 from pytouhou.game.sprite import Sprite | 19 from pytouhou.game.sprite import Sprite |
20 | 20 |
21 | 21 |
22 class Bullet(object): | 22 class Bullet(object): |
23 def __init__(self, pos, type_idx, sprite_idx_offset, | 23 def __init__(self, pos, bullet_type, sprite_idx_offset, |
24 angle, speed, attributes, flags, player, game_state): | 24 angle, speed, attributes, flags, player, game_state): |
25 self._game_state = game_state | 25 self._game_state = game_state |
26 self._sprite = None | 26 self._sprite = None |
27 self._anmrunner = None | 27 self._anmrunner = None |
28 self._removed = False | 28 self._removed = False |
29 self._launched = False | 29 self._launched = False |
30 self._bullet_type = game_state.bullet_types[type_idx] | 30 self._bullet_type = bullet_type |
31 | 31 |
32 self.speed_interpolator = None | 32 self.speed_interpolator = None |
33 self.frame = 0 | 33 self.frame = 0 |
34 self.grazed = False | 34 self.grazed = False |
35 | 35 |
46 dx, dy = cos(angle) * speed, sin(angle) * speed | 46 dx, dy = cos(angle) * speed, sin(angle) * speed |
47 self.delta = dx, dy | 47 self.delta = dx, dy |
48 | 48 |
49 #TODO | 49 #TODO |
50 if flags & 14: | 50 if flags & 14: |
51 bt = self._bullet_type | |
52 if flags & 2: | 51 if flags & 2: |
53 index = bt.launch_anim2_index | 52 index = bullet_type.launch_anim2_index |
54 launch_mult = bt.launch_anim_penalties[0] | 53 launch_mult = bullet_type.launch_anim_penalties[0] |
55 elif flags & 4: | 54 elif flags & 4: |
56 index = bt.launch_anim4_index | 55 index = bullet_type.launch_anim4_index |
57 launch_mult = bt.launch_anim_penalties[1] | 56 launch_mult = bullet_type.launch_anim_penalties[1] |
58 else: | 57 else: |
59 index = bt.launch_anim8_index | 58 index = bullet_type.launch_anim8_index |
60 launch_mult = bt.launch_anim_penalties[2] | 59 launch_mult = bullet_type.launch_anim_penalties[2] |
61 self.launch_delta = dx * launch_mult, dy * launch_mult | 60 self.launch_delta = dx * launch_mult, dy * launch_mult |
62 self._sprite = Sprite() | 61 self._sprite = Sprite() |
63 self._anmrunner = ANMRunner(bt.anm_wrapper, | 62 self._anmrunner = ANMRunner(bullet_type.anm_wrapper, |
64 index, self._sprite, | 63 index, self._sprite, |
65 bt.launch_anim_offsets[sprite_idx_offset]) | 64 bullet_type.launch_anim_offsets[sprite_idx_offset]) |
66 self._anmrunner.run_frame() | 65 self._anmrunner.run_frame() |
67 else: | 66 else: |
68 self.launch() | 67 self.launch() |
69 | 68 |
70 self._sprite.angle = angle | 69 self._sprite.angle = angle |
71 | 70 |
72 | 71 |
73 def is_visible(self, screen_width, screen_height): | 72 def is_visible(self, screen_width, screen_height): |
74 tx, ty, tw, th = self._sprite.texcoords | 73 tx, ty, tw, th = self._sprite.texcoords |
75 if self._sprite.corner_relative_placement: | 74 x, y = self.x, self.y |
76 raise Exception #TODO | |
77 | 75 |
78 max_x = tw / 2. | 76 max_x = tw / 2. |
79 max_y = th / 2. | 77 max_y = th / 2. |
80 | 78 |
81 if any((max_x < self.x - screen_width, | 79 if (max_x < x - screen_width |
82 max_x < -self.x, | 80 or max_x < -x |
83 max_y < self.y - screen_height, | 81 or max_y < y - screen_height |
84 max_y < -self.y)): | 82 or max_y < -y): |
85 return False | 83 return False |
86 return True | 84 return True |
87 | 85 |
88 | 86 |
89 def set_anim(self, sprite_idx_offset=None): | 87 def set_anim(self, sprite_idx_offset=None): |