Campaign have a recommended defaults faction setup to ease campaign setup

This commit is contained in:
Khopa
2021-01-22 22:09:55 +01:00
parent 444605920f
commit f959dd0519
16 changed files with 66 additions and 4 deletions

View File

@@ -4,7 +4,7 @@ import json
import logging
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Dict, List
from typing import Any, Dict, List, Union
from PySide2 import QtGui
from PySide2.QtCore import QItemSelectionModel
@@ -14,6 +14,10 @@ from PySide2.QtWidgets import QAbstractItemView, QListView
import qt_ui.uiconstants as CONST
from game.theater import ConflictTheater
PERF_FRIENDLY = 0
PERF_MEDIUM = 1
PERF_HARD = 2
PERF_NASA = 3
@dataclass(frozen=True)
class Campaign:
@@ -21,6 +25,9 @@ class Campaign:
icon_name: str
authors: str
description: str
recommended_player_faction: str
recommended_enemy_faction: str
performance: Union[PERF_FRIENDLY, PERF_MEDIUM, PERF_HARD, PERF_NASA]
data: Dict[str, Any]
path: Path
@@ -35,6 +42,9 @@ class Campaign:
f"Terrain_{sanitized_theater}",
data.get("authors", "???"),
data.get("description", ""),
data.get("recommended_player_faction", "USA 2005"),
data.get("recommended_enemy_faction", "Russia 1990"),
data.get("performance", 0),
data,
path
)

View File

@@ -39,9 +39,10 @@ class NewGameWizard(QtWidgets.QWizard):
self.campaigns = load_campaigns()
self.faction_selection_page = FactionSelection()
self.addPage(IntroPage())
self.addPage(FactionSelection())
self.addPage(TheaterConfiguration(self.campaigns))
self.addPage(TheaterConfiguration(self.campaigns, self.faction_selection_page))
self.addPage(self.faction_selection_page)
self.addPage(GeneratorOptions())
self.addPage(DifficultyAndAutomationOptions())
self.addPage(ConclusionPage())
@@ -195,6 +196,24 @@ class FactionSelection(QtWidgets.QWizardPage):
self.blueFactionSelect.activated.connect(self.updateUnitRecap)
self.redFactionSelect.activated.connect(self.updateUnitRecap)
def setDefaultFactions(self, campaign:Campaign):
""" Set default faction for selected campaign """
self.blueFactionSelect.clear()
self.redFactionSelect.clear()
for f in db.FACTIONS:
self.blueFactionSelect.addItem(f)
for i, r in enumerate(db.FACTIONS):
self.redFactionSelect.addItem(r)
if r == campaign.recommended_enemy_faction:
self.redFactionSelect.setCurrentIndex(i)
if r == campaign.recommended_player_faction:
self.blueFactionSelect.setCurrentIndex(i)
def updateUnitRecap(self):
red_faction = db.FACTIONS[self.redFactionSelect.currentText()]
@@ -233,9 +252,11 @@ class FactionSelection(QtWidgets.QWizardPage):
class TheaterConfiguration(QtWidgets.QWizardPage):
def __init__(self, campaigns: List[Campaign], parent=None) -> None:
def __init__(self, campaigns: List[Campaign], faction_selection: FactionSelection, parent=None) -> None:
super().__init__(parent)
self.faction_selection = faction_selection
self.setTitle("Theater configuration")
self.setSubTitle("\nChoose a terrain and time period for this game.")
self.setPixmap(QtWidgets.QWizard.LogoPixmap,
@@ -258,6 +279,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
campaign = campaignList.campaigns[index]
self.setField("selectedCampaign", campaign)
self.campaignMapDescription.setText(template.render({"campaign": campaign}))
self.faction_selection.setDefaultFactions(campaign)
campaignList.selectionModel().setCurrentIndex(campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows)
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)