# -*- coding: utf-8 -*- import pygame from api.Sprite2 import CSprite import api.Image as Image from api.Anim import CAnim from api.Mouse import CMouse from api.Vector import CVector import api.Math as Math STATE_STALE = 0 STATE_WALKING = 1 STATE_TALKING = 2 class CBoyHall(CSprite): mTimeState = 0 mAnim = None mState = None def __init__(self, aCharacter='Juan'): CSprite.__init__(self) self.mCharacter = aCharacter self.mState = None self.mParent = None self.MIN_DISTANCE = 40 self.TIME_RETURN = 15 self.TIME_ADJUST = 8 self.RADIUS_COLLISION = 40 self.NUM_FRAMES_WALKING = 3 #a 30 fps self.DELAY_FRAMES_WALKING = 5 # Canvas size: 299x600 self.OFFSET_X = 150 self.OFFSET_Y = 300 self.mLastSense = 1 self.mTimeState = 0 if self.mCharacter == 'Juan': 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') else: self.STEP1 = Image.loadImage('assets/images/hall/Elisa-chica-costado-izq.png') self.STEP2 = Image.loadImage('assets/images/hall/Elisa-chica-costado-parada.png') self.STEP3 = Image.loadImage('assets/images/hall/Elisa-chica-costado-der.png') self.mFrameImage = [] 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.mDestX = 0 self.mDestY = 500 self.setState(STATE_STALE) def set_parent(self, aParent): self.mParent = aParent def set_origin(self, aOrigin): self.mOrigin = aOrigin self.setXY(aOrigin.getX(), aOrigin.getY()) def set_destine(self, aDestine): self.mDest = aDestine def setTimeState(self, aTimeState): self.mTimeState = aTimeState def getTimeState(self): return self.mTimeState def update(self): CSprite.update(self) self.mTimeState += 1 if self.mAnim: self.mAnim.update() if (self.mState == 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(STATE_STALE) return # If a click is made, change the destination point. if CMouse().firstPress(): self.setState(STATE_WALKING) return if (self.mAnim.frameHasChanged()): self.setImage(self.mFrameImage[self.mAnim.getCurrentFrame()]) elif (self.mState == STATE_STALE): if CMouse().firstPress(): self.setState(STATE_WALKING) return def setState(self, aState): self.setTimeState(0) if (aState == 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, self.DELAY_FRAMES_WALKING, False) elif (aState == STATE_WALKING): x = int(CMouse().getX()) self.mDestX = x x = self.mDestX - self.getX() vec = CVector(x, 0) vec.normalize() vec.mul(5) self.setVelVec(vec) if x < 0: self.setImage(self.mFrameImage[3]) self.mAnim.init(6, self.DELAY_FRAMES_WALKING, True, 3) self.mLastSense = 0 else: self.setImage(self.mFrameImage[0]) self.mAnim.init(3, self.DELAY_FRAMES_WALKING, True, 0) self.mLastSense = 1 self.mState = aState def getState(self): return self.mState