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()
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]
):
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()