/
Vibek
/
First_Game
Обзор
Документация
Войти
/
Vibek
/
First_Game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
resources/audio_loader.py
62 строки
2 KB
Vibek
Добавлены звуки и реализован их менеджер
20 июн 2026, 19:28
20 июн 2026, 19:28
911d021
Код
Авторство
О чём код?
"""Загрузка JSON-манифеста аудио.""" import json from pathlib import Path from resources.audio_profile import ( AudioClipDef, AudioManifest, ClipByField, EventSoundBinding, ) class AudioLoader: """Single Responsibility: парсинг assets/data/audio.json в AudioManifest.""" @staticmethod def load(path: Path) -> AudioManifest: with path.open(encoding="utf-8") as handle: data = json.load(handle) clips: dict[str, AudioClipDef] = {} for clip_id, clip_data in data.get("clips", {}).items(): clips[clip_id] = AudioClipDef( path=str(clip_data["path"]), volume=float(clip_data.get("volume", 1.0)), loop=bool(clip_data.get("loop", False)), ) event_map: dict[str, EventSoundBinding] = {} for event_name, binding_data in data.get("event_map", {}).items(): clip_by = None raw_clip_by = binding_data.get("clip_by") if raw_clip_by: clip_by = ClipByField( field=str(raw_clip_by["field"]), values={str(k): str(v) for k, v in raw_clip_by.get("values", {}).items()}, default=raw_clip_by.get("default"), ) alternates_raw = binding_data.get("clips") alternates = tuple(str(c) for c in alternates_raw) if alternates_raw else None event_map[event_name] = EventSoundBinding( clip=binding_data.get("clip"), clips=alternates, clip_by=clip_by, music=binding_data.get("music"), music_fade_ms=int(binding_data.get("music_fade_ms", 500)), stop_music=bool(binding_data.get("stop_music", False)), stop_music_fade_ms=int(binding_data.get("stop_music_fade_ms", 300)), ) state_music = {str(k): str(v) for k, v in data.get("state_music", {}).items()} return AudioManifest( master_volume=float(data.get("master_volume", 1.0)), sfx_volume=float(data.get("sfx_volume", 1.0)), music_volume=float(data.get("music_volume", 0.5)), clips=clips, event_map=event_map, state_music=state_music, )