You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.4 KiB
70 lines
1.4 KiB
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
|
|
|