warchron_app/src/warchron/model/round.py

103 lines
3.1 KiB
Python

from __future__ import annotations
from uuid import uuid4
from typing import Any, Dict
from warchron.model.choice import Choice
from warchron.model.battle import Battle
class Round:
def __init__(self) -> None:
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) -> None:
self.id = new_id
def set_state(self, new_state: bool) -> None:
self.is_over = new_state
def toDict(self) -> Dict[str, Any]:
return {
"id": self.id,
# "sectors" : self.sectors,
# "choices" : self.choices,
# "battles" : self.battles,
"is_over": self.is_over,
}
@staticmethod
def fromDict(data: Dict[str, Any]) -> Round:
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,
) -> None:
choice = self.get_choice(participant_id)
if choice:
choice.set_priority(priority_sector_id)
choice.set_secondary(secondary_sector_id)
choice.set_comment(comment)
def remove_choice(self, participant_id: str) -> None:
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,
) -> None:
bat = self.get_battle(sector_id)
if bat:
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) -> None:
del self.battles[sector_id]