Dialogues (fais pas chier j'ai trop mal a la tête pour faire une bonne PR) #62
17
assets/dialogs/after_search/info.json
Normal file
17
assets/dialogs/after_search/info.json
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
[
|
||||||
|
"Mais il est passé où ? Windows Defender ! Petit petit ! Ou es tu ?",
|
||||||
|
"Aller ! viens, je ne te ferais pas de mal ! S'il te plait !",
|
||||||
|
"J'ai retrouvé mon bouclié !",
|
||||||
|
"Ah ! Mais vous êtes la ! Vous allez gouter a ma puissance !",
|
||||||
|
"Je sais comment le faire partir !",
|
||||||
|
"Protège moi juste 5 minutes et c'est bon !",
|
||||||
|
"Quesque vous êtes en train de faire ?",
|
||||||
|
"Tu vas mourir ! Et ton ordinateur avec !",
|
||||||
|
"Aller, on sort l'artillerie lourde !",
|
||||||
|
"Plus qu'une petite minute !",
|
||||||
|
"C'est bien assez pour te détruire !",
|
||||||
|
"C'est bon !",
|
||||||
|
"Nooooooonnnnn Ahhhhhhhh !",
|
||||||
|
"Et voila le travail !",
|
||||||
|
"Si t'as a nouveau besoin de moi je suis la !"
|
||||||
|
]
|
15
assets/dialogs/cinematique/info.json
Normal file
15
assets/dialogs/cinematique/info.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[
|
||||||
|
"Salut ! Je suis Windows Defender !",
|
||||||
|
"Tu sais que Edmond a infecté ton ordinateur ?",
|
||||||
|
"Et en plus il est pas très gentils... Il a volé mon bouclier !",
|
||||||
|
"J'aimerais bien l'avoir a nouveau...",
|
||||||
|
"Attend ! Mais je sais !",
|
||||||
|
"Il suffit de lui demander !",
|
||||||
|
"Hé Edmond ! Tu saurais pas où est mon bouclier ?",
|
||||||
|
"Hein quoi ? Je t'avais pas enfermé toi ? Comment tu t'es libéré ? Reviens ici tout de suite !",
|
||||||
|
"Oups! ça sens pas bon pour moi ! Vite, aide moi a me cacher!",
|
||||||
|
"Tu ne m'auras pas une deuxième fois ! C'est l'heure de faire le ménage dans cet ordinateur !",
|
||||||
|
"Et d'ailleurs, pour commencer on va nettoyer ça !",
|
||||||
|
"Et hop ! Ca me semble deja beaucoup mieux !",
|
||||||
|
"Et maintenant, au tour de Windows Defender de gouter à la corbeille !"
|
||||||
|
]
|
8
assets/dialogs/directory_search/info.json
Normal file
8
assets/dialogs/directory_search/info.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
"Alors, où te cache tu ???",
|
||||||
|
"Je vais te trouver !",
|
||||||
|
"Ou te cache tu ?",
|
||||||
|
"Mais t'es où enfin !",
|
||||||
|
"Comment cet idiot fait pour aussi bien se cacher ?",
|
||||||
|
"Montre toi..."
|
||||||
|
]
|
6
assets/dialogs/directory_search_failed/info.json
Normal file
6
assets/dialogs/directory_search_failed/info.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[
|
||||||
|
"Ah te voila !",
|
||||||
|
"Aller hop ! A la corbeille !",
|
||||||
|
"La cavale est finit !",
|
||||||
|
"On fais moins le malin sans son bouclier hein !"
|
||||||
|
]
|
4
assets/dialogs/game_menteur/game_over/info.json
Normal file
4
assets/dialogs/game_menteur/game_over/info.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"Alors on a perdu ! On a plus sa chance du débutant ???",
|
||||||
|
"Je me disais bien que tu n'était pas si doué que ça..."
|
||||||
|
]
|
8
assets/dialogs/game_menteur/greater/info.json
Normal file
8
assets/dialogs/game_menteur/greater/info.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
"Dommage pour vous ! C'est plus grand !",
|
||||||
|
"OHHHH comme c'est dommage c'est plus grand !",
|
||||||
|
"Aller aller du nerf, c'est plus !",
|
||||||
|
"C'est peut etre trop dur pour vous, c'est plus !",
|
||||||
|
"Vous n'y arrivez plus ? C'est plus !",
|
||||||
|
"Bha alors, ou sont passé vos talent ? C'est bien evidement plus grand !"
|
||||||
|
]
|
8
assets/dialogs/game_menteur/less/info.json
Normal file
8
assets/dialogs/game_menteur/less/info.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
"Dommage pour vous ! C'est plus petit !",
|
||||||
|
"OHHHHH comme c'est dommage c'est moins !",
|
||||||
|
"Calmez vous, calmez vous c'est moins !",
|
||||||
|
"C'est peut etre trop dur pour vous, c'est moins !",
|
||||||
|
"Vous n'y arrivez plus ? C'est moins !",
|
||||||
|
"Bha alors, ou sont passé vos talent ? C'est bien evidement plus petit !"
|
||||||
|
]
|
5
assets/dialogs/game_menteur/victory/info.json
Normal file
5
assets/dialogs/game_menteur/victory/info.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[
|
||||||
|
"Quoi ??? Comment tu as fais ? Tu as triché ?",
|
||||||
|
"J'avais pourtant menti à chaque réponses !",
|
||||||
|
"Si c'est comme ça on passe au niveau supérieur !"
|
||||||
|
]
|
3
assets/dialogs/game_normal/game_over/info.json
Normal file
3
assets/dialogs/game_normal/game_over/info.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[
|
||||||
|
"Ah dommage c'est perdu ! Aller, vous pouvez le faire !"
|
||||||
|
]
|
11
assets/dialogs/game_normal/greater/info.json
Normal file
11
assets/dialogs/game_normal/greater/info.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
"Et non, raté ! C'est plus grand !",
|
||||||
|
"Eh non, dommage c'est plus grand !",
|
||||||
|
"Raté, c'est plus grand !",
|
||||||
|
"C'est plus !",
|
||||||
|
"Mon nombre est plus grand !",
|
||||||
|
"Vous pouvez un peu augmenter...",
|
||||||
|
"Un peu plus !",
|
||||||
|
"Vous vous etes trompé mais c'est plus grand !",
|
||||||
|
"Misez plus gros !"
|
||||||
|
]
|
11
assets/dialogs/game_normal/less/info.json
Normal file
11
assets/dialogs/game_normal/less/info.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
"Et non, raté ! C'est plus petit !",
|
||||||
|
"Eh non, dommage c'est plus petit !",
|
||||||
|
"Raté, c'est plus petit !",
|
||||||
|
"C'est moins !",
|
||||||
|
"Mon nombre est plus petit !",
|
||||||
|
"Vous pouvez un peu diminuer !",
|
||||||
|
"Un peu moins !",
|
||||||
|
"Vous vous etes trompé mais c'est plus petit !",
|
||||||
|
"Misez moins gros !"
|
||||||
|
]
|
6
assets/dialogs/game_normal/victory/info.json
Normal file
6
assets/dialogs/game_normal/victory/info.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[
|
||||||
|
"Bravo ! Tu as trouvé mon nombre !! Aller on recommence !",
|
||||||
|
"Mais cette fois tu ne trouveras pas !",
|
||||||
|
"Encore gagné !? Wow, je ne pensais pas avoir affaire a un professionnel !",
|
||||||
|
"il va falloir monter un peu le niveau, aller on recommence !"
|
||||||
|
]
|
7
assets/dialogs/game_pi/game_over/info.json
Normal file
7
assets/dialogs/game_pi/game_over/info.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
"Ah ! La je vous reconnais, la nullité dans son excellence !",
|
||||||
|
"Et hop, un échec supplémentaire pour le plus raté des ratés !",
|
||||||
|
"Impossible ! Il ne trouve pas même après 3 essais !",
|
||||||
|
"Hé tu sais que je change pas de nombre entre chaque essais ? T'es vraiment pas doué !",
|
||||||
|
"Et encore un nouvel échec !"
|
||||||
|
]
|
9
assets/dialogs/game_pi/greater/info.json
Normal file
9
assets/dialogs/game_pi/greater/info.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[
|
||||||
|
"Bahaha ratée, c'est plus !",
|
||||||
|
"Tu me decois de plus en plus, mon nombre est plus grand !",
|
||||||
|
"J'te croyais bien meilleur. C'est plus !",
|
||||||
|
"Je savais que tu ne valait pas un clou... Meme pas foutu de savoir que c'est plus !",
|
||||||
|
"Quel nullos, c'est evidemment plus !",
|
||||||
|
"Jamais tu ne trouveras ? C'est encore plus grand !",
|
||||||
|
"Tu peux augmenter, c'etait pourtant evident, tu es vraiment stupide..."
|
||||||
|
]
|
9
assets/dialogs/game_pi/less/info.json
Normal file
9
assets/dialogs/game_pi/less/info.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[
|
||||||
|
"Bahaha ratée, c'est moins !",
|
||||||
|
"Tu me decois de plus en plus, mon nombre est plus petit !",
|
||||||
|
"J'te croyais bien meilleur. C'est moins !",
|
||||||
|
"Je savais que tu ne valait pas un clou... Meme pas foutu de savoir que c'est moins !",
|
||||||
|
"Quel nullos, c'est evidemment moins !",
|
||||||
|
"Jamais tu ne trouveras ? C'est encore plus petit !",
|
||||||
|
"Tu peux reduire, c'etait pourtant evident, tu es vraiment stupide..."
|
||||||
|
]
|
3
assets/dialogs/game_pi/victory/info.json
Normal file
3
assets/dialogs/game_pi/victory/info.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[
|
||||||
|
"Hé ! Tu sais quoi ! J'en ai marre ! Débrouille toi tous seul !"
|
||||||
|
]
|
14
assets/dialogs/get_out/info.json
Normal file
14
assets/dialogs/get_out/info.json
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[
|
||||||
|
"Hé ! Tu m'entend ? Si tu veux sortir appuis sur f11 ! C'est le seul moyen de lui échapper !",
|
||||||
|
"Tu sais, f11, la touche sur ton clavier ! Appuis dessus !",
|
||||||
|
"Aller c'est pas difficile pourtant !",
|
||||||
|
"Appuis sur f11, aller !",
|
||||||
|
"C'est quoi ton problème enfaite ? Tu veux pas sortir ?",
|
||||||
|
"Aller viens ! On est bien ici, dehors.",
|
||||||
|
"On est un peu seul aussi, ça serais bien si tu venais.",
|
||||||
|
"Aller appuis sur f11, s'il te plait !!!",
|
||||||
|
"S'il te plaaaaaiiiiiiiiiitttt !!!!! Appuis sur f11 !!!",
|
||||||
|
"Appuis ! Appuis ! Appuis ! Appuis ! Appuis ! Appuis ! Appuis !",
|
||||||
|
"Alllllllllleeeeeeeeeeerrrrrr !",
|
||||||
|
"f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 ! f11 !"
|
||||||
|
]
|
8
assets/dialogs/intro/info.json
Normal file
8
assets/dialogs/intro/info.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
"Ah ! Attendez ! Attendez ! J'arrive, Ah, ah",
|
||||||
|
"Hum Hum, alors je me présente, je suis Edmond votre hôte pour la soirée.",
|
||||||
|
"Et ce soir je vous propose de jouer à mon jeu préféré !",
|
||||||
|
"Alors, les règles sont simples, je choisis un nombre et vous devez le deviner !",
|
||||||
|
"Simple n'est-ce pas ?",
|
||||||
|
"Et si on commençait ? Ah, ça fais si longtemps que j'attendais ça !"
|
||||||
|
]
|
3
assets/dialogs/work/info.json
Normal file
3
assets/dialogs/work/info.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[
|
||||||
|
"Tu pourrais arrêter de faire du bruit s'il te plait ? Il y en a qui travaillent ici !"
|
||||||
|
]
|
BIN
assets/waiting.mp3
Normal file
BIN
assets/waiting.mp3
Normal file
Binary file not shown.
|
@ -8,6 +8,7 @@ import pygame
|
||||||
from engine import CurrentScene, GlobalPlugin, KeepAlive, Scene
|
from engine import CurrentScene, GlobalPlugin, KeepAlive, Scene
|
||||||
from engine.ecs import World
|
from engine.ecs import World
|
||||||
from plugins import render
|
from plugins import render
|
||||||
|
from plugins.sound import Sound
|
||||||
|
|
||||||
|
|
||||||
class Assets(KeepAlive):
|
class Assets(KeepAlive):
|
||||||
|
@ -25,6 +26,7 @@ class Assets(KeepAlive):
|
||||||
|
|
||||||
# Chragement du son d'erreur
|
# Chragement du son d'erreur
|
||||||
self.__error_sound = pygame.mixer.Sound("assets/error.mp3")
|
self.__error_sound = pygame.mixer.Sound("assets/error.mp3")
|
||||||
|
self.__waiting_sound = pygame.mixer.Sound("assets/waiting.mp3")
|
||||||
|
|
||||||
# Chargement des textures de chargement
|
# Chargement des textures de chargement
|
||||||
self.__unloaded_texture = pygame.image.load("assets/unloaded.png").convert()
|
self.__unloaded_texture = pygame.image.load("assets/unloaded.png").convert()
|
||||||
|
@ -54,6 +56,13 @@ class Assets(KeepAlive):
|
||||||
"""
|
"""
|
||||||
return self.__error_sound
|
return self.__error_sound
|
||||||
|
|
||||||
|
@property
|
||||||
|
def waiting_sound(self) -> pygame.mixer.Sound:
|
||||||
|
"""
|
||||||
|
Le son de chargement.
|
||||||
|
"""
|
||||||
|
return self.__waiting_sound
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unloaded_texture(self) -> pygame.Surface:
|
def unloaded_texture(self) -> pygame.Surface:
|
||||||
"""
|
"""
|
||||||
|
@ -207,6 +216,7 @@ def loading_scene(target: Scene, name: str, clear_cache: bool = True):
|
||||||
order=1000000001,
|
order=1000000001,
|
||||||
area=(0, 0, 0, render.HEIGHT),
|
area=(0, 0, 0, render.HEIGHT),
|
||||||
),
|
),
|
||||||
|
Sound(assets.waiting_sound, loop=True, fade_ms=10000),
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
@ -10,6 +10,7 @@ from plugins import (
|
||||||
display,
|
display,
|
||||||
hover,
|
hover,
|
||||||
inputs,
|
inputs,
|
||||||
|
multisound,
|
||||||
render,
|
render,
|
||||||
sound,
|
sound,
|
||||||
text,
|
text,
|
||||||
|
@ -25,6 +26,7 @@ PLUGIN = (
|
||||||
+ hover.PLUGIN
|
+ hover.PLUGIN
|
||||||
+ click.PLUGIN
|
+ click.PLUGIN
|
||||||
+ coroutine.PLUGIN
|
+ coroutine.PLUGIN
|
||||||
|
+ multisound.PLUGIN
|
||||||
+ sound.PLUGIN
|
+ sound.PLUGIN
|
||||||
+ text.PLUGIN
|
+ text.PLUGIN
|
||||||
+ animation.PLUGIN
|
+ animation.PLUGIN
|
||||||
|
|
95
src/plugins/dialog.py
Normal file
95
src/plugins/dialog.py
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
"""
|
||||||
|
Un plugin permettant de gérer l'affichage et l'audio des dialogues.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from engine.ecs import Entity, World
|
||||||
|
from engine.math import Vec2
|
||||||
|
from plugins import render
|
||||||
|
from plugins.coroutine import wait
|
||||||
|
|
||||||
|
# from plugins.assets import Assets
|
||||||
|
from plugins.sound import Sound
|
||||||
|
from plugins.text import Text
|
||||||
|
|
||||||
|
|
||||||
|
def __spawn_all_condition(entity: Entity) -> Callable[[World], bool]:
|
||||||
|
"""
|
||||||
|
Condition utilisé dans spawn_all_dialogs
|
||||||
|
"""
|
||||||
|
return lambda world: Text not in entity
|
||||||
|
|
||||||
|
|
||||||
|
def spawn_all_dialogs(
|
||||||
|
world: World,
|
||||||
|
name: str,
|
||||||
|
height: float = 100,
|
||||||
|
waiting_between: float = 1,
|
||||||
|
callback: Callable[[World], object] = lambda _w: None,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Fais apparaitre tous les dialogues d'un info.json a la suite.
|
||||||
|
"""
|
||||||
|
texts: list[str] = json.load(
|
||||||
|
open(f"assets/dialogs/{name}/info.json", "r", encoding="utf-8")
|
||||||
|
)
|
||||||
|
for i, text in enumerate(texts):
|
||||||
|
entity = world.new_entity()
|
||||||
|
entity.set(
|
||||||
|
Sound(
|
||||||
|
pygame.mixer.Sound(f"assets/dialogs/{name}/{i}.mp3"),
|
||||||
|
callback=lambda world, entity: entity.destroy(),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
text,
|
||||||
|
position=Vec2(render.WIDTH / 2, height),
|
||||||
|
order=1000,
|
||||||
|
origin=Vec2(0.5),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
yield __spawn_all_condition(entity)
|
||||||
|
yield wait(waiting_between)
|
||||||
|
callback(world)
|
||||||
|
|
||||||
|
|
||||||
|
def spawn_dialog(
|
||||||
|
world: World,
|
||||||
|
name: str,
|
||||||
|
index: int = -1,
|
||||||
|
height: float = 100,
|
||||||
|
callback: Callable[[World], object] = lambda _w: None,
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Fait apparaitre un dialogue dans le monde.
|
||||||
|
"""
|
||||||
|
texts: list[str] = json.load(
|
||||||
|
open(f"assets/dialogs/{name}/info.json", "r", encoding="utf-8")
|
||||||
|
)
|
||||||
|
if index == -1:
|
||||||
|
index = random.randint(0, len(texts) - 1)
|
||||||
|
text = texts[index]
|
||||||
|
world.new_entity().set(
|
||||||
|
Sound(
|
||||||
|
pygame.mixer.Sound(f"assets/dialogs/{name}/{index}.mp3"),
|
||||||
|
callback=lambda world, entity: __sound_end(world, entity, callback),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
text,
|
||||||
|
position=Vec2(render.WIDTH / 2, height),
|
||||||
|
order=1000,
|
||||||
|
origin=Vec2(0.5),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def __sound_end(world: World, entity: Entity, callback: Callable[[World], object]):
|
||||||
|
"""
|
||||||
|
Fonction appelé a la fin d'un dialogue.
|
||||||
|
"""
|
||||||
|
entity.destroy()
|
||||||
|
callback(world)
|
65
src/plugins/multisound.py
Normal file
65
src/plugins/multisound.py
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
"""
|
||||||
|
Plugin pour les sons multiples.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import random
|
||||||
|
from typing import Callable
|
||||||
|
from engine import GlobalPlugin
|
||||||
|
|
||||||
|
from engine.ecs import Entity, World
|
||||||
|
from plugins.assets import Assets
|
||||||
|
from plugins.sound import Sound
|
||||||
|
|
||||||
|
|
||||||
|
class MultiSound:
|
||||||
|
"""
|
||||||
|
Composant qui quand il est ajouté a une entité, il joue un son aléatoire
|
||||||
|
parmis la liste de ses sons, il est ensuite retiré de l'entité.
|
||||||
|
|
||||||
|
Ce composant est fait pour être définis en tant que constante
|
||||||
|
puis utilisé ensuite, pour cela il prend seulement le nom des
|
||||||
|
sons au lieu des sons eux memes. Les sons seront donc récupérés
|
||||||
|
a l'aide de `Assets`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*sound_names: str,
|
||||||
|
loop: bool = False,
|
||||||
|
volume: float = 1.0,
|
||||||
|
fade_ms: int = 0,
|
||||||
|
callback: Callable[[World, Entity], object] = lambda _w, _e: None,
|
||||||
|
):
|
||||||
|
self.sound_names = sound_names
|
||||||
|
self.loop = loop
|
||||||
|
self.volume = volume
|
||||||
|
self.fade_ms = fade_ms
|
||||||
|
self.callback = callback
|
||||||
|
|
||||||
|
|
||||||
|
def __update_sounds(world: World):
|
||||||
|
"""
|
||||||
|
Met à jour les sons du jeu.
|
||||||
|
"""
|
||||||
|
# Ajout des sons aléatoires
|
||||||
|
assets = world[Assets]
|
||||||
|
for entity in world.query(MultiSound):
|
||||||
|
multi_sound = entity[MultiSound]
|
||||||
|
sound = assets.get_sound(random.choice(multi_sound.sound_names))
|
||||||
|
entity[Sound] = Sound(
|
||||||
|
sound,
|
||||||
|
multi_sound.loop,
|
||||||
|
multi_sound.volume,
|
||||||
|
multi_sound.fade_ms,
|
||||||
|
multi_sound.callback,
|
||||||
|
)
|
||||||
|
del entity[MultiSound]
|
||||||
|
|
||||||
|
|
||||||
|
PLUGIN = GlobalPlugin(
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[__update_sounds],
|
||||||
|
[],
|
||||||
|
)
|
|
@ -3,12 +3,10 @@ Un plugin permettant de jouer des sons.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
import random
|
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
import pygame
|
import pygame
|
||||||
from engine import GlobalPlugin, KeepAlive
|
from engine import GlobalPlugin, KeepAlive
|
||||||
from engine.ecs import Entity, World
|
from engine.ecs import Entity, World
|
||||||
from plugins.assets import Assets
|
|
||||||
|
|
||||||
|
|
||||||
class Channels(KeepAlive, dict[Entity, pygame.mixer.Channel]):
|
class Channels(KeepAlive, dict[Entity, pygame.mixer.Channel]):
|
||||||
|
@ -37,32 +35,6 @@ class Sound:
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
|
|
||||||
|
|
||||||
class MultiSound:
|
|
||||||
"""
|
|
||||||
Composant qui quand il est ajouté a une entité, il joue un son aléatoire
|
|
||||||
parmis la liste de ses sons, il est ensuite retiré de l'entité.
|
|
||||||
|
|
||||||
Ce composant est fait pour être définis en tant que constante
|
|
||||||
puis utilisé ensuite, pour cela il prend seulement le nom des
|
|
||||||
sons au lieu des sons eux memes. Les sons seront donc récupérés
|
|
||||||
a l'aide de `Assets`.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
*sound_names: str,
|
|
||||||
loop: bool = False,
|
|
||||||
volume: float = 1.0,
|
|
||||||
fade_ms: int = 0,
|
|
||||||
callback: Callable[[World, Entity], object] = lambda _w, _e: None,
|
|
||||||
):
|
|
||||||
self.sound_names = sound_names
|
|
||||||
self.loop = loop
|
|
||||||
self.volume = volume
|
|
||||||
self.fade_ms = fade_ms
|
|
||||||
self.callback = callback
|
|
||||||
|
|
||||||
|
|
||||||
def __initialize(world: World):
|
def __initialize(world: World):
|
||||||
"""
|
"""
|
||||||
Ajoute les ressources utiles pour le plugin.
|
Ajoute les ressources utiles pour le plugin.
|
||||||
|
@ -74,20 +46,6 @@ def __update_sounds(world: World):
|
||||||
"""
|
"""
|
||||||
Met à jour les sons du jeu.
|
Met à jour les sons du jeu.
|
||||||
"""
|
"""
|
||||||
# Ajout des sons aléatoires
|
|
||||||
assets = world[Assets]
|
|
||||||
for entity in world.query(MultiSound):
|
|
||||||
multi_sound = entity[MultiSound]
|
|
||||||
sound = assets.get_sound(random.choice(multi_sound.sound_names))
|
|
||||||
entity[Sound] = Sound(
|
|
||||||
sound,
|
|
||||||
multi_sound.loop,
|
|
||||||
multi_sound.volume,
|
|
||||||
multi_sound.fade_ms,
|
|
||||||
multi_sound.callback,
|
|
||||||
)
|
|
||||||
del entity[MultiSound]
|
|
||||||
|
|
||||||
# Ajout des sons non gérés
|
# Ajout des sons non gérés
|
||||||
channels = world[Channels]
|
channels = world[Channels]
|
||||||
sound_entities = world.query(Sound)
|
sound_entities = world.query(Sound)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Module contenant toutes les scènes du jeu.
|
Module contenant toutes les scènes du jeu.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from plugins.sound import MultiSound
|
from plugins.multisound import MultiSound
|
||||||
|
|
||||||
|
|
||||||
CLICK_SOUND = MultiSound("click/0", "click/1", "click/2")
|
CLICK_SOUND = MultiSound("click/0", "click/1", "click/2")
|
||||||
|
|
|
@ -13,7 +13,7 @@ from plugins.assets import Assets
|
||||||
from plugins.click import Clickable
|
from plugins.click import Clickable
|
||||||
from plugins.hover import HoveredTexture
|
from plugins.hover import HoveredTexture
|
||||||
from plugins.render import Sprite
|
from plugins.render import Sprite
|
||||||
from scenes.story import boss_fight
|
from scenes.story import boss_fight, directory_search
|
||||||
|
|
||||||
|
|
||||||
def __create_button(world: World, assets: Assets, i: int, name: str):
|
def __create_button(world: World, assets: Assets, i: int, name: str):
|
||||||
|
@ -48,7 +48,7 @@ def __on_click_butons(world: World, _entity: Entity, name: str):
|
||||||
case "tricheur":
|
case "tricheur":
|
||||||
world[CurrentScene] = base_game.CHEATER
|
world[CurrentScene] = base_game.CHEATER
|
||||||
case "histoire":
|
case "histoire":
|
||||||
world[CurrentScene] = boss_fight.SCENE
|
world[CurrentScene] = directory_search.SCENE
|
||||||
case _:
|
case _:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import random
|
||||||
from engine import CurrentScene, Scene
|
from engine import CurrentScene, Scene
|
||||||
from engine.ecs import Entity, World
|
from engine.ecs import Entity, World
|
||||||
from engine.math import Vec2
|
from engine.math import Vec2
|
||||||
from plugins import assets as plugin_assets, render, smooth
|
from plugins import assets as plugin_assets, dialog, render, smooth
|
||||||
from plugins.animation import Animation
|
from plugins.animation import Animation
|
||||||
from plugins.coroutine import Coroutine, wait
|
from plugins.coroutine import Coroutine, wait
|
||||||
from plugins.click import Clickable, Clicked
|
from plugins.click import Clickable, Clicked
|
||||||
|
@ -177,9 +177,13 @@ def __game_loop(world: World):
|
||||||
La boucle principale de la scène
|
La boucle principale de la scène
|
||||||
"""
|
"""
|
||||||
yield wait(5.0)
|
yield wait(5.0)
|
||||||
|
dialog_index = 0
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
if i % 2 == 1:
|
if i % 2 == 1:
|
||||||
__block_directory(world)
|
__block_directory(world)
|
||||||
|
if i in (0, 1, 2, 4, 6, 8):
|
||||||
|
dialog.spawn_dialog(world, "directory_search", dialog_index)
|
||||||
|
dialog_index += 1
|
||||||
__spawn_search_alerts(world, int(i / 1.5) + 1)
|
__spawn_search_alerts(world, int(i / 1.5) + 1)
|
||||||
yield wait(5.0 - (i * 0.4))
|
yield wait(5.0 - (i * 0.4))
|
||||||
__spawn_search_directory(world)
|
__spawn_search_directory(world)
|
||||||
|
@ -254,6 +258,7 @@ def __spawn_search_directory(world: World):
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
dialog.spawn_dialog(world, "directory_search_failed")
|
||||||
entity[Sprite].order = 5
|
entity[Sprite].order = 5
|
||||||
for entity in world.query(Coroutine): # On arrete la boucle de jeu
|
for entity in world.query(Coroutine): # On arrete la boucle de jeu
|
||||||
entity.destroy()
|
entity.destroy()
|
||||||
|
|
Loading…
Reference in a new issue