-
-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
enhancementNew feature or requestNew feature or request
Description
There should be support for callbacks on specific state changes such as a component being added or removed:
@attrs.define(frozen=True) # Class is frozen to ensure that a changed value is announced
class Position:
x: int
y: int
@tcod.ecs.register_on_component_changed(Position)
def on_changed_position(entity: Entity, old_pos: Position | None, new_pos: Position | None) -> None:
"""Check for Position changes in all worlds."""
if old_pos is not None and new_pos is not None:
print(f"Changed from {old_pos} to {new_pos}")
elif old_pos is None and new_pos is not None:
print(f"{new_pos} added")
else:
assert old_pos is not None and new_pos is None
print(f"{old_pos} removed")
This is global, there should also be a per-world variant.
These types of callbacks can also be used to manage compiled queries in #3
Would also need to add callbacks for tags and relations.
These should probably not be called during unpickling.
- On component changes
- On tag added/removed
- On relation added/removed
- On relation component changes
- World-specific callbacks
- Entity added/removed to compiled query
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request