# -*- coding: utf-8 -*- import pygame import SelectAreaState from api.GameState import CGameState from api.Game import CGame import api.Image as CImage from api.Sprite import CSprite import api.Image as Image from api.Mouse import CMouse import api.Math as CMath from BoyHall import CBoyHall from Area1Game1 import CArea1Game1 from Area1Game3 import CArea1Game3 from Area1Game4 import CArea1Game4 from Area1Game5 import CArea1Game5 from Area1Game6 import CArea1Game6 DOOR_LEFT = 430 DOOR_RIGHT = 750 MIDDLE = 590 class CHallState(CGameState): def init(self): CGameState.init(self) self.mBackground = None self.mBackgroundList = [] self.mInstructions = None self.mButtonBack = None self.mBsetted = False self.mNsetted = True self.mBLsetted = False self.mSLsetted = True self.mBRsetted = False self.mSRsetted = True self.mPlayer = None self.mtext = None self.mGo = None self.AREA1_POLYGON = [(424,90), (764,90), (764, 700), (424,700)] self.mAreaStates = [] self.mCurrentSelectedArea = 0 self.mBackImageN = Image.loadImage('assets/images/back.png') self.mBackImageB = Image.loadImage('assets/images/back_big.png') self.mButtonBack = CSprite(1170, 30) self.mButtonBack.setRegistrationPointOffset(22, 22) self.mButtonBack.setImage(self.mBackImageN) CGame().addChild(self.mButtonBack) for i in range(1, 7): path = 'assets/images/hall/A1-Pasillo-' + str(i) + '.jpg' img = CImage.loadImage(path, False) self.mBackgroundList.append(img) self.mDoor = CSprite(400, 50) self.mFrameImageDoor = Image.loadImage('assets/images/hall/highlight_door.png') self.mDoor.setImage(self.mFrameImageDoor) self.mStar1 = Image.loadImage('assets/images/hall/star1.png') self.mStar2 = Image.loadImage('assets/images/hall/star2.png') self.mSmallLeftArrow = Image.loadImage('assets/images/hall/left_small.png') self.mBigLeftArrow = Image.loadImage('assets/images/hall/left_big.png') self.mSmallRightArrow = pygame.transform.flip(self.mSmallLeftArrow, True, False) self.mBigRightArrow = pygame.transform.flip(self.mBigLeftArrow, True, False) self.mLeftArrow = CSprite(75, 422) self.mLeftArrow.setRegistrationPointOffset(55, 23) self.mLeftArrow.setImage(self.mSmallLeftArrow) CGame().addChild(self.mLeftArrow) self.mRightArrow = CSprite(1125, 422) self.mRightArrow.setRegistrationPointOffset(55, 23) self.mRightArrow.setImage(self.mSmallRightArrow) CGame().addChild(self.mRightArrow) number = CGame().getCurrentPartida() #TODO: remove from here? par = CGame().getPartida(number) character = par.getCharacter() self.mPlayer = CBoyHall(character) CGame().addChild(self.mPlayer, 1) #TODO no solo area 1 a1 = par.getArea(1) for i in range(6): s = CSprite(730, 40) if a1[i] == 0: s.setImage(self.mStar1) else: s.setImage(self.mStar2) self.mAreaStates.append(s) def setCurrentGame(self, n): self.mCurrentSelectedArea = n CGame().setBackground(self.mBackgroundList[self.mCurrentSelectedArea]) CGame().addChild(self.mAreaStates[self.mCurrentSelectedArea]) def update(self): CGameState.update(self) if self.mButtonBack.mouseOver(): if not(self.mBsetted): self.mBsetted = True self.mNsetted = False self.mButtonBack.setRegistrationPointOffset(27, 27) self.mButtonBack.setImage(self.mBackImageB) else: if not(self.mNsetted): self.mBsetted = False self.mNSetted = True self.mButtonBack.setRegistrationPointOffset(22, 22) self.mButtonBack.setImage(self.mBackImageN) if self.mLeftArrow.mouseOver(): if not(self.mBLsetted): self.mBLsetted = True self.mSLsetted = False self.mLeftArrow.setRegistrationPointOffset(65, 27) self.mLeftArrow.setImage(self.mBigLeftArrow) else: if not(self.mSLsetted): self.mBLsetted = False self.mSLsetted = True self.mLeftArrow.setRegistrationPointOffset(55, 23) self.mLeftArrow.setImage(self.mSmallLeftArrow) if self.mRightArrow.mouseOver(): if not(self.mBRsetted): self.mBRsetted = True self.mSRsetted = False self.mRightArrow.setRegistrationPointOffset(65, 27) self.mRightArrow.setImage(self.mBigRightArrow) else: if not(self.mSRsetted): self.mBRsetted = False self.mSRsetted = True self.mRightArrow.setRegistrationPointOffset(55, 23) self.mRightArrow.setImage(self.mSmallRightArrow) if self.mButtonBack.clicked(): cs = SelectAreaState.CSelectAreaState() CGame().setState(cs) return elif self.mLeftArrow.clicked(): CGame().removeChild(self.mAreaStates[self.mCurrentSelectedArea]) self.mCurrentSelectedArea = self.mCurrentSelectedArea - 1 if self.mCurrentSelectedArea < 0: self.mCurrentSelectedArea = 5 #self.mPlayer.setVelXY(-20, 0) self.mPlayer.setXY(1000, 500) CGame().setBackground(self.mBackgroundList[self.mCurrentSelectedArea]) self.mPlayer.mDestX = 1000 self.mPlayer.mAnim.init(6, 3, True, 3) self.mPlayer.mLastSense = 0 self.mPlayer.setVelXY(-5, 0) self.mPlayer.setXY(1400, 500) CGame().addChild(self.mAreaStates[self.mCurrentSelectedArea]) return elif self.mRightArrow.clicked(): CGame().removeChild(self.mAreaStates[self.mCurrentSelectedArea]) self.mCurrentSelectedArea = self.mCurrentSelectedArea + 1 if self.mCurrentSelectedArea > 5: self.mCurrentSelectedArea = 0 #self.mPlayer.setVelXY(20, 0) self.mPlayer.setXY(200, 500) CGame().setBackground(self.mBackgroundList[self.mCurrentSelectedArea]) self.mPlayer.mDestX = 200 self.mPlayer.mAnim.init(3, 3, True, 0) self.mPlayer.mLastSense = 1 self.mPlayer.setVelXY(5, 0) self.mPlayer.setXY(-200, 500) CGame().addChild(self.mAreaStates[self.mCurrentSelectedArea]) return if (CMath.pointInsidePolygon(CMouse().getX(), CMouse().getY(), self.AREA1_POLYGON)): CGame().addChild(self.mDoor) if (CMouse().release()): x = CMouse().getX() - self.mPlayer.getX() self.mPlayer.mDestX = MIDDLE if x < 0: self.mPlayer.setImage(self.mPlayer.mFrameImage[3]) self.mPlayer.mAnim.init(6, 5, True, 3) self.mPlayer.mLastSense = 0 else: self.mPlayer.setImage(self.mPlayer.mFrameImage[0]) self.mPlayer.mAnim.init(3, 5, True, 0) self.mPlayer.mLastSense = 1 self.mGo = self.mCurrentSelectedArea else: CGame().removeChild(self.mDoor) if self.mGo is not None: x = self.mPlayer.getX() if (x > DOOR_LEFT) and (x < DOOR_RIGHT): if self.mGo == 0: area = CArea1Game1() CGame().setState(area) elif self.mGo == 1: self.mGo = None elif self.mGo == 2: area = CArea1Game3() CGame().setState(area) elif self.mGo == 3: area = CArea1Game4() CGame().setState(area) elif self.mGo == 4: area = CArea1Game5() CGame().setState(area) elif self.mGo == 5: area = CArea1Game6() CGame().setState(area) def destroy(self): CGameState.destroy(self) CGame().removeChild(self.mButtonBack) self.mButtonBack = None CGame().removeChild(self.mDoor) #self.mDoor.destroy() self.mDoor = None CGame().removeChild(self.mLeftArrow) self.mLeftArrow.destroy() self.mLeftArrow = None CGame().removeChild(self.mRightArrow) self.mRightArrow.destroy() self.mRightArrow = None CGame().removeChild(self.mPlayer) self.mPlayer.destroy() self.mPlayer = None for e in self.mAreaStates: CGame().removeChild(e) self.mStar1 = None self.mStar2 = None self.mBackground = None