return inner
+def sprite_spawn_hook() -> RawComponentHook[WiggleSprite]:
+ def inner(arg: RawComponentArg[WiggleSprite]) -> None:
+ for ent, _ in arg:
+ print("spawn", ent)
+
+ return inner
+
+
def unspawn_wiggle(
queue: CommandQueue, q: Query[Entity, WiggleSprite]
) -> None:
- lst = [e for _, e in zip(range(3), q, strict=False)]
- queue.queue(lambda world: world.despawn_many(lst))
+ lst = [(e, WiggleSprite()) for _, e in zip(range(3), q, strict=False)]
+ queue.queue(lambda world: world.insert_many(WiggleSprite, lst))
def close_on_empty(world: World, q: Query[Entity, WiggleSprite]) -> None:
close_on_empty,
)
.with_hook("remove", WiggleSprite, sprite_despawn_hook)
+ .with_hook("insert", WiggleSprite, sprite_spawn_hook)
)
assets = list(Path("./asset").rglob("*.png"))
root = world.spawn(
-from collections.abc import Generator, Iterable
-from typing import cast, get_args
+from collections.abc import Callable, Generator, Iterable
+from typing import cast, get_args, override
-from pacman.ecs.world import Component, Entity, World
+from pacman.ecs.world import Component, Entity, FromWorld, World
class Children(Component):
__no_hook = False
+class Hierarchy(FromWorld):
+ @override
+ @classmethod
+ def extract_from_world(
+ cls, ty: type, world: "World"
+ ) -> Callable[[], Self | None]:
+ pass
+
+ def cleanup(self) -> None:
+ pass
+
+
def get_parents(world: World, entity: Entity) -> Generator[Entity]:
"""Generate parents of entity including self"""
yield entity
dst, comps_ty = self._compute_add(ty)
comps = [components_iter(e) for _, e in components]
positions = [self._positions[e] for e, _ in components]
+ moved_comps = []
kv = {}
for k in comps_ty:
+ if k in self._components:
+ lst = self._components[k]
+ moved_comps.append((k, [lst[i] for i in positions]))
kv[k] = [next(e) for e in comps]
def cb(ty: ComponentID | None) -> Iterable[Any]:
dst._extend(cb)
self._discard(positions)
+ for k, lst in moved_comps:
+ hooks = self._world._components_cache[k][1]
+ hooks._remove(
+ zip((dst._entities[i] for i in itr), lst, strict=True)
+ )
for k in comps_ty:
lst = dst._components[k]
hooks = self._world._components_cache[k][1]