# -*- coding: utf-8 -*- from api.Sprite2 import CSprite import api.Image as Image from api.Anim import CAnim from api.Mouse import * from api.Vector import * import api.Math as Math class CBoyHall(CSprite): mState = None mParent = None MIN_DISTANCE = 40 TIME_RETURN = 15 TIME_ADJUST = 8 RADIUS_COLLISION = 40 NUM_FRAMES_WALKING = 3 DELAY_FRAMES_WALKING = 3 mAnim = None STATE_STALE = 0 STATE_WALKING = 1 STATE_TALKING = 2 mFrameImage = [] # Canvas size: 299x600. # Define registration point. OFFSET_X = 150 OFFSET_Y = 300 STEP1 = None STEP2 = None STEP3 = None STEP4 = None STEP5 = None STEP6 = None # Destination point of walking. mDestX = 0 mDestY = 0 mLastSense = 1 def __init__(self): CSprite.__init__(self) self.STEP1 = Image.loadImage('assets/images/hall/Juan-chico-costado-izq.png') self.STEP2 = Image.loadImage('assets/images/hall/Juan-chico-costado-parado.png') self.STEP3 = Image.loadImage('assets/images/hall/Juan-chico-costado-der.png') self.mFrameImage.append(self.STEP1) self.mFrameImage.append(self.STEP2) self.mFrameImage.append(self.STEP3) self.STEP4 = pygame.transform.flip(self.STEP1, True, False) self.STEP5 = pygame.transform.flip(self.STEP2, True, False) self.STEP6 = pygame.transform.flip(self.STEP3, True, False) self.mFrameImage.append(self.STEP4) self.mFrameImage.append(self.STEP5) self.mFrameImage.append(self.STEP6) self.setImage(self.mFrameImage[1]) self.mAnim = CAnim(self.NUM_FRAMES_WALKING, self.DELAY_FRAMES_WALKING, True) self.setRegistrationPointOffset(self.OFFSET_X, self.OFFSET_Y) self.setXY(200, 500) #self.setMaxVel(100, 100) self.mDestX = 0 self.mDestY = 500 self.setState(self.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) self.mAnim.update() if (self.mState == self.STATE_WALKING): # Check if arrives to destination point. if (Math.dist(self.getX(), self.getY(), self.mDestX, self.mDestY) < 5): self.setXY(self.mDestX, self.mDestY) self.setState(self.STATE_STALE) return # If a click is made, change the destination point. if CMouse().firstPress(): self.setState(self.STATE_WALKING) return if (self.mAnim.frameHasChanged()): self.setImage(self.mFrameImage[self.mAnim.getCurrentFrame()]) elif (self.mState == self.STATE_STALE): if CMouse().firstPress(): self.setState(self.STATE_WALKING) return def render(self): print("render") pass def destroy(self): pass #TODO: Eliminar la imagen creada. def setState(self, aState): self.setTimeState(0) if (aState == self.STATE_STALE): self.setVelXY(0, 0) if self.mLastSense == 0: self.setImage(self.mFrameImage[4]) else: self.setImage(self.mFrameImage[1]) self.mAnim.init(1, 3, False) print 'set stale' elif (aState == self.STATE_WALKING): x = int(CMouse().getX()) #y = int(CMouse().getY()) self.mDestX = x #self.mDestY = y x = self.mDestX - self.getX() #y = self.mDestY - self.getY() vec = CVector(x, 0) vec.normalize() vec.mul(5) self.setVelVec(vec) if x < 0: self.setImage(self.mFrameImage[3]) self.mAnim.init(6, 3, True, 3) self.mLastSense = 0 else: self.setImage(self.mFrameImage[0]) self.mAnim.init(3, 3, True, 0) self.mLastSense = 1 print 'set walk' self.mState = aState def getState(self): return self.mState