only legal actions can be taken

This commit is contained in:
2024-04-24 23:55:39 +02:00
parent e156d3a951
commit 8b397484cb
17 changed files with 710 additions and 359 deletions
+55 -9
View File
@@ -1,40 +1,86 @@
from typing import List
from typing import List, Optional
from model import Serializable, CardRole, CardType, CardFaction
from model.card_validator import Effect
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["Effects"]
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,
):
super().__init__()
self.effect = effect
self.amount = amount
if sub_effects is None:
sub_effects = []
self.sub_effects = sub_effects
self.effect_type = effect_type
self.mutex: List["Effect"] = []
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
cost: int | None
role: CardRole
card_type: CardType
card_role: CardRole
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
class CardChampion(Card):
"""Represents any champion card"""
defense: int
guard: bool
def serialize(self) -> dict:
return super().serialize() | {
"effects": [effect.uuid for effect in self.effects],
}