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 engine import Scene, start_game
from plugins import assets, defaults from plugins import assets, defaults
from plugins.animation import Animation from plugins.animation import Animation
from plugins.render import Sprite
from plugins.sound import Sound from plugins.sound import Sound
@ -19,7 +20,8 @@ start_game(
callback=lambda world, entity: entity.set( callback=lambda world, entity: entity.set(
Sound(world[assets.Assets].get_sound("edqsd")) 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] asset_iterator = world[AssetIterator]
file_loaded = asset_iterator.total - len(asset_iterator.files) file_loaded = asset_iterator.total - len(asset_iterator.files)
progress = file_loaded / asset_iterator.total progress = file_loaded / asset_iterator.total
pixels = int(render.WIDTH * progress)
# Affichage de la barre de progression # Affichage de la barre de progression
progress_bar = world.query(ProgessBar).pop() 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( return Scene(
[AssetIterator.prepare_world], [AssetIterator.prepare_world],

View file

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

View file

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