Core: offer API hook to modify Group World creation
This commit is contained in:
parent
5d47c5b316
commit
e114ed5566
|
@ -202,14 +202,7 @@ class MultiWorld():
|
||||||
self.player_types[new_id] = NetUtils.SlotType.group
|
self.player_types[new_id] = NetUtils.SlotType.group
|
||||||
self._region_cache[new_id] = {}
|
self._region_cache[new_id] = {}
|
||||||
world_type = AutoWorld.AutoWorldRegister.world_types[game]
|
world_type = AutoWorld.AutoWorldRegister.world_types[game]
|
||||||
for option_key, option in world_type.option_definitions.items():
|
self.worlds[new_id] = world_type.create_group(self, new_id, players)
|
||||||
getattr(self, option_key)[new_id] = option(option.default)
|
|
||||||
for option_key, option in Options.common_options.items():
|
|
||||||
getattr(self, option_key)[new_id] = option(option.default)
|
|
||||||
for option_key, option in Options.per_game_common_options.items():
|
|
||||||
getattr(self, option_key)[new_id] = option(option.default)
|
|
||||||
|
|
||||||
self.worlds[new_id] = world_type(self, new_id)
|
|
||||||
self.worlds[new_id].collect_item = classmethod(AutoWorld.World.collect_item).__get__(self.worlds[new_id])
|
self.worlds[new_id].collect_item = classmethod(AutoWorld.World.collect_item).__get__(self.worlds[new_id])
|
||||||
self.player_name[new_id] = name
|
self.player_name[new_id] = name
|
||||||
|
|
||||||
|
|
|
@ -358,6 +358,21 @@ class World(metaclass=AutoWorldRegister):
|
||||||
logging.warning(f"World {self} is generating a filler item without custom filler pool.")
|
logging.warning(f"World {self} is generating a filler item without custom filler pool.")
|
||||||
return self.multiworld.random.choice(tuple(self.item_name_to_id.keys()))
|
return self.multiworld.random.choice(tuple(self.item_name_to_id.keys()))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create_group(cls, multiworld: "MultiWorld", new_player_id: int, players: Set[int]) -> World:
|
||||||
|
"""Creates a group, which is an instance of World that is responsible for multiple others.
|
||||||
|
An example case is ItemLinks creating these."""
|
||||||
|
import Options
|
||||||
|
|
||||||
|
for option_key, option in cls.option_definitions.items():
|
||||||
|
getattr(multiworld, option_key)[new_player_id] = option(option.default)
|
||||||
|
for option_key, option in Options.common_options.items():
|
||||||
|
getattr(multiworld, option_key)[new_player_id] = option(option.default)
|
||||||
|
for option_key, option in Options.per_game_common_options.items():
|
||||||
|
getattr(multiworld, option_key)[new_player_id] = option(option.default)
|
||||||
|
|
||||||
|
return cls(multiworld, new_player_id)
|
||||||
|
|
||||||
# decent place to implement progressive items, in most cases can stay as-is
|
# decent place to implement progressive items, in most cases can stay as-is
|
||||||
def collect_item(self, state: "CollectionState", item: "Item", remove: bool = False) -> Optional[str]:
|
def collect_item(self, state: "CollectionState", item: "Item", remove: bool = False) -> Optional[str]:
|
||||||
"""Collect an item name into state. For speed reasons items that aren't logically useful get skipped.
|
"""Collect an item name into state. For speed reasons items that aren't logically useful get skipped.
|
||||||
|
|
Loading…
Reference in New Issue