Ajout d'une origine
This commit is contained in:
parent
fa8b5042ba
commit
b322119db4
|
@ -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")),
|
||||
)
|
||||
],
|
||||
[],
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue