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)