# -*- coding: utf-8 -*- import pygame import api.Sprite from api.Sprite import CSprite from api.Vector import CVector import api.Game from api.Game import CGame import states.GameState from states.GameState import CGameState import api.Button from api.Button import CButton import api.Image as Image import api.Vector from api.Vector import CVector import MenuState from MenuState import * import api.Mouse as Mouse import api.Math as Math import api.Label from api.Label import CLabel from gettext import gettext as _ STATE_STALE = 0 STATE_DRAG = 1 STATE_ADJUST = 2 STATE_RETURN = 3 STATE_OK = 4 #Piece class hereda de CSprite class Piece(CSprite): mState = None mParent = None MIN_DISTANCE = 40 TIME_RETURN = 15 TIME_ADJUST = 8 RADIUS_COLLISION = 40 #mPos = CVector(0.0, 0.0) mOrigin = CVector(0.0, 0.0) mDest = CVector(0.0, 0.0) #center = (0.0, 0.0) #size = (0.0, 0.0) def init(self): CButton.__init__(self) self.setMaxVel(100, 100) self.setState(STATE_STALE) def set_parent(self, aParent): self.mParent = aParent #image = .... def set_origin(self, aOrigin): self.mOrigin = aOrigin #self.mPos = self.setXY(aOrigin.getX(), aOrigin.getY()) def set_destine(self, aDestine): self.mDest = aDestine def update(self): CSprite.update(self) if (self.mState == STATE_STALE): if self.mouseDown(): self.setState(STATE_DRAG) return if (self.mState == STATE_DRAG): x, y = Mouse.get_position() self.setXY(x, y) if self.clicked(): d = Math.dist(self.mPos.getX() , self.mPos.getY(), self.mDest.getX(), self.mDest.getY()) #print 'drag-dist:', d #self.d2 = d / 2 #print 'pos', self.mPos.getX() #print 'dest', self.mDest.getX() if (d < self.MIN_DISTANCE): self.setState(STATE_ADJUST) else: print 'set return' self.setState(STATE_RETURN) if (self.mState == STATE_ADJUST): if (Math.dist(self.mPos.getX() , self.mPos.getY(), self.mDest.getX(), self.mDest.getY()) < self.RADIUS_COLLISION): #self.mParent.mOption1.set_bgColor((0x19, 0x1C, 0xC0)) #self.mParent.mOption1.set_fgColor((0xE2, 0x1F, 0x1F)) CGame().addChild(self.mParent.mOption1) self.setState(STATE_OK) if (self.mState == STATE_RETURN): dist = Math.dist(self.mPos.getX() , self.mPos.getY(), self.mOrigin.getX(), self.mOrigin.getY()) if (dist < self.RADIUS_COLLISION): #play(Sonido mal) self.setState(STATE_STALE) #else: # if (dist < self.d2): # self.setState(STATE_RETURN) if (self.mState == STATE_OK): return def render(self): pass def destroy(self): pass #eliminar la imagen creada def setState(self, aState): if (aState == STATE_STALE): o = CVector(self.mOrigin.getX(), self.mOrigin.getY()) self.setPosition(o) #self.setXY(100, 200) self.mVel = CVector(0.0, 0.0) if (aState == STATE_DRAG): self.mVel = CVector(0.0, 0.0) if (aState == STATE_ADJUST): self.setVelXY((self.mDest.getX() - self.mPos.getX()) / self.TIME_ADJUST, (self.mDest.getY() - self.mPos.getY()) / self.TIME_ADJUST) if (aState == STATE_RETURN): #print 'estado retorno' #print 'pos', self.mPos.getX(), self.mPos.getY() #print 'orig', self.mOrigin.getX(), self.mOrigin.getY() #x = int((self.mOrigin.getX() - self.mPos.getX()) / self.TIME_ADJUST) #y = int((self.mOrigin.getY() - self.mPos.getY()) / self.TIME_ADJUST) #print 'vel', x, y #self.setVelXY(x, y) x = ((self.mOrigin.getX() - self.mPos.getX())) y = ((self.mOrigin.getY() - self.mPos.getY())) vec = CVector(x, y) vec.normalize() dist = Math.dist(self.mOrigin.getX(), self.mOrigin.getY(), self.mPos.getX(), self.mPos.getY()) vec.mul(dist/self.TIME_ADJUST) print 'vel', x, y self.setVelXY(vec.x, vec.y) if (aState == STATE_OK): self.setPosition(self.mDest) self.mVel = CVector(0.0, 0.0) #play(Sonido OK) self.mState = aState def getState(self): return mState class CArea1Game1(CGameState): mBackground = None mInstructions = None #mX = 10 mButtonPlay = None #def __init__(self): # ''' # Constructor # ''' def init(self): CGameState.init(self) #self.mInstructions = CMultiLabel() #CGame().addChild(self.mInstructions) #print self.mX self.mButtonBack = CButton() #TODO: Create a function to create image. self.mButtonBack.set_bgColor((0x99, 0x99, 0x66)) self.mButtonBack.font = pygame.font.Font('assets/fonts/fipps.ttf', 20) self.mButtonBack.set_center((110, 650)) self.mButtonBack.set_size((200, 40)) self.mButtonBack.set_text(_('Volver')) CGame().addChild(self.mButtonBack) self.mBackground = Image.loadImage('assets/images/a1game1.png', False) CGame().setBackground(self.mBackground) self.mPiece1 = Piece() self.mPiece1.set_parent(self) self.mPiece1.setImage('assets/images/piece1.png', False) self.mPiece1.set_origin(CVector(824.0, 693.0)) self.mPiece1.set_destine(CVector(487.0, 169.0)) self.mPiece1.setState(STATE_STALE) #self.mPiece1.setXY(700, 200) CGame().addChild(self.mPiece1) self.mOption1 = CSprite() self.mOption1.setXY(124, 145) self.mOption1.setImage('assets/images/option1.png', False) self.mOption1.update() #CGame().addChild(self.mOption1) def update(self): #print "menu update" CGameState.update(self) if self.mButtonBack.clicked(): print "clicked clicked back of a1g1" #cs = CHelpState() ms = MenuState.CMenuState() CGame().setState(ms) #def render(self): # CGameState.render(self) # print "CMenuState render" def destroy(self): CGameState.destroy(self) #self.mInstructions.destroy() self.mInstructions = None CGame().removeChild(self.mButtonBack) CGame().removeChild(self.mPiece1) CGame().removeChild(self.mOption1) #self.mButtonPlay.destroy() self.mButtonBack = None self.mBackground = None self.mPiece1 = None self.mOption1 = None print "CArea1Game1 destroy" def doEvents(self, aEvent): print aEvent.type