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 def toDict(self) -> Dict[str, Any]: return { "sector_id": self.sector_id, "player_1_id": self.player_1_id, "player_2_id": self.player_2_id, "winner_id": self.winner_id, "score": self.score, "victory_condition": self.victory_condition, "comment": self.comment, } @staticmethod def fromDict(data: Dict[str, Any]) -> Battle: battle = Battle( data["sector_id"], data.get("player_1_id"), data.get("player_2_id"), ) battle.winner_id = data.get("winner_id") battle.score = data.get("score") battle.victory_condition = data.get("victory_condition") battle.comment = data.get("comment") return battle