from __future__ import annotations from typing import Any, Dict class Battle: def __init__( self, sector_id: str, player_1_id: str | None = None, player_2_id: str | None = None, ): self.sector_id: str = sector_id # ref to Campaign.sector self.player_1_id: str | None = player_1_id # ref to Campaign.participants self.player_2_id: str | None = player_2_id # ref to Campaign.participants self.winner_id: str | None = ( None # ref to Campaign.participants within player_1/2 ) self.score: str | None = None self.victory_condition: str | None = None self.comment: str | None = None def set_id(self, new_id: str) -> None: self.sector_id = new_id def set_player_1(self, new_player_id: str | None) -> None: self.player_1_id = new_player_id def set_player_2(self, new_player_id: str | None) -> None: self.player_2_id = new_player_id def set_winner(self, new_player_id: str | None) -> None: self.winner_id = new_player_id def set_score(self, new_score: str | None) -> None: self.score = new_score def set_victory_condition(self, new_victory_condition: str | None) -> None: self.victory_condition = new_victory_condition def set_comment(self, new_comment: str | None) -> None: self.comment = new_comment # TODO improve draw detection def is_draw(self) -> bool: return self.winner_id is None and self.score is not None def toDict(self) -> Dict[str, Any]: return { "sector_id": self.sector_id, "player_1_id": self.player_1_id or None, "player_2_id": self.player_2_id or None, "winner_id": self.winner_id or None, "score": self.score or None, "victory_condition": self.victory_condition or None, "comment": self.comment or None, } @staticmethod def fromDict(data: Dict[str, Any]) -> Battle: battle = Battle( data["sector_id"], data.get("player_1_id") or None, data.get("player_2_id") or None, ) battle.winner_id = data.get("winner_id") or None battle.score = data.get("score") or None battle.victory_condition = data.get("victory_condition") or None battle.comment = data.get("comment") or None return battle