annotate pytouhou/game/bullet.py @ 182:20843875ad8f

(Hopefully) use difficulty as it should. The difficulty[0] (also called rank) varies from 0 to 32 and affects various parts of the game. The difficulty now impact those parts, but how it is modified during the gameplay is not clear. Such changes to the difficulty are not handled yet. [0] http://en.touhouwiki.net/wiki/Embodiment_of_Scarlet_Devil/Gameplay#Rank
author Thibaut Girka <thib@sitedethib.com>
date Tue, 25 Oct 2011 01:29:40 +0200
parents ee0bbde02c48
children 0595315d3880
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
1 # -*- encoding: utf-8 -*-
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
2 ##
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
3 ## Copyright (C) 2011 Thibaut Girka <thib@sitedethib.com>
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
4 ##
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
5 ## This program is free software; you can redistribute it and/or modify
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
6 ## it under the terms of the GNU General Public License as published
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
7 ## by the Free Software Foundation; version 3 only.
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
8 ##
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
9 ## This program is distributed in the hope that it will be useful,
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
12 ## GNU General Public License for more details.
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
13 ##
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
14
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
15 from math import cos, sin, atan2, pi
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
16
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
17 from pytouhou.utils.interpolator import Interpolator
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
18 from pytouhou.vm.anmrunner import ANMRunner
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
19 from pytouhou.game.sprite import Sprite
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
20
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
21
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
22 class Bullet(object):
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
23 def __init__(self, pos, bullet_type, sprite_idx_offset,
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
24 angle, speed, attributes, flags, player, game, player_bullet=False):
151
5cf927cbd9c5 Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents: 149
diff changeset
25 self._game = game
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
26 self._sprite = None
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
27 self._anmrunner = None
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
28 self._removed = False
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
29 self._launched = False
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
30 self._bullet_type = bullet_type
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
31
142
c7f0fd9d2145 Simple collision detection
Thibaut Girka <thib@sitedethib.com>
parents: 127
diff changeset
32 self.hitbox_half_size = bullet_type.hitbox_size / 2.
c7f0fd9d2145 Simple collision detection
Thibaut Girka <thib@sitedethib.com>
parents: 127
diff changeset
33
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
34 self.speed_interpolator = None
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
35 self.frame = 0
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
36 self.grazed = False
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
37
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
38 self.player = player
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
39
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
40 self.sprite_idx_offset = sprite_idx_offset
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
41
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
42 self.flags = flags
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
43 self.attributes = list(attributes)
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
44
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
45 self.x, self.y = pos
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
46 self.angle = angle
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
47 self.speed = speed
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
48 dx, dy = cos(angle) * speed, sin(angle) * speed
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
49 self.delta = dx, dy
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
50
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
51 self.player_bullet = player_bullet
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
52
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
53 #TODO
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
54 if flags & 14:
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
55 if flags & 2:
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
56 index = bullet_type.launch_anim2_index
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
57 launch_mult = bullet_type.launch_anim_penalties[0]
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
58 elif flags & 4:
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
59 index = bullet_type.launch_anim4_index
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
60 launch_mult = bullet_type.launch_anim_penalties[1]
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
61 else:
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
62 index = bullet_type.launch_anim8_index
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
63 launch_mult = bullet_type.launch_anim_penalties[2]
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
64 self.launch_delta = dx * launch_mult, dy * launch_mult
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
65 self._sprite = Sprite()
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
66 self._anmrunner = ANMRunner(bullet_type.anm_wrapper,
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
67 index, self._sprite,
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
68 bullet_type.launch_anim_offsets[sprite_idx_offset])
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
69 self._anmrunner.run_frame()
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
70 else:
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
71 self.launch()
88
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
72
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
73 if self.player_bullet:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
74 self._sprite.angle = angle - pi
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
75 else:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
76 self._sprite.angle = angle
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
77
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
78
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
79 def is_visible(self, screen_width, screen_height):
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
80 tx, ty, tw, th = self._sprite.texcoords
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
81 x, y = self.x, self.y
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
82
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
83 max_x = tw / 2.
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
84 max_y = th / 2.
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
85
123
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
86 if (max_x < x - screen_width
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
87 or max_x < -x
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
88 or max_y < y - screen_height
d1c82d43bbf3 Various optimizations
Thibaut Girka <thib@sitedethib.com>
parents: 122
diff changeset
89 or max_y < -y):
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
90 return False
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
91 return True
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
92
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
93
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
94 def set_anim(self, sprite_idx_offset=None):
107
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
95 if sprite_idx_offset is not None:
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
96 self.sprite_idx_offset = sprite_idx_offset
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
97
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
98 bt = self._bullet_type
107
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
99 self._sprite = Sprite()
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
100 if self.player_bullet:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
101 self._sprite.angle = self.angle - pi
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
102 else:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
103 self._sprite.angle = self.angle
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
104 self._anmrunner = ANMRunner(bt.anm_wrapper, bt.anim_index,
107
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
105 self._sprite, self.sprite_idx_offset)
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
106 self._anmrunner.run_frame()
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
107
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
108
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
109 def launch(self):
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
110 self._launched = True
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
111 self.update = self.update_full
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
112 self.set_anim()
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
113 if self.flags & 1:
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
114 self.speed_interpolator = Interpolator((self.speed + 5.,), 0,
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
115 (self.speed,), 16)
107
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
116
5d9052b9a4e8 (almost) implement Cirno's freezing spellcard
Thibaut Girka <thib@sitedethib.com>
parents: 106
diff changeset
117
156
ebfd328e700c Rename a few functions, move a few things around...
Thibaut Girka <thib@sitedethib.com>
parents: 152
diff changeset
118 def collide(self):
161
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
119 self.cancel()
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
120
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
121
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
122 def cancel(self):
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
123 # Cancel animation
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
124 bt = self._bullet_type
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
125 self._sprite = Sprite()
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
126 if self.player_bullet:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
127 self._sprite.angle = self.angle - pi
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
128 else:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
129 self._sprite.angle = self.angle
161
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
130 self._anmrunner = ANMRunner(bt.anm_wrapper, bt.cancel_anim_index,
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
131 self._sprite, bt.launch_anim_offsets[self.sprite_idx_offset])
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
132 self._anmrunner.run_frame()
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
133 self.delta = self.delta[0] / 2., self.delta[1] / 2.
161
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
134
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
135 # Change update method
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
136 self.update = self.update_cancel
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
137
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
138 # Do not use this one for collisions anymore
163
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
139 if self.player_bullet:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
140 self._game.players_bullets.remove(self)
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
141 else:
ee0bbde02c48 Implement player bullets in Bullet.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 161
diff changeset
142 self._game.bullets.remove(self)
161
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
143 self._game.cancelled_bullets.append(self)
152
86807b8a63bd Add collisions with enemies and items.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 151
diff changeset
144
86807b8a63bd Add collisions with enemies and items.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 151
diff changeset
145
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
146 def update(self):
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
147 dx, dy = self.launch_delta
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
148 self.x += dx
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
149 self.y += dy
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
150
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
151 if not self._anmrunner.run_frame():
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
152 self.launch()
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
153
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
154
161
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
155 def update_cancel(self):
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
156 dx, dy = self.delta
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
157 self.x += dx
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
158 self.y += dy
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
159
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
160 if not self._anmrunner.run_frame():
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
161 self._removed = True
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
162
7e7368356445 Add bullet cancel anim support
Thibaut Girka <thib@sitedethib.com>
parents: 158
diff changeset
163
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
164 def update_simple(self):
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
165 dx, dy = self.delta
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
166 self.x += dx
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
167 self.y += dy
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
168
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
169
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
170 def update_full(self):
120
4300a832f033 Small refactoring and massive performance improvement
Thibaut Girka <thib@sitedethib.com>
parents: 114
diff changeset
171 sprite = self._sprite
4300a832f033 Small refactoring and massive performance improvement
Thibaut Girka <thib@sitedethib.com>
parents: 114
diff changeset
172
4300a832f033 Small refactoring and massive performance improvement
Thibaut Girka <thib@sitedethib.com>
parents: 114
diff changeset
173 if self._anmrunner is not None and not self._anmrunner.run_frame():
4300a832f033 Small refactoring and massive performance improvement
Thibaut Girka <thib@sitedethib.com>
parents: 114
diff changeset
174 self._anmrunner = None
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
175
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
176 #TODO: flags
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
177 x, y = self.x, self.y
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
178 dx, dy = self.delta
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
179
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
180 if self.flags & 16:
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
181 length, angle = self.attributes[4:6]
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
182 angle = self.angle if angle < -900.0 else angle #TODO: is that right?
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
183 dx, dy = dx + cos(angle) * length, dy + sin(angle) * length
145
30338dc33a7b Fix bullet orientation in some cases (Meiling's last spellcard)
Thibaut Girka <thib@sitedethib.com>
parents: 142
diff changeset
184 self.angle = sprite.angle = atan2(dy, dx)
30338dc33a7b Fix bullet orientation in some cases (Meiling's last spellcard)
Thibaut Girka <thib@sitedethib.com>
parents: 142
diff changeset
185 if sprite.automatic_orientation:
30338dc33a7b Fix bullet orientation in some cases (Meiling's last spellcard)
Thibaut Girka <thib@sitedethib.com>
parents: 142
diff changeset
186 sprite._changed = True
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
187 self.delta = dx, dy
149
3673d55a8448 Fix bullet flags 16 and 32 handling
Thibaut Girka <thib@sitedethib.com>
parents: 145
diff changeset
188 if self.frame == self.attributes[0]: #TODO: include last frame, or not?
3673d55a8448 Fix bullet flags 16 and 32 handling
Thibaut Girka <thib@sitedethib.com>
parents: 145
diff changeset
189 self.flags ^= 16
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
190 elif self.flags & 32:
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
191 #TODO: check
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
192 acceleration, angular_speed = self.attributes[4:6]
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
193 self.speed += acceleration
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
194 self.angle += angular_speed
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
195 dx, dy = cos(self.angle) * self.speed, sin(self.angle) * self.speed
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
196 self.delta = dx, dy
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
197 sprite.angle = self.angle
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
198 if sprite.automatic_orientation:
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
199 sprite._changed = True
149
3673d55a8448 Fix bullet flags 16 and 32 handling
Thibaut Girka <thib@sitedethib.com>
parents: 145
diff changeset
200 if self.frame == self.attributes[0]:
3673d55a8448 Fix bullet flags 16 and 32 handling
Thibaut Girka <thib@sitedethib.com>
parents: 145
diff changeset
201 self.flags ^= 32
88
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
202 elif self.flags & 448:
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
203 #TODO: check
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
204 frame, count = self.attributes[0:2]
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
205 angle, speed = self.attributes[4:6]
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
206 if self.frame % frame == 0:
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
207 count = count - 1
88
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
208
124
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
209 if self.frame != 0:
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
210 self.speed = speed
88
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
211
124
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
212 if self.flags & 64:
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
213 self.angle += angle
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
214 elif self.flags & 128:
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
215 self.angle = atan2(self.player.y - y, self.player.x - x) + angle
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
216 elif self.flags & 256:
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
217 self.angle = angle
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
218
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
219 dx, dy = cos(self.angle) * speed, sin(self.angle) * speed
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
220 self.delta = dx, dy
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
221 sprite.angle = self.angle
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
222 if sprite.automatic_orientation:
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
223 sprite._changed = True
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
224
127
81e05aed8db5 Fix bullets
Thibaut Girka <thib@sitedethib.com>
parents: 124
diff changeset
225 if count >= 0:
124
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
226 self.speed_interpolator = Interpolator((self.speed,), self.frame,
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
227 (0.,), self.frame + frame - 1)
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
228 else:
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
229 self.flags &= ~448
88
2cc60137d368 Ugly implementation of three new attack flags.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 86
diff changeset
230
89
1513f5626656 Fix attack flags implementation
Thibaut Girka <thib@sitedethib.com>
parents: 88
diff changeset
231 self.attributes[1] = count
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
232 #TODO: other flags
122
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
233 elif not self.speed_interpolator and self._anmrunner is None:
174324a4da51 Add support for launch animations! (Warning: slow :()
Thibaut Girka <thib@sitedethib.com>
parents: 120
diff changeset
234 self.update = self.update_simple
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
235
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
236 if self.speed_interpolator:
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
237 self.speed_interpolator.update(self.frame)
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
238 self.speed, = self.speed_interpolator.values
124
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
239 dx, dy = cos(self.angle) * self.speed, sin(self.angle) * self.speed
f06e96dbed4e Fix a few things with special bullet flags
Thibaut Girka <thib@sitedethib.com>
parents: 123
diff changeset
240 self.delta = dx, dy
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
241
84
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
242 self.x, self.y = x + dx, y + dy
1a0c78e5a941 Oops O:)
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
243
86
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
244 self.frame += 1
a87a3c080585 Handle a few attack flags
Thibaut Girka <thib@sitedethib.com>
parents: 85
diff changeset
245