def default_input_func(button): if button == "LEFT": State.get().navigatable.go_left() elif button == "RIGHT": State.get().navigatable.go_right() elif button == "UP": State.get().navigatable.go_up() elif button == "DOWN": State.get().navigatable.go_down() elif button == "SKIP_LEFT": State.get().navigatable.go_left(10) elif button == "SKIP_RIGHT": State.get().navigatable.go_right(10) elif button == "PRIMARY": # global char_buffer # char_buffer = "" State.get().navigatable.activate() elif button == "BACK": print("-- button is BACK -- ") if State.get().config_menu: State.get().config_menu = None set_current_menu(State.get().current_menu) set_items_brightness(0.66, duration=0.500) elif State.get().current_game is None and current_menu.search_text: InputHandler.get_button() # clear OK status character_press("BACKSPACE") elif State.get().current_game: State.get().current_game = None # game_fade_animation = AnimateValueBezier( # (MenuGameTransition, "value"), # 1.0, State.get().time, # 1.0, State.get().time + 0.133, # 0.0, State.get().time + 0.133, # 0.0, State.get().time + 0.400) # elif can_navigate and current_menu.parent_menu: # elif can_navigate and len(State.get().history) > 1: elif len(State.get().history) > 1: go_back() elif button == "QUIT": State.get().quit = True
def main_loop_iteration( input_func=default_input_func, render_func=default_render_func): state = State.get() # if State.get().currently_ingame: # print("currently ingame") # #return False # print("main loop iteration") # time.sleep(0.1) # stop_loop = False # if State.get().idle_from and State.get().idle_from < get_current_time(): # #print(State.get().idle_from) # if not Render.get().dirty: # #print("waiting for events...") # events = [pygame.event.wait()] # else: # events = pygame.event.get() # else: # events = pygame.event.get() state.time = get_current_time() # Main.process() # t = State.get().time # if len(char_buffer) > 2 and t - char_buffer_last_updated > 0.5: # print(current_menu, isinstance(current_menu, ItemMenu)) # if isinstance(current_menu, ItemMenu): # # # if len(char_buffer) > 2 and t - char_buffer_last_updated > 0.5: # if len(char_buffer) > 2: # create_search_results_menu(char_buffer) # if len(char_buffer) <= 2: # # collapse search menu # # if hasattr(current_menu, "search_text"): # print("setting current_menu (something with search)") # set_current_menu(current_menu.parent_menu) if state.hide_mouse_time and state.time > state.hide_mouse_time: if Mouse.focus: # keep cursor visible if mouse has focus pass else: state.hide_mouse_time = 0 Mouse.set_visible(False) for event in InputHandler.pop_all_text_events(): if event["type"] == "text": # if key was handled as a virtual button, only allow this # character if already started typing something, or else # navigating with X-Arcade may start searching for games if InputHandler.peek_button(): if len(current_menu.search_text) > 0: character_press(event["text"]) # reset InputHandler so that virtual button # is not processed, since we handled this press # as a char InputHandler.get_button() else: character_press(event["text"]) AnimationSystem.update() NotificationRender.update() # if idle_events_only: # # do not update State.get().idle_from # pass # elif len(events) > 0: # #print(events) # if IDLE: # State.get().idle_from = State.get().time + IDLE # #print(State.get().idle_from) if Render.get().dirty or ALWAYS_RENDER: if Render.get().non_dirty_state: print("must start rendering again...") Render.get().non_dirty_state = False render_func() else: # if not Render.get().non_dirty_state: # print("pause rendering!") # Render.get().non_dirty_state = True Render.get().dirty = True button = InputHandler.get_button() if button: print("InputHandler.get_button", button, InputHandler.last_device) GameCenter.register_user_activity() if input_func: input_func(button) Render.get().dirty = True if InputHandler.repeat_info: Render.get().dirty = True # if IDLE: if AnimationSystem.is_active(): # State.get().idle_from = None Render.get().dirty = True # elif State.get().idle_from is None: # State.get().idle_from = State.get().time + IDLE if not IDLE: Render.get().dirty = True # except KeyboardInterrupt: # print "KeyboardInterrupt" # return # return stop_loop if not Render.get().display_sync: t = time.time() diff = t - Render.get().display_last_iteration # print(diff) frame_time = 1 / 60.0 if diff < frame_time: # FIXME: use real refresh rate / frame time sleep_time = frame_time - diff time.sleep(sleep_time) Render.get().display_last_iteration = t return state.quit