Sm/item link support (#297)
This commit is contained in:
parent
7c6fb26eb7
commit
892357cc2c
|
@ -30,18 +30,27 @@ from randomizer import VariaRandomizer
|
||||||
|
|
||||||
class SMCollectionState(metaclass=AutoLogicRegister):
|
class SMCollectionState(metaclass=AutoLogicRegister):
|
||||||
def init_mixin(self, parent: MultiWorld):
|
def init_mixin(self, parent: MultiWorld):
|
||||||
|
|
||||||
# for unit tests where MultiWorld is instantiated before worlds
|
# for unit tests where MultiWorld is instantiated before worlds
|
||||||
if hasattr(parent, "state"):
|
if hasattr(parent, "state"):
|
||||||
self.smbm = {player: SMBoolManager(player, parent.state.smbm[player].maxDiff,
|
self.smbm = {player: SMBoolManager(player, parent.state.smbm[player].maxDiff,
|
||||||
parent.state.smbm[player].onlyBossLeft) for player in
|
parent.state.smbm[player].onlyBossLeft) for player in
|
||||||
parent.get_game_players("Super Metroid")}
|
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:
|
else:
|
||||||
self.smbm = {}
|
self.smbm = {}
|
||||||
|
|
||||||
def copy_mixin(self, ret) -> CollectionState:
|
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
|
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):
|
class SMWorld(World):
|
||||||
game: str = "Super Metroid"
|
game: str = "Super Metroid"
|
||||||
|
|
|
@ -151,7 +151,7 @@ class SMBoolManager(object):
|
||||||
# take no parameter
|
# take no parameter
|
||||||
for knows in Knows.__dict__:
|
for knows in Knows.__dict__:
|
||||||
if isKnows(knows):
|
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,
|
setattr(self, 'knows'+knows, lambda knows=knows: SMBool(Knows.knowsDict[player].__dict__[knows].bool,
|
||||||
Knows.knowsDict[player].__dict__[knows].difficulty,
|
Knows.knowsDict[player].__dict__[knows].difficulty,
|
||||||
knows=[knows]))
|
knows=[knows]))
|
||||||
|
|
Loading…
Reference in New Issue