Ajout du rendu des boutons

This commit is contained in:
Yannis 2024-01-07 17:05:50 +01:00
parent 51c20b5e67
commit 3963649881
Signed by: yannis
SSH key fingerprint: SHA256:Bz8K8QiTYUudf8MlthTM9MCLfgiYf/U1md3V9g9Wo14
3 changed files with 51 additions and 3 deletions

View file

@ -1,3 +1,10 @@
import threading
import tkinter
from types import FunctionType
import pygame
class Widget: class Widget:
"""Classe parente des widgets de menu.""" """Classe parente des widgets de menu."""
def __init__(self, x, y, is_window_relative): def __init__(self, x, y, is_window_relative):
@ -9,7 +16,7 @@ class Widget:
class Label(Widget): class Label(Widget):
"""Un widget de texte.""" """Un widget de texte."""
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int], def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
centered: bool = False, is_window_relative: bool = -1): centered: bool = False, is_window_relative: int = -1):
super().__init__(x, y, is_window_relative) super().__init__(x, y, is_window_relative)
self.text = text self.text = text
self.size = size self.size = size
@ -17,6 +24,21 @@ class Label(Widget):
self.color = color self.color = color
class Button(Widget):
"""Un widget de bouton."""
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
callback: FunctionType | classmethod | staticmethod, base_image: pygame.Surface,
hover_image: pygame.Surface, centered: bool = False, is_window_relative: int = -1):
super().__init__(x, y, is_window_relative)
self.text = text
self.size = size
self.color = color
self.callback = callback
self.base_image = base_image
self.hover_image = hover_image
self.centered = centered
class Menu: class Menu:
"""Un menu contenant des widgets.""" """Un menu contenant des widgets."""
def __init__(self): def __init__(self):

View file

@ -7,7 +7,7 @@ from pygame.locals import RESIZABLE, SRCALPHA, FULLSCREEN
import src.engine.engine as engine import src.engine.engine as engine
from src.engine.animation import Anim from src.engine.animation import Anim
from src.engine.enums import GameState from src.engine.enums import GameState
from src.engine.menu_manager import Label from src.engine.menu_manager import Label, Button
class Renderer: class Renderer:
@ -190,6 +190,28 @@ class Renderer:
y-rendered_text.get_height()//2)) y-rendered_text.get_height()//2))
else: else:
self.window.blit(rendered_text, (x, y)) self.window.blit(rendered_text, (x, y))
elif isinstance(widget, Button):
print("a")
# On multiplie la taille du texte si besoin
if widget.is_window_relative == 0:
size = widget.size*window_size[0]
elif widget.is_window_relative == 1:
size = widget.size*window_size[1]
elif widget.is_window_relative == 2:
size = widget.size*min(window_size[0], window_size[1])
else:
size = widget.size
text_font = font.SysFont("Arial", round(size))
# On affiche l'image du boutton
self.window.blit(widget.base_image, (x-widget.base_image.get_width()//2,
y-widget.base_image.get_height()//2))
rendered_text = text_font.render(widget.text, True, widget.color)
self.window.blit(rendered_text, (x-rendered_text.get_width()//2,
y-rendered_text.get_height()//2))
def render_dialogs_box(self): def render_dialogs_box(self):
"""Rend la boite de dialogue lorsqu'un dialogue est lancé.""" """Rend la boite de dialogue lorsqu'un dialogue est lancé."""

View file

@ -4,7 +4,7 @@ from src.custom_AI import WolfAI
from src.engine.animation import Anim from src.engine.animation import Anim
from src.engine.engine import Engine from src.engine.engine import Engine
from src.engine.enums import GameState from src.engine.enums import GameState
from src.engine.menu_manager import Menu, Label from src.engine.menu_manager import Menu, Label, Button
class Game(Engine): class Game(Engine):
@ -35,6 +35,10 @@ class Game(Engine):
"""Crée les éléments du menu principal.""" """Crée les éléments du menu principal."""
menu = Menu() menu = Menu()
menu.add_widget(Label(0.5, 0.1, "The Forest's Secret", 0.1, (0, 255, 0), True, 2)) menu.add_widget(Label(0.5, 0.1, "The Forest's Secret", 0.1, (0, 255, 0), True, 2))
base_image = pygame.image.load("assets/textures/GUI/button_1.png").convert_alpha()
menu.add_widget(Button(0.5, 0.3, "boutton", 0.1, (0, 255, 0), lambda : print("play"), base_image, base_image, True, 2))
self.menu_manager.register_menu(menu, "main") self.menu_manager.register_menu(menu, "main")
self.menu_manager.show("main") self.menu_manager.show("main")