CrystTCG-DB-AngeU/model/progress.py

102 lines
2.7 KiB
Python

from typing import Optional, List, Tuple
from .constants import AbilityType, FrameType
class Link:
cost: int
# condition: [Omega, Sigma, Any]
# example: "Omega, Sigma, Sigma, 2" -> (1, 2, 2)
condition: Tuple[int, int, int]
effect: str
def __init__(self, cost: int, condition: Tuple[int, int, int], effect: str) -> None:
self.cost = cost
self.condition = condition
self.effect = effect
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,
}
class Ex:
name: str
effect: str
def __init__(self, name: str, effect: str) -> None:
self.name = name
self.effect = effect
def __json__(self):
return {"name": self.name, "effect": self.effect}
class Ability:
type: AbilityType
effect: str
def __init__(self, type: AbilityType, effect: str) -> None:
self.type = type
self.effect = effect
def __json__(self):
return {"type": self.type.value, "effect": self.effect}
class ProgressAttr:
character: str
abilities: List[Ability]
link: Optional[Link]
ex: Optional[Ex]
def __init__(
self,
character: str,
link: Optional[Link],
ex: Optional[Ex],
abilities: List[Ability],
) -> None:
self.character = character
self.link = link
self.ex = ex
self.abilities = abilities
def __json__(self):
return {
"character": self.character,
"abilities": [ability.__json__() for ability in self.abilities],
"link": self.link.__json__() if self.link else None,
"ex": self.ex.__json__() if self.ex else None,
}
def __text__(self) -> str:
text = ""
for ability in self.abilities:
if ability.type == AbilityType.Persistent:
type_text = "[常]"
elif ability.type == AbilityType.Automatic:
type_text = "[自]"
elif ability.type == AbilityType.Activated:
type_text = "[起]"
text += f"{type_text} {ability.effect}\n"
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.condition}] {condition} {self.link.effect}\n"
return text