diff --git a/qt_ui/stylesheets/style.css b/qt_ui/stylesheets/style.css
index 861a8912..d3015ca8 100644
--- a/qt_ui/stylesheets/style.css
+++ b/qt_ui/stylesheets/style.css
@@ -21,4 +21,9 @@ QPushButton[style="btn-primary"]{
QBaseMenu{
background-color:#699245;
color:white;
+}
+
+QWidgte[style="baseMenuHeader"]{
+ font-size: 24px;
+ font-weight: bold;
}
\ No newline at end of file
diff --git a/qt_ui/widgets/map/QLiberationMap.py b/qt_ui/widgets/map/QLiberationMap.py
index 06d18066..6c4993f3 100644
--- a/qt_ui/widgets/map/QLiberationMap.py
+++ b/qt_ui/widgets/map/QLiberationMap.py
@@ -27,6 +27,7 @@ class QLiberationMap(QGraphicsView):
"cp": True,
"go": True,
"lines": True,
+ "events": True,
"ennemy_sam_ranges": True,
"ally_sam_ranges": True
}
@@ -200,6 +201,7 @@ class QLiberationMap(QGraphicsView):
nonlocal occupied_rects
point = self._transform_point(location)
rect = QRect(point[0] - 16, point[1] - 16, 32, 32)
+ print(rect)
i = 0
while True:
@@ -236,7 +238,7 @@ class QLiberationMap(QGraphicsView):
location = self._frontline_center(event.from_cp, event.to_cp)
rect = _location_to_rect(location)
- scene.addItem(QMapEvent(self, rect.x(), rect.y(), rect.width(), rect.height(), event))
+ scene.addItem(QMapEvent(self, rect.x(), rect.y(), 32, 32, event))
@staticmethod
def set_display_rule(rule: str, value: bool):
diff --git a/qt_ui/widgets/map/QMapControlPoint.py b/qt_ui/widgets/map/QMapControlPoint.py
index cc68956b..a3ac9630 100644
--- a/qt_ui/widgets/map/QMapControlPoint.py
+++ b/qt_ui/widgets/map/QMapControlPoint.py
@@ -52,14 +52,10 @@ class QMapControlPoint(QGraphicsRectItem):
self.update()
def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
- # TODO : improve this and add contextual actions (just a placholder for now)
-
openBaseMenu = QAction("Open base menu")
openBaseMenu.triggered.connect(self.openBaseMenu)
menu = QMenu("Menu", self.parent)
- menu.addAction("Plan a strike on " + self.model.name + " airbase")
- menu.addAction("See available intel")
menu.addAction(openBaseMenu)
menu.exec_(event.screenPos())
diff --git a/qt_ui/widgets/map/QMapEvent.py b/qt_ui/widgets/map/QMapEvent.py
index 1f444108..11e9f83d 100644
--- a/qt_ui/widgets/map/QMapEvent.py
+++ b/qt_ui/widgets/map/QMapEvent.py
@@ -1,8 +1,9 @@
from PySide2.QtGui import QPen
-from PySide2.QtWidgets import QGraphicsRectItem
+from PySide2.QtWidgets import QGraphicsRectItem, QGraphicsSceneMouseEvent
import qt_ui.uiconstants as CONST
from game.event import Event
+from qt_ui.windows.QBriefingWindow import QBriefingWindow
from theater import TheaterGroundObject, ControlPoint
@@ -14,22 +15,29 @@ class QMapEvent(QGraphicsRectItem):
self.parent = parent
self.setAcceptHoverEvents(True)
self.setZValue(2)
+ print(x,y,w,h)
self.setToolTip(str(self.gameEvent))
-
def paint(self, painter, option, widget=None):
- painter.save()
+ if self.parent.get_display_rule("events"):
+ painter.save()
- if self.gameEvent.is_player_attacking:
- painter.setPen(QPen(brush=CONST.COLORS["blue"]))
- painter.setBrush(CONST.COLORS["blue"])
- else:
- painter.setPen(QPen(brush=CONST.COLORS["red"]))
- painter.setBrush(CONST.COLORS["red"])
+ if self.gameEvent.is_player_attacking:
+ painter.setPen(QPen(brush=CONST.COLORS["blue"]))
+ painter.setBrush(CONST.COLORS["blue"])
+ else:
+ painter.setPen(QPen(brush=CONST.COLORS["red"]))
+ painter.setBrush(CONST.COLORS["red"])
- painter.drawRect(option.rect)
+ painter.drawRect(option.rect)
+ print(option.rect)
+ painter.drawPixmap(option.rect, CONST.EVENT_ICONS[self.gameEvent.__class__])
+ painter.restore()
- painter.drawPixmap(option.rect, CONST.EVENT_ICONS[self.gameEvent.__class__])
+ def mousePressEvent(self, event:QGraphicsSceneMouseEvent):
+ self.openBriefing()
- painter.restore()
+ def openBriefing(self):
+ self.briefing = QBriefingWindow(self.window(), self.gameEvent)
+ self.briefing.show()
\ No newline at end of file
diff --git a/qt_ui/windows/QBaseMenu.py b/qt_ui/windows/QBaseMenu.py
index 6501722e..5bf09343 100644
--- a/qt_ui/windows/QBaseMenu.py
+++ b/qt_ui/windows/QBaseMenu.py
@@ -1,8 +1,10 @@
from PySide2.QtCore import Qt
-from PySide2.QtGui import QWindow
+from PySide2.QtGui import QWindow, QCloseEvent
from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget, QFrame, QDialog, QVBoxLayout, QGridLayout, QPushButton
from dcs.unittype import UnitType
+from game.event import UnitsDeliveryEvent
+from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
from theater import ControlPoint, CAP, Embarking, AirDefence, CAS, PinpointStrike, db
from game import Game
@@ -13,20 +15,42 @@ class QBaseMenu(QDialog):
super(QBaseMenu, self).__init__(parent)
self.cp = controlPoint
self.game = game
- self.deliveryEvent = self.game.units_delivery_event(self.cp)
+
+
+ if self.cp.captured:
+ self.deliveryEvent = None
+ for event in self.game.events:
+ print(event.__class__)
+ print(UnitsDeliveryEvent.__class__)
+ if event.__class__ == UnitsDeliveryEvent and event.from_cp == self.cp:
+ self.deliveryEvent = event
+ break
+ if not self.deliveryEvent:
+ print("Rebuild event")
+ self.deliveryEvent = self.game.units_delivery_event(self.cp)
+
self.setWindowFlags(Qt.WindowStaysOnTopHint)
- self.setMinimumSize(200,200)
+ self.setMinimumSize(200, 200)
+ self.setModal(True)
self.initUi()
def initUi(self):
self.setWindowTitle(self.cp.name)
+ self.topLayoutWidget = QWidget()
self.topLayout = QHBoxLayout()
- self.topLayout.setProperty("style", "baseMenuHeader")
- self.topLayout.addWidget(QLabel("" + self.cp.name + ""))
- self.topLayout.addWidget(
- QLabel("{} / {} / {}".format(self.cp.base.total_planes, self.cp.base.total_armor, self.cp.base.total_aa)))
+
+ title = QLabel("" + self.cp.name + "")
+ title.setAlignment(Qt.AlignLeft | Qt.AlignTop)
+ unitsPower = QLabel("{} / {} / {}".format(self.cp.base.total_planes, self.cp.base.total_armor, self.cp.base.total_aa))
+ unitsPower.setAlignment(Qt.AlignLeft |Qt.AlignTop)
+
+ self.topLayout.addWidget(title)
+ self.topLayout.addWidget(unitsPower)
+ self.topLayout.setAlignment(Qt.AlignTop)
+ self.topLayoutWidget.setProperty("style", "baseMenuHeader")
+ self.topLayoutWidget.setLayout(self.topLayout)
units = {
CAP: db.find_unittype(CAP, self.game.player_name),
@@ -37,65 +61,65 @@ class QBaseMenu(QDialog):
}
self.mainLayout = QVBoxLayout()
- self.mainLayout.addLayout(self.topLayout)
+ self.mainLayout.addWidget(self.topLayoutWidget)
- print(units)
tasks = list(units.keys())
tasks_per_column = 3
+ self.unitLayout = QGridLayout()
self.bought_amount_labels = {}
+ row = 0
+
+ def add_purchase_row(unit_type):
+
+ nonlocal row
+ existing_units = self.cp.base.total_units_of_type(unit_type)
+ scheduled_units = self.deliveryEvent.units.get(unit_type, 0)
+
+ unitName = QLabel("" + db.unit_type_name(unit_type) + "")
+ amountBought = QLabel("{} ({})".format(existing_units, scheduled_units))
+ self.bought_amount_labels[unit_type] = amountBought
+
+ price = QLabel("{}m".format(db.PRICES[unit_type]))
+
+ buy = QPushButton("+")
+ buy.clicked.connect(lambda: self.buy(unit_type))
+
+ sell = QPushButton("-")
+ sell.clicked.connect(lambda: self.sell(unit_type))
+
+ self.unitLayout.addWidget(unitName, row, 0)
+ self.unitLayout.addWidget(amountBought, row, 1)
+ self.unitLayout.addWidget(price, row, 2)
+ self.unitLayout.addWidget(buy, row, 3)
+ self.unitLayout.addWidget(sell, row, 4)
+
+ row = row + 1
+
if self.cp.captured:
- column = 0
- for i, tasks_column in [(i, tasks[idx:idx+tasks_per_column]) for i, idx in enumerate(range(0, len(tasks), tasks_per_column))]:
- row = 2
- def purchase_row(unit_type, unit_price):
- layout = QHBoxLayout()
- existing_units = self.cp.base.total_units_of_type(unit_type)
- scheduled_units = self.deliveryEvent.units.get(unit_type, 0)
+ for task_type in units.keys():
- unitName = QLabel(db.unit_type_name(unit_type))
- amountBought = QLabel("{} ({})".format(existing_units, scheduled_units))
- self.bought_amount_labels[unit_type] = amountBought
+ units_column = list(set(units[task_type]))
+ if len(units_column) == 0: continue
+ units_column.sort(key=lambda x: db.PRICES[x])
- price = QLabel("{}m".format(unit_price))
-
- buy = QPushButton("+")
- buy.clicked.connect(lambda: self.buy(unit_type))
-
- sell = QPushButton("-")
- sell.clicked.connect(lambda: self.sell(unit_type))
-
- layout.addWidget(unitName)
- layout.addWidget(amountBought)
- layout.addWidget(price)
-
- layout.addWidget(buy)
- layout.addWidget(sell)
-
- return layout
-
- for task_type in tasks_column:
- QLabel("{}".format(db.task_name(task_type)))
- row += 1
-
- units_column = list(set(units[task_type]))
- units_column.sort(key=lambda x: db.PRICES[x])
- for unit_type in units_column:
- layout = purchase_row(unit_type, db.PRICES[unit_type])
- self.mainLayout.addLayout(layout)
-
- column += 5
+ taskTypeLabel = QLabel("{}".format(db.task_name(task_type)))
+ self.unitLayout.addWidget(taskTypeLabel, row, 0)
+ row = row + 1
+ for unit_type in units_column:
+ add_purchase_row(unit_type)
+ self.mainLayout.addLayout(self.unitLayout)
self.setLayout(self.mainLayout)
def _update_count_label(self, unit_type: UnitType):
- self.bought_amount_labels[unit_type].setText("({}{})".format(
+ self.bought_amount_labels[unit_type].setText("{}{}".format(
self.cp.base.total_units_of_type(unit_type),
- unit_type in self.deliveryEvent.units and ", bought {}".format(self.deliveryEvent.units[unit_type]) or ""
+ unit_type in self.deliveryEvent.units and " ({})".format(self.deliveryEvent.units[unit_type]) or ""
))
def buy(self, unit_type):
@@ -118,4 +142,7 @@ class QBaseMenu(QDialog):
self.game.budget += price
self.cp.base.commit_losses({unit_type: 1})
- self._update_count_label(unit_type)
\ No newline at end of file
+ self._update_count_label(unit_type)
+
+ def closeEvent(self, closeEvent:QCloseEvent):
+ GameUpdateSignal.get_instance().updateGame(self.game)
\ No newline at end of file
diff --git a/qt_ui/windows/QBriefingWindow.py b/qt_ui/windows/QBriefingWindow.py
index dfe3d07a..62adcd62 100644
--- a/qt_ui/windows/QBriefingWindow.py
+++ b/qt_ui/windows/QBriefingWindow.py
@@ -1,17 +1,20 @@
from PySide2.QtGui import QWindow
-from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget
+from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget, QDialog
-class QBriefingWindow(QWindow):
+class QBriefingWindow(QDialog):
- def __init__(self, parent):
+ def __init__(self, parent, event):
super(QBriefingWindow, self).__init__(parent)
+ self.gameEvent = event
+ self.setWindowTitle("Briefing : " + str(event))
+ self.setMinimumSize(200,200)
+ self.setModal(True)
self.initUi()
def initUi(self):
+
layout = QHBoxLayout()
layout.addWidget(QLabel("TODO : This will be the briefing window"))
- central_widget = QWidget()
- central_widget.setLayout(layout)
- self.setCentralWidget(central_widget)
\ No newline at end of file
+ self.setLayout(layout)
\ No newline at end of file
diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py
index 67f47cde..49bd29f5 100644
--- a/qt_ui/windows/QLiberationWindow.py
+++ b/qt_ui/windows/QLiberationWindow.py
@@ -110,9 +110,16 @@ class QLiberationWindow(QMainWindow):
tg_line_visibility.toggled.connect(
lambda: QLiberationMap.set_display_rule("lines", tg_line_visibility.isChecked()))
+ tg_event_visibility = QAction('Events', displayMenu)
+ tg_event_visibility.setCheckable(True)
+ tg_event_visibility.setChecked(True)
+ tg_event_visibility.toggled.connect(
+ lambda: QLiberationMap.set_display_rule("events", tg_event_visibility.isChecked()))
+
displayMenu.addAction(tg_go_visibility)
displayMenu.addAction(tg_cp_visibility)
displayMenu.addAction(tg_line_visibility)
+ displayMenu.addAction(tg_event_visibility)
def newGame(self):
wizard = NewGameWizard(self)