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