mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	 648d682add
			
		
	
	648d682add
	
	
	
		
			
			Migrates SC2 WoL world to the new mod with new items and locations. The new mod has a different architecture making it more future proof (with planned adding of other campaigns). Also gets rid of several old bugs Adds new short game formats intended for sync games (Tiny Grid, Mini Gauntlet). The final mission isn't decided by campaign length anymore but it's configurable instead. Allow excluding missions for Vanilla Shuffled, corrected some documentation. NOTE: This is a squashed commit with Salz' HotS excluded (not ready for the release and I plan multi-campaign instead) --------- Co-authored-by: Matthew <matthew.marinets@gmail.com>
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from __future__ import annotations
 | |
| 
 | |
| from pathlib import Path
 | |
| 
 | |
| from worlds._sc2common.bot import logger
 | |
| 
 | |
| from .paths import Paths
 | |
| 
 | |
| 
 | |
| def get(name: str) -> Map:
 | |
|     for map_dir in (p for p in Paths.MAPS.iterdir()):
 | |
|         map = find_map_in_dir(name, map_dir)
 | |
|         if map is not None:
 | |
|             return map
 | |
| 
 | |
|     raise KeyError(f"Map '{name}' was not found. Please put the map file in \"/StarCraft II/Maps/\".")
 | |
| 
 | |
| 
 | |
| # Go deeper
 | |
| def find_map_in_dir(name, path):
 | |
|     if Map.matches_target_map_name(path, name):
 | |
|         return Map(path)
 | |
| 
 | |
|     if path.name.endswith("SC2Map"):
 | |
|         return None
 | |
| 
 | |
|     if path.is_dir():
 | |
|         for childPath in (p for p in path.iterdir()):
 | |
|             map = find_map_in_dir(name, childPath)
 | |
|             if map is not None:
 | |
|                 return map
 | |
| 
 | |
|     return None
 | |
| 
 | |
| 
 | |
| class Map:
 | |
| 
 | |
|     def __init__(self, path: Path):
 | |
|         self.path = path
 | |
| 
 | |
|         if self.path.is_absolute():
 | |
|             try:
 | |
|                 self.relative_path = self.path.relative_to(Paths.MAPS)
 | |
|             except ValueError:  # path not relative to basedir
 | |
|                 logger.warning(f"Using absolute path: {self.path}")
 | |
|                 self.relative_path = self.path
 | |
|         else:
 | |
|             self.relative_path = self.path
 | |
| 
 | |
|     @property
 | |
|     def name(self):
 | |
|         return self.path.stem
 | |
| 
 | |
|     @property
 | |
|     def data(self):
 | |
|         with open(self.path, "rb") as f:
 | |
|             return f.read()
 | |
| 
 | |
|     def __repr__(self):
 | |
|         return f"Map({self.path})"
 | |
| 
 | |
|     @classmethod
 | |
|     def is_map_file(cls, file: Path) -> bool:
 | |
|         return file.is_file() and file.suffix == ".SC2Map"
 | |
| 
 | |
|     @classmethod
 | |
|     def matches_target_map_name(cls, file: Path, name: str) -> bool:
 | |
|         return cls.is_map_file(file) and file.stem == name
 |