From 246a5c568b6b0b0d7bc6d7f8bd4d38de19935f70 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 30 Nov 2021 05:33:56 +0100 Subject: [PATCH] Core: add some more types --- BaseClasses.py | 30 +++++++++++++++--------------- Main.py | 3 +-- worlds/alttp/EntranceShuffle.py | 2 ++ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 01124129..0c90f37c 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -586,7 +586,7 @@ class CollectionState(object): return any(shop.region.player == player and shop.has(item) and shop.region.can_reach(self) for shop in self.world.shops) - def item_count(self, item, player: int) -> int: + def item_count(self, item: str, player: int) -> int: return self.prog_items[item, player] def has_triforce_pieces(self, count: int, player: int) -> bool: @@ -713,23 +713,23 @@ class CollectionState(object): def has_turtle_rock_medallion(self, player: int) -> bool: return self.has(self.world.required_medallions[player][1], player) - def can_boots_clip_lw(self, player): + def can_boots_clip_lw(self, player: int): if self.world.mode[player] == 'inverted': return self.has('Pegasus Boots', player) and self.has('Moon Pearl', player) return self.has('Pegasus Boots', player) - def can_boots_clip_dw(self, player): + def can_boots_clip_dw(self, player: int): if self.world.mode[player] != 'inverted': return self.has('Pegasus Boots', player) and self.has('Moon Pearl', player) return self.has('Pegasus Boots', player) - def can_get_glitched_speed_lw(self, player): + def can_get_glitched_speed_lw(self, player: int): rules = [self.has('Pegasus Boots', player), any([self.has('Hookshot', player), self.has_sword(player)])] if self.world.mode[player] == 'inverted': rules.append(self.has('Moon Pearl', player)) return all(rules) - def can_superbunny_mirror_with_sword(self, player): + def can_superbunny_mirror_with_sword(self, player: int): return self.has('Magic Mirror', player) and self.has_sword(player) def can_get_glitched_speed_dw(self, player: int): @@ -758,7 +758,7 @@ class CollectionState(object): return changed - def remove(self, item): + def remove(self, item: Item): changed = self.world.worlds[item.player].remove(self, item) if changed: # invalidate caches, nothing can be trusted anymore now @@ -776,14 +776,14 @@ class RegionType(int, Enum): Dungeon = 4 @property - def is_indoors(self): + def is_indoors(self) -> bool: """Shorthand for checking if Cave or Dungeon""" return self in (RegionType.Cave, RegionType.Dungeon) class Region(object): - def __init__(self, name: str, type, hint, player: int, world: Optional[MultiWorld] = None): + def __init__(self, name: str, type: str, hint, player: int, world: Optional[MultiWorld] = None): self.name = name self.type = type self.entrances = [] @@ -798,12 +798,12 @@ class Region(object): self.hint_text = hint self.player = player - def can_reach(self, state: CollectionState): + def can_reach(self, state: CollectionState) -> bool: if state.stale[self.player]: state.update_reachable_regions(self.player) return self in state.reachable_regions[self.player] - def can_reach_private(self, state: CollectionState): + def can_reach_private(self, state: CollectionState) -> bool: for entrance in self.entrances: if entrance.can_reach(state): if not self in state.path: @@ -831,7 +831,7 @@ class Entrance(object): self.player = player self.hide_path = False - def can_reach(self, state): + def can_reach(self, state: CollectionState) -> bool: if self.parent_region.can_reach(state) and self.access_rule(state): if not self.hide_path and not self in state.path: state.path[self] = (self.name, state.path.get(self.parent_region, (self.parent_region.name, None))) @@ -839,7 +839,7 @@ class Entrance(object): return False - def connect(self, region, addresses=None, target=None): + def connect(self, region: Region, addresses=None, target = None): self.connected_region = region self.target = target self.addresses = addresses @@ -865,11 +865,11 @@ class Dungeon(object): self.world = None @property - def boss(self): + def boss(self) -> Optional[Boss]: return self.bosses.get(None, None) @boss.setter - def boss(self, value): + def boss(self, value: Optional[Boss]): self.bosses[None] = value @property @@ -896,7 +896,7 @@ class Dungeon(object): class Boss(): - def __init__(self, name, enemizer_name, defeat_rule, player: int): + def __init__(self, name: str, enemizer_name: str, defeat_rule, player: int): self.name = name self.enemizer_name = enemizer_name self.defeat_rule = defeat_rule diff --git a/Main.py b/Main.py index 3fed538d..5d7ea8e8 100644 --- a/Main.py +++ b/Main.py @@ -321,8 +321,7 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No logger.warning("Location Accessibility requirements not fulfilled.") # retrieve exceptions via .result() if they occured. - if multidata_task: - multidata_task.result() + multidata_task.result() for i, future in enumerate(concurrent.futures.as_completed(output_file_futures), start=1): if i % 10 == 0 or i == len(output_file_futures): logger.info(f'Generating output files ({i}/{len(output_file_futures)}).') diff --git a/worlds/alttp/EntranceShuffle.py b/worlds/alttp/EntranceShuffle.py index 2d555930..fb903f88 100644 --- a/worlds/alttp/EntranceShuffle.py +++ b/worlds/alttp/EntranceShuffle.py @@ -1796,6 +1796,7 @@ def link_inverted_entrances(world, player): if world.get_entrance('Inverted Ganons Tower', player).connected_region.name != 'Ganons Tower (Entrance)': world.ganonstower_vanilla[player] = False + def connect_simple(world, exitname, regionname, player): world.get_entrance(exitname, player).connect(world.get_region(regionname, player)) @@ -1820,6 +1821,7 @@ def connect_entrance(world, entrancename: str, exitname: str, player: int): entrance.connect(region, addresses, target) world.spoiler.set_entrance(entrance.name, exit.name if exit is not None else region.name, 'entrance', player) + def connect_exit(world, exitname, entrancename, player): entrance = world.get_entrance(entrancename, player) exit = world.get_entrance(exitname, player)