from typing import Optional, Tuple from .constants import FrameType class Link: cost: int # condition: [Omega, Sigma, Any] # example: "Omega, Sigma, Sigma, 2" -> (1, 2, 2) condition: Tuple[int, int, int] effect: str effect_tran:str def __init__(self, cost: int, condition: Tuple[int, int, int], effect: str,effect_tran:str) -> None: self.cost = cost self.condition = condition self.effect = effect self.effect_tran = effect_tran def __json__(self): return { "cost": self.cost, "condition": [FrameType.Omega.value] * self.condition[0] + [FrameType.Sigma.value] * self.condition[1] + [FrameType.Any.value] * self.condition[2], "effect": self.effect, "effect_tran": self.effect_tran, } class Ex: name: str effect: str name_tran:str effect_tran: str def __init__(self, name: str, effect: str,name_tran:str,effect_tran:str) -> None: self.name = name self.effect = effect self.name_tran = name_tran self.effect_tran = effect_tran def __json__(self): return {"name": self.name, "effect": self.effect,"name_tran":self.name_tran,"effect_tran":self.effect_tran} class ProgressAttr: character: str character_tran: str link: Optional[Link] ex: Optional[Ex] def __init__( self, character: str, character_tran: str, link: Optional[Link], ex: Optional[Ex], ) -> None: self.character = character self.character_tran = character_tran self.link = link self.ex = ex def __json__(self): return { "character": self.character, "character_tran": self.character_tran, "link": self.link.__json__() if self.link else None, "ex": self.ex.__json__() if self.ex else None, } def __text__(self) -> str: text = "" if self.ex: text += f"[EX] {self.ex.name} {self.ex.effect}\n" if self.link: condition = ( ["Ω" for _ in range(self.link.condition[0])] + ["Σ" for _ in range(self.link.condition[1])] + [str(self.link.condition[2])] ) text += f"[Link-{self.link.cost}] {condition} {self.link.effect}\n" return text