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 from events.BottomRightPopEvent import BottomRightPopEvent from events.TopLeftPopEvent import TopLeftPopEvent 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 createTopLeftPopEvent(self): event = TopLeftPopEvent() self.__registerEventToTarget(event, self.targets["Left Pop"]) def createBottomRightPopEvent(self): event = BottomRightPopEvent() self.__registerEventToTarget(event, self.targets["Right Pop"]) def __registerEventToTarget(self, event, target): target.on(target.hit_key, event.trigger)