Beispiel #1
0
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
Beispiel #2
0
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