mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Allow campaign designer to set default economy values
default starting money and income multiplier can be set in campaign.yaml bumps campaign Version to 10.1
This commit is contained in:
parent
1d20e6277e
commit
25d0dcd08e
@ -31,6 +31,7 @@ PERF_FRIENDLY = 0
|
||||
PERF_MEDIUM = 1
|
||||
PERF_HARD = 2
|
||||
PERF_NASA = 3
|
||||
DEFAULT_BUDGET = 2000
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@ -48,6 +49,12 @@ class Campaign:
|
||||
recommended_player_faction: str
|
||||
recommended_enemy_faction: str
|
||||
recommended_start_date: Optional[datetime.date]
|
||||
|
||||
recommended_player_money: int
|
||||
recommended_enemy_money: int
|
||||
recommended_player_income_multiplier: float
|
||||
recommended_enemy_income_multiplier: float
|
||||
|
||||
performance: int
|
||||
data: Dict[str, Any]
|
||||
path: Path
|
||||
@ -95,6 +102,10 @@ class Campaign:
|
||||
data.get("recommended_player_faction", "USA 2005"),
|
||||
data.get("recommended_enemy_faction", "Russia 1990"),
|
||||
start_date,
|
||||
data.get("recommended_player_money", DEFAULT_BUDGET),
|
||||
data.get("recommended_enemy_money", DEFAULT_BUDGET),
|
||||
data.get("recommended_player_income_multiplier", 1.0),
|
||||
data.get("recommended_enemy_income_multiplier", 1.0),
|
||||
data.get("performance", 0),
|
||||
data,
|
||||
path,
|
||||
|
||||
@ -135,4 +135,11 @@ VERSION = _build_version_string()
|
||||
#: This removes the randomization of the orientation from the generation.
|
||||
#: Most campaigns will not need any updates and will work out of the box.
|
||||
#:
|
||||
CAMPAIGN_FORMAT_VERSION = (10, 0)
|
||||
#: Version 10.1
|
||||
#: * Campaign designers can now define the recommended economy settings:
|
||||
#: `recommended_player_money: 2000`.
|
||||
#: `recommended_enemy_money: 2000`.
|
||||
#: `recommended_player_income_multiplier: 1.0`.
|
||||
#: `recommended_enemy_income_multiplier: 1.0`.
|
||||
#:
|
||||
CAMPAIGN_FORMAT_VERSION = (10, 1)
|
||||
|
||||
@ -14,7 +14,7 @@ from PySide2.QtWidgets import QApplication, QCheckBox, QSplashScreen
|
||||
from dcs.payloads import PayloadDirectories
|
||||
|
||||
from game import Game, VERSION, persistency
|
||||
from game.campaignloader.campaign import Campaign
|
||||
from game.campaignloader.campaign import Campaign, DEFAULT_BUDGET
|
||||
from game.data.weapons import Pylon, Weapon, WeaponGroup
|
||||
from game.dcs.aircrafttype import AircraftType
|
||||
from game.factions import FACTIONS
|
||||
@ -32,7 +32,6 @@ from qt_ui import (
|
||||
)
|
||||
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
|
||||
from qt_ui.windows.QLiberationWindow import QLiberationWindow
|
||||
from qt_ui.windows.newgame.QNewGameWizard import DEFAULT_BUDGET
|
||||
from qt_ui.windows.preferences.QLiberationFirstStartWindow import (
|
||||
QLiberationFirstStartWindow,
|
||||
)
|
||||
|
||||
@ -17,7 +17,7 @@ class FloatSpinSlider(QHBoxLayout):
|
||||
slider = QSlider(Qt.Horizontal)
|
||||
slider.setMinimum(int(minimum * divisor))
|
||||
slider.setMaximum(int(maximum * divisor))
|
||||
slider.setValue(initial)
|
||||
slider.setValue(int(initial * divisor))
|
||||
self.spinner = FloatSpinner(divisor, minimum, maximum, initial)
|
||||
slider.valueChanged.connect(lambda x: self.spinner.setValue(x))
|
||||
self.spinner.valueChanged.connect(lambda x: slider.setValue(x))
|
||||
|
||||
@ -5,11 +5,11 @@ from datetime import datetime, timedelta
|
||||
from typing import List
|
||||
|
||||
from PySide2 import QtGui, QtWidgets
|
||||
from PySide2.QtCore import QDate, QItemSelectionModel, QPoint, Qt
|
||||
from PySide2.QtCore import QDate, QItemSelectionModel, QPoint, Qt, Signal
|
||||
from PySide2.QtWidgets import QCheckBox, QLabel, QTextEdit, QVBoxLayout
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
|
||||
from game.campaignloader.campaign import Campaign
|
||||
from game.campaignloader.campaign import Campaign, DEFAULT_BUDGET
|
||||
from game.factions import FACTIONS, Faction
|
||||
from game.settings import Settings
|
||||
from game.theater.start_generator import GameGenerator, GeneratorSettings, ModSettings
|
||||
@ -29,7 +29,6 @@ jinja_env = Environment(
|
||||
lstrip_blocks=True,
|
||||
)
|
||||
|
||||
DEFAULT_BUDGET = 2000
|
||||
DEFAULT_MISSION_LENGTH: timedelta = timedelta(minutes=60)
|
||||
|
||||
|
||||
@ -93,7 +92,13 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
self.addPage(self.theater_page)
|
||||
self.addPage(self.faction_selection_page)
|
||||
self.addPage(GeneratorOptions())
|
||||
self.addPage(DifficultyAndAutomationOptions())
|
||||
self.difficulty_page = DifficultyAndAutomationOptions()
|
||||
|
||||
# Update difficulty page on campaign select
|
||||
self.theater_page.campaign_selected.connect(
|
||||
lambda c: self.difficulty_page.set_campaign_values(c)
|
||||
)
|
||||
self.addPage(self.difficulty_page)
|
||||
self.addPage(ConclusionPage())
|
||||
|
||||
self.setPixmap(
|
||||
@ -331,6 +336,8 @@ class FactionSelection(QtWidgets.QWizardPage):
|
||||
|
||||
|
||||
class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
campaign_selected = Signal(Campaign)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
campaigns: List[Campaign],
|
||||
@ -445,6 +452,8 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
else:
|
||||
timePeriodPreset.setChecked(True)
|
||||
|
||||
self.campaign_selected.emit(campaign)
|
||||
|
||||
self.campaignList.selectionModel().setCurrentIndex(
|
||||
self.campaignList.indexAt(QPoint(1, 1)), QItemSelectionModel.Rows
|
||||
)
|
||||
@ -489,19 +498,18 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
|
||||
|
||||
class BudgetInputs(QtWidgets.QGridLayout):
|
||||
def __init__(self, label: str) -> None:
|
||||
def __init__(self, label: str, value: int) -> None:
|
||||
super().__init__()
|
||||
self.addWidget(QtWidgets.QLabel(label), 0, 0)
|
||||
|
||||
minimum = 0
|
||||
maximum = 5000
|
||||
initial = DEFAULT_BUDGET
|
||||
|
||||
slider = QtWidgets.QSlider(Qt.Horizontal)
|
||||
slider.setMinimum(minimum)
|
||||
slider.setMaximum(maximum)
|
||||
slider.setValue(initial)
|
||||
self.starting_money = CurrencySpinner(minimum, maximum, initial)
|
||||
slider.setValue(value)
|
||||
self.starting_money = CurrencySpinner(minimum, maximum, value)
|
||||
slider.valueChanged.connect(lambda x: self.starting_money.setValue(x))
|
||||
self.starting_money.valueChanged.connect(lambda x: slider.setValue(x))
|
||||
|
||||
@ -530,22 +538,22 @@ class DifficultyAndAutomationOptions(QtWidgets.QWizardPage):
|
||||
economy_group.setLayout(economy_layout)
|
||||
|
||||
economy_layout.addWidget(QLabel("Player income multiplier"))
|
||||
player_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("player_income_multiplier", player_income.spinner)
|
||||
economy_layout.addLayout(player_income)
|
||||
self.player_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("player_income_multiplier", self.player_income.spinner)
|
||||
economy_layout.addLayout(self.player_income)
|
||||
|
||||
economy_layout.addWidget(QLabel("Enemy income multiplier"))
|
||||
enemy_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("enemy_income_multiplier", enemy_income.spinner)
|
||||
economy_layout.addLayout(enemy_income)
|
||||
self.enemy_income = FloatSpinSlider(0, 5, 1, divisor=10)
|
||||
self.registerField("enemy_income_multiplier", self.enemy_income.spinner)
|
||||
economy_layout.addLayout(self.enemy_income)
|
||||
|
||||
player_budget = BudgetInputs("Player starting budget")
|
||||
self.registerField("starting_money", player_budget.starting_money)
|
||||
economy_layout.addLayout(player_budget)
|
||||
self.player_budget = BudgetInputs("Player starting budget", DEFAULT_BUDGET)
|
||||
self.registerField("starting_money", self.player_budget.starting_money)
|
||||
economy_layout.addLayout(self.player_budget)
|
||||
|
||||
enemy_budget = BudgetInputs("Enemy starting budget")
|
||||
self.registerField("enemy_starting_money", enemy_budget.starting_money)
|
||||
economy_layout.addLayout(enemy_budget)
|
||||
self.enemy_budget = BudgetInputs("Enemy starting budget", DEFAULT_BUDGET)
|
||||
self.registerField("enemy_starting_money", self.enemy_budget.starting_money)
|
||||
economy_layout.addLayout(self.enemy_budget)
|
||||
|
||||
assist_group = QtWidgets.QGroupBox("Player assists")
|
||||
layout.addWidget(assist_group)
|
||||
@ -569,6 +577,16 @@ class DifficultyAndAutomationOptions(QtWidgets.QWizardPage):
|
||||
|
||||
self.setLayout(layout)
|
||||
|
||||
def set_campaign_values(self, campaign: Campaign) -> None:
|
||||
self.player_budget.starting_money.setValue(campaign.recommended_player_money)
|
||||
self.enemy_budget.starting_money.setValue(campaign.recommended_enemy_money)
|
||||
self.player_income.spinner.setValue(
|
||||
int(campaign.recommended_player_income_multiplier * 10)
|
||||
)
|
||||
self.enemy_income.spinner.setValue(
|
||||
int(campaign.recommended_enemy_income_multiplier * 10)
|
||||
)
|
||||
|
||||
|
||||
class GeneratorOptions(QtWidgets.QWizardPage):
|
||||
def __init__(self, parent=None):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user