Files
flippr-game/factories/EventFactory.py
2020-08-19 22:20:57 +02:00

80 lines
2.8 KiB
Python

import inspect
from events.PointEvent import PointEvent
from events.EndOfBallEvent import EndOfBallEvent
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
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 = EndOfBallEvent(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.__registerEventToTarget(event, self.targets['Credit'])
return event
def createBottomLeftBankEvent(self):
event = BottomLeftBankEvent()
self.__registerEventToTarget(event, self.targets["Left Bank"])
def createBottomRightBankEvent(self):
event = BottomRightBankEvent()
self.__registerEventToTarget(event, self.targets["Right Bank"])
def createTopCentralBankEvent(self):
event = TopCentralBankEvent()
self.__registerEventToTarget(event, self.targets["Top Bank"])
def __registerEventToTarget(self, event, target):
target.on(target.hit_key, event.trigger)