from threading import Timer import time import config class PlayerState: def __init__(self, display, specialDisplay, id, ballsToPlay, upperPlayfieldTime = 5, bonusTime = 0): self.display = display self.specialDisplay = specialDisplay self.id = id self.points = 0 self.ballsLeft = ballsToPlay self.bonusTime = config.BEGINNING_BONUS_TIME self.reset() def reset(self): self.bonus = 0 self.bonusMultiplier = 1 self.timer = None self.timerStartTime = None self.replayBall = False self.upperPlayfieldTime = config.BEGINNING_UPPER_PLAYFIELD_TIME self.resetTargets() def resetTargets(self): self.resetRedSpecial() self.resetOrangeSpecial() self.tunnelLit = 0 def resetRedSpecial(self): self.redSpecial = 0 self.redSpecialLit = False def resetOrangeSpecial(self): self.orangeSpecialLeft = False self.orangeSpecialRight = False self.orangeSpecialLit = False def advanceRightOrangeSpecial(self): self.orangeSpecialRight = True self.setOrangeSpecialLit() def advanceLeftOrangeSpecial(self): self.orangeSpecialLeft = True self.setOrangeSpecialLit() def setOrangeSpecialLit(self): if config.ORANGE_SPECIAL_BANK_OPTIONS == config.ORANGE_SPECIAL_BANK_OPTIONS.ONE: self.orangeSpecialLit = self.orangeSpecialRight or self.orangeSpecialLeft elif config.ORANGE_SPECIAL_BANK == config.ORANGE_SPECIAL_BANK_OPTIONS.BOTH: self.orangeSpecialLit = self.orangeSpecialRight and self.orangeSpecialLeft def advanceRedSpecial(self): self.redSpecial += 1 if(self.redSpecial == config.RED_SPECIAL_TIMES): self.redSpecialLit = True def advanceBonusMultiplier(self): if self.bonusMultiplier >= 15: return if self.bonusMultiplier == 1: self.bonusMultiplier = 5 return self.bonusMultiplier *= 2 def setReplayBall(self): self.replayBall = True def addPoints(self, points): self.points += points self.display.printScore(self.points) def addBall(self): self.ballsLeft += 1 self.specialDisplay.printBallsToPlay(self.ballsLeft) def removeBall(self): if self.ballsLeft == 0: return self.ballsLeft -= 1 self.specialDisplay.printBallsToPlay(self.ballsLeft) def addUpperPlayfieldTime(self, time): self.upperPlayfieldTime += time def __setUpperPlayfieldTime(self, time): self.upperPlayfieldTime = time def startUpperPlayfieldTimer(self): self.timerStartTime = time.time() self.timer = Timer(self.upperPlayfieldTime, self.stopUpperPlayfieldTimer) def stopUpperPlayfieldTimer(self): if not self.timer: return self.timer.cancel() elapsedTime = time.time() - self.timerStartTime timeLeft = self.upperPlayfieldTime - elapsedTime self.__setUpperPlayfieldTime(timeLeft) def addBonusTimeSecond(self): self.bonusTime += 1