56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 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:
 | |
|     # Iterate through 2 folder depths
 | |
|     for map_dir in (p for p in Paths.MAPS.iterdir()):
 | |
|         if map_dir.is_dir():
 | |
|             for map_file in (p for p in map_dir.iterdir()):
 | |
|                 if Map.matches_target_map_name(map_file, name):
 | |
|                     return Map(map_file)
 | |
|         elif Map.matches_target_map_name(map_dir, name):
 | |
|             return Map(map_dir)
 | |
| 
 | |
|     raise KeyError(f"Map '{name}' was not found. Please put the map file in \"/StarCraft II/Maps/\".")
 | |
| 
 | |
| 
 | |
| 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
 | 
