Files
flippr-game/factories/EventFactory.py
Jonas Zeunert 65873496f6 blalbal
2022-05-07 14:39:10 +02:00

164 lines
5.8 KiB
Python

import inspect
from events.PointEvent import PointEvent
from events.EndBallEvent import EndBallEvent
from events.RightFlapEvent import RightFlapEvent
from events.LeftFlapEvent import LeftFlapEvent
from events.RightKickerEvent import RightKickerEvent
from events.EnterUpperPlayfieldEvent import EnterUpperPlayfieldEvent
from events.StartGameEvent import StartGameEvent
from events.EndGameEvent import EndGameEvent
from events.BottomRightBankEvent import BottomRightBankEvent
from events.BottomLeftBankEvent import BottomLeftBankEvent
from events.TopCentralBankEvent import TopCentralBankEvent
from events.BottomRightPopEvent import BottomRightPopEvent
from events.TopLeftPopEvent import TopLeftPopEvent
from events.TunnelEvent import TunnelEvent
from events.RedSpecialEvent import RedSpecialEvent
from events.OrangeSpecialEvent import OrangeSpecialEvent
from events.SpinnerEvent import SpinnerEvent
from events.FixedTargetEvent import FixedTargetEvent
from events.BonusEvent import BonusEvent
from events.TiltEvent import TiltEvent
BONUS_EVENT_TARGETS = [
"Left Inlane",
"Right Inlane",
"Right Outlane Kicker",
"Canal Button Bottom",
"Canal Button Middle Bottom",
"Canal Button Middle Top",
"Canal Button Top",
"Fixed Target 1",
"Fixed Target 2",
"Fixed Target 3",
"Fixed Target 4",
"Fixed Target 5",
"Left Bank Left",
"Left Bank Middle Left",
"Left Bank Middle Right",
"Left Bank Right",
"Right Bank Left",
"Right Bank Middle",
"Right Bank Right",
]
class EventFactory:
def __init__(self, targets, currentPlayer):
self.targets = targets
self.currentPlayer = currentPlayer
def allEvents(self):
methods = inspect.getmembers(self, predicate=inspect.ismethod)
createMethods = [method[1] for method in methods if 'create' in method[0]]
result = []
for method in createMethods:
result.append(method())
return result
def createPointEvent(self):
event = PointEvent(self.currentPlayer)
for target in self.targets.values():
self.__registerEventToTarget(event, target)
return event
def createEndOfBallEvent(self):
event = EndBallEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets['Outhole'])
return event
def createRightFlapEvent(self):
event = RightFlapEvent()
self.__registerEventToTarget(event, self.targets['Right Slingshot'])
return event
def createLeftFlapEvent(self):
event = LeftFlapEvent()
self.__registerEventToTarget(event, self.targets['Left Slingshot'])
return event
def createRightKickerEvent(self):
event = RightKickerEvent()
self.__registerEventToTarget(event, self.targets['Right Outlane Kicker'])
return event
def createEnterUpperPlayfieldEvent(self):
event = EnterUpperPlayfieldEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets['Rising ball'])
return event
def createStartGameEvent(self):
event = StartGameEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets['Credit'])
return event
def createBottomLeftBankEvent(self):
event = BottomLeftBankEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Left Bank"])
return event
def createBottomRightBankEvent(self):
event = BottomRightBankEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Right Bank"])
return event
def createTopCentralBankEvent(self):
event = TopCentralBankEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Top Bank"])
return event
def createTopLeftPopEvent(self):
event = TopLeftPopEvent()
self.__registerEventToTarget(event, self.targets["Left Pop"])
return event
def createBottomRightPopEvent(self):
event = BottomRightPopEvent()
self.__registerEventToTarget(event, self.targets["Right Pop"])
return event
def createTunnelEvent(self):
event = TunnelEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Canal Button Bottom"])
return event
def createRedSpecialEvent(self):
event = RedSpecialEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Special Red"])
return event
def createOrangeSpecialEvent(self):
event = OrangeSpecialEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Special Orange"])
return event
def createSpinnerEvent(self):
event = SpinnerEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Spinner"])
return event
def createFixedTargetEvent(self):
event = FixedTargetEvent(self.currentPlayer)
self.__registerEventToTarget(event, self.targets["Fixed Target 1"])
self.__registerEventToTarget(event, self.targets["Fixed Target 2"])
self.__registerEventToTarget(event, self.targets["Fixed Target 3"])
self.__registerEventToTarget(event, self.targets["Fixed Target 4"])
self.__registerEventToTarget(event, self.targets["Fixed Target 5"])
return event
def createBonusEvent(self):
event = BonusEvent(self.currentPlayer)
self.__registerEventToTargets(event, BONUS_EVENT_TARGETS)
def createTiltEvent(self):
event = TiltEvent()
self.__registerEventToTarget(event, self.targets['Tilt'])
def __registerEventToTargets(self, event, targetNames):
for targetName in targetNames:
self.__registerEventToTarget(event, self.targets[targetName])
def __registerEventToTarget(self, event, target):
target.on(target.hit_key, event.trigger)