+# -*- coding: utf-8 -*-
+"""
+Curseurs winwii
+
+$Id$
+$URL$
+"""
+
+import pygame
+import os
+
+
+class WarpingCursor(pygame.sprite.Sprite):
+ '''
+ The class for animating the warping cursor
+
+ durations:
+ The duration of each image in the animation
+ centerPosition:
+ The Position of the center of the cursor
+ _imagePointer:
+ A pointer to the current image
+ _animationOffset:
+ The time elapsed since when the current image should have been displayed
+ '''
+ #screen = None
+ #images = None
+ #durations = None
+ #centerPosition = None
+ #_imagePointer = None
+ #_animationOffset = None
+
+ @staticmethod
+ def _get_theme_images(name) :
+ basePath = os.path.abspath(__file__).split(os.path.sep)[:-1]
+ basePath.append('data')
+ basePath.append(name)
+ basePath = os.path.sep.join(basePath)
+ images = [f for f in os.listdir(basePath) if os.path.splitext(f)[1] == '.png']
+ return basePath, images
+
+
+ def __init__(self, theme='black', duration=75):
+ pygame.sprite.Sprite.__init__(self)
+ imagesPath, images = WarpingCursor._get_theme_images(theme)
+ flashImage = images.pop(images.index('flash.png'))
+ images.sort(lambda a, b : cmp(*[int(os.path.splitext(f)[0]) for f in [a, b]]))
+
+ self.images = []
+ for img in images :
+ imagePath = os.path.sep.join([imagesPath, img])
+ self.images = pygame.image.load(imagePath).convert_alpha()
+
+ #self.flashImagePath = flashImage
+ #self.durations = durations
+ #self.centerPosition = initCenterPosition
+ #self.flashLength = 100
+ #self.flashing = False
+ #self.image = pygame.image.load(self.images[0]).convert_alpha()
+ #self._imagePointer = 0
+ #self._animationOffset = 0
+ #self._flashTimer = 0
+
+ def update(self, elapsedTime, centerPosition):
+ '''
+ Update the cursor's look and position
+
+ elapsedTime:
+ The time passed since the previous update
+ centerPosition:
+ the new position of the creep
+ '''
+ self._updateImage(elapsedTime)
+ self.centerPosition = centerPosition
+ if self.flashing :
+ self._flashTimer += elapsedTime
+ if self._flashTimer > self.flashLength:
+ self.flashing = False
+
+ def _updateImage(self, elapsedTime):
+ '''
+ Update the cursor's image
+
+ elapsedTime:
+ The time passed since the previous update
+ '''
+ self._animationOffset += elapsedTime
+
+ if self._animationOffset > self.durations[self._imagePointer]:
+ #New animation offset is computed first, before updating the pointer
+ self._animationOffset -= self.durations[self._imagePointer]
+ #point to the next image (restarts from the beginning when it reaches the end)
+ self._imagePointer = (self._imagePointer + 1) % len(self.images)
+
+ if self.flashing:
+ self.image = pygame.image.load(self.flashImagePath).convert_alpha()
+ else :
+ self.image = pygame.image.load(self.images[self._imagePointer]).convert_alpha()
+
+ def flash(self,flashLength = None):
+ self._flashTimer = 0
+ self.flashing = True
+ if flashLength:
+ self.flashlength = flashLength
+
+ def blit(self,surface):
+ '''
+ Draw the circle on surface
+ '''
+
+ newPos = (self.centerPosition[0] - self.image.get_width() / 2, self.centerPosition[1] - self.image.get_height() / 2)
+ surface.blit(self.image, newPos)