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 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: 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['RightSlingshot']) return event def createLeftFlapEvent(self): event = LeftFlapEvent() self.__registerEventToTarget(event, self.targets['LeftSlingshot']) return event def createRightKickerEvent(self): event = RightKickerEvent() self.__registerEventToTarget(event, self.targets['RightOutlaneKicker']) return event def createEnterUpperPlayfieldEvent(self): event = EnterUpperPlayfieldEvent(self.currentPlayer, self.upperPlayfieldFlippers) self.__registerEventToTarget(event, self.targets['UpperPlayfieldRollUnder']) return event def createStartGameEvent(self): event = StartGameEvent(self.flipper) self.__registerEventToTarget(event, self.targets['Outhole']) self.__registerEventToTarget(event, self.targets['Credit']) return event def __registerEventToTarget(self, event, target): target.on(target.hit_key, event.trigger)