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 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 __registerEventToTarget(self, event, target): target.on(target.hit_key, event.trigger)