ecs #58

Merged
raphael merged 70 commits from ecs into main 2023-11-03 15:29:36 +00:00
Showing only changes of commit ce232071c1 - Show all commits

View file

@ -5,8 +5,9 @@ lancement du jeu et le temps depuis la dernière frame.
from time import time
from typing import Callable
from engine import GlobalPlugin, KeepAlive
from engine.ecs import World
from engine.ecs import Entity, World
class GlobalTime(KeepAlive, float):
@ -27,6 +28,16 @@ class Delta(KeepAlive, float):
"""
class TimedEvent:
"""
Composant permettant d'executer un callback après un certain temps.
"""
def __init__(self, timer: float, callback: Callable[[World, Entity], object]):
self.timer = timer
self.callback = callback
def __initialize(world: World):
"""
Initialise les ressources pour la gestion du temps.
@ -36,13 +47,22 @@ def __initialize(world: World):
def __update(world: World):
"""
Met à jour les ressources de temps.
Met à jour les ressources de temps et execute les `TimedEvent`.
"""
# On met à jour le temps
now = time()
world[Delta] = delta = now - world[GlobalTime]
world[GlobalTime] = now
world[Time] += delta
# On met à jour les `TimedEvent`
for entity in world.query(TimedEvent):
event = entity[TimedEvent]
event.timer -= delta
if event.timer <= 0:
del entity[TimedEvent]
event.callback(world, entity)
PLUGIN = GlobalPlugin(
[__initialize],