diff --git a/src/warchron/controller/controller.py b/src/warchron/controller/controller.py index 0a41efa..b246f76 100644 --- a/src/warchron/controller/controller.py +++ b/src/warchron/controller/controller.py @@ -152,9 +152,16 @@ class Controller: self.view.show_war_details(name=war.name, year=war.year) objectives = war.get_all_objectives() self.view.display_war_objectives(objectives) - participants = war.get_all_war_participants() + war_parts = war.get_all_war_participants() participants_for_display = [ - (self.model.get_player_name(p.id), p.faction, p.id) for p in participants + ( + self.model.get_player_name( + p.player_id, + ), + p.faction, + p.id, + ) + for p in war_parts ] self.view.display_war_participants(participants_for_display) @@ -180,10 +187,15 @@ class Controller: ) ) self.view.display_campaign_sectors(sectors_for_display) - participants = camp.get_all_campaign_participants() + camp_parts = camp.get_all_campaign_participants() participants_for_display = [ - (self.model.get_player_name(p.war_participant_id), p.leader, p.theme, p.id) - for p in participants + ( + self.model.get_participant_name(p.war_participant_id), + p.leader, + p.theme, + p.id, + ) + for p in camp_parts ] self.view.display_campaign_participants(participants_for_display) @@ -346,13 +358,13 @@ class Controller: self.model.update_objective(item_id, name=name, description=description) self.refresh(RefreshScope.WAR_DETAILS) elif item_type == ItemType.WAR_PARTICIPANT: - part = self.model.get_war_participant(item_id) - player = self.model.get_player(part.id) + camp_part = self.model.get_war_participant(item_id) + player = self.model.get_player(camp_part.player_id) dialog = WarParticipantDialog( self.view, players=[player], - default_player_id=part.id, - default_faction=part.faction, + default_player_id=camp_part.id, + default_faction=camp_part.faction, editable_player=False, ) if dialog.exec() == QDialog.DialogCode.Accepted: @@ -391,15 +403,16 @@ class Controller: ) self.refresh(RefreshScope.CAMPAIGN_DETAILS) elif item_type == ItemType.CAMPAIGN_PARTICIPANT: - part = self.model.get_campaign_participant(item_id) - player = self.model.get_player(part.war_participant_id) + camp_part = self.model.get_campaign_participant(item_id) + war_part = self.model.get_war_participant(camp_part.war_participant_id) + player = self.model.get_player(war_part.player_id) part_opt = [ParticipantOption(id=player.id, name=player.name)] dialog = CampaignParticipantDialog( self.view, participants=part_opt, - default_participant_id=part.id, - default_leader=part.leader, - default_theme=part.theme, + default_participant_id=camp_part.id, + default_leader=camp_part.leader, + default_theme=camp_part.theme, editable_player=False, ) if dialog.exec() == QDialog.DialogCode.Accepted: @@ -595,7 +608,7 @@ class Controller: self.selected_campaign_id ) part_opts = [ - ParticipantOption(id=p.id, name=self.model.get_player_name(p.id)) + ParticipantOption(id=p.id, name=self.model.get_player_name(p.player_id)) for p in participants ] dialog = CampaignParticipantDialog(self.view, participants=part_opts) diff --git a/src/warchron/model/campaign.py b/src/warchron/model/campaign.py index 7c63e17..58068fb 100644 --- a/src/warchron/model/campaign.py +++ b/src/warchron/model/campaign.py @@ -51,9 +51,8 @@ class Campaign: def get_all_campaign_participants_ids(self) -> set[str]: return set(self.participants.keys()) - def has_participant(self, player_id: str) -> bool: - ##TODO change lookup id target - return player_id in self.participants + def has_participant(self, participant_id: str) -> bool: + return participant_id in self.participants def add_campaign_participant( self, war_participant_id: str, leader: str, theme: str @@ -233,11 +232,13 @@ class Campaign: class CampaignParticipant: - def __init__(self, *, war_participant_id: str, leader: str, theme: str): + def __init__( + self, *, war_participant_id: str, leader: str | None, theme: str | None + ): self.id: str = str(uuid4()) self.war_participant_id: str = war_participant_id # ref to War.participants - self.leader: str = leader - self.theme: str = theme + self.leader: str | None = leader + self.theme: str | None = theme def set_id(self, new_id: str): self.id = new_id @@ -254,7 +255,12 @@ class CampaignParticipant: class Sector: def __init__( - self, name: str, round_id: str, major_id: str, minor_id: str, influence_id: str + self, + name: str, + round_id: str, + major_id: str | None, + minor_id: str | None, + influence_id: str | None, ): self.id: str = str(uuid4()) self.name: str = name diff --git a/src/warchron/model/model.py b/src/warchron/model/model.py index 3113efc..ae86d9c 100644 --- a/src/warchron/model/model.py +++ b/src/warchron/model/model.py @@ -130,7 +130,7 @@ class Model: return war raise KeyError(f"Participant {participant_id} not found in any War") - def get_war_by_campaign_participant(self, participant_id: str) -> Campaign: + def get_war_by_campaign_participant(self, participant_id: str) -> War: for war in self.wars.values(): camp = war.get_campaign_by_campaign_participant(participant_id) if camp is not None: @@ -304,6 +304,11 @@ class Model: camp = self.get_campaign(camp_id) return camp.add_campaign_participant(player_id, leader, theme) + def get_participant_name(self, participant_id: str) -> str: + war = self.get_war_by_war_participant(participant_id) + war_part = war.get_war_participant(participant_id) + return self.players[war_part.player_id].name + def get_campaign_participant(self, participant_id) -> CampaignParticipant: for war in self.wars.values(): for camp in war.campaigns: diff --git a/src/warchron/model/war.py b/src/warchron/model/war.py index ecb1f68..e5673d5 100644 --- a/src/warchron/model/war.py +++ b/src/warchron/model/war.py @@ -87,7 +87,7 @@ class War: def add_war_participant(self, player_id: str, faction: str) -> WarParticipant: if player_id in self.participants: raise ValueError("Player already registered in this war") - participant = WarParticipant(player_id, faction) + participant = WarParticipant(player_id=player_id, faction=faction) self.participants[participant.id] = participant return participant @@ -99,6 +99,7 @@ class War: def update_war_participant(self, player_id: str, *, faction: str): part = self.get_war_participant(player_id) + # Can't change referred Model.players part.set_faction(faction) def remove_war_participant(self, player_id: str): @@ -319,12 +320,16 @@ class Objective: class WarParticipant: - def __init__(self, player_id: str, faction: str): - self.id: str = player_id # ref to Model.players + def __init__(self, *, player_id: str, faction: str): + self.id: str = str(uuid4()) + self.player_id: str = player_id # ref to WarModel.players self.faction: str = faction def set_id(self, new_id: str): self.id = new_id + def set_player(self, new_player: str): + self.player_id = new_player + def set_faction(self, new_faction: str): self.faction = new_faction