mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add unit name -> Liberation object map.
Generated units are added to this during mission generation so we can map destroyed units back to the data that generated them. Currently only implemented for aircraft as a proof of concept.
This commit is contained in:
@@ -235,8 +235,9 @@ class QTopPanel(QFrame):
|
||||
game_event.departure_cp = self.game.theater.controlpoints[0]
|
||||
game_event.player_attacking()
|
||||
|
||||
self.game.initiate_event(game_event)
|
||||
waiting = QWaitingForMissionResultWindow(game_event, self.game)
|
||||
unit_map = self.game.initiate_event(game_event)
|
||||
waiting = QWaitingForMissionResultWindow(game_event, self.game,
|
||||
unit_map)
|
||||
waiting.show()
|
||||
|
||||
def budget_update(self, game:Game):
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import logging
|
||||
|
||||
from PySide2.QtGui import QIcon, QPixmap
|
||||
from PySide2.QtWidgets import (
|
||||
QDialog,
|
||||
@@ -55,29 +57,35 @@ class QDebriefingWindow(QDialog):
|
||||
lostUnits.setLayout(lostUnitsLayout)
|
||||
|
||||
row = 0
|
||||
for unit_type, count in self.debriefing.player_dead_aircraft_dict.items():
|
||||
player_air_losses = self.debriefing.air_losses.by_type(player=True)
|
||||
for unit_type, count in player_air_losses.items():
|
||||
try:
|
||||
lostUnitsLayout.addWidget(QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
lostUnitsLayout.addWidget(QLabel("{}".format(count)), row, 1)
|
||||
lostUnitsLayout.addWidget(
|
||||
QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
lostUnitsLayout.addWidget(QLabel(str(count)), row, 1)
|
||||
row += 1
|
||||
except:
|
||||
print("Issue adding " + str(unit_type) + " to debriefing information")
|
||||
except AttributeError:
|
||||
logging.exception(
|
||||
f"Issue adding {unit_type} to debriefing information")
|
||||
|
||||
for unit_type, count in self.debriefing.player_dead_units_dict.items():
|
||||
try:
|
||||
lostUnitsLayout.addWidget(QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
lostUnitsLayout.addWidget(QLabel("{}".format(count)), row, 1)
|
||||
lostUnitsLayout.addWidget(
|
||||
QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
lostUnitsLayout.addWidget(QLabel(str(count)), row, 1)
|
||||
row += 1
|
||||
except:
|
||||
print("Issue adding " + str(unit_type) + " to debriefing information")
|
||||
except AttributeError:
|
||||
logging.exception(
|
||||
f"Issue adding {unit_type} to debriefing information")
|
||||
|
||||
for building, count in self.debriefing.player_dead_buildings_dict.items():
|
||||
try:
|
||||
lostUnitsLayout.addWidget(QLabel(building, row, 0))
|
||||
lostUnitsLayout.addWidget(QLabel("{}".format(count)), row, 1)
|
||||
lostUnitsLayout.addWidget(QLabel(str(count)), row, 1)
|
||||
row += 1
|
||||
except:
|
||||
print("Issue adding " + str(building) + " to debriefing information")
|
||||
except AttributeError:
|
||||
logging.exception(
|
||||
f"Issue adding {building} to debriefing information")
|
||||
|
||||
self.layout.addWidget(lostUnits)
|
||||
|
||||
@@ -92,15 +100,16 @@ class QDebriefingWindow(QDialog):
|
||||
# enemylostUnitsLayout.addWidget(QLabel("{}".format(len(self.debriefing.destroyed_objects))), row, 1)
|
||||
# row += 1
|
||||
|
||||
for unit_type, count in self.debriefing.enemy_dead_aircraft_dict.items():
|
||||
if count == 0:
|
||||
continue
|
||||
enemy_air_losses = self.debriefing.air_losses.by_type(player=False)
|
||||
for unit_type, count in enemy_air_losses.items():
|
||||
try:
|
||||
enemylostUnitsLayout.addWidget(QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
enemylostUnitsLayout.addWidget(QLabel("{}".format(count)), row, 1)
|
||||
enemylostUnitsLayout.addWidget(
|
||||
QLabel(db.unit_type_name(unit_type)), row, 0)
|
||||
enemylostUnitsLayout.addWidget(QLabel(str(count)), row, 1)
|
||||
row += 1
|
||||
except:
|
||||
print("Issue adding " + str(unit_type) + " to debriefing information")
|
||||
except AttributeError:
|
||||
logging.exception(
|
||||
f"Issue adding {unit_type} to debriefing information")
|
||||
|
||||
for unit_type, count in self.debriefing.enemy_dead_units_dict.items():
|
||||
if count == 0:
|
||||
@@ -114,8 +123,9 @@ class QDebriefingWindow(QDialog):
|
||||
enemylostUnitsLayout.addWidget(QLabel(building), row, 0)
|
||||
enemylostUnitsLayout.addWidget(QLabel("{}".format(count)), row, 1)
|
||||
row += 1
|
||||
except:
|
||||
print("Issue adding " + str(building) + " to debriefing information")
|
||||
except AttributeError:
|
||||
logging.exception(
|
||||
f"Issue adding {building} to debriefing information")
|
||||
|
||||
self.layout.addWidget(enemylostUnits)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
from game.debriefing import Debriefing, wait_for_debriefing
|
||||
from game.game import Event, Game, logging
|
||||
from game.persistency import base_path
|
||||
from game.unitmap import UnitMap
|
||||
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
|
||||
|
||||
|
||||
@@ -39,22 +40,27 @@ class DebriefingFileWrittenSignal(QObject):
|
||||
def get_instance():
|
||||
return DebriefingFileWrittenSignal.instance
|
||||
|
||||
|
||||
DebriefingFileWrittenSignal()
|
||||
|
||||
|
||||
class QWaitingForMissionResultWindow(QDialog):
|
||||
|
||||
def __init__(self, gameEvent: Event, game: Game):
|
||||
def __init__(self, gameEvent: Event, game: Game, unit_map: UnitMap) -> None:
|
||||
super(QWaitingForMissionResultWindow, self).__init__()
|
||||
self.setModal(True)
|
||||
self.gameEvent = gameEvent
|
||||
self.game = game
|
||||
self.unit_map = unit_map
|
||||
self.setWindowTitle("Waiting for mission completion.")
|
||||
self.setWindowIcon(QIcon("./resources/icon.png"))
|
||||
self.setMinimumHeight(570)
|
||||
|
||||
self.initUi()
|
||||
DebriefingFileWrittenSignal.get_instance().debriefingReceived.connect(self.updateLayout)
|
||||
self.wait_thread = wait_for_debriefing(lambda debriefing: self.on_debriefing_udpate(debriefing), self.game)
|
||||
self.wait_thread = wait_for_debriefing(
|
||||
lambda debriefing: self.on_debriefing_update(debriefing), self.game,
|
||||
self.unit_map)
|
||||
|
||||
def initUi(self):
|
||||
self.layout = QGridLayout()
|
||||
@@ -119,17 +125,17 @@ class QWaitingForMissionResultWindow(QDialog):
|
||||
self.layout.addLayout(self.gridLayout, 1, 0)
|
||||
self.setLayout(self.layout)
|
||||
|
||||
def updateLayout(self, debriefing):
|
||||
def updateLayout(self, debriefing: Debriefing) -> None:
|
||||
updateBox = QGroupBox("Mission status")
|
||||
updateLayout = QGridLayout()
|
||||
updateBox.setLayout(updateLayout)
|
||||
self.debriefing = debriefing
|
||||
|
||||
updateLayout.addWidget(QLabel("<b>Aircraft destroyed</b>"), 0, 0)
|
||||
updateLayout.addWidget(QLabel(str(len(debriefing.killed_aircrafts))), 0, 1)
|
||||
updateLayout.addWidget(QLabel(str(len(debriefing.air_losses.losses))), 0, 1)
|
||||
|
||||
updateLayout.addWidget(QLabel("<b>Ground units destroyed</b>"), 1, 0)
|
||||
updateLayout.addWidget(QLabel(str(len(debriefing.killed_ground_units))), 1, 1)
|
||||
updateLayout.addWidget(QLabel(str(len(debriefing.dead_units))), 1, 1)
|
||||
|
||||
#updateLayout.addWidget(QLabel("<b>Weapons fired</b>"), 2, 0)
|
||||
#updateLayout.addWidget(QLabel(str(len(debriefing.weapons_fired))), 2, 1)
|
||||
@@ -142,28 +148,27 @@ class QWaitingForMissionResultWindow(QDialog):
|
||||
try:
|
||||
self.gridLayout.itemAt(i).widget().setParent(None)
|
||||
except:
|
||||
pass
|
||||
logging.exception("Failed to clear window")
|
||||
|
||||
# Set new window content
|
||||
self.gridLayout.addWidget(updateBox, 0, 0)
|
||||
|
||||
if not debriefing.mission_ended:
|
||||
if not debriefing.state_data.mission_ended:
|
||||
self.gridLayout.addWidget(QLabel("<b>Mission is being played</b>"), 1, 0)
|
||||
self.gridLayout.addWidget(self.actions, 2, 0)
|
||||
else:
|
||||
self.gridLayout.addWidget(QLabel("<b>Mission is over</b>"), 1, 0)
|
||||
self.gridLayout.addWidget(self.actions2, 2, 0)
|
||||
|
||||
|
||||
def on_debriefing_udpate(self, debriefing):
|
||||
def on_debriefing_update(self, debriefing: Debriefing) -> None:
|
||||
try:
|
||||
logging.info("On Debriefing update")
|
||||
print(debriefing)
|
||||
logging.debug(debriefing)
|
||||
DebriefingFileWrittenSignal.get_instance().sendDebriefing(debriefing)
|
||||
except Exception as e:
|
||||
logging.error("Got an error while sending debriefing")
|
||||
logging.error(e)
|
||||
self.wait_thread = wait_for_debriefing(lambda debriefing: self.on_debriefing_udpate(debriefing), self.game)
|
||||
except Exception:
|
||||
logging.exception("Got an error while sending debriefing")
|
||||
self.wait_thread = wait_for_debriefing(
|
||||
lambda d: self.on_debriefing_update(d), self.game, self.unit_map)
|
||||
|
||||
def process_debriefing(self):
|
||||
self.game.finish_event(event=self.gameEvent, debriefing=self.debriefing)
|
||||
@@ -187,8 +192,8 @@ class QWaitingForMissionResultWindow(QDialog):
|
||||
with open(file[0], "r") as json_file:
|
||||
json_data = json.load(json_file)
|
||||
json_data["mission_ended"] = True
|
||||
debriefing = Debriefing(json_data, self.game)
|
||||
self.on_debriefing_udpate(debriefing)
|
||||
debriefing = Debriefing(json_data, self.game, self.unit_map)
|
||||
self.on_debriefing_update(debriefing)
|
||||
except Exception as e:
|
||||
logging.error(e)
|
||||
msg = QMessageBox()
|
||||
|
||||
Reference in New Issue
Block a user