ZoneManager.py
Índice
- Descripción General
- Dependencias e Inyecciones
- Constantes y Variables Globales
- Clases y Estructuras de Datos
- Funciones del Módulo (API)
1. Descripción General
ZoneManager.py es el gestor dinámico de Zonas de TPPRPG. Se encarga de parsear y normalizar el contenido del archivo DataStats.json y coordinar con el ModLoader para inyectar áreas nuevas creadas por mods. Su función principal es proveer al motor principal la lista de zonas accesibles, sus descripciones, colores de interfaz y los enemigos que habitan en ellas.
2. Dependencias e Inyecciones
- Archivos Base: Requiere el JSON
./Data/DataStats.jsonpara definir las zonas base (comoForest,Castle, etc.). - Inyecciones:
- Importa dinámicamente
get_mod_api()desdeModulesUtils.ModLoaderpara recoger zonas inyectadas por los mods. - Utiliza la función
ReaddeModulesUtils.Loaderpara la lectura segura de archivos JSON.
3. Constantes y Variables Globales
_zone_manager_instance(ZoneManager|None): Instancia Singleton global para centralizar la carga de zonas.
4. Clases y Estructuras de Datos
ZoneManager
Gestor principal del sistema de zonas.
Atributos de Instancia
self.datastats_path(str): Ruta del archivo ("./Data/DataStats.json").self.zones_cache(Dict): Diccionario para caché interna (usado parcialmente en implementaciones futuras para evitar llamadas redundantes a modding).
Métodos Principales
__init__(self, datastats_path: str = "./Data/DataStats.json")-
Propósito: Inicializa el gestor.
-
get_all_zones(self) -> Dict[str, Dict] - Propósito: Consolida las zonas del juego base y las zonas de los mods en un solo diccionario gigante.
-
Retornos: Un diccionario donde cada llave es el ID de la zona y su valor es un diccionario normalizado con
name,desc,color,enemies,gathering, ysource. -
_load_zones_from_json(self) -> Dict[str, Dict] -
Propósito: Llama a la función
Readpara parsear todo elDataStats.json. Itera sobre las llaves principales validando que contengan un array. Llama a_extract_zone_infopara cada una y le asigna elsourcede"base". -
_load_zones_from_mods(self) -> Dict[str, Dict] -
Propósito: Pide al
ModAPIla lista de zonasstats_injections. Las valida y las parsea con_extract_zone_info, asignándoles elsourcede"mod". Posee untry/exceptsilencioso para no crashear si elModLoaderno está iniciado. -
_extract_zone_info(self, zone_key: str, zone_data: Dict, source: str) -> Dict - Propósito: Extrae y normaliza los strings (Nombre, Descripción, Mensaje de Salida, Color de Consola) y aísla los diccionarios de Enemigos y la metadata de
Gathering(Recolección). -
Retornos: Un diccionario estandarizado de la zona. Retorna
Nonesi la zona está malformada. -
get_zone_by_key(self, zone_key: str) -> Dict -
Propósito: Busca una zona en específico (ej:
"Forest") en el conjunto total de zonas devueltas porget_all_zones(). -
get_zone_enemies(self, zone_key: str) -> List -
Propósito: Devuelve exclusivamente el array de enemigos de una zona específica.
-
get_zones_list(self) -> List[Tuple[str, str, str]] - Propósito: Prepara una lista optimizada para menús interactivos de selección.
- Retornos: Una lista de tuplas
(zone_key, zone_name, zone_color).
5. Funciones del Módulo (API)
El módulo exporta funciones helper globales para que otros sistemas no tengan que instanciar o buscar el Singleton manualmente:
get_zone_manager(datastats_path: str = "./Data/DataStats.json") -> ZoneManager-
Propósito: Patrón Singleton. Retorna la instancia global, creándola si es necesario.
-
get_all_zones() -> Dict[str, Dict] -
Propósito: Wrapper global para
manager.get_all_zones(). -
get_zones_for_selector() -> List[Tuple[str, str, str]] -
Propósito: Wrapper global para
manager.get_zones_list(). -
get_zone_info(zone_key: str) -> Dict - Propósito: Wrapper global para
manager.get_zone_by_key(zone_key).