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