1 # -*- coding: utf-8 -*-
13 class WarpingCursor(pygame
.sprite
.Sprite
):
15 The class for animating the warping cursor
18 The duration of each image in the animation
20 The Position of the center of the cursor
22 A pointer to the current image
24 The time elapsed since when the current image should have been displayed
29 #centerPosition = None
31 #_animationOffset = None
34 def _get_theme_images(name
) :
35 basePath
= os
.path
.abspath(__file__
).split(os
.path
.sep
)[:-1]
36 basePath
.append('data')
38 basePath
= os
.path
.sep
.join(basePath
)
39 images
= [f
for f
in os
.listdir(basePath
) if os
.path
.splitext(f
)[1] == '.png']
40 return basePath
, images
43 def __init__(self
, theme
='black', duration
=75):
44 pygame
.sprite
.Sprite
.__init
__(self
)
45 imagesPath
, images
= WarpingCursor
._get
_theme
_images
(theme
)
46 flashImage
= images
.pop(images
.index('flash.png'))
47 images
.sort(lambda a
, b
: cmp(*[int(os
.path
.splitext(f
)[0]) for f
in [a
, b
]]))
51 imagePath
= os
.path
.sep
.join([imagesPath
, img
])
52 self
.images
= pygame
.image
.load(imagePath
).convert_alpha()
54 self
.duration
= duration
56 #self.flashImagePath = flashImage
57 #self.durations = durations
58 #self.centerPosition = initCenterPosition
59 #self.flashLength = 100
60 #self.flashing = False
61 #self.image = pygame.image.load(self.images[0]).convert_alpha()
62 #self._imagePointer = 0
63 #self._animationOffset = 0
66 def update(self
, elapsedTime
, centerPosition
):
68 Update the cursor's look and position
71 The time passed since the previous update
73 the new position of the creep
75 self
._updateImage
(elapsedTime
)
76 self
.centerPosition
= centerPosition
78 self
._flashTimer
+= elapsedTime
79 if self
._flashTimer
> self
.flashLength
:
82 def _updateImage(self
, elapsedTime
):
84 Update the cursor's image
87 The time passed since the previous update
89 self
._animationOffset
+= elapsedTime
91 if self
._animationOffset
> self
.durations
[self
._imagePointer
]:
92 #New animation offset is computed first, before updating the pointer
93 self
._animationOffset
-= self
.durations
[self
._imagePointer
]
94 #point to the next image (restarts from the beginning when it reaches the end)
95 self
._imagePointer
= (self
._imagePointer
+ 1) % len(self
.images
)
98 self
.image
= pygame
.image
.load(self
.flashImagePath
).convert_alpha()
100 self
.image
= pygame
.image
.load(self
.images
[self
._imagePointer
]).convert_alpha()
102 def flash(self
,flashLength
= None):
106 self
.flashlength
= flashLength
108 def blit(self
,surface
):
110 Draw the circle on surface
113 newPos
= (self
.centerPosition
[0] - self
.image
.get_width() / 2, self
.centerPosition
[1] - self
.image
.get_height() / 2)
114 surface
.blit(self
.image
, newPos
)