mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Protocol
 | |
| 
 | |
| from BaseClasses import Region
 | |
| from . import vanilla_data, mods
 | |
| from .entrance_rando import create_player_randomization_flag, connect_regions
 | |
| from .model import ConnectionData, RegionData
 | |
| from ..content import StardewContent
 | |
| from ..content.vanilla.ginger_island import ginger_island_content_pack
 | |
| from ..options import StardewValleyOptions
 | |
| 
 | |
| 
 | |
| class RegionFactory(Protocol):
 | |
|     def __call__(self, name: str) -> Region:
 | |
|         raise NotImplementedError
 | |
| 
 | |
| 
 | |
| def create_regions(region_factory: RegionFactory, world_options: StardewValleyOptions, content: StardewContent) -> dict[str, Region]:
 | |
|     connection_data_by_name, region_data_by_name = create_connections_and_regions(content.registered_packs)
 | |
| 
 | |
|     regions_by_name: dict[str: Region] = {
 | |
|         region_name: region_factory(region_name)
 | |
|         for region_name in region_data_by_name
 | |
|     }
 | |
| 
 | |
|     randomization_flag = create_player_randomization_flag(world_options.entrance_randomization, content)
 | |
|     connect_regions(region_data_by_name, connection_data_by_name, regions_by_name, randomization_flag)
 | |
| 
 | |
|     return regions_by_name
 | |
| 
 | |
| 
 | |
| def create_connections_and_regions(active_content_packs: set[str]) -> tuple[dict[str, ConnectionData], dict[str, RegionData]]:
 | |
|     regions_by_name = create_all_regions(active_content_packs)
 | |
|     connections_by_name = create_all_connections(active_content_packs)
 | |
| 
 | |
|     return connections_by_name, regions_by_name
 | |
| 
 | |
| 
 | |
| def create_all_regions(active_content_packs: set[str]) -> dict[str, RegionData]:
 | |
|     current_regions_by_name = create_vanilla_regions(active_content_packs)
 | |
|     mods.modify_regions_for_mods(current_regions_by_name, sorted(active_content_packs))
 | |
|     return current_regions_by_name
 | |
| 
 | |
| 
 | |
| def create_vanilla_regions(active_content_packs: set[str]) -> dict[str, RegionData]:
 | |
|     if ginger_island_content_pack.name in active_content_packs:
 | |
|         return {**vanilla_data.regions_with_ginger_island_by_name}
 | |
|     else:
 | |
|         return {**vanilla_data.regions_without_ginger_island_by_name}
 | |
| 
 | |
| 
 | |
| def create_all_connections(active_content_packs: set[str]) -> dict[str, ConnectionData]:
 | |
|     connections = create_vanilla_connections(active_content_packs)
 | |
|     mods.modify_connections_for_mods(connections, sorted(active_content_packs))
 | |
|     return connections
 | |
| 
 | |
| 
 | |
| def create_vanilla_connections(active_content_packs: set[str]) -> dict[str, ConnectionData]:
 | |
|     if ginger_island_content_pack.name in active_content_packs:
 | |
|         return {**vanilla_data.connections_with_ginger_island_by_name}
 | |
|     else:
 | |
|         return {**vanilla_data.connections_without_ginger_island_by_name}
 | 
