ecs #58

Merged
raphael merged 70 commits from ecs into main 2023-11-03 15:29:36 +00:00
8 changed files with 66 additions and 10 deletions
Showing only changes of commit 894e150484 - Show all commits

View file

@ -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:

View file

@ -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
View 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

View file

@ -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

View file

@ -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

View file

@ -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],
[],
[], [],
) )