/
Vibek
/
First_Game
Обзор
Документация
Войти
/
Vibek
/
First_Game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
resources/profile_loader.py
56 строк
2 KB
Vibek
Спрайты и хитбоксы натянуты и синхронизированы
19 июн 2026, 13:56
19 июн 2026, 13:56
e17c6dd
Код
Авторство
О чём код?
"""Загрузка JSON-профилей сущностей.""" import json from pathlib import Path from models.hitbox import HitboxDef from resources.entity_profile import EntityProfile, SpriteLayout, ThrownSwordLayout class ProfileLoader: """Single Responsibility: парсинг data/*.json в EntityProfile.""" @staticmethod def load(path: Path) -> EntityProfile: with path.open(encoding="utf-8") as handle: data = json.load(handle) hitbox_data = data["hitbox"] sprite_data = data["sprite"] colorkey = sprite_data.get("colorkey") parsed_colorkey = tuple(colorkey) if colorkey else None outward_data = data.get("outward") thrown_sword = None if outward_data: thrown_sword = ThrownSwordLayout( outward_hit_radius=float(outward_data["hit_radius"]), spin_speed=float(outward_data.get("spin_speed", 720)), return_angle_offset_deg=float(data.get("return_angle_offset_deg", 180)), return_art_angle_offset_deg=float( data.get( "return_art_angle_offset_deg", sprite_data.get("angle_offset_deg", 0), ) ), ) return EntityProfile( name=path.stem, hitbox=HitboxDef( width=int(hitbox_data["w"]), height=int(hitbox_data["h"]), offset_x=float(hitbox_data.get("offset_x", 0)), offset_y=float(hitbox_data.get("offset_y", 0)), ), sprite=SpriteLayout( scale=float(sprite_data["scale"]), anchor_x=float(sprite_data.get("anchor_x", 0.5)), anchor_y=float(sprite_data.get("anchor_y", 0.5)), draw_offset_x=float(sprite_data.get("draw_offset_x", 0)), draw_offset_y=float(sprite_data.get("draw_offset_y", 0)), angle_offset_deg=float(sprite_data.get("angle_offset_deg", 0)), colorkey=parsed_colorkey, colorkey_tolerance=int(sprite_data.get("colorkey_tolerance", 0)), ), sprites=dict(data["sprites"]), thrown_sword=thrown_sword, )