from __future__ import annotations from uuid import uuid4 class Round: def __init__(self): self.id: str = str(uuid4()) self.choices: dict[str, Choice] = {} self.battles: dict[str, Battle] = {} self.is_over: bool = False def set_id(self, new_id: str): self.id = new_id def set_state(self, new_state: bool): self.is_over = new_state def toDict(self): return { "id": self.id, # "sectors" : self.sectors, # "choices" : self.choices, # "battles" : self.battles, "is_over": self.is_over } @staticmethod def fromDict(data: dict): rnd = Round() rnd.set_id(data["id"]) # rnd.sectors = data.get("sectors", {}) # rnd.choices = data.get("choices", {}) # rnd.battles = data.get("battles", {}) rnd.set_state(data.get("is_over", False)) return rnd # Choice methods def get_choice(self, participant_id: str) -> Choice | None: return self.choices.get(participant_id) def create_choice(self, participant_id: str) -> Choice: if participant_id not in self.choices: choice = Choice( participant_id = participant_id, priority_sector_id = None, secondary_sector_id = None ) self.choices[participant_id] = choice return self.choices[participant_id] def update_choice(self, participant_id: str, priority_sector_id: str | None, secondary_sector_id: str | None, comment: str | None): choice = self.get_choice(participant_id) choice.set_priority(priority_sector_id) choice.set_secondary(secondary_sector_id) choice.set_comment(comment) def remove_choice(self,participant_id: str): del self.choices[participant_id] # Battle methods def get_battle(self, sector_id: str) -> Battle | None: return self.battles.get(sector_id) def create_battle(self, sector_id: str) -> Battle: if sector_id not in self.battles: battle = Battle( sector_id = sector_id, player_1_id = None, player_2_id = None ) self.battles[sector_id] = battle return self.battles[sector_id] def update_battle(self, sector_id: str, player_1_id: str | None, player_2_id: str | None, winner_id: str | None, score: str | None, victory_condition: str | None, comment: str | None): bat = self.get_battle(sector_id) bat.set_player_1(player_1_id) bat.set_player_2(player_2_id) bat.set_winner(winner_id) bat.set_score(score) bat.set_victory_condition(victory_condition) bat.set_comment(comment) def remove_battle(self,sector_id: str): del self.battles[sector_id] class Choice: def __init__(self, participant_id: str, priority_sector_id: str | None = None, secondary_sector_id: str | None = None): self.participant_id: str = participant_id # ref to Campaign.participants self.priority_sector_id: str | None = priority_sector_id # ref to Campaign.sectors self.secondary_sector_id: str | None = secondary_sector_id # ref to Campaign.sectors self.comment: str | None = None def set_id(self, new_id: str): self.participant_id = new_id def set_priority(self, new_priority_id: str): self.priority_sector_id = new_priority_id def set_secondary(self, new_secondary_id: str): self.secondary_sector_id = new_secondary_id def set_comment(self, new_comment: str): self.comment = new_comment 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 self.score: str | None = None self.victory_condition: str | None = None self.comment: str | None = None def set_id(self, new_id: str): self.sector_id = new_id def set_player_1(self, new_player_id: str): self.player_1_id = new_player_id def set_player_2(self, new_player_id: str): self.player_2_id = new_player_id def set_winner(self, new_player_id: str): self.winner_id = new_player_id def set_score(self, new_score: str): self.score = new_score def set_victory_condition(self, new_victory_condition: str): self.victory_condition = new_victory_condition def set_comment(self, new_comment: str): self.comment = new_comment