from dataclasses import dataclass from enums import Affinity, Element, CharacterType, Visibility, CombatSide from jsonable import JsonableDataclassArgs, Jsonable, JsonableParentArgs @dataclass(**JsonableDataclassArgs) class Target(Jsonable): index: int key: str name: str @dataclass(**JsonableParentArgs) class Effect(Jsonable): pass @dataclass(**JsonableParentArgs) class Action(Jsonable): pass @dataclass(**JsonableDataclassArgs) class Clock(Jsonable): name: str current: int maximum: int @dataclass(**JsonableDataclassArgs) class Character(Jsonable): name: str hp: int max_hp: int mp: int max_mp: int ip: int max_ip: int sp: int | None df: int mdf: int dr: int statuses: frozenset[str] affinities: tuple[tuple[Element, Affinity], ...] turns_left: int max_turns: int visibility: Visibility character_type: CharacterType side: CombatSide color: str | None thumbnail: str | None access_key: str player_discord_id: str | None player_name: str | None @dataclass(**JsonableDataclassArgs) class CombatStatus(Jsonable): round_number: int fp_spent: int up_spent: int clocks: tuple[Clock, ...] characters: tuple[Character, ...] log: tuple[Action, ...] starting_side: CombatSide | None active_side: CombatSide | None active_combatant: int | None