Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/api/Sprite.py
blob: 4fb97d313dc3d47fb8d45627eabdc643bf060f0b (plain)
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
#!/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):

    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)

    def setPosition(self, position):
        self.mPos.setVec(position)

    def setPosTuple(self, position):
        self.mPos.setXY(position[0], position[1])

    def setVelXY(self, aVelX, aVelY):
        self.mVel.setXY(aVelX, aVelY)
        self.mVel.truncate(self.maxSpeed)
        
    def setVelVec(self, aVec):
        self.mVel.setVec(aVec)
        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 mouseDown(self):
        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):
        return self.mclicked
        
    def distanceTo(self, point):
        return distVec(self.mPos, point)
   
    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])

    def destroy(self):
        self.image = None