1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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])
|