From 0c2096a9339a7c35ccea2aec3ce4f1876240b6b8 Mon Sep 17 00:00:00 2001 From: Alan Aguiar Date: Thu, 22 Aug 2013 03:50:45 +0000 Subject: simplify CSprite in new CSPrite2 --- (limited to 'src') diff --git a/src/api/Game.py b/src/api/Game.py index f4dcaaf..37d0873 100755 --- a/src/api/Game.py +++ b/src/api/Game.py @@ -11,11 +11,7 @@ from pygame.locals import * import api.SuperSprite from SuperSprite import CSuperSprite -import api.Sprite -from api.Sprite import CSprite - - - +from api.Sprite2 import CSprite from api.Mouse import CMouse from gettext import gettext as _ diff --git a/src/api/Globe.py b/src/api/Globe.py index e57931f..6c84b80 100644 --- a/src/api/Globe.py +++ b/src/api/Globe.py @@ -2,7 +2,7 @@ import pygame import Image -from api.Sprite import CSprite +from api.Sprite2 import CSprite path = 'assets/images/dialog/' diff --git a/src/api/Points.py b/src/api/Points.py index 2424709..872b0cb 100755 --- a/src/api/Points.py +++ b/src/api/Points.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import pygame -from api.Sprite import CSprite +from api.Sprite2 import CSprite class CPoints(CSprite): diff --git a/src/api/Sprite.py b/src/api/Sprite.py index 881ecdd..3829225 100755 --- a/src/api/Sprite.py +++ b/src/api/Sprite.py @@ -16,7 +16,7 @@ from Mouse import * # TODO: This class is a rotating sprite. update() in each frame rotates the sprite # image, so this is inneficient for sprites that does not rotate continuoulsy. -class CSprite(pygame.sprite.Sprite): +class CSpriteOLD(pygame.sprite.Sprite): # TODO: Como defino aca los vectores ? @@ -635,4 +635,4 @@ class CSprite(pygame.sprite.Sprite): rect = self.image.get_rect() return (rect[2], rect[3]) else: - return (0,0) \ No newline at end of file + return (0,0) diff --git a/src/api/Sprite2.py b/src/api/Sprite2.py new file mode 100755 index 0000000..edc02a3 --- /dev/null +++ b/src/api/Sprite2.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import pygame +import math +import Image +import api.Math as CMath +import api.Vector +from api.Vector import CVector + +from Mouse import * + +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 + """ + + mPos = None + + mOffsetX = 0 + mOffsetY = 0 + + def __init__(self): + pygame.sprite.Sprite.__init__(self) + + self.mPos = CVector(0.0, 0.0) + self.mVel = CVector(0.0, 0.0) + + # Registration point offset. + self.mOffsetX = 0 + self.mOffsetY = 0 + + # Speed of the sprite. + self.mSpeed = 0 + + self.maxSpeed = 50 + self.minSpeed = -3 + + self.mactive = False + self.mclicked = False + + self.font = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 30) + self.mImageMaster = self.font.render(">sprite>", True, (0,0,0), (0xFF, 0xFF, 0xFF)) + + # Set the image of the sprite. + self.image = self.mImageMaster.copy() + + self.update() + + 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()): + #print("first press in button") + self.mactive = True + + #check for mouse release + if self.mactive == True: + if CMouse().release(): + self.mactive = False + if self.rect.collidepoint(CMouse().getPos()): + #print("release in button") + self.mclicked = True + + def setSpeed(self, speed): + """ immediately sets the objects speed to the + given value. + """ + self.mSpeed = speed + + def speedUp(self, amount): + """ changes speed by the given amount + Use a negative value to slow down + """ + self.mSpeed += amount + if self.mSpeed < self.minSpeed: + self.mSpeed = self.minSpeed + if self.mSpeed > self.maxSpeed: + self.mSpeed = self.maxSpeed + + def loadImage(self, aImageFilename, aIsTransparent=True): + self.mImageMaster = Image.loadImage(aImageFilename, aIsTransparent) + self.setImage(self.mImageMaster) + + def setImage(self, aImage): + self.mImageMaster = 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 (x, y) tuple + """ + self.mPos.setX(position.getX()) + self.mPos.setY(position.getY()) + + def setSpeedLimits(self, max, min): + """ determines maximum and minimum + speeds you will allow through + speedUp() method. You can still + directly set any speed you want + with setSpeed() Default values: + max: 10 + min: -3 + """ + self.maxSpeed = max + self.minSpeed = min + + def dataTrace(self): + """ utility method for debugging + print major properties + extend to add your own properties + """ + print "x: %d, y: %d, speed: %.2f, dx: %.2f, dy: %.2f" % \ + (self.mPos.x, self.mPos.y, self.mSpeed, self.mAngle, self.dx, self.dy) + + 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 + """ + (pointx, pointy) = point + dx = self.mPos.x - pointx + dy = self.mPos.y - pointy + + dist = math.sqrt((dx * dx) + (dy * dy)) + return dist + + def destroy(self): + self.font = None + self.mImageMaster = None + self.image = None + + def calculatePositionWithOffset(self): + self.rect = self.image.get_rect() + 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): + if self.image: + rect = self.image.get_rect() + return (rect[2], rect[3]) + else: + return (0,0) + diff --git a/src/game/Area1Game1.py b/src/game/Area1Game1.py index 9db176a..726e3a0 100644 --- a/src/game/Area1Game1.py +++ b/src/game/Area1Game1.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import pygame -from api.Sprite import CSprite +from api.Sprite2 import CSprite from api.Button import CButton from api.Points import CPoints from api.Label import CLabel @@ -34,6 +34,7 @@ class Piece(CSprite): RADIUS_COLLISION = 50 + mState = None def __init__(self, aParent, aNum, aOrigin, aDestine): CSprite.__init__(self) @@ -86,8 +87,6 @@ class Piece(CSprite): elif (self.mState == STATE_OK): pass - - def setState(self, aState): if (aState == STATE_STALE): diff --git a/src/game/Area1Game3.py b/src/game/Area1Game3.py index fdbea29..ad969ab 100644 --- a/src/game/Area1Game3.py +++ b/src/game/Area1Game3.py @@ -7,7 +7,7 @@ import api.Image as Image from api.Game import CGame from api.GameState import CGameState from api.Button import CButton -from api.Sprite import CSprite +from api.Sprite2 import CSprite from api.Label import CLabel from api.MultiLabel import CMultiLabel from api.Points import CPoints diff --git a/src/game/Area1Game4.py b/src/game/Area1Game4.py index 1ea901e..30f8970 100644 --- a/src/game/Area1Game4.py +++ b/src/game/Area1Game4.py @@ -7,7 +7,7 @@ import api.Image as Image from api.Game import CGame from api.GameState import CGameState from api.Button import CButton -from api.Sprite import CSprite +from api.Sprite2 import CSprite from api.Label import CLabel from api.MultiLabel import CMultiLabel from api.Points import CPoints @@ -149,6 +149,8 @@ class CArea1Game4(CGameState): CGame().removeChild(self.mLabelQuestion) CGame().removeChild(self.mPoints) CGame().removeChild(self.mBook) + CGame().removeChild(self.mGoodSprite) + CGame().removeChild(self.mBadSprite) self.mButtonBackA1G4 = None self.mBackground = None self.mLabelDefinition = None diff --git a/src/game/Area1Game6.py b/src/game/Area1Game6.py index 4a211b6..5af4769 100644 --- a/src/game/Area1Game6.py +++ b/src/game/Area1Game6.py @@ -3,7 +3,7 @@ import os import sys import pygame -from api.Sprite import CSprite +from api.Sprite2 import CSprite from api.Button import CButton from api.Points import CPoints from api.MultiLabel import CMultiLabel @@ -51,6 +51,7 @@ class Piece(CSprite): RADIUS_COLLISION = 40 + mState = None def __init__(self, aParent, aNum, aOrigin, aDestine): CSprite.__init__(self) @@ -87,7 +88,6 @@ class Piece(CSprite): self.setState(STATE_RETURN) self.mParent.mActivePiece = None - elif (self.mState == STATE_ADJUST): if (CMath.dist(self.mPos.getX() , self.mPos.getY(), self.mDest.getX(), self.mDest.getY()) < self.RADIUS_COLLISION): @@ -108,15 +108,6 @@ class Piece(CSprite): pass - def render(self): - pass - - - def destroy(self): - pass - #eliminar la imagen creada - - def setState(self, aState): if (aState == STATE_STALE): @@ -137,13 +128,11 @@ class Piece(CSprite): vec.mul(dist/self.TIME_ADJUST) self.setVelXY(vec.getX(), vec.getY()) - if (aState == STATE_OK): self.setPosition(self.mDest) self.mVel = CVector(0.0, 0.0) #play(Sonido OK) - self.mState = aState def getState(self): diff --git a/src/game/Area2Game2.py b/src/game/Area2Game2.py index d5d2577..ef33b04 100644 --- a/src/game/Area2Game2.py +++ b/src/game/Area2Game2.py @@ -7,7 +7,7 @@ import api.Image as Image from api.Game import CGame from api.GameState import CGameState from api.Button import CButton -from api.Sprite import CSprite +from api.Sprite2 import CSprite from api.Label import CLabel from api.MultiLabel import CMultiLabel from api.Points import CPoints diff --git a/src/game/BoyHall.py b/src/game/BoyHall.py index 7720909..295a6bb 100644 --- a/src/game/BoyHall.py +++ b/src/game/BoyHall.py @@ -1,15 +1,10 @@ -import api.Sprite -from api.Sprite import CSprite +# -*- coding: utf-8 -*- +from api.Sprite2 import CSprite import api.Image as Image - -import api.Anim from api.Anim import CAnim - from api.Mouse import * - from api.Vector import * - import api.Math as Math class CBoyHall(CSprite): diff --git a/src/game/HallState.py b/src/game/HallState.py index 4e1df7c..c7448f7 100644 --- a/src/game/HallState.py +++ b/src/game/HallState.py @@ -11,9 +11,7 @@ from api.Game import CGame import api.Button from api.Button import CButton import api.Image as CImage - -import api.Sprite -from api.Sprite import CSprite +from api.Sprite2 import CSprite import api.Image as Image diff --git a/src/game/PresentationState.py b/src/game/PresentationState.py index 040e689..e7eeadd 100644 --- a/src/game/PresentationState.py +++ b/src/game/PresentationState.py @@ -12,7 +12,7 @@ import api.Button from api.Button import CButton import game.CreditsState from CreditsState import * -from api.Sprite import CSprite +from api.Sprite2 import CSprite #import game.SelectAreaState #from SelectAreaState import * diff --git a/src/game/SelectAreaState.py b/src/game/SelectAreaState.py index 5bf3020..faaece1 100644 --- a/src/game/SelectAreaState.py +++ b/src/game/SelectAreaState.py @@ -11,9 +11,7 @@ from api.Game import CGame import api.Button from api.Button import CButton import api.Image as CImage - -import api.Sprite -from api.Sprite import CSprite +from api.Sprite2 import CSprite import api.Image as Image diff --git a/src/game/SelectCharacterState.py b/src/game/SelectCharacterState.py index bec0c14..eec97c5 100644 --- a/src/game/SelectCharacterState.py +++ b/src/game/SelectCharacterState.py @@ -9,7 +9,7 @@ from api.Label import CLabel import api.Game from api.Game import CGame from api.Button import CButton -from api.Sprite import CSprite +from api.Sprite2 import CSprite import api.Image as Image diff --git a/src/game/SelectPartidaState.py b/src/game/SelectPartidaState.py index fa4df3a..8164b7e 100644 --- a/src/game/SelectPartidaState.py +++ b/src/game/SelectPartidaState.py @@ -9,7 +9,7 @@ from api.Label import CLabel import api.Game from api.Game import CGame from api.Button import CButton -from api.Sprite import CSprite +from api.Sprite2 import CSprite from SelectCharacterState import CSelectCharacterState -- cgit v0.9.1