Skip to content

Commit 88ee570

Browse files
committed
Fix relation fetching when loading worlds
There was a gap in tests and the relations that came out of loading the world were added to the lookup table in the inverse direction. Mostly caused by a bad naming scheme and lack of tests.
1 parent 087a06b commit 88ee570

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
9+
### Fixed
10+
- Unpickled worlds had reversed relations from what were saved.
911

1012
## [4.2.0] - 2023-07-28
1113
### Added

tcod/ecs/world.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,20 @@ def _relations_lookup_from(
5555
relations_lookup: defaultdict[
5656
tuple[Any, _RelationTargetLookup] | tuple[_RelationTargetLookup, Any, None], set[Entity]
5757
] = defaultdict(set)
58-
for entity, tags in tags_by_entity.items():
58+
for origin, tags in tags_by_entity.items():
5959
for tag, targets in tags.items():
6060
for target in targets:
61-
relations_lookup[(tag, ...)].add(target)
62-
relations_lookup[(tag, entity)].add(target)
63-
relations_lookup[(target, tag, None)].add(entity)
64-
relations_lookup[(..., tag, None)].add(entity)
65-
for entity, components in components_by_entity.items():
61+
relations_lookup[(tag, ...)].add(origin)
62+
relations_lookup[(tag, target)].add(origin)
63+
relations_lookup[(origin, tag, None)].add(target)
64+
relations_lookup[(..., tag, None)].add(target)
65+
for origin, components in components_by_entity.items():
6666
for component_key, target_components in components.items():
6767
for target in target_components:
68-
relations_lookup[(component_key, ...)].add(target)
69-
relations_lookup[(component_key, entity)].add(target)
70-
relations_lookup[(target, component_key, None)].add(entity)
71-
relations_lookup[(..., component_key, None)].add(entity)
68+
relations_lookup[(component_key, ...)].add(origin)
69+
relations_lookup[(component_key, origin)].add(origin)
70+
relations_lookup[(origin, component_key, None)].add(target)
71+
relations_lookup[(..., component_key, None)].add(target)
7272

7373
return relations_lookup
7474

tests/test_ecs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ def check_world_v1(world: tcod.ecs.World) -> None:
8484
assert "tag" in entity.tags
8585
entity_b = world.named["B"]
8686
assert entity_b.relation_tag["ChildOf"] == entity
87+
assert set(world.Q.all_of(relations=[("ChildOf", ...)])) == {entity_b}
88+
assert set(world.Q.all_of(relations=[("ChildOf", entity)])) == {entity_b}
89+
assert set(world.Q.all_of(relations=[(..., "ChildOf", None)])) == {entity}
90+
assert set(world.Q.all_of(relations=[(entity_b, "ChildOf", None)])) == {entity}
8791
assert entity_b.relation_components[str][entity] == "str"
8892
assert not world[None].components
8993

0 commit comments

Comments
 (0)