dcs-retribution/qt_ui/widgets/QConditionsDialog.py
2024-06-30 19:35:33 +02:00

86 lines
3.2 KiB
Python

from copy import deepcopy
from datetime import datetime, timedelta
from PySide6.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QPushButton
from game.sim import GameUpdateEvents
from game.weather.clouds import Clouds
from qt_ui.widgets.conditions.QTimeAdjustmentWidget import QTimeAdjustmentWidget
from qt_ui.widgets.conditions.QTimeTurnWidget import QTimeTurnWidget
from qt_ui.widgets.conditions.QWeatherAdjustmentWidget import QWeatherAdjustmentWidget
from qt_ui.widgets.conditions.QWeatherWidget import QWeatherWidget
class QConditionsDialog(QDialog):
def __init__(self, time_turn: QTimeTurnWidget, weather: QWeatherWidget):
super().__init__()
self.time_turn = time_turn
self.weather = weather
self.init_ui()
def init_ui(self):
self.setWindowTitle("Time & Weather Conditions")
self.setMinimumSize(360, 380)
vbox = QVBoxLayout()
self.time_adjuster = QTimeAdjustmentWidget(self.time_turn)
vbox.addWidget(self.time_adjuster, 1)
self.weather_adjuster = QWeatherAdjustmentWidget(self.weather)
vbox.addWidget(self.weather_adjuster, 8)
hbox = QHBoxLayout()
reject_btn = QPushButton("REJECT")
reject_btn.setProperty("style", "btn-danger")
reject_btn.clicked.connect(self.close)
hbox.addWidget(reject_btn)
accept_btn = QPushButton("ACCEPT")
accept_btn.setProperty("style", "btn-success")
accept_btn.clicked.connect(self.apply_conditions)
hbox.addWidget(accept_btn)
vbox.addLayout(hbox, 1)
self.setLayout(vbox)
def apply_conditions(self) -> None:
qdt: datetime = self.time_adjuster.datetime_edit.dateTime().toPython()
sim = self.time_turn.sim_controller
current_time = sim.current_time_in_sim_if_game_loaded
if current_time:
current_time = deepcopy(current_time)
sim.game_loop.sim.time = qdt
game = sim.game_loop.game
game.date = qdt.date() - timedelta(days=game.turn // 4)
game.conditions.start_time = qdt
self.time_turn.set_current_turn(game.turn, game.conditions)
# TODO: create new weather object
new_weather_type = self.weather_adjuster.type_selector.currentData()
new_weather = new_weather_type(
seasonal_conditions=game.theater.seasonal_conditions,
day=qdt.date(),
time_of_day=game.current_turn_time_of_day,
)
# self.weather.conditions.weather = WeatherType()
preset = self.weather_adjuster.preset_selector.currentData()
new_weather.clouds = Clouds(
base=self.weather_adjuster.cloud_base.base.value(),
density=self.weather_adjuster.cloud_density.density.value(),
thickness=self.weather_adjuster.cloud_thickness.thickness.value(),
precipitation=self.weather_adjuster.precipitation.selector.currentData(),
preset=preset,
)
self.weather.conditions.weather = new_weather
self.weather.update_forecast()
if game.turn > 0 and current_time != qdt:
events = GameUpdateEvents()
game.initialize_turn(events, for_blue=True, for_red=True)
sim.sim_update.emit(events)
self.accept()