Sm/item link support (#297)

This commit is contained in:
lordlou 2022-03-01 18:37:11 -05:00 committed by GitHub
parent 7c6fb26eb7
commit 892357cc2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 4 deletions

View File

@ -30,18 +30,27 @@ from randomizer import VariaRandomizer
class SMCollectionState(metaclass=AutoLogicRegister):
def init_mixin(self, parent: MultiWorld):
# for unit tests where MultiWorld is instantiated before worlds
if hasattr(parent, "state"):
self.smbm = {player: SMBoolManager(player, parent.state.smbm[player].maxDiff,
parent.state.smbm[player].onlyBossLeft) for player in
parent.get_game_players("Super Metroid")}
parent.state.smbm[player].onlyBossLeft) for player in
parent.get_game_players("Super Metroid")}
for player, group in parent.groups.items():
if (group["game"] == "Super Metroid"):
self.smbm[player] = SMBoolManager(player)
if player not in parent.state.smbm:
parent.state.smbm[player] = SMBoolManager(player)
else:
self.smbm = {}
def copy_mixin(self, ret) -> CollectionState:
ret.smbm = {player: copy.deepcopy(self.smbm[player]) for player in self.world.get_game_players("Super Metroid")}
ret.smbm = {player: copy.deepcopy(self.smbm[player]) for player in self.smbm}
return ret
def get_game_players(self, multiword: MultiWorld, game_name: str):
return tuple(player for player in multiword.get_all_ids() if multiword.game[player] == game_name)
class SMWorld(World):
game: str = "Super Metroid"

View File

@ -151,7 +151,7 @@ class SMBoolManager(object):
# take no parameter
for knows in Knows.__dict__:
if isKnows(knows):
if knows in Knows.knowsDict[player].__dict__:
if player in Knows.knowsDict and knows in Knows.knowsDict[player].__dict__:
setattr(self, 'knows'+knows, lambda knows=knows: SMBool(Knows.knowsDict[player].__dict__[knows].bool,
Knows.knowsDict[player].__dict__[knows].difficulty,
knows=[knows]))