remove reachable cache. Seems I missed invalidations somewhere as the wrong state can be retained.
This commit is contained in:
parent
611f4d3fb2
commit
99e7d51f11
|
@ -344,7 +344,6 @@ class CollectionState(object):
|
||||||
self.stale = {player: True for player in range(1, parent.players + 1)}
|
self.stale = {player: True for player in range(1, parent.players + 1)}
|
||||||
for item in parent.precollected_items:
|
for item in parent.precollected_items:
|
||||||
self.collect(item, True)
|
self.collect(item, True)
|
||||||
self._reachable_cache = set()
|
|
||||||
|
|
||||||
def update_reachable_regions(self, player: int):
|
def update_reachable_regions(self, player: int):
|
||||||
player_regions = self.world.get_regions(player)
|
player_regions = self.world.get_regions(player)
|
||||||
|
@ -371,22 +370,16 @@ class CollectionState(object):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def can_reach(self, spot, resolution_hint=None, player=None):
|
def can_reach(self, spot, resolution_hint=None, player=None):
|
||||||
if (player, getattr(spot, "name", spot)) in self._reachable_cache:
|
if not hasattr(spot, "spot_type"):
|
||||||
return True
|
# try to resolve a name
|
||||||
else:
|
if resolution_hint == 'Location':
|
||||||
if not hasattr(spot, "spot_type"):
|
spot = self.world.get_location(spot, player)
|
||||||
# try to resolve a name
|
elif resolution_hint == 'Entrance':
|
||||||
if resolution_hint == 'Location':
|
spot = self.world.get_entrance(spot, player)
|
||||||
spot = self.world.get_location(spot, player)
|
else:
|
||||||
elif resolution_hint == 'Entrance':
|
# default to Region
|
||||||
spot = self.world.get_entrance(spot, player)
|
spot = self.world.get_region(spot, player)
|
||||||
else:
|
return spot.can_reach(self)
|
||||||
# default to Region
|
|
||||||
spot = self.world.get_region(spot, player)
|
|
||||||
res = spot.can_reach(self)
|
|
||||||
if res:
|
|
||||||
self._reachable_cache.add((player, spot.name))
|
|
||||||
return spot.can_reach(self)
|
|
||||||
|
|
||||||
def sweep_for_events(self, key_only=False, locations=None):
|
def sweep_for_events(self, key_only=False, locations=None):
|
||||||
# this may need improvement
|
# this may need improvement
|
||||||
|
@ -662,7 +655,6 @@ class CollectionState(object):
|
||||||
if self.prog_items[to_remove, item.player] < 1:
|
if self.prog_items[to_remove, item.player] < 1:
|
||||||
del (self.prog_items[to_remove, item.player])
|
del (self.prog_items[to_remove, item.player])
|
||||||
# invalidate caches, nothing can be trusted anymore now
|
# invalidate caches, nothing can be trusted anymore now
|
||||||
self._reachable_cache = set()
|
|
||||||
self.reachable_regions[item.player] = set()
|
self.reachable_regions[item.player] = set()
|
||||||
self.stale[item.player] = True
|
self.stale[item.player] = True
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue