Archived
89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
from typing import List, Optional
|
|
from model import Serializable, CardRole, CardType, CardFaction
|
|
from model.card_validator import CardEffects, EffectType, EffectTimes
|
|
|
|
|
|
class Effect(Serializable):
|
|
"""Represents an effect of a card (gold, damage, heal, draw a card...)"""
|
|
|
|
object_type = "effect"
|
|
effect: CardEffects
|
|
amount: int
|
|
sub_effects: List["Effect"]
|
|
mutex: List["Effect"]
|
|
effect_type: Optional[EffectType] = None
|
|
times: Optional[EffectTimes] = None
|
|
|
|
def __init__(
|
|
self,
|
|
effect: CardEffects,
|
|
amount: int,
|
|
sub_effects: Optional[List["Effect"]] = None,
|
|
effect_type: Optional[EffectType] = None,
|
|
times: Optional[EffectTimes] = None,
|
|
mutex: Optional[List["Effect"]] = None,
|
|
):
|
|
super().__init__()
|
|
if mutex is None:
|
|
mutex = []
|
|
if sub_effects is None:
|
|
sub_effects = []
|
|
self.effect = effect
|
|
self.amount = amount
|
|
self.sub_effects = sub_effects
|
|
self.effect_type = effect_type
|
|
self.mutex = mutex
|
|
self.times = times
|
|
|
|
def serialize(self) -> dict:
|
|
return super().serialize() | {
|
|
"sub_effects": [effect.uuid for effect in self.sub_effects],
|
|
"mutex": [effect.uuid for effect in self.mutex],
|
|
}
|
|
|
|
|
|
class Card(Serializable):
|
|
"""Represents any playable card"""
|
|
|
|
id: int
|
|
object_type = "card"
|
|
sprite: str
|
|
name: str
|
|
cost: int | None
|
|
role: CardRole
|
|
card_type: CardType
|
|
faction: CardFaction
|
|
effects: List[Effect]
|
|
defense: Optional[int]
|
|
guard: Optional[bool]
|
|
|
|
def __init__(
|
|
self,
|
|
card_id: int,
|
|
sprite: str,
|
|
name: str,
|
|
cost: int | None,
|
|
card_type: CardType,
|
|
card_role: CardRole,
|
|
faction: CardFaction,
|
|
effects: List[Effect],
|
|
defense: Optional[int],
|
|
guard: Optional[bool],
|
|
):
|
|
super().__init__()
|
|
self.card_id = card_id
|
|
self.sprite = sprite
|
|
self.name = name
|
|
self.cost = cost
|
|
self.card_type = card_type
|
|
self.card_role = card_role
|
|
self.faction = faction
|
|
self.effects = effects
|
|
self.defense = defense
|
|
self.guard = guard
|
|
|
|
def serialize(self) -> dict:
|
|
return super().serialize() | {
|
|
"effects": [effect.uuid for effect in self.effects],
|
|
}
|