Beispiel #1
0
    def __init__(self,
                 state,
                 on_exit_function=None,
                 debugging=False,
                 **kwargs):
        super(ScreenWidget, self).__init__(**kwargs)

        self.state = state

        texture_db.insert_color_rect(state, 1.0, 1.0, "tl_null", 0.0, 0.0, 0.0)

        self.display_widget = DisplayWidget(state)
        self.on_exit_function = on_exit_function

        self.add_widget(self.display_widget)

        self.joystick = None

        joystick_panel_height = 0.25
        joystick_x = 0.01
        joystick_y = 0.01

        if controls.need_joystick(state) or controls.need_buttons(state):
            joystick_height = 0.24
            joystick_width = (joystick_height * Window.height) / Window.width
            self.add_widget(
                Image(
                    source="assets/img/ui/joy_panel.png",
                    size_hint=(1.0, joystick_panel_height),
                    pos_hint={
                        "x": 0.0,
                        "y": 0.0
                    },
                    allow_stretch=True,
                ), )

        if controls.need_joystick(state):
            self.joystick = JoystickWidget(
                size_hint=(joystick_width, joystick_height),
                pos_hint={
                    "x": joystick_x,
                    "y": joystick_y
                },
            )
            self.add_widget(self.joystick)
            Clock.schedule_interval(self.on_timer, 0.1)

        if controls.need_buttons(state):
            button_width = joystick_width / 2.1
            button_height = joystick_height / 2.1
            button_width_big = 2 * button_width
            button_height_big = 2 * button_height

            background_file = "assets/img/ui/joy_button.png"
            background_down_file = "assets/img/ui/joy_button_down.png"
            background_file_big = "assets/img/ui/joy_button_big.png"
            background_down_file_big = "assets/img/ui/joy_button_down_big.png"

            button_defs = controls.get_buttons(state)

            if button_defs:
                if button_defs[0][controls.IDX_CONTROL_BUTTON_POS] == "right":
                    if button_defs[0][
                            controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                        button_0 = Button(
                            background_normal=background_file,
                            background_down=background_down_file,
                            size_hint=(button_width, button_height),
                            pos_hint={
                                "x": 1.0 - button_width - 0.01,
                                "y": 0.0 + 0.01
                            },
                        )
                    else:
                        button_0 = Button(
                            background_normal=background_file_big,
                            background_down=background_down_file_big,
                            size_hint=(button_width_big, button_height_big),
                            pos_hint={
                                "x": 1.0 - button_width_big - 0.01,
                                "y": 0.0 + 0.01
                            },
                        )
                elif button_defs[0][controls.IDX_CONTROL_BUTTON_POS] == "left":
                    if button_defs[0][
                            controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                        button_0 = Button(
                            background_normal=background_file,
                            background_down=background_down_file,
                            size_hint=(button_width, button_height),
                            pos_hint={
                                "x": joystick_x,
                                "y": joystick_y
                            },
                        )
                    else:
                        button_0 = Button(
                            background_normal=background_file_big,
                            background_down=background_down_file_big,
                            size_hint=(button_width_big, button_height_big),
                            pos_hint={
                                "x": joystick_x,
                                "y": joystick_y
                            },
                        )
                self.add_widget(button_0)
                if button_defs[0][controls.IDX_CONTROL_BUTTON_POS] == "right":
                    if button_defs[0][
                            controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                        pass
                    else:
                        self.add_widget(
                            Image(
                                source="assets/img/ui/button_a.png",
                                allow_stretch=True,
                                pos_hint={
                                    "x": 1.0 - button_width_big - 0.01,
                                    "y": 0.0 + 0.01
                                },
                                size_hint=(button_width_big,
                                           button_height_big),
                            ))
                else:
                    if button_defs[0][
                            controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                        pass
                    else:
                        self.add_widget(
                            Image(
                                source="assets/img/ui/button_a.png",
                                allow_stretch=True,
                                size_hint=(button_width_big,
                                           button_height_big),
                                pos_hint={
                                    "x": joystick_x,
                                    "y": joystick_y
                                },
                            ))

                button_0.bind(state=self.on_button_0)

                if len(button_defs) > 1:
                    if button_defs[1][
                            controls.IDX_CONTROL_BUTTON_POS] == "right":
                        if button_defs[1][
                                controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                            button_1 = Button(
                                background_normal=background_file,
                                background_down=background_down_file,
                                size_hint=(button_width, button_height),
                                pos_hint={
                                    "x": 1.0 - joystick_width - 0.01,
                                    "y": 0.0 + 0.01
                                },
                            )
                        else:
                            button_1 = Button(
                                background_normal=background_file_big,
                                background_down=background_down_file_big,
                                size_hint=(button_width_big,
                                           button_height_big),
                                pos_hint={
                                    "x": 1.0 - joystick_width - 0.01,
                                    "y": 0.0 + 0.01
                                },
                            )
                    elif button_defs[1][
                            controls.IDX_CONTROL_BUTTON_POS] == "left":
                        if button_defs[1][
                                controls.IDX_CONTROL_BUTTON_SIZE] == "small":
                            button_1 = Button(
                                background_normal=background_file,
                                background_down=background_down_file,
                                size_hint=(button_width, button_height),
                                pos_hint={
                                    "x": joystick_x,
                                    "y": joystick_y
                                },
                            )
                        else:
                            button_1 = Button(
                                background_normal=background_file_big,
                                background_down=background_down_file_big,
                                size_hint=(button_width_big,
                                           button_height_big),
                                pos_hint={
                                    "x": joystick_x,
                                    "y": joystick_y
                                },
                            )
                    self.add_widget(button_1)
                    button_1.bind(state=self.on_button_1)

                    if button_defs[1][
                            controls.IDX_CONTROL_BUTTON_POS] == "right":
                        if button_defs[1][
                                controls.IDX_CONTROL_BUTTON_SIZE] == "big":
                            self.add_widget(
                                Image(
                                    source="assets/img/ui/button_b.png",
                                    allow_stretch=True,
                                    pos_hint={
                                        "x": 1.0 - button_width_big - 0.01,
                                        "y": 0.0 + 0.01
                                    },
                                    size_hint=(button_width_big,
                                               button_height_big),
                                ))

                if len(button_defs) > 2:
                    button_2 = Button(
                        background_normal=background_file,
                        background_down=background_down_file,
                        size_hint=(button_width, button_height),
                        pos_hint={
                            "x": 1.0 - button_width - 0.01,
                            "y": button_height + 0.01
                        },
                    )
                    self.add_widget(button_2)
                    button_2.bind(state=self.on_button_2)

                if len(button_defs) > 3:
                    button_3 = Button(
                        background_normal=background_file,
                        background_down=background_down_file,
                        size_hint=(button_width, button_height),
                        pos_hint={
                            "x": 1.0 - joystick_width - 0.01,
                            "y": button_height + 0.01
                        },
                    )
                    self.add_widget(button_3)
                    button_3.bind(state=self.on_button_3)

        if self.on_exit_function:
            exit_button_size = (0.15, 0.05)
            exit_button_x = (1.0 - exit_button_size[0]) / 2.0
            exit_button = Button(
                text="",
                background_normal="assets/img/ui/joy_option_button.png",
                background_down="assets/img/ui/joy_option_button_down.png",
                size_hint=exit_button_size,
                pos_hint={
                    "x": exit_button_x,
                    "y": 0.01
                },
                allow_stretch=True,
            )
            exit_button.bind(state=self.on_exit)
            self.add_widget(exit_button)

        if debugging:
            NUM_DEBUG_LINES = debug.NUM_DEBUG_LINES + 1
            DEBUG_LINE_SIZE = 0.05
            self.debug_label_array = []
            for i in xrange(NUM_DEBUG_LINES):
                self.debug_label_array.append(
                    Label(
                        color=(0, 1, 0, 1),
                        size_hint=(1.0, DEBUG_LINE_SIZE),
                        pos_hint={
                            "x": 0.05,
                            "y": 1.0 - DEBUG_LINE_SIZE - DEBUG_LINE_SIZE * i
                        },
                        markup=True,
                        text_size=(Window.width,
                                   Window.height / NUM_DEBUG_LINES),
                    ))
                self.debug_label_array[i].bind(
                    texture_size=self.setter('size'))
                self.add_widget(self.debug_label_array[i])
            Clock.schedule_interval(self.on_debug_timer, 0.5)

        if platform == 'win' or platform == 'linux' or platform == 'macosx':
            Window.bind(on_key_down=self._on_keyboard_down)
            Window.bind(on_key_up=self._on_keyboard_up)