From: = <=> Date: Tue, 22 Sep 2026 13:22:28 +0000 (+0200) Subject: Cleanup and Maybe systemparam X-Git-Url: https://git.uwuaxy.net/sitemap.xml?a=commitdiff_plain;h=1c76a9a1d19db8d7527ea4dcc60c3f7103fd9d2b;p=axy%2Fft%2Fpacman.git Cleanup and Maybe systemparam --- diff --git a/src/pacman/ecs/__init__.py b/src/pacman/ecs/__init__.py index 777dc12..d963f97 100644 --- a/src/pacman/ecs/__init__.py +++ b/src/pacman/ecs/__init__.py @@ -190,27 +190,31 @@ if __name__ == "__main__": WiggleRoot(), ), ) - for j in range(10): - for i, asset in enumerate(assets): - i += j - i = i % len(assets) - world.spawn( - tuple[ - Coord2D, - CoordAbs2D, - Sprite2D, - ShouldRender, - WiggleSprite, - Parent, - ], - ( - Coord2D(30.0 * i, 500.0 + 10.0, 1.0 * i + j), - CoordAbs2D(), - Sprite2D(pygame.image.load(asset)), - ShouldRender(), - WiggleSprite(), - Parent(root), + world.spawn_many( + tuple[ + Coord2D, + CoordAbs2D, + Sprite2D, + ShouldRender, + WiggleSprite, + Parent, + ], + [ + ( + Coord2D( + 30.0 * (n := (i + j) % len(assets)), + 500.0 + 10.0, + 1.0 * n + j, ), + CoordAbs2D(), + Sprite2D(pygame.image.load(asset)), + ShouldRender(), + WiggleSprite(), + Parent(root), ) + for j in range(15) + for i, asset in enumerate(assets) + ], + ) world.run_main() diff --git a/src/pacman/ecs/world.py b/src/pacman/ecs/world.py index aa1dc2b..f6a6a9c 100644 --- a/src/pacman/ecs/world.py +++ b/src/pacman/ecs/world.py @@ -311,6 +311,24 @@ class Not[T: FromWorld | Any](FromWorld, QueryFilter): return inner +class Maybe[T: FromWorld](FromWorld): + def __init__(self, v: T | None) -> None: + self.v = v + + @override + @classmethod + def extract_from_world( + cls, ty: type, world: "World" + ) -> Callable[[], "Maybe[T]"]: + inner = cast(type[T], get_args(ty)[0]) + extractor = inner.extract_from_world(inner, world) + + def inner() -> Maybe[T]: + return Maybe(extractor()) + + return inner + + class Query[Items, Filters = tuple[()]]( FromWorld, Iterable[Items], Container[Entity] ): @@ -732,24 +750,3 @@ class WorldShouldExit(Resource): def should_exit(_: WorldShouldExit) -> bool: return True - - -class Marker(Component): - pass - - -def test_system(q: Query[Marker], queue: CommandQueue) -> None: - queue.queue(lambda world: world.spawn(Marker, Marker())) - queue.queue(lambda world: world.spawn_empty()) - print("ran") - if len(list(q)) == 10: - queue.queue( - lambda world: world.spawn(WorldShouldExit, WorldShouldExit()) - ) - - -if __name__ == "__main__": - world = World() - # world.spawn(WorldShouldExit, WorldShouldExit()) - world.with_systems(MainSchedule, test_system) - world.run_main()