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