Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/api/Sprite.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/Sprite.py')
-rw-r--r--src/api/Sprite.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/api/Sprite.py b/src/api/Sprite.py
new file mode 100644
index 0000000..b8c9e42
--- /dev/null
+++ b/src/api/Sprite.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import pygame
+import Image
+from api.Vector import CVector
+from api.Math import distVec
+
+from Mouse import CMouse
+
+class CSprite(pygame.sprite.Sprite):
+ """ An enhanced Sprite class
+ expects a gameEngine.Scene class as its one parameter
+ Use methods to change image, direction, speed
+ Will automatically travel in direction and speed indicated
+ """
+
+ def __init__(self, x = 0, y = 0):
+ pygame.sprite.Sprite.__init__(self)
+
+ self.mPos = CVector(x, y)
+ self.mVel = CVector(0, 0)
+
+ self.mOffsetX = 0
+ self.mOffsetY = 0
+
+ self.maxSpeed = 50
+
+ self.mactive = False
+ self.mclicked = False
+
+ self.image = pygame.surface.Surface((0, 0), 0)
+ self.rect = self.image.get_rect()
+
+ def setRegistrationPointOffset(self, aOffsetX, aOffsetY):
+ self.mOffsetX = aOffsetX
+ self.mOffsetY = aOffsetY
+
+ def setXY(self, aX, aY):
+ self.mPos.setXY(aX, aY)
+ self.calculatePositionWithOffset()
+
+ def setVelXY(self, aVelX, aVelY):
+ self.mVel.setXY(aVelX, aVelY)
+ self.mVel.truncate(self.maxSpeed)
+
+ def setVelVec(self, aVec):
+ self.mVel.setXY(aVec.getX(), aVec.getY())
+ self.mVel.truncate(self.maxSpeed)
+
+ def setMaxSpeed(self, aMaxSpeed):
+ self.maxSpeed = aMaxSpeed
+
+ def update(self):
+
+ self.mPos.add(self.mVel)
+
+ self.calculatePositionWithOffset()
+
+ self.mclicked = False
+
+ if CMouse().firstPress():
+ if self.rect.collidepoint(CMouse().getPos()):
+ self.mactive = True
+
+ if self.mactive:
+ if CMouse().release():
+ self.mactive = False
+ if self.rect.collidepoint(CMouse().getPos()):
+ self.mclicked = True
+
+ def loadImage(self, aImageFilename, aIsTransparent=True):
+ self.setImage(Image.loadImage(aImageFilename, aIsTransparent))
+
+ def setImage(self, aImage):
+ self.image = aImage
+ self.rect = self.image.get_rect()
+ self.calculatePositionWithOffset()
+
+ def setPosition(self, position):
+ """ place the sprite directly at the given position
+ expects an vector
+ """
+ self.mPos.setVec(position)
+
+ def setPosTuple(self, position):
+ """ place the sprite directly at the given position
+ expects an (x, y) tuple
+ """
+ self.mPos.setXY(position[0], position[1])
+
+ def mouseDown(self):
+ """ boolean function. Returns True if the mouse is
+ clicked over the sprite, False otherwise
+ """
+ self.pressed = False
+ if CMouse().pressed():
+ if self.rect.collidepoint(CMouse().getPos()):
+ self.pressed = True
+ return self.pressed
+
+ def mouseOver(self):
+ if not CMouse().pressed():
+ if self.rect.collidepoint(CMouse().getPos()):
+ return True
+ else:
+ return False
+ else:
+ return False
+
+ def clicked(self):
+ """ Boolean function. Returns True only if mouse
+ is pressed and released over sprite
+ """
+ return self.mclicked
+
+ def distanceTo(self, point):
+ """ returns distance to any point in pixels
+ can be used in circular collision detection
+ """
+ return distVec(self.mPos, point)
+
+ def destroy(self):
+ self.image = None
+
+ def calculatePositionWithOffset(self):
+ self.rect.x = self.mPos.getX() - self.mOffsetX
+ self.rect.y = self.mPos.getY() - self.mOffsetY
+
+ def getX(self):
+ return self.mPos.getX()
+
+ def getY(self):
+ return self.mPos.getY()
+
+ def getSize(self):
+ return (self.rect[2], self.rect[3])
+