From cbfd2e1cdc6edc7692e773106b759745b7529974 Mon Sep 17 00:00:00 2001 From: Rapahel Lauray Date: Thu, 26 Oct 2023 16:31:05 +0200 Subject: [PATCH 1/2] font --- Bijufont.ttf | Bin 0 -> 15644 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Bijufont.ttf diff --git a/Bijufont.ttf b/Bijufont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35d9c02f625ce08d1004bd55556c9c59277cc7b0 GIT binary patch literal 15644 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 GB>CSax3wq$ literal 0 HcmV?d00001 From 7ff6c6323fc51108c51b2eb0d6a593fcdc9c98a9 Mon Sep 17 00:00:00 2001 From: Tipragot Date: Thu, 26 Oct 2023 17:29:15 +0200 Subject: [PATCH 2/2] Ajout du systeme de texte --- Bijufont.ttf => font.ttf | Bin src/engine/plugins/render.py | 45 +++++++++++++++++++++++++++++++++++ src/main.py | 15 ++++++++++-- 3 files changed, 58 insertions(+), 2 deletions(-) rename Bijufont.ttf => font.ttf (100%) diff --git a/Bijufont.ttf b/font.ttf similarity index 100% rename from Bijufont.ttf rename to font.ttf diff --git a/src/engine/plugins/render.py b/src/engine/plugins/render.py index 41ff061..7bb01f5 100644 --- a/src/engine/plugins/render.py +++ b/src/engine/plugins/render.py @@ -20,6 +20,7 @@ class RenderPlugin(Plugin): Initialize le système de rendu. """ world.set(TextureManager(world[Display])) + world.set(FontManager()) @staticmethod def _render(world: World) -> None: @@ -28,6 +29,7 @@ class RenderPlugin(Plugin): """ display = world[Display] textures = world[TextureManager] + fonts = world[FontManager] # Rendu de toutes les objects de rendu entities = sorted(world.query(Order, Position), key=lambda e: e[Order]) @@ -41,6 +43,17 @@ class RenderPlugin(Plugin): textures[entity[Texture]], (position.x, position.y) ) + # Affichage du texte + if Text in entity and TextSize in entity: + color = ( + entity[TextColor] + if TextColor in entity + else pygame.Color(255, 255, 255) + ) + font = fonts[entity[TextSize]] + font_surface = font.render(entity[Text], True, color) + display._surface.blit(font_surface, (position.x, position.y)) + def apply(self, game: Game) -> None: """ Applique le plugin a un jeu. @@ -89,3 +102,35 @@ class Texture(str): """ Composant qui represente la texture d'un sprite. """ + + +class FontManager: + """ + Ressource qui contient les fonts du jeu. + """ + + def __init__(self) -> None: + self._fonts: dict[int, pygame.font.Font] = {} + + def __getitem__(self, size: int) -> pygame.font.Font: + if size not in self._fonts: + self._fonts[size] = pygame.font.Font("font.ttf", size) + return self._fonts[size] + + +class Text(str): + """ + Composant qui represente un texte. + """ + + +class TextSize(int): + """ + Composant qui represente la taille d'un texte. + """ + + +class TextColor(pygame.Color): + """ + Composant qui represente la couleur d'un texte. + """ diff --git a/src/main.py b/src/main.py index 2910b1c..14efe85 100644 --- a/src/main.py +++ b/src/main.py @@ -5,7 +5,15 @@ Ceci est un exemple de comment l'on peut utiliser le moteur du jeu. from engine import * from engine.math import Vec2 -from engine.plugins.render import Order, RenderPlugin, Position, Texture +from engine.plugins.render import ( + Order, + RenderPlugin, + Position, + Text, + TextColor, + TextSize, + Texture, +) from engine.plugins.timing import Delta, TimePlugin from engine.plugins.pygame import Display, Keyboard, PygamePlugin from random import random @@ -24,7 +32,10 @@ def spawn_sprites(world: World) -> None: red = random() < 0.1 world.create_entity( Position(random() * Display.WIDTH, random() * Display.HEIGHT), - Texture("test2.png") if red else Texture("test.png"), + # Texture("test2.png") if red else Texture("test.png"), + Text("Hello les gens"), + TextSize(50), + TextColor(255, 0, 0) if red else TextColor(255, 255, 255), Order(1 if red else 0), )