Mercurial > touhou
comparison pytouhou/game/item.py @ 315:e935ed8dc5e6
Add out-of-screen item indicators.
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Fri, 23 Mar 2012 16:27:07 +0100 |
parents | 52d791bb7c32 |
children | 13201d90bb22 |
comparison
equal
deleted
inserted
replaced
314:0f88ae611d37 | 315:e935ed8dc5e6 |
---|---|
12 ## GNU General Public License for more details. | 12 ## GNU General Public License for more details. |
13 ## | 13 ## |
14 | 14 |
15 | 15 |
16 from math import cos, sin, atan2, pi | 16 from math import cos, sin, atan2, pi |
17 from copy import copy | |
17 | 18 |
18 from pytouhou.utils.interpolator import Interpolator | 19 from pytouhou.utils.interpolator import Interpolator |
20 | |
21 | |
22 class Indicator(object): | |
23 def __init__(self, item): | |
24 self._item = item | |
25 | |
26 self.sprite = copy(item._item_type.indicator_sprite) | |
27 self.removed = False | |
28 | |
29 self.frame = 0 | |
30 self.x = self._item.x | |
31 self.y = self.sprite.texcoords[2] / 2. | |
32 | |
33 | |
34 def update(self): | |
35 #TODO: alpha | |
36 self.x = self._item.x | |
37 self.frame += 1 | |
38 | |
19 | 39 |
20 | 40 |
21 class Item(object): | 41 class Item(object): |
22 def __init__(self, start_pos, _type, item_type, game, angle=pi/2, player=None, end_pos=None): | 42 def __init__(self, start_pos, _type, item_type, game, angle=pi/2, player=None, end_pos=None): |
23 self._game = game | 43 self._game = game |
44 self._type = _type | |
24 self._item_type = item_type | 45 self._item_type = item_type |
25 self.sprite = item_type.sprite | 46 self.sprite = item_type.sprite |
26 self.removed = False | 47 self.removed = False |
27 self._type = _type | |
28 | 48 |
29 self.frame = 0 | 49 self.frame = 0 |
30 self.x, self.y = start_pos | 50 self.x, self.y = start_pos |
31 self.angle = angle | 51 self.angle = angle |
52 self.indicator = None | |
32 | 53 |
33 if player: | 54 if player: |
34 self.autocollect(player) | 55 self.autocollect(player) |
35 else: | 56 else: |
36 self.player = None | 57 self.player = None |
135 self.speed, = self.speed_interpolator.values | 156 self.speed, = self.speed_interpolator.values |
136 dx, dy = cos(self.angle) * self.speed, sin(self.angle) * self.speed | 157 dx, dy = cos(self.angle) * self.speed, sin(self.angle) * self.speed |
137 self.x += dx | 158 self.x += dx |
138 self.y += dy | 159 self.y += dy |
139 | 160 |
161 offscreen = self.y < -(self.sprite.texcoords[2] / 2.) | |
162 if offscreen: | |
163 self.indicator = self.indicator or Indicator(self) | |
164 else: | |
165 self.indicator = None | |
166 | |
167 if self.indicator: | |
168 self.indicator.update() | |
169 | |
140 self.frame += 1 | 170 self.frame += 1 |
141 | 171 |