playerstate to prop

This commit is contained in:
Jonas Zeunert
2022-05-07 14:07:55 +02:00
parent 83cb1c26b4
commit e03d0e7aa5
20 changed files with 43 additions and 40 deletions

View File

@@ -11,7 +11,6 @@ class BankTarget(Target):
self.is_hit = True self.is_hit = True
super().hit() super().hit()
#notify Bank
def reset(self): def reset(self):
self.is_hit = False self.is_hit = False

View File

@@ -13,11 +13,6 @@ class Game:
signal.signal(signal.SIGINT, self.interrupt) signal.signal(signal.SIGINT, self.interrupt)
self.is_running = asyncio.Condition() self.is_running = asyncio.Condition()
BottomLeftBankSolenoid().trigger()
BottomRightBankSolenoid().trigger()
TopCentralBankSolenoid().trigger()
pass
def interrupt(self): def interrupt(self):
logging.info('Received SIGINT. Stopping Game :-)') logging.info('Received SIGINT. Stopping Game :-)')
self.is_running.release() self.is_running.release()
@@ -30,4 +25,3 @@ class Game:
await self.input_handler.handleInputs() await self.input_handler.handleInputs()
await self.is_running.wait() await self.is_running.wait()
pass

View File

@@ -6,10 +6,12 @@ class GameState:
self.currentPlayerID = currentPlayerID self.currentPlayerID = currentPlayerID
self.highscore = highscore self.highscore = highscore
@property
def currentPlayer(self): def currentPlayer(self):
return self.players[self.currentPlayerID] return self.players[self.currentPlayerID]
def setCurrentPlayer(self, playerId): @currentPlayer.setter
def currentPlayer(self, playerId):
if(playerId > len(self.players)): if(playerId > len(self.players)):
pass # todo throw error pass # todo throw error

View File

@@ -61,7 +61,8 @@ class PlayerState:
upperPlayfieldTimeIter = iter(UPPER_PLAYFIELD_TIME) upperPlayfieldTimeIter = iter(UPPER_PLAYFIELD_TIME)
upperPlayfieldTime = 0 upperPlayfieldTime = 0
def __init__(self, display, specialDisplay, id, ballsToPlay): def __init__(self, display, specialDisplay, id, ballsToPlay, banks):
self.banks = banks
self.display = display self.display = display
self.specialDisplay = specialDisplay self.specialDisplay = specialDisplay
self.id = id self.id = id
@@ -72,9 +73,11 @@ class PlayerState:
self.bonusTime = config.BEGINNING_BONUS_TIME self.bonusTime = config.BEGINNING_BONUS_TIME
self.reset()
self.specialDisplay.printScore() self.specialDisplay.printScore()
def activate(self):
self.reset()
def enableTiming(self): def enableTiming(self):
if config.BONUS_TIME_ALGORITHM == config.BONUS_TIME_ALGORITHM_OPTIONS.RANDOM: if config.BONUS_TIME_ALGORITHM == config.BONUS_TIME_ALGORITHM_OPTIONS.RANDOM:
self.disableAdvanceTimeLeft() self.disableAdvanceTimeLeft()
@@ -143,6 +146,7 @@ class PlayerState:
BONUS_MULTIPLIER_LAMPS.deactivate() BONUS_MULTIPLIER_LAMPS.deactivate()
def resetTargets(self): def resetTargets(self):
self.resetBanks()
self.resetRedSpecial() self.resetRedSpecial()
self.resetOrangeSpecial() self.resetOrangeSpecial()
self.resetTunnel() self.resetTunnel()
@@ -167,6 +171,10 @@ class PlayerState:
TUNNEL_SCORE_LAMPS.activateNext() TUNNEL_SCORE_LAMPS.activateNext()
TUNNEL_LAMPS.deactivate() TUNNEL_LAMPS.deactivate()
def resetBanks(self):
for bank in self.banks:
bank.reset()
def advanceRightOrangeSpecial(self): def advanceRightOrangeSpecial(self):
self.orangeSpecialRight = True self.orangeSpecialRight = True
self.setOrangeSpecialLit() self.setOrangeSpecialLit()

View File

@@ -8,4 +8,4 @@ class BonusEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.playerState().advanceBonus() self.playerState.advanceBonus()

View File

@@ -8,4 +8,4 @@ class BonusTimeEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.playerState().addBonusTimeSecond() self.playerState.addBonusTimeSecond()

View File

@@ -8,6 +8,6 @@ class BottomLeftBankEvent(BankEvent):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
playerState = self.playerState() playerState = self.playerState
playerState.advanceLeftOrangeSpecial() playerState.advanceLeftOrangeSpecial()
playerState.advanceUpperPlayfieldTime() playerState.advanceUpperPlayfieldTime()

View File

@@ -8,7 +8,7 @@ class BottomRightBankEvent(BankEvent):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
playerState = self.playerState() playerState = self.playerState
playerState.advanceRightOrangeSpecial() playerState.advanceRightOrangeSpecial()
if playerState.upperPlayfieldTime < 30: if playerState.upperPlayfieldTime < 30:
playerState.advanceUpperPlayfieldTime() playerState.advanceUpperPlayfieldTime()

View File

@@ -11,18 +11,18 @@ class EndBallEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
if self.playerState().replayBall or not self.playerState().hasBallScored: if self.playerState.replayBall or not self.playerState.hasBallScored:
StartBallEvent().trigger(None) StartBallEvent().trigger(None)
return return
self.playerState().removeBall() self.playerState.removeBall()
self.scorePoints() self.scorePoints()
self.playerState().reset() self.playerState.reset()
if self.playerState().ballsLeft == 0: if self.playerState.ballsLeft == 0:
EndGameEvent().trigger(None) EndGameEvent().trigger(None)
def scorePoints(self): def scorePoints(self):
bonus = self.playerState().bonus * self.playerState().bonusMultiplier * 1000 bonus = self.playerState.bonus * self.playerState.bonusMultiplier * 1000
self.playerState().addPoints(bonus) self.playerState.addPoints(bonus)

View File

@@ -11,4 +11,4 @@ class EnterUpperPlayfieldEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.flipper.activate() self.flipper.activate()
self.playerState().startUpperPlayfieldTimer() self.playerState.startUpperPlayfieldTimer()

View File

@@ -8,4 +8,4 @@ class FixedTargetEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.playerState().advanceTunnel() self.playerState.advanceTunnel()

View File

@@ -10,7 +10,7 @@ class OrangeSpecialEvent(SpecialEvent):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
if self.playerState().orangeSpecialLit: if self.playerState.orangeSpecialLit:
config.ORANGE_SPECIAL(self) config.ORANGE_SPECIAL(self)
self.playerState().resetOrangeSpecial() self.playerState.resetOrangeSpecial()

View File

@@ -8,4 +8,4 @@ class PointEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.playerState().addPoints(target.points) self.playerState.addPoints(target.points)

View File

@@ -8,8 +8,8 @@ class RedSpecialEvent(SpecialEvent):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
if self.playerState().redSpecialLit: if self.playerState.redSpecialLit:
config.RED_SPECIAL(self) config.RED_SPECIAL(self)
self.playerState().resetRedSpecial() self.playerState.resetRedSpecial()

View File

@@ -7,13 +7,13 @@ class SpecialEvent(Event):
self.playerState = playerState self.playerState = playerState
def replay(self): def replay(self):
self.playerState().setReplayBall() self.playerState.setReplayBall()
def extra_ball(self): def extra_ball(self):
self.playerState().addBall() self.playerState.addBall()
def points(self): def points(self):
self.playerState().addPoints(self.points) self.playerState.addPoints(self.points)
def super_bonus(self): def super_bonus(self):
pass pass

View File

@@ -17,13 +17,13 @@ class SpinnerEvent(Event):
self.scorePoints() self.scorePoints()
def scorePoints(self): def scorePoints(self):
playerState = self.playerState() playerState = self.playerState
timePassed = time() - self.activationTime timePassed = time() - self.activationTime
if 1 <= timePassed < 1.5: if 1 <= timePassed < 1.5:
playerState().addPoints(100000) playerState.addPoints(100000)
elif 1.5 <= timePassed < 2: elif 1.5 <= timePassed < 2:
playerState().addPoints(150000) playerState.addPoints(150000)
elif 2 <= timePassed < 5: elif 2 <= timePassed < 5:
playerState().addPoints(200000) playerState.addPoints(200000)
elif timePassed >= 5: elif timePassed >= 5:
playerState().addPoints(500000) playerState.addPoints(500000)

View File

@@ -8,6 +8,6 @@ class TopCentralBankEvent(BankEvent):
def trigger(self, target): def trigger(self, target):
self.playerState().advanceRedSpecial() self.playerState.advanceRedSpecial()

View File

@@ -11,10 +11,10 @@ class TunnelEvent(Event):
self.scoreBonusTunnelPoints() self.scoreBonusTunnelPoints()
def advanceBonusMultiplier(self): def advanceBonusMultiplier(self):
self.playerState().advanceBonusMultiplier() self.playerState.advanceBonusMultiplier()
def scoreBonusTunnelPoints(self): def scoreBonusTunnelPoints(self):
playerState = self.playerState() playerState = self.playerState
if playerState.tunnelLit == 2: if playerState.tunnelLit == 2:
playerState.addPoints(10000) playerState.addPoints(10000)
elif playerState.tunnelLit == 3: elif playerState.tunnelLit == 3:

View File

@@ -8,4 +8,4 @@ class UpperPlayfieldTimeEvent(Event):
def trigger(self, target): def trigger(self, target):
super().trigger(target) super().trigger(target)
self.playerState().addUpperPlayfieldTime(1) self.playerState.addUpperPlayfieldTime(1)

View File

@@ -37,7 +37,7 @@ class GameFactory:
def createPlayers(self): def createPlayers(self):
players = [] players = []
for id in range(1, self.playerCount + 1): for id in range(1, self.playerCount):
display = self.displayFactory.createPlayerDisplay(id) display = self.displayFactory.createPlayerDisplay(id)
player = self.playerStateFactory.createPlayerState(display, id) player = self.playerStateFactory.createPlayerState(display, id)
players.append(player) players.append(player)