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:
parent
444605920f
commit
f959dd0519
@ -4,7 +4,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List, Union
|
||||||
|
|
||||||
from PySide2 import QtGui
|
from PySide2 import QtGui
|
||||||
from PySide2.QtCore import QItemSelectionModel
|
from PySide2.QtCore import QItemSelectionModel
|
||||||
@ -14,6 +14,10 @@ from PySide2.QtWidgets import QAbstractItemView, QListView
|
|||||||
import qt_ui.uiconstants as CONST
|
import qt_ui.uiconstants as CONST
|
||||||
from game.theater import ConflictTheater
|
from game.theater import ConflictTheater
|
||||||
|
|
||||||
|
PERF_FRIENDLY = 0
|
||||||
|
PERF_MEDIUM = 1
|
||||||
|
PERF_HARD = 2
|
||||||
|
PERF_NASA = 3
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class Campaign:
|
class Campaign:
|
||||||
@ -21,6 +25,9 @@ class Campaign:
|
|||||||
icon_name: str
|
icon_name: str
|
||||||
authors: str
|
authors: str
|
||||||
description: 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]
|
data: Dict[str, Any]
|
||||||
path: Path
|
path: Path
|
||||||
|
|
||||||
@ -35,6 +42,9 @@ class Campaign:
|
|||||||
f"Terrain_{sanitized_theater}",
|
f"Terrain_{sanitized_theater}",
|
||||||
data.get("authors", "???"),
|
data.get("authors", "???"),
|
||||||
data.get("description", ""),
|
data.get("description", ""),
|
||||||
|
data.get("recommended_player_faction", "USA 2005"),
|
||||||
|
data.get("recommended_enemy_faction", "Russia 1990"),
|
||||||
|
data.get("performance", 0),
|
||||||
data,
|
data,
|
||||||
path
|
path
|
||||||
)
|
)
|
||||||
|
|||||||
@ -39,9 +39,10 @@ class NewGameWizard(QtWidgets.QWizard):
|
|||||||
|
|
||||||
self.campaigns = load_campaigns()
|
self.campaigns = load_campaigns()
|
||||||
|
|
||||||
|
self.faction_selection_page = FactionSelection()
|
||||||
self.addPage(IntroPage())
|
self.addPage(IntroPage())
|
||||||
self.addPage(FactionSelection())
|
self.addPage(TheaterConfiguration(self.campaigns, self.faction_selection_page))
|
||||||
self.addPage(TheaterConfiguration(self.campaigns))
|
self.addPage(self.faction_selection_page)
|
||||||
self.addPage(GeneratorOptions())
|
self.addPage(GeneratorOptions())
|
||||||
self.addPage(DifficultyAndAutomationOptions())
|
self.addPage(DifficultyAndAutomationOptions())
|
||||||
self.addPage(ConclusionPage())
|
self.addPage(ConclusionPage())
|
||||||
@ -195,6 +196,24 @@ class FactionSelection(QtWidgets.QWizardPage):
|
|||||||
self.blueFactionSelect.activated.connect(self.updateUnitRecap)
|
self.blueFactionSelect.activated.connect(self.updateUnitRecap)
|
||||||
self.redFactionSelect.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):
|
def updateUnitRecap(self):
|
||||||
|
|
||||||
red_faction = db.FACTIONS[self.redFactionSelect.currentText()]
|
red_faction = db.FACTIONS[self.redFactionSelect.currentText()]
|
||||||
@ -233,9 +252,11 @@ class FactionSelection(QtWidgets.QWizardPage):
|
|||||||
|
|
||||||
|
|
||||||
class TheaterConfiguration(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)
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.faction_selection = faction_selection
|
||||||
|
|
||||||
self.setTitle("Theater configuration")
|
self.setTitle("Theater configuration")
|
||||||
self.setSubTitle("\nChoose a terrain and time period for this game.")
|
self.setSubTitle("\nChoose a terrain and time period for this game.")
|
||||||
self.setPixmap(QtWidgets.QWizard.LogoPixmap,
|
self.setPixmap(QtWidgets.QWizard.LogoPixmap,
|
||||||
@ -258,6 +279,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
|||||||
campaign = campaignList.campaigns[index]
|
campaign = campaignList.campaigns[index]
|
||||||
self.setField("selectedCampaign", campaign)
|
self.setField("selectedCampaign", campaign)
|
||||||
self.campaignMapDescription.setText(template.render({"campaign": 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().setCurrentIndex(campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows)
|
||||||
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
|
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
|
||||||
|
|||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "The Channel - Battle of Britain",
|
"name": "The Channel - Battle of Britain",
|
||||||
"theater": "The Channel",
|
"theater": "The Channel",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "United Kingdom 1944",
|
||||||
|
"recommended_enemy_faction": "Germany 1942",
|
||||||
"description": "<p>Experience the Battle of Britain on the Channel map !<br/></p><p><strong>Note:</strong> It is not possible to cross the channel to capture enemy bases yet, but you can consider you won if you manage to destroy all the ennemy targets</p>",
|
"description": "<p>Experience the Battle of Britain on the Channel map !<br/></p><p><strong>Note:</strong> It is not possible to cross the channel to capture enemy bases yet, but you can consider you won if you manage to destroy all the ennemy targets</p>",
|
||||||
"miz": "battle_of_britain.miz"
|
"miz": "battle_of_britain.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Persian Gulf - Desert War",
|
"name": "Persian Gulf - Desert War",
|
||||||
"theater": "Persian Gulf",
|
"theater": "Persian Gulf",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "USA 2005",
|
||||||
|
"recommended_enemy_faction": "Iran 2015",
|
||||||
"description": "<p>This is a simple scenario in the Desert near Dubai and Abu-Dhabi. Progress from Liwa airbase to Al-Minhad.</p><p>This scenario shouldn't require too much performance.</p>",
|
"description": "<p>This is a simple scenario in the Desert near Dubai and Abu-Dhabi. Progress from Liwa airbase to Al-Minhad.</p><p>This scenario shouldn't require too much performance.</p>",
|
||||||
"miz": "desert_war.miz"
|
"miz": "desert_war.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "The Channel - Dunkirk",
|
"name": "The Channel - Dunkirk",
|
||||||
"theater": "The Channel",
|
"theater": "The Channel",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Allies 1944",
|
||||||
|
"recommended_enemy_faction": "Germany 1942",
|
||||||
"description": "<p>In this scenario, your forces starts in Dunkirk and can be supported by the airfields on the other side of the Channel.</p><p>If you select the inverted configuration, you can play a German invasion of England.</p><p><strong>Note:</strong> B-17 should be operated from Manston airfield</p>",
|
"description": "<p>In this scenario, your forces starts in Dunkirk and can be supported by the airfields on the other side of the Channel.</p><p>If you select the inverted configuration, you can play a German invasion of England.</p><p><strong>Note:</strong> B-17 should be operated from Manston airfield</p>",
|
||||||
"miz": "dunkirk.miz"
|
"miz": "dunkirk.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Persian Gulf - Emirates",
|
"name": "Persian Gulf - Emirates",
|
||||||
"theater": "Persian Gulf",
|
"theater": "Persian Gulf",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "USA 2005",
|
||||||
|
"recommended_enemy_faction": "Iran 2015",
|
||||||
"description": "<p>In this scenario, you can play an invasion of the Emirates and Oman, where your forces starts in Fujairah.</p><p><strong>Note:</strong> Fujairah airfield has very few slots for aircrafts, so it recommended to operate from carriers at the start of the campaign. Thus, a carrier-capable faction is recommended.</p>",
|
"description": "<p>In this scenario, you can play an invasion of the Emirates and Oman, where your forces starts in Fujairah.</p><p><strong>Note:</strong> Fujairah airfield has very few slots for aircrafts, so it recommended to operate from carriers at the start of the campaign. Thus, a carrier-capable faction is recommended.</p>",
|
||||||
"miz": "emirates.miz"
|
"miz": "emirates.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Syria - Battle for Golan Heights",
|
"name": "Syria - Battle for Golan Heights",
|
||||||
"theater": "Syria",
|
"theater": "Syria",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Israel 2000",
|
||||||
|
"recommended_enemy_faction": "Syria 2011",
|
||||||
"description": "<p>In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.<br/><br/>You can use the inverted configuration to start on the Syrian side.<br/><br/>If this scenario is too heavy, try the lite version.</p>",
|
"description": "<p>In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.<br/><br/>You can use the inverted configuration to start on the Syrian side.<br/><br/>If this scenario is too heavy, try the lite version.</p>",
|
||||||
"miz": "golan_heights.miz"
|
"miz": "golan_heights.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Syria - Battle for Golan Heights - Lite",
|
"name": "Syria - Battle for Golan Heights - Lite",
|
||||||
"theater": "Syria",
|
"theater": "Syria",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Israel 2000",
|
||||||
|
"recommended_enemy_faction": "Syria 2011",
|
||||||
"description": "<p>In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.<br/><br/>This scenario is designed to be performance friendly.</p>",
|
"description": "<p>In this scenario, you start in Israel and the conflict is focused around the golan heights, an historically disputed territory.<br/><br/>This scenario is designed to be performance friendly.</p>",
|
||||||
"miz": "golan_heights_lite.miz"
|
"miz": "golan_heights_lite.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Syria - Inherent Resolve",
|
"name": "Syria - Inherent Resolve",
|
||||||
"theater": "Syria",
|
"theater": "Syria",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "USA 2005",
|
||||||
|
"recommended_enemy_faction": "Insurgents (Hard)",
|
||||||
"description": "<p>In this scenario, you start from Jordan, and have to fight your way through eastern Syria.</p>",
|
"description": "<p>In this scenario, you start from Jordan, and have to fight your way through eastern Syria.</p>",
|
||||||
"miz": "inherent_resolve.miz"
|
"miz": "inherent_resolve.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Syria - Invasion from Turkey",
|
"name": "Syria - Invasion from Turkey",
|
||||||
"theater": "Syria",
|
"theater": "Syria",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Turkey 2005",
|
||||||
|
"recommended_enemy_faction": "Insurgents (Hard)",
|
||||||
"description": "<p>In this scenario, you start from Turkey and have to invade territories in northern Syria.</p>",
|
"description": "<p>In this scenario, you start from Turkey and have to invade territories in northern Syria.</p>",
|
||||||
"miz": "invasion_from_turkey.miz"
|
"miz": "invasion_from_turkey.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Persian Gulf - Invasion of Iran",
|
"name": "Persian Gulf - Invasion of Iran",
|
||||||
"theater": "Persian Gulf",
|
"theater": "Persian Gulf",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "USA 2005",
|
||||||
|
"recommended_enemy_faction": "Iran 2015",
|
||||||
"description": "<p>In this scenario, you start in Bandar Abbas, and must invade Iran.</p>",
|
"description": "<p>In this scenario, you start in Bandar Abbas, and must invade Iran.</p>",
|
||||||
"miz": "invasion_of_iran.miz"
|
"miz": "invasion_of_iran.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Persian Gulf - Invasion of Iran [Lite]",
|
"name": "Persian Gulf - Invasion of Iran [Lite]",
|
||||||
"theater": "Persian Gulf",
|
"theater": "Persian Gulf",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "USA 2005",
|
||||||
|
"recommended_enemy_faction": "Iran 2015",
|
||||||
"description": "<p>This is lighter version of the invasion of Iran scenario.</p>",
|
"description": "<p>This is lighter version of the invasion of Iran scenario.</p>",
|
||||||
"miz": "invasion_of_iran_lite.miz"
|
"miz": "invasion_of_iran_lite.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,9 @@
|
|||||||
"name": "Normandy - Normandy",
|
"name": "Normandy - Normandy",
|
||||||
"theater": "Normandy",
|
"theater": "Normandy",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Allies 1944",
|
||||||
|
"recommended_enemy_faction": "Germany 1944",
|
||||||
|
"performance": 3,
|
||||||
"description": "<p>Normandy 1944 D-Day scenario.</p>",
|
"description": "<p>Normandy 1944 D-Day scenario.</p>",
|
||||||
"miz":"normandy.miz"
|
"miz":"normandy.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Normandy - Normandy Small",
|
"name": "Normandy - Normandy Small",
|
||||||
"theater": "Normandy",
|
"theater": "Normandy",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Allies 1944",
|
||||||
|
"recommended_enemy_faction": "Germany 1944",
|
||||||
"description": "<p>A lighter version of the Normandy 1944 D-Day scenario.</p>",
|
"description": "<p>A lighter version of the Normandy 1944 D-Day scenario.</p>",
|
||||||
"miz": "normandy_small.miz"
|
"miz": "normandy_small.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,9 @@
|
|||||||
"name": "Caucasus - Russia Small",
|
"name": "Caucasus - Russia Small",
|
||||||
"theater": "Caucasus",
|
"theater": "Caucasus",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Russia 2010",
|
||||||
|
"recommended_enemy_faction": "USA 1990",
|
||||||
|
"performance": "heavy",
|
||||||
"description": "<p>A small theater in Russia, progress from Mozdok to Maykop.</p><p>This scenario is pretty simple, it is ideal if you want to run a short campaign. If your PC is not powerful, this is also the less performance heavy scenario.</p>",
|
"description": "<p>A small theater in Russia, progress from Mozdok to Maykop.</p><p>This scenario is pretty simple, it is ideal if you want to run a short campaign. If your PC is not powerful, this is also the less performance heavy scenario.</p>",
|
||||||
"miz": "russia_small.miz"
|
"miz": "russia_small.miz"
|
||||||
}
|
}
|
||||||
@ -2,6 +2,8 @@
|
|||||||
"name": "Syria - Syrian Civil War",
|
"name": "Syria - Syrian Civil War",
|
||||||
"theater": "Syria",
|
"theater": "Syria",
|
||||||
"authors": "Khopa",
|
"authors": "Khopa",
|
||||||
|
"recommended_player_faction": "Russia 2010",
|
||||||
|
"recommended_enemy_faction": "Insurgents (Hard)",
|
||||||
"description": "<p>This scenario can be used to simulate parts of the Syrian Civil War.<br/><br/>You start on the coast with an airbase in Latakia, and ground forces in Tartus.<br/><br/>This scenario can also be used to simulate a western invasion of Syria.<br/><br/>In inverted configuration you start in Aleppo.</p>",
|
"description": "<p>This scenario can be used to simulate parts of the Syrian Civil War.<br/><br/>You start on the coast with an airbase in Latakia, and ground forces in Tartus.<br/><br/>This scenario can also be used to simulate a western invasion of Syria.<br/><br/>In inverted configuration you start in Aleppo.</p>",
|
||||||
"miz": "syrian_civil_war.miz"
|
"miz": "syrian_civil_war.miz"
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user