mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Move front lines out of MapModel.
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import List
|
||||
|
||||
from PySide2.QtCore import Property, QObject, Signal, Slot
|
||||
|
||||
from game.server.leaflet import LeafletLatLon
|
||||
from game.theater import FrontLine
|
||||
from game.utils import nautical_miles
|
||||
from qt_ui.dialogs import Dialog
|
||||
|
||||
|
||||
class FrontLineJs(QObject):
|
||||
extentsChanged = Signal()
|
||||
|
||||
def __init__(self, front_line: FrontLine) -> None:
|
||||
super().__init__()
|
||||
self.front_line = front_line
|
||||
|
||||
@Property(list, notify=extentsChanged)
|
||||
def extents(self) -> List[LeafletLatLon]:
|
||||
a = self.front_line.position.point_from_heading(
|
||||
self.front_line.attack_heading.right.degrees, nautical_miles(2).meters
|
||||
).latlng()
|
||||
b = self.front_line.position.point_from_heading(
|
||||
self.front_line.attack_heading.left.degrees, nautical_miles(2).meters
|
||||
).latlng()
|
||||
return [a.as_list(), b.as_list()]
|
||||
|
||||
@Slot()
|
||||
def showPackageDialog(self) -> None:
|
||||
Dialog.open_new_package_dialog(self.front_line)
|
||||
@@ -3,7 +3,7 @@ import traceback
|
||||
import webbrowser
|
||||
from typing import Optional
|
||||
|
||||
from PySide2.QtCore import QSettings, Qt
|
||||
from PySide2.QtCore import QSettings, Qt, Signal
|
||||
from PySide2.QtGui import QCloseEvent, QIcon
|
||||
from PySide2.QtWidgets import (
|
||||
QAction,
|
||||
@@ -22,7 +22,9 @@ from game import Game, VERSION, persistency
|
||||
from game.debriefing import Debriefing
|
||||
from game.layout import LAYOUTS
|
||||
from game.server import EventStream, GameContext
|
||||
from game.server.dependencies import QtCallbacks, QtContext
|
||||
from game.server.security import ApiKeyManager
|
||||
from game.theater import MissionTarget
|
||||
from qt_ui import liberation_install
|
||||
from qt_ui.dialogs import Dialog
|
||||
from qt_ui.models import GameModel
|
||||
@@ -46,6 +48,8 @@ from qt_ui.windows.stats.QStatsWindow import QStatsWindow
|
||||
|
||||
|
||||
class QLiberationWindow(QMainWindow):
|
||||
new_package_signal = Signal(MissionTarget)
|
||||
|
||||
def __init__(self, game: Optional[Game], new_map: bool) -> None:
|
||||
super().__init__()
|
||||
|
||||
@@ -56,6 +60,12 @@ class QLiberationWindow(QMainWindow):
|
||||
self.sim_controller.sim_update.connect(EventStream.put_nowait)
|
||||
self.game_model = GameModel(game, self.sim_controller)
|
||||
GameContext.set_model(self.game_model)
|
||||
self.new_package_signal.connect(
|
||||
lambda target: Dialog.open_new_package_dialog(target, self)
|
||||
)
|
||||
QtContext.set_callbacks(
|
||||
QtCallbacks(lambda target: self.new_package_signal.emit(target))
|
||||
)
|
||||
Dialog.set_game(self.game_model)
|
||||
self.ato_panel = QAirTaskingOrderPanel(self.game_model)
|
||||
self.info_panel = QInfoPanel(self.game)
|
||||
|
||||
@@ -124,10 +124,10 @@ class QBaseMenu2(QDialog):
|
||||
return self.game_model.game.settings.enable_base_capture_cheat
|
||||
|
||||
def cheat_capture(self) -> None:
|
||||
self.cp.capture(self.game_model.game, for_player=not self.cp.captured)
|
||||
events = GameUpdateEvents()
|
||||
self.cp.capture(self.game_model.game, events, for_player=not self.cp.captured)
|
||||
# Reinitialized ground planners and the like. The ATO needs to be reset because
|
||||
# missions planned against the flipped base are no longer valid.
|
||||
events = GameUpdateEvents()
|
||||
self.game_model.game.initialize_turn(events)
|
||||
EventStream.put_nowait(events)
|
||||
GameUpdateSignal.get_instance().updateGame(self.game_model.game)
|
||||
|
||||
@@ -57,8 +57,10 @@ class QGroundForcesStrategy(QGroupBox):
|
||||
amount *= -1
|
||||
self.cp.base.affect_strength(amount)
|
||||
enemy_point.base.affect_strength(-amount)
|
||||
front_line = self.cp.front_line_with(enemy_point)
|
||||
front_line.update_position()
|
||||
events = GameUpdateEvents().update_front_line(front_line)
|
||||
# Clear the ATO to replan missions affected by the front line.
|
||||
events = GameUpdateEvents()
|
||||
self.game.initialize_turn(events)
|
||||
EventStream.put_nowait(events)
|
||||
GameUpdateSignal.get_instance().updateGame(self.game)
|
||||
|
||||
Reference in New Issue
Block a user