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 ecs import World
|
||||
from engine.ecs import World
|
||||
|
||||
|
||||
class GlobalScene:
|
|
@ -3,11 +3,11 @@ Module d'exemple de l'utilisation du moteur de jeu.
|
|||
"""
|
||||
|
||||
from engine import Scene, start_game
|
||||
from plugins import display, inputs, render
|
||||
from plugins import defaults
|
||||
|
||||
|
||||
start_game(
|
||||
display.PLUGIN + inputs.PLUGIN + render.PLUGIN,
|
||||
defaults.PLUGIN,
|
||||
{
|
||||
"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
|
||||
from ecs import World
|
||||
from engine.ecs import World
|
||||
from engine import GlobalScene
|
||||
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@ Un plugin permettant de gérer les entrées utilisateur du jeu.
|
|||
"""
|
||||
|
||||
import pygame
|
||||
from ecs import World
|
||||
from engine import CurrentScene, GlobalScene, KeepAlive
|
||||
from maths import Vec2
|
||||
from engine.ecs import World
|
||||
from engine.math import Vec2
|
||||
from plugins import render
|
||||
|
||||
|
||||
|
|
|
@ -3,8 +3,9 @@ Un plugin qui s'occupe de rendre des choses dans la fenetre.
|
|||
"""
|
||||
|
||||
import pygame
|
||||
|
||||
from engine import GlobalScene
|
||||
from engine import GlobalScene, KeepAlive
|
||||
from engine.ecs import World
|
||||
from engine.math import Vec2
|
||||
|
||||
|
||||
WIDTH = 1440
|
||||
|
@ -27,9 +28,56 @@ def calculate_surface_rect() -> tuple[float, float, float, float]:
|
|||
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(
|
||||
[__initialize],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[__render],
|
||||
[],
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue