ecs #58
|
@ -4,7 +4,7 @@ Permet de lancer un jeu et de gérer la boucle principale de celui-ci.
|
||||||
|
|
||||||
|
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
from ecs import World
|
from engine.ecs import World
|
||||||
|
|
||||||
|
|
||||||
class GlobalScene:
|
class GlobalScene:
|
|
@ -3,11 +3,11 @@ Module d'exemple de l'utilisation du moteur de jeu.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from engine import Scene, start_game
|
from engine import Scene, start_game
|
||||||
from plugins import display, inputs, render
|
from plugins import defaults
|
||||||
|
|
||||||
|
|
||||||
start_game(
|
start_game(
|
||||||
display.PLUGIN + inputs.PLUGIN + render.PLUGIN,
|
defaults.PLUGIN,
|
||||||
{
|
{
|
||||||
"menu": Scene([], [], []),
|
"menu": Scene([], [], []),
|
||||||
},
|
},
|
||||||
|
|
8
src/plugins/defaults.py
Normal file
8
src/plugins/defaults.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
"""
|
||||||
|
Plugin qui rassemple tous les plugins globaux.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from plugins import display, inputs, render
|
||||||
|
|
||||||
|
|
||||||
|
PLUGIN = display.PLUGIN + inputs.PLUGIN + render.PLUGIN
|
|
@ -4,7 +4,7 @@ Un plugin pour la gestion de la fenetre du jeu.
|
||||||
|
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
from ecs import World
|
from engine.ecs import World
|
||||||
from engine import GlobalScene
|
from engine import GlobalScene
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@ Un plugin permettant de gérer les entrées utilisateur du jeu.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
from ecs import World
|
|
||||||
from engine import CurrentScene, GlobalScene, KeepAlive
|
from engine import CurrentScene, GlobalScene, KeepAlive
|
||||||
from maths import Vec2
|
from engine.ecs import World
|
||||||
|
from engine.math import Vec2
|
||||||
from plugins import render
|
from plugins import render
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,9 @@ Un plugin qui s'occupe de rendre des choses dans la fenetre.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pygame
|
import pygame
|
||||||
|
from engine import GlobalScene, KeepAlive
|
||||||
from engine import GlobalScene
|
from engine.ecs import World
|
||||||
|
from engine.math import Vec2
|
||||||
|
|
||||||
|
|
||||||
WIDTH = 1440
|
WIDTH = 1440
|
||||||
|
@ -27,9 +28,56 @@ def calculate_surface_rect() -> tuple[float, float, float, float]:
|
||||||
return offset, 0.0, target_width, float(height)
|
return offset, 0.0, target_width, float(height)
|
||||||
|
|
||||||
|
|
||||||
|
class Surface(KeepAlive, pygame.Surface):
|
||||||
|
"""
|
||||||
|
Ressource qui stocke la surface de rendu du jeu.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Sprite:
|
||||||
|
"""
|
||||||
|
Composant donnant la texture d'une entité, sa position et son ordre de rendu.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, surface: pygame.Surface, position: Vec2 = Vec2(0), order: float = -1.0
|
||||||
|
):
|
||||||
|
self.surface = surface
|
||||||
|
self.position = position
|
||||||
|
self.order = order
|
||||||
|
|
||||||
|
|
||||||
|
def __initialize(world: World):
|
||||||
|
"""
|
||||||
|
Prépare le monde pour la gestion du rendu.
|
||||||
|
"""
|
||||||
|
world.set(Surface((WIDTH, HEIGHT)))
|
||||||
|
|
||||||
|
|
||||||
|
def __render(world: World):
|
||||||
|
"""
|
||||||
|
Rend le monde du jeu sur la surface puis l'affiche sur la fenetre.
|
||||||
|
"""
|
||||||
|
# On rend le monde sur la surface
|
||||||
|
surface = world[Surface]
|
||||||
|
sprites = [entity[Sprite] for entity in world.query(Sprite)]
|
||||||
|
for sprite in sorted(sprites, key=lambda sprite: sprite.order):
|
||||||
|
surface.blit(sprite.surface, (sprite.position.x, sprite.position.y))
|
||||||
|
|
||||||
|
# On affiche la surface sur la fenetre
|
||||||
|
rect = calculate_surface_rect()
|
||||||
|
pygame.transform.set_smoothscale_backend("MMX")
|
||||||
|
pygame.transform.smoothscale(
|
||||||
|
surface,
|
||||||
|
(rect[2], rect[3]),
|
||||||
|
pygame.display.get_surface().subsurface(rect),
|
||||||
|
)
|
||||||
|
pygame.display.flip()
|
||||||
|
|
||||||
|
|
||||||
PLUGIN = GlobalScene(
|
PLUGIN = GlobalScene(
|
||||||
|
[__initialize],
|
||||||
[],
|
[],
|
||||||
[],
|
[__render],
|
||||||
[],
|
|
||||||
[],
|
[],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue