Début de rendu de dialogues
This commit is contained in:
parent
2a47bb5d60
commit
879e6e8c0d
|
@ -1,4 +1,4 @@
|
||||||
{
|
{
|
||||||
"test": ["test1", "test2", "test très long permettant de tester le retour à la ligne dans le renderer du jeu dans la fonction qui rend les dialogues et il faut éviter d'en faire des si long car ça pourrait dépacer en base de l'écran ! Bonne journée !"],
|
"test": ["test1111", "test2", "test très long permettant de tester le retour à la ligne dans le renderer du jeu dans la fonction qui rend les dialogues et il faut éviter d'en faire des si long car ça pourrait dépacer en base de l'écran ! Bonne journée !"],
|
||||||
"test2": ["salut", "aurevoir"]
|
"test2": ["salut", "aurevoir"]
|
||||||
}
|
}
|
BIN
assets/textures/GUI/dialogs_box.png
Normal file
BIN
assets/textures/GUI/dialogs_box.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
|
@ -8,6 +8,10 @@ class DialogsManager:
|
||||||
self.current_dialog_id = -1
|
self.current_dialog_id = -1
|
||||||
self.dialogs = {}
|
self.dialogs = {}
|
||||||
self.reading_dialog = False
|
self.reading_dialog = False
|
||||||
|
self.current_dialogue_letter_id = 0
|
||||||
|
|
||||||
|
self.LETTER_WRITTING_DELAY = 0.5
|
||||||
|
self.letter_timer = 0
|
||||||
|
|
||||||
def next_dialog(self):
|
def next_dialog(self):
|
||||||
"""Passe au dialogue suivant. Renvoie True si le dialogue est fini."""
|
"""Passe au dialogue suivant. Renvoie True si le dialogue est fini."""
|
||||||
|
@ -27,11 +31,27 @@ class DialogsManager:
|
||||||
|
|
||||||
self.reading_dialog = True
|
self.reading_dialog = True
|
||||||
|
|
||||||
def get_current_dialog_sentence(self) -> str:
|
def get_current_dialog_sentence(self, progressive=True) -> str:
|
||||||
"""Renvoie la phrase actuelle du dialogue."""
|
"""Renvoie la phrase actuelle du dialogue."""
|
||||||
|
if progressive:
|
||||||
|
return self.current_dialogs[self.current_dialog_id][:self.current_dialogue_letter_id]
|
||||||
|
else:
|
||||||
return self.current_dialogs[self.current_dialog_id]
|
return self.current_dialogs[self.current_dialog_id]
|
||||||
|
|
||||||
def load_dialogs(self, file_path: str):
|
def load_dialogs(self, file_path: str):
|
||||||
"""Charge les dialogues du jeu grave au fichier json donné."""
|
"""Charge les dialogues du jeu grave au fichier json donné."""
|
||||||
with open(file_path, "r", encoding="utf-8") as file:
|
with open(file_path, "r", encoding="utf-8") as file:
|
||||||
self.dialogs = json.loads(file.read())
|
self.dialogs = json.loads(file.read())
|
||||||
|
|
||||||
|
def update(self, delta: float):
|
||||||
|
"""Met à jour e gestionnaire de dialogues."""
|
||||||
|
if self.reading_dialog:
|
||||||
|
self.letter_timer -= delta
|
||||||
|
|
||||||
|
if self.letter_timer <= 0:
|
||||||
|
self.letter_timer = self.LETTER_WRITTING_DELAY
|
||||||
|
self.current_dialogue_letter_id += 1
|
||||||
|
if self.current_dialogue_letter_id > len(self.current_dialogs[self.current_dialog_id]):
|
||||||
|
self.current_dialogue_letter_id -= 1
|
||||||
|
|
||||||
|
print(self.get_current_dialog_sentence())
|
|
@ -52,6 +52,7 @@ class Engine:
|
||||||
self.renderer.update(0.016666666)
|
self.renderer.update(0.016666666)
|
||||||
self.event_handler.update()
|
self.event_handler.update()
|
||||||
self.event_sheduler.update()
|
self.event_sheduler.update()
|
||||||
|
self.dialogs_manager.update(0.016666666)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""Arrête le programme."""
|
"""Arrête le programme."""
|
||||||
|
|
|
@ -15,7 +15,8 @@ class Renderer:
|
||||||
def __init__(self, core: 'engine.Engine'):
|
def __init__(self, core: 'engine.Engine'):
|
||||||
self.engine = core
|
self.engine = core
|
||||||
self.window_type = RESIZABLE
|
self.window_type = RESIZABLE
|
||||||
self.window_size = (display.Info().current_w, display.Info().current_h) if self.window_type == FULLSCREEN else (600, 600)
|
self.window_size = (display.Info().current_w, display.Info().current_h) if self.window_type == FULLSCREEN else (
|
||||||
|
600, 600)
|
||||||
self.window = display.set_mode(self.window_size, self.window_type)
|
self.window = display.set_mode(self.window_size, self.window_type)
|
||||||
self.tiles = []
|
self.tiles = []
|
||||||
self.tile_size = 0
|
self.tile_size = 0
|
||||||
|
@ -26,6 +27,9 @@ class Renderer:
|
||||||
self.boss_fight_player_animations: dict[str: Anim] = {}
|
self.boss_fight_player_animations: dict[str: Anim] = {}
|
||||||
self.boss_fight_GUI_container = None
|
self.boss_fight_GUI_container = None
|
||||||
|
|
||||||
|
# Boite de dialogue
|
||||||
|
self.dialogs_box = None
|
||||||
|
|
||||||
# Variables utilisées par le menu principal
|
# Variables utilisées par le menu principal
|
||||||
self.main_menu_assets: dict[str: Anim] = {}
|
self.main_menu_assets: dict[str: Anim] = {}
|
||||||
|
|
||||||
|
@ -123,9 +127,28 @@ class Renderer:
|
||||||
self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {self.engine.camera.zoom}",
|
self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {self.engine.camera.zoom}",
|
||||||
True, (255, 0, 0)), (0, 60))
|
True, (255, 0, 0)), (0, 60))
|
||||||
|
|
||||||
|
# Rendu présent dans tous les types de jeu
|
||||||
|
self.render_dialogs_box()
|
||||||
|
|
||||||
# Apres avoir tout rendu, on met à jour l'écran
|
# Apres avoir tout rendu, on met à jour l'écran
|
||||||
display.update()
|
display.update()
|
||||||
|
|
||||||
|
def render_dialogs_box(self):
|
||||||
|
"""Rend la boite de dialogue lorsqu'un dialogue est lancé."""
|
||||||
|
|
||||||
|
# Rend le conteneur des dialogues
|
||||||
|
if self.engine.dialogs_manager.reading_dialog:
|
||||||
|
resized_box = transform.scale(self.dialogs_box,
|
||||||
|
(display.get_window_size()[0],
|
||||||
|
self.dialogs_box.get_height() / self.dialogs_box.get_width() *
|
||||||
|
display.get_window_size()[0]))
|
||||||
|
self.window.blit(resized_box, (0, display.get_window_size()[1] - resized_box.get_height()))
|
||||||
|
|
||||||
|
# Rend le texte
|
||||||
|
text_font = font.SysFont("Arial", display.get_window_size()[0]//20)
|
||||||
|
rendered_text = text_font.render(self.engine.dialogs_manager.get_current_dialog_sentence(), True, (0, 0, 0))
|
||||||
|
self.window.blit(rendered_text, (display.get_window_size()[0]/30, display.get_window_size()[1] - resized_box.get_height()+display.get_window_size()[0]/30))
|
||||||
|
|
||||||
def render_debug_area(self, rendered_surface: surface.Surface):
|
def render_debug_area(self, rendered_surface: surface.Surface):
|
||||||
"""Rend les zones de collisions et de détections quand le mode DEBUG est activé."""
|
"""Rend les zones de collisions et de détections quand le mode DEBUG est activé."""
|
||||||
|
|
||||||
|
@ -195,13 +218,16 @@ class Renderer:
|
||||||
frame = transform.scale(frame, (display.get_window_size()[0] / 5, display.get_window_size()[0] / 5))
|
frame = transform.scale(frame, (display.get_window_size()[0] / 5, display.get_window_size()[0] / 5))
|
||||||
|
|
||||||
# On colle le joueur à gauche de la fenêtre
|
# On colle le joueur à gauche de la fenêtre
|
||||||
self.window.blit(frame, (display.get_window_size()[0]/20, display.get_window_size()[1]/4-frame.get_height()/2))
|
self.window.blit(frame,
|
||||||
|
(display.get_window_size()[0] / 20, display.get_window_size()[1] / 4 - frame.get_height() / 2))
|
||||||
|
|
||||||
def render_boss_fight_gui(self):
|
def render_boss_fight_gui(self):
|
||||||
"""Rend la barre d'action en bas de l'écran pendant le combat de boss."""
|
"""Rend la barre d'action en bas de l'écran pendant le combat de boss."""
|
||||||
|
|
||||||
resized_container = transform.scale(self.boss_fight_GUI_container,
|
resized_container = transform.scale(self.boss_fight_GUI_container,
|
||||||
(display.get_window_size()[0], self.boss_fight_GUI_container.get_height()/self.boss_fight_GUI_container.get_width()*display.get_window_size()[0]))
|
(display.get_window_size()[0],
|
||||||
|
self.boss_fight_GUI_container.get_height() / self.boss_fight_GUI_container.get_width() *
|
||||||
|
display.get_window_size()[0]))
|
||||||
self.window.blit(resized_container, (0, display.get_window_size()[1] - resized_container.get_height()))
|
self.window.blit(resized_container, (0, display.get_window_size()[1] - resized_container.get_height()))
|
||||||
|
|
||||||
def render_entities(self, rendered_surface: surface.Surface, gui_surface: surface.Surface, delta: float):
|
def render_entities(self, rendered_surface: surface.Surface, gui_surface: surface.Surface, delta: float):
|
||||||
|
@ -250,7 +276,8 @@ class Renderer:
|
||||||
cooldown_value = entity.damage_cooldown / entity.default_damage_cooldown
|
cooldown_value = entity.damage_cooldown / entity.default_damage_cooldown
|
||||||
|
|
||||||
# On calcule où placer la barre de vei sur la surface des GUI
|
# On calcule où placer la barre de vei sur la surface des GUI
|
||||||
life_bar_dest = (math.floor((entity.x - self.engine.camera.x + x_middle_offset) * self.engine.camera.zoom -
|
life_bar_dest = (
|
||||||
|
math.floor((entity.x - self.engine.camera.x + x_middle_offset) * self.engine.camera.zoom -
|
||||||
life_bar_width / 2),
|
life_bar_width / 2),
|
||||||
math.floor((entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) *
|
math.floor((entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) *
|
||||||
self.engine.camera.zoom - life_bar_height - life_bar_y_offset))
|
self.engine.camera.zoom - life_bar_height - life_bar_y_offset))
|
||||||
|
|
|
@ -22,7 +22,9 @@ class Game(Engine):
|
||||||
|
|
||||||
self.game_state = GameState.NORMAL
|
self.game_state = GameState.NORMAL
|
||||||
|
|
||||||
self.event_sheduler.register_area((0, 20, 20, 20), None)
|
self.event_sheduler.register_area((64, 64, 32, 32), lambda _: self.dialogs_manager.start_dialog("test"), ["player"])
|
||||||
|
|
||||||
|
self.renderer.dialogs_box = pygame.image.load("assets/textures/GUI/dialogs_box.png").convert_alpha()
|
||||||
|
|
||||||
def create_player_entity(self):
|
def create_player_entity(self):
|
||||||
"""Crée une entité joueur."""
|
"""Crée une entité joueur."""
|
||||||
|
@ -64,7 +66,7 @@ class Game(Engine):
|
||||||
mob.set_default_life(5)
|
mob.set_default_life(5)
|
||||||
mob.max_speed = 1.
|
mob.max_speed = 1.
|
||||||
|
|
||||||
mob.x, mob.y = 160, 16
|
mob.x, mob.y = 1600, 16
|
||||||
|
|
||||||
def load_boss_fight_assets(self):
|
def load_boss_fight_assets(self):
|
||||||
"""Charge les animations de combat des combats de boss."""
|
"""Charge les animations de combat des combats de boss."""
|
||||||
|
@ -75,7 +77,7 @@ class Game(Engine):
|
||||||
boss_none.load_animation_from_directory("assets/textures/boss_fight/boss_sprite/test/none")
|
boss_none.load_animation_from_directory("assets/textures/boss_fight/boss_sprite/test/none")
|
||||||
self.renderer.register_boss_fight_boss_animation(boss_none, "none")
|
self.renderer.register_boss_fight_boss_animation(boss_none, "none")
|
||||||
|
|
||||||
self.renderer.boss_fight_GUI_container = pygame.image.load("assets/textures/boss_fight/fight_actions_GUI.png")
|
self.renderer.boss_fight_GUI_container = pygame.image.load("assets/textures/boss_fight/fight_actions_GUI.png").convert_alpha()
|
||||||
|
|
||||||
|
|
||||||
game = Game()
|
game = Game()
|
||||||
|
|
Loading…
Reference in a new issue