diff --git a/src/engine/menu_manager.py b/src/engine/menu_manager.py index 062e181..e972a35 100644 --- a/src/engine/menu_manager.py +++ b/src/engine/menu_manager.py @@ -68,23 +68,28 @@ class MenuManager: """Ajoute le menu donné au manager de menu avec le nom donné.""" self.menus[name] = menu - # On itère dans tous les bouttons pour leur ajouter une interaction - for btn in menu.widgets: - if isinstance(btn, Button): - width = btn.base_image.get_width()/self.engine.renderer.window_size[0] - height = btn.base_image.get_height()/self.engine.renderer.window_size[1] - area_x = btn.x - area_y = btn.y - if btn.centered: - area_x -= width/2 - area_y -= height/2 - self.engine.event_handler.register_button_area((area_x, area_y, width, height), btn.callback, btn.area_name, - btn.is_window_relative, btn.set_hover_state) - def show(self, name: str): """Affiche le menu au nom donné.""" self.active_menu = self.menus[name] + # On itère dans tous les bouttons pour leur ajouter une interaction + for btn in self.active_menu.widgets: + if isinstance(btn, Button): + width = btn.base_image.get_width() / self.engine.renderer.window_size[0] + height = btn.base_image.get_height() / self.engine.renderer.window_size[1] + area_x = btn.x + area_y = btn.y + if btn.centered: + area_x -= width / 2 + area_y -= height / 2 + self.engine.event_handler.register_button_area((area_x, area_y, width, height), btn.callback, + btn.area_name, + btn.is_window_relative, btn.set_hover_state) + def hide(self): """Affiche le menu actuelement à l'écran.""" + # On itère dans tous les bouttons pour retirer l'interaction + for btn in self.active_menu.widgets: + if isinstance(btn, Button): + self.engine.event_handler.remove_button_area(btn.area_name) self.active_menu = None diff --git a/src/engine/renderer.py b/src/engine/renderer.py index e4a7558..5e53da0 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -209,8 +209,16 @@ class Renderer: btn_image = widget.hover_image else: btn_image = widget.base_image - btn_image = transform.scale(btn_image, (btn_image.get_width()*window_size[0]/self.window_size[0], - btn_image.get_height()*window_size[0]/self.window_size[0])) + + if widget.is_window_relative == 0: + btn_image = transform.scale(btn_image, (btn_image.get_width()*window_size[0]/self.window_size[0], + btn_image.get_height()*window_size[0]/self.window_size[0])) + elif widget.is_window_relative == 1: + btn_image = transform.scale(btn_image, (btn_image.get_width()*window_size[1]/self.window_size[1], + btn_image.get_height()*window_size[1]/self.window_size[1])) + elif widget.is_window_relative == 2: + btn_image = transform.scale(btn_image, (btn_image.get_width()*window_size[0]/self.window_size[0], + btn_image.get_height()*window_size[1]/self.window_size[1])) # On affiche l'image du boutton if widget.centered: diff --git a/src/main.py b/src/main.py index 4746e4c..4e156ed 100644 --- a/src/main.py +++ b/src/main.py @@ -21,7 +21,7 @@ class Game(Engine): self.DEBUG_MODE = True - self.game_state = GameState.NORMAL + self.game_state = GameState.MAIN_MENU self.event_sheduler.register_area((64, 64, 32, 32), lambda _: self.dialogs_manager.start_dialog("test"), ["player"], False, True) @@ -31,6 +31,10 @@ class Game(Engine): self.setup_main_menu() + def start_game(self): + self.game_state = GameState.NORMAL + self.menu_manager.hide() + def setup_main_menu(self): """Crée les éléments du menu principal.""" menu = Menu() @@ -39,7 +43,7 @@ class Game(Engine): base_image = pygame.image.load("assets/textures/GUI/button_1.png").convert_alpha() hover_image = pygame.image.load("assets/textures/GUI/button_2.png").convert_alpha() - menu.add_widget(Button(0.5, 0.3, "boutton", 0.1, (0, 255, 0), lambda : print("play"), base_image, hover_image, True, 0)) + menu.add_widget(Button(0.5, 0.3, "play", 0.08, (0, 255, 0), self.start_game, base_image, hover_image, True, 0)) self.menu_manager.register_menu(menu, "main") self.menu_manager.show("main")