Fill: Cache get_all_State

This commit is contained in:
Fabian Dill 2021-08-09 06:33:26 +02:00
parent cc458ca5b1
commit 95350a1fa9
2 changed files with 14 additions and 11 deletions

View File

@ -197,7 +197,6 @@ class MultiWorld():
self._recache() self._recache()
return self._region_cache[player][regionname] return self._region_cache[player][regionname]
def get_entrance(self, entrance: str, player: int) -> Entrance: def get_entrance(self, entrance: str, player: int) -> Entrance:
try: try:
return self._entrance_cache[entrance, player] return self._entrance_cache[entrance, player]
@ -205,7 +204,6 @@ class MultiWorld():
self._recache() self._recache()
return self._entrance_cache[entrance, player] return self._entrance_cache[entrance, player]
def get_location(self, location: str, player: int) -> Location: def get_location(self, location: str, player: int) -> Location:
try: try:
return self._location_cache[location, player] return self._location_cache[location, player]
@ -213,15 +211,18 @@ class MultiWorld():
self._recache() self._recache()
return self._location_cache[location, player] return self._location_cache[location, player]
def get_dungeon(self, dungeonname: str, player: int) -> Dungeon: def get_dungeon(self, dungeonname: str, player: int) -> Dungeon:
for dungeon in self.dungeons: for dungeon in self.dungeons:
if dungeon.name == dungeonname and dungeon.player == player: if dungeon.name == dungeonname and dungeon.player == player:
return dungeon return dungeon
raise KeyError('No such dungeon %s for player %d' % (dungeonname, player)) raise KeyError('No such dungeon %s for player %d' % (dungeonname, player))
def get_all_state(self, keys=False) -> CollectionState: def get_all_state(self, keys=False) -> CollectionState:
key = f"_all_state_{keys}"
cached = getattr(self, key, None)
if cached:
return cached.copy()
ret = CollectionState(self) ret = CollectionState(self)
for item in self.itempool: for item in self.itempool:
@ -246,6 +247,7 @@ class MultiWorld():
p): p):
world.collect(ret, item) world.collect(ret, item)
ret.sweep_for_events() ret.sweep_for_events()
setattr(self, key, ret)
return ret return ret
def get_items(self) -> list: def get_items(self) -> list:

15
Main.py
View File

@ -271,13 +271,14 @@ def main(args, seed=None):
world.spoiler.hashes[(player, team)] = get_hash_string(rom.hash) world.spoiler.hashes[(player, team)] = get_hash_string(rom.hash)
palettes_options = {} palettes_options = {
palettes_options['dungeon'] = args.uw_palettes[player] 'dungeon': args.uw_palettes[player],
palettes_options['overworld'] = args.ow_palettes[player] 'overworld': args.ow_palettes[player],
palettes_options['hud'] = args.hud_palettes[player] 'hud': args.hud_palettes[player],
palettes_options['sword'] = args.sword_palettes[player] 'sword': args.sword_palettes[player],
palettes_options['shield'] = args.shield_palettes[player] 'shield': args.shield_palettes[player],
palettes_options['link'] = args.link_palettes[player] 'link': args.link_palettes[player]
}
apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player], apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player],
args.fastmenu[player], args.disablemusic[player], args.sprite[player], args.fastmenu[player], args.disablemusic[player], args.sprite[player],