ecs #58

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

View file

@ -5,6 +5,7 @@ Module d'exemple de l'utilisation du moteur de jeu.
from engine import Scene, start_game
from plugins import assets, defaults
from plugins.animation import Animation
from plugins.render import Sprite
from plugins.sound import Sound
@ -19,7 +20,8 @@ start_game(
callback=lambda world, entity: entity.set(
Sound(world[assets.Assets].get_sound("edqsd"))
),
)
),
Sprite(world[assets.Assets].get_texture("intro")),
)
],
[],

View file

@ -235,11 +235,10 @@ def loading_scene(target: Scene, name: str, clear_cache: bool = True):
asset_iterator = world[AssetIterator]
file_loaded = asset_iterator.total - len(asset_iterator.files)
progress = file_loaded / asset_iterator.total
pixels = int(render.WIDTH * progress)
# Affichage de la barre de progression
progress_bar = world.query(ProgessBar).pop()
progress_bar[render.Sprite].area = (0, 0, pixels, render.HEIGHT)
progress_bar[render.Sprite].area = (0, 0, progress, 1.0)
return Scene(
[AssetIterator.prepare_world],

View file

@ -46,19 +46,16 @@ class Sprite:
position: Vec2 = Vec2(0),
order: float = -1.0,
area: Optional[tuple[float, float, float, float]] = None,
origin: Vec2 = Vec2(0),
):
self.texture = texture
self.position = position
self.order = order
if area is None:
self.area = (
0.0,
0.0,
float(texture.get_width()),
float(texture.get_height()),
)
self.area = (0.0, 0.0, 1.0, 1.0)
else:
self.area = area
self.origin = origin
def __initialize(world: World):
@ -76,10 +73,18 @@ def __render(world: World):
surface = world[Surface]
sprites = [entity[Sprite] for entity in world.query(Sprite)]
for sprite in sorted(sprites, key=lambda sprite: sprite.order):
original_size = Vec2(*sprite.texture.get_size())
size = original_size * Vec2(*sprite.area[2:])
position = sprite.position - (sprite.origin * size)
surface.blit(
sprite.texture,
(sprite.position.x, sprite.position.y),
sprite.area,
(position.x, position.y),
(
sprite.area[0] * original_size.x,
sprite.area[1] * original_size.y,
sprite.area[2] * original_size.x,
sprite.area[3] * original_size.y,
),
)
# On affiche la surface sur la fenetre

View file

@ -7,6 +7,7 @@ import pygame
from engine import GlobalPlugin
from engine.ecs import World
from engine.math import Vec2
from plugins.assets import Assets
from plugins.render import Sprite
@ -21,10 +22,12 @@ class Text:
text: str,
size: int = 50,
color: pygame.Color = pygame.Color(255, 255, 255),
origin: Vec2 = Vec2(0),
):
self.text = text
self.size = size
self.color = color
self.origin = origin
def __render_texts(world: World):