asdf
This commit is contained in:
164
PlayerState.py
164
PlayerState.py
@@ -1,42 +1,139 @@
|
||||
from threading import Timer
|
||||
from utils.RepeatTimer import RepeatTimer
|
||||
import time
|
||||
import random
|
||||
|
||||
import config
|
||||
|
||||
from lamps.Lamp import Lamp
|
||||
from lamps.LampGroup import CHAMP_LAMPS
|
||||
from lamps.LampGroup import UPPER_PLAYFIELD_TIME_LAMPS
|
||||
from lamps.LampGroup import BONUS_MULTIPLIER_LAMPS
|
||||
from lamps.LampGroup import BONUS_LAMPS
|
||||
|
||||
from events.LeaveUpperPlayfieldEvent import LeaveUpperPlayfieldEvent
|
||||
|
||||
class PlayerState:
|
||||
def __init__(self, display, specialDisplay, id, ballsToPlay, upperPlayfieldTime = 5, bonusTime = 0):
|
||||
display = None
|
||||
specialDisplay = None
|
||||
id = 0
|
||||
points = 0
|
||||
bonus = 0
|
||||
bonusMultiplier = 1
|
||||
ballsLeft = 0
|
||||
replayBall = False
|
||||
|
||||
redSpecial = 0
|
||||
redSpecialLit = False
|
||||
|
||||
orangeSpecialLeft = False
|
||||
orangeSpecialRight = False
|
||||
orangeSpecialLit = False
|
||||
|
||||
advanceTimeLeft = False
|
||||
advanceTimeRight = False
|
||||
timeAdvanceLeftTimer = None
|
||||
timeAdvanceRightTimer = None
|
||||
|
||||
upperPlayfieldTimer = None
|
||||
upperPlayfieldTime = 0
|
||||
|
||||
def __init__(self, display, specialDisplay, id, ballsToPlay):
|
||||
self.display = display
|
||||
self.specialDisplay = specialDisplay
|
||||
self.id = id
|
||||
self.points = 0
|
||||
self.ballsLeft = ballsToPlay
|
||||
|
||||
self.enableTiming()
|
||||
|
||||
self.bonusTime = config.BEGINNING_BONUS_TIME
|
||||
|
||||
self.reset()
|
||||
|
||||
def enableTiming(self):
|
||||
if config.BONUS_TIME_ALGORITHM == config.BONUS_TIME_ALGORITHM_OPTIONS.RANDOM:
|
||||
self.disableAdvanceTimeLeft()
|
||||
self.disableAdvanceTimeRight()
|
||||
self.timeAdvanceLeft()
|
||||
self.timeAdvanceRight()
|
||||
elif config.BONUS_TIME_ALGORITHM == config.BONUS_TIME_ALGORITHM_OPTIONS.ALWAYS:
|
||||
self.enableAdvanceTimeLeft()
|
||||
self.enableAdvanceTimeRight()
|
||||
|
||||
def timeAdvanceLeft(self):
|
||||
choiceList = [True] * config.BONUS_TIME_ACTIVATION_PROBABILITY * 100 \
|
||||
+ [False] * (1 - config.BONUS_TIME_ACTIVATION_PROBABILITY) * 100
|
||||
|
||||
if random.choice(choiceList):
|
||||
self.enableAdvanceTimeLeft()
|
||||
else:
|
||||
self.disableAdvanceTimeLeft()
|
||||
|
||||
activationTime = random.randrange(config.BONUS_TIME_MIN_RANDOM_TIME, config.BONUS_TIME_MAX_RANDOM_TIME)
|
||||
self.timeAdvanceLeftTimer = time.Timer(activationTime, self.timeAdvanceLeft)
|
||||
|
||||
def timeAdvanceLeft(self):
|
||||
choiceList = [True] * config.BONUS_TIME_ACTIVATION_PROBABILITY * 100 \
|
||||
+ [False] * (1 - config.BONUS_TIME_ACTIVATION_PROBABILITY) * 100
|
||||
|
||||
if random.choice(choiceList):
|
||||
self.enableAdvanceTimeRight()
|
||||
else:
|
||||
self.disableAdvanceTimeRight()
|
||||
|
||||
activationTime = random.randrange(config.BONUS_TIME_MIN_RANDOM_TIME, config.BONUS_TIME_MAX_RANDOM_TIME)
|
||||
self.timeAdvanceLeftTimer = time.Timer(activationTime, self.timeAdvanceRight)
|
||||
|
||||
def enableAdvanceTimeLeft(self):
|
||||
self.advanceTimeLeft = True
|
||||
Lamp("Left Advance Time").activate()
|
||||
|
||||
def disableAdvanceTimeLeft(self):
|
||||
self.advanceTimeLeft = False
|
||||
Lamp("Left Advance Time").deactivate()
|
||||
|
||||
def enableAdvanceTimeRight(self):
|
||||
self.advanceTimeRight = True
|
||||
Lamp("Right Advance Time").activate()
|
||||
|
||||
def disableAdvanceTimeRight(self):
|
||||
self.advanceTimeRight = False
|
||||
Lamp("Right Advance Time").deactivate()
|
||||
|
||||
def reset(self):
|
||||
self.bonus = 0
|
||||
self.bonusMultiplier = 1
|
||||
self.timer = None
|
||||
self.timerStartTime = None
|
||||
self.upperPlayfieldTimer = None
|
||||
self.replayBall = False
|
||||
self.upperPlayfieldTime = config.BEGINNING_UPPER_PLAYFIELD_TIME
|
||||
|
||||
self.resetBonus()
|
||||
self.resetTargets()
|
||||
|
||||
def resetBonus(self):
|
||||
self.bonus = 0
|
||||
self.bonusMultiplier = 1
|
||||
BONUS_LAMPS.deactivate()
|
||||
BONUS_MULTIPLIER_LAMPS.deactivate()
|
||||
|
||||
def resetTargets(self):
|
||||
self.resetRedSpecial()
|
||||
self.resetOrangeSpecial()
|
||||
self.tunnelLit = 0
|
||||
self.resetTunnel()
|
||||
|
||||
def resetRedSpecial(self):
|
||||
self.redSpecial = 0
|
||||
self.redSpecialLit = False
|
||||
Lamp("Special Red").deactivate()
|
||||
CHAMP_LAMPS.deactivate()
|
||||
|
||||
def resetOrangeSpecial(self):
|
||||
self.orangeSpecialLeft = False
|
||||
self.orangeSpecialRight = False
|
||||
self.orangeSpecialLit = False
|
||||
Lamp("Special Orange").deactivate()
|
||||
|
||||
def resetTunnel(self):
|
||||
self.tunnelLit = 0
|
||||
|
||||
def advanceRightOrangeSpecial(self):
|
||||
self.orangeSpecialRight = True
|
||||
@@ -52,22 +149,41 @@ class PlayerState:
|
||||
elif config.ORANGE_SPECIAL_BANK == config.ORANGE_SPECIAL_BANK_OPTIONS.BOTH:
|
||||
self.orangeSpecialLit = self.orangeSpecialRight and self.orangeSpecialLeft
|
||||
|
||||
if self.orangeSpecialLit:
|
||||
Lamp("Special Orange").activate()
|
||||
|
||||
|
||||
def advanceRedSpecial(self):
|
||||
self.redSpecial += 1
|
||||
CHAMP_LAMPS.activateNext()
|
||||
|
||||
if(self.redSpecial == config.RED_SPECIAL_TIMES):
|
||||
self.redSpecialLit = True
|
||||
Lamp("Special Red").activate()
|
||||
|
||||
def advanceTunnel(self):
|
||||
if self.tunnelLit <= 5:
|
||||
self.tunnelLit += 1
|
||||
|
||||
def advanceBonus(self):
|
||||
if self.bonus >= 20:
|
||||
return
|
||||
|
||||
self.bonus += 1
|
||||
BONUS_LAMPS.activateNext()
|
||||
|
||||
def advanceBonusMultiplier(self):
|
||||
if self.bonusMultiplier >= 15:
|
||||
return
|
||||
|
||||
if self.bonusMultiplier == 1:
|
||||
self.bonusMultiplier = 5
|
||||
return
|
||||
self.bonusMultiplier = 10
|
||||
elif self.bonusMultiplier == 10:
|
||||
self.bonusMultiplier = 20
|
||||
elif self.bonusMultiplier == 20:
|
||||
self.bonusMultiplier == 50
|
||||
|
||||
self.bonusMultiplier *= 2
|
||||
BONUS_MULTIPLIER_LAMPS.activateNext()
|
||||
|
||||
def setReplayBall(self):
|
||||
self.replayBall = True
|
||||
@@ -87,25 +203,31 @@ class PlayerState:
|
||||
self.ballsLeft -= 1
|
||||
self.specialDisplay.printBallsToPlay(self.ballsLeft)
|
||||
|
||||
def addUpperPlayfieldTime(self, time):
|
||||
self.upperPlayfieldTime += time
|
||||
def advanceUpperPlayfieldTime(self):
|
||||
if self.upperPlayfieldTime == 0:
|
||||
self.upperPlayfieldTime = 5
|
||||
elif self.upperPlayfieldTime == 5:
|
||||
self.upperPlayfieldTime = 10
|
||||
elif self.upperPlayfieldTime == 10:
|
||||
self.upperPlayfieldTime = 20
|
||||
elif self.upperPlayfieldTime == 20:
|
||||
self.upperPlayfieldTime = 30
|
||||
|
||||
def __setUpperPlayfieldTime(self, time):
|
||||
self.upperPlayfieldTime = time
|
||||
UPPER_PLAYFIELD_TIME_LAMPS.activateNext()
|
||||
|
||||
def startUpperPlayfieldTimer(self):
|
||||
self.timerStartTime = time.time()
|
||||
self.timer = Timer(self.upperPlayfieldTime, self.stopUpperPlayfieldTimer)
|
||||
self.upperPlayfieldTimer = Timer(1, self.updatePlayfieldTime)
|
||||
|
||||
def stopUpperPlayfieldTimer(self):
|
||||
if not self.timer:
|
||||
def updatePlayfieldTime(self):
|
||||
if self.upperPlayfieldTime == 0:
|
||||
self.upperPlayfieldTimer = None
|
||||
return
|
||||
|
||||
self.timer.cancel()
|
||||
if self.upperPlayfieldTime in [0, 5, 10, 20]:
|
||||
UPPER_PLAYFIELD_TIME_LAMPS.deactivateCurrent()
|
||||
|
||||
elapsedTime = time.time() - self.timerStartTime
|
||||
timeLeft = self.upperPlayfieldTime - elapsedTime
|
||||
self.__setUpperPlayfieldTime(timeLeft)
|
||||
self.upperPlayfieldTime -= 1
|
||||
self.upperPlayfieldTimer = Timer(1, self.updatePlayfieldTime)
|
||||
|
||||
def addBonusTimeSecond(self):
|
||||
self.bonusTime += 1
|
||||
|
||||
Reference in New Issue
Block a user