Files
flippr-game/PlayerState.py
Jonas Zeunert c54ab2e311 Very much done
2021-03-07 10:51:24 +01:00

113 lines
3.1 KiB
Python

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