Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Contains the parent class all mods should inherit from, and some utility
- functions mods will need to use.
- """
- def pysweep_listen(mod, trigger):
- """
- Decorator for methods that need to be callable by other mods.
- """
- def decorate(f):
- try:
- f.pysweep_listening_to
- except:
- f.pysweep_listening_to = []
- f.pysweep_listening_to.append((mod, trigger))
- return f
- return decorate
- def pysweep_trigger(f):
- """
- Decorator for methods that need to trigger mods listening to this event.
- The method should return an event object which is passed to the mods
- listening to this function.
- """
- def _wrap(self, *args, **kwargs):
- event = f(_wrap)
- listener_events = []
- for listener in f.pysweep_listened_by:
- listener_events = listener(event)
- event.children = listener_events
- return event
- _wrap.pysweep_is_trigger = True
- return _wrap
- class Mod:
- def pysweep_init(self, pysweep):
- self.pysweep = pysweep
- def pysweep_triggers_init(self):
- self.triggers = []
- for func in self.__dict__.values():
- try:
- func.pysweep_is_trigger
- except:
- func.pysweep_is_trigger = False
- if func.pysweep_is_trigger:
- self.triggers.append(func)
- self.trigger.pysweep_listened_by = []
- def pysweep_listeners_init(self):
- for func in self.__dict__.values():
- try:
- func.pysweep_listening_to
- except:
- func.pysweep_listening_to = []
- for mod, trigger in func.pysweep_listening_to:
- self.pysweep.mods[mod].pysweep_register(trigger, func)
- def pysweep_register(self, trigger, func):
- try:
- self.trigger
- except:
- raise ValueError("Trigger {} does not exist".format(trigger))
- if not self.trigger.pysweep_is_trigger:
- raise ValueError("{} is not a trigger".format(trigger))
- self.trigger.pysweep_listened_by.append(func)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement