From 6a6dfcbaffa1f745a1d27056f2740831d885a1e2 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Mon, 22 Aug 2022 07:24:36 +0200 Subject: [PATCH] Core: add some types to generic.Rules --- worlds/generic/Rules.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/worlds/generic/Rules.py b/worlds/generic/Rules.py index f75b74d0..f53c417e 100644 --- a/worlds/generic/Rules.py +++ b/worlds/generic/Rules.py @@ -49,11 +49,11 @@ def exclusion_rules(world, player: int, exclude_locations: typing.Set[str]): location.progress_type = LocationProgressType.EXCLUDED -def set_rule(spot, rule: CollectionRule): +def set_rule(spot: typing.Union["BaseClasses.Location", "BaseClasses.Entrance"], rule: CollectionRule): spot.access_rule = rule -def add_rule(spot, rule: CollectionRule, combine='and'): +def add_rule(spot: typing.Union["BaseClasses.Location", "BaseClasses.Entrance"], rule: CollectionRule, combine='and'): old_rule = spot.access_rule if combine == 'or': spot.access_rule = lambda state: rule(state) or old_rule(state) @@ -61,35 +61,37 @@ def add_rule(spot, rule: CollectionRule, combine='and'): spot.access_rule = lambda state: rule(state) and old_rule(state) -def forbid_item(location, item: str, player: int): +def forbid_item(location: "BaseClasses.Location", item: str, player: int): old_rule = location.item_rule location.item_rule = lambda i: (i.name != item or i.player != player) and old_rule(i) -def forbid_items_for_player(location, items: typing.Set[str], player: int): +def forbid_items_for_player(location: "BaseClasses.Location", items: typing.Set[str], player: int): old_rule = location.item_rule location.item_rule = lambda i: (i.player != player or i.name not in items) and old_rule(i) -def forbid_items(location, items: typing.Set[str]): +def forbid_items(location: "BaseClasses.Location", items: typing.Set[str]): """unused, but kept as a debugging tool.""" old_rule = location.item_rule location.item_rule = lambda i: i.name not in items and old_rule(i) -def add_item_rule(location, rule: ItemRule): +def add_item_rule(location: "BaseClasses.Location", rule: ItemRule): old_rule = location.item_rule location.item_rule = lambda item: rule(item) and old_rule(item) -def item_in_locations(state, item: str, player: int, locations: typing.Sequence): +def item_in_locations(state: "BaseClasses.CollectionState", item: str, player: int, + locations: typing.Sequence["BaseClasses.Location"]) -> bool: for location in locations: if item_name(state, location[0], location[1]) == (item, player): return True return False -def item_name(state, location: str, player: int) -> typing.Optional[typing.Tuple[str, int]]: +def item_name(state: "BaseClasses.CollectionState", location: str, player: int) -> \ + typing.Optional[typing.Tuple[str, int]]: location = state.world.get_location(location, player) if location.item is None: return None