mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Campaign have a recommended defaults faction setup to ease campaign setup
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user