Beispiel #1
0
    def register_event(cls, event_name=None, func_to_register=None):
        '''
            @fun_Class.register_event() # @fun_Class.register_event === @fun_Class.register_event()
            def event_key_down(ev):
                pass
            OR
            @fun_Class.register_event(event_name) # event_name=KEYDOWN (or "key_down")
            def whatever(ev):
                pass
            OR
            fun_Class.register_event(event_name,func)
        '''
        if (event_name is None) and (func_to_register is None):
            # i.e No param passed, used as decorator (1st step of ex. 1)
            logging.info("Nothing passed")
            return cls.register_event
        elif (not(event_name is None)) and (func_to_register is None):
            # i.e. one param is passed, maybe func or (str or int)
            logging.info("Event Name only passed")
            if isinstance(event_name, int) or isinstance(event_name, str):
                # i.e. 1st parm-> str or int, is event name, acts as decorator
                # (2nd ex.)
                # dont hardcode func name- use metaclass
                logging.info("Event Name is event_name")
                return partial(cls.register_event, event_name)
            elif hasattr(event_name, "__call__"):
                # first param is func, actually func_to_register.
                # So get event_name from func_name (2nd step of 1st ex.)
                logging.info("Event Name is actually func")
                func_to_register = event_name
                event_name = fuzzy_match_event_name(func_to_register.func_name)
                return cls.register_event(event_name, func_to_register)
            else:
                raise TypeError("event_name must be (str or int) or func")
        else:
            # Both params present
            logging.info("Both param passed")

            if isinstance(event_name, str):
                event_name = fuzzy_match_event_name(event_name)
                event_numb = KW_EVENTS[event_name]
            elif isinstance(event_name, int):
                event_numb = event_name
            else:
                raise TypeError("event_name should be str or int")

            logging.info("Registering func")
            if not (event_numb in cls.dict_action_func):
                cls.dict_action_func[event_numb] = []
            cls.dict_action_func[event_numb].append(func_to_register)

            return func_to_register
Beispiel #2
0
 def _check_event(cls, ev_name_or_type, new_or_old):
     ''' ev_name_or_type => name_or_type(numb)_of_event
         new_or_old => current_event_list or old_event_list '''
     matched_events = []
     if new_or_old == "new":
         list_to_check = cls.game_class.list_event
     elif new_or_old == "old":
         list_to_check = cls.game_class.list_event_old
     else:
         raise AttributeError("new_or_old must be 'new' or 'old'.")
     if type(ev_name_or_type) is int:
         ev_type = ev_name_or_type
     elif type(ev_name_or_type) is str:
         ev_name = fuzzy_match_event_name(ev_name_or_type, "event")
         ev_type = KW_EVENTS_ALL[ev_name]
     for ev in list_to_check:
         if ev.type == ev_type:
             matched_events.append(ev)
     return matched_events