import inspect
-from abc import abstractmethod
+from abc import ABC, abstractmethod
from collections.abc import Callable, Container, Iterable, Iterator
-from dataclasses import dataclass
from typing import (
Any,
Literal,
- Protocol,
Self,
Union,
cast,
get_args,
override,
- runtime_checkable,
)
from pacman.ecs.schedule import (
)
-@dataclass
-class Resource2[T]:
- storage: type[T]
-
-
-class ComponentLike(Protocol):
+class Bundle(ABC):
@abstractmethod
def components_iter(self) -> Iterator["Component"]: ...
@classmethod
def components_type_iter(cls) -> Iterator[type["Component"]]: ...
-type Components = RecursiveTuple["Component | ComponentLike"]
+type Components = RecursiveTuple["Component | Bundle"]
def components_iter(components: Components) -> Iterator["Component"]:
elif issubclass(components, Component):
yield components
else:
- yield from cast(type[ComponentLike], components).components_type_iter()
+ yield from cast(type[Bundle], components).components_type_iter()
class Archetype:
type ComponentHook[T] = Callable[["World", "Entity", T], None]
-@runtime_checkable
-class FromWorld(Protocol):
+class FromWorld(ABC):
@classmethod
@abstractmethod
def extract_from_world(
pass
-class QueryFilter:
+class QueryFilter(ABC):
@classmethod
@abstractmethod
def filter(
class CommandQueue(FromWorld):
- def __init__(self, world: "World"):
+ def __init__(self, world: "World") -> None:
self._world = world
self._queue: list[Callable[[World], Any]] = []
ents = self.spawn_many_empty(len(comps))
self._base_archetype.add_components(
cast(type[Components], ty),
- list(zip(ents, cast(list[Components], comps))),
+ list(zip(ents, cast(list[Components], comps), strict=True)),
)
return ents