ecs #58
After Width: | Height: | Size: 682 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 27 KiB |
43
src/main.py
|
@ -2,49 +2,12 @@
|
||||||
Module d'exemple de l'utilisation du moteur de jeu.
|
Module d'exemple de l'utilisation du moteur de jeu.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from engine import Scene, start_game
|
from engine import start_game
|
||||||
from engine.ecs import World
|
|
||||||
from plugins import assets, defaults
|
from plugins import assets, defaults
|
||||||
from plugins.animation import Animation
|
from scenes import menu
|
||||||
from plugins.coroutine import Coroutine, condition, wait
|
|
||||||
from plugins.hover import HoveredTexture
|
|
||||||
from plugins.inputs import MousePosition
|
|
||||||
|
|
||||||
|
|
||||||
def super_fonction_du_turfu(world: World):
|
|
||||||
"""
|
|
||||||
Fonction du turfu qui s'execute sur plusieurs frames.
|
|
||||||
"""
|
|
||||||
print("LOL")
|
|
||||||
yield wait(10.0)
|
|
||||||
print("LOL 10 secondes après")
|
|
||||||
|
|
||||||
animation = Animation("animations/intro")
|
|
||||||
world.new_entity().set(animation)
|
|
||||||
print("Started animation")
|
|
||||||
yield animation.wait()
|
|
||||||
print("Animation ended")
|
|
||||||
|
|
||||||
yield condition(lambda world: world.get(MousePosition).x > 500)
|
|
||||||
print("La souris est a droite !")
|
|
||||||
|
|
||||||
|
|
||||||
start_game(
|
start_game(
|
||||||
defaults.PLUGIN,
|
defaults.PLUGIN,
|
||||||
assets.loading_scene(
|
assets.loading_scene(menu.SCENE, "menu"),
|
||||||
Scene(
|
|
||||||
[
|
|
||||||
lambda world: world.new_entity().set(
|
|
||||||
Coroutine(super_fonction_du_turfu(world)),
|
|
||||||
HoveredTexture(
|
|
||||||
world[assets.Assets].get_texture("directory"),
|
|
||||||
world[assets.Assets].get_texture("attack_point"),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
),
|
|
||||||
"textures",
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -52,6 +52,10 @@ def __update_input(world: World):
|
||||||
held = world[Held]
|
held = world[Held]
|
||||||
released = world[Released]
|
released = world[Released]
|
||||||
|
|
||||||
|
# On clear les touches pressées et relachées
|
||||||
|
pressed.clear()
|
||||||
|
released.clear()
|
||||||
|
|
||||||
# On récupère les évenements de pygame
|
# On récupère les évenements de pygame
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
|
|
3
src/scenes/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
"""
|
||||||
|
Module contenant toutes les scènes du jeu.
|
||||||
|
"""
|
58
src/scenes/menu.py
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
"""
|
||||||
|
La scène du menu principal du jeu.
|
||||||
|
|
||||||
|
Dans cette scène nous pouvons choisir le mode de jeu.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from engine import CurrentScene, Scene
|
||||||
|
from engine.ecs import Entity, World
|
||||||
|
from engine.math import Vec2
|
||||||
|
from plugins import render
|
||||||
|
from plugins.assets import Assets
|
||||||
|
from plugins.click import Clickable
|
||||||
|
from plugins.hover import HoveredTexture
|
||||||
|
from plugins.render import Sprite
|
||||||
|
from plugins.sound import Sound
|
||||||
|
|
||||||
|
|
||||||
|
def __create_button(world: World, assets: Assets, i: int, name: str):
|
||||||
|
"""
|
||||||
|
Ajoute un bouton au monde.
|
||||||
|
"""
|
||||||
|
world.new_entity().set(
|
||||||
|
Sprite(
|
||||||
|
assets.error_texture,
|
||||||
|
Vec2(render.WIDTH / 2, 450 + 150 * i),
|
||||||
|
origin=Vec2(0.5),
|
||||||
|
),
|
||||||
|
HoveredTexture(
|
||||||
|
assets.get_texture(f"button_{name}"),
|
||||||
|
assets.get_texture(f"button_{name}_hover"),
|
||||||
|
),
|
||||||
|
Clickable(lambda world, entity: __on_click_butons(world, entity, name)),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def __on_click_butons(world: World, entity: Entity, name: str):
|
||||||
|
"""
|
||||||
|
Fonction qui s'execute quand on clique sur un bouton.
|
||||||
|
"""
|
||||||
|
entity[Sound] = Sound(world[Assets].get_sound("click"))
|
||||||
|
|
||||||
|
|
||||||
|
def __spawn_elements(world: World):
|
||||||
|
"""
|
||||||
|
Ajoute les éléments du menu dans le monde.
|
||||||
|
"""
|
||||||
|
assets = world[Assets]
|
||||||
|
world.new_entity().set(Sprite(assets.get_texture("background")))
|
||||||
|
scenes_name = ["classique", "menteur", "tricheur", "histoire"]
|
||||||
|
for i, name in enumerate(scenes_name):
|
||||||
|
__create_button(world, assets, i, name)
|
||||||
|
|
||||||
|
|
||||||
|
SCENE = Scene(
|
||||||
|
[__spawn_elements],
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
)
|