diff --git a/game/theater/theatergroundobject.py b/game/theater/theatergroundobject.py
index 2484ec71..486c1976 100644
--- a/game/theater/theatergroundobject.py
+++ b/game/theater/theatergroundobject.py
@@ -411,14 +411,10 @@ class CoastalSiteGroundObject(TheaterGroundObject):
)
-class BaseDefenseGroundObject(TheaterGroundObject):
- """Base type for all base defenses."""
-
-
# TODO: Differentiate types.
# This type gets used both for AA sites (SAM, AAA, or SHORAD). These should each
# be split into their own types.
-class SamGroundObject(BaseDefenseGroundObject):
+class SamGroundObject(TheaterGroundObject):
def __init__(
self,
name: str,
@@ -496,7 +492,7 @@ class SamGroundObject(BaseDefenseGroundObject):
return max(max_tel_range, max_telar_range, max_non_radar)
-class VehicleGroupGroundObject(BaseDefenseGroundObject):
+class VehicleGroupGroundObject(TheaterGroundObject):
def __init__(
self,
name: str,
@@ -518,7 +514,7 @@ class VehicleGroupGroundObject(BaseDefenseGroundObject):
)
-class EwrGroundObject(BaseDefenseGroundObject):
+class EwrGroundObject(TheaterGroundObject):
def __init__(
self,
name: str,
diff --git a/gen/naming.py b/gen/naming.py
index 3c1b140f..a30a622e 100644
--- a/gen/naming.py
+++ b/gen/naming.py
@@ -312,10 +312,6 @@ class NameGenerator:
db.unit_type_name(unit_type),
)
- @staticmethod
- def next_basedefense_name():
- return "basedefense_aa|0|0|"
-
@classmethod
def next_awacs_name(cls, country: Country):
cls.number += 1
diff --git a/qt_ui/windows/basemenu/QBaseMenuTabs.py b/qt_ui/windows/basemenu/QBaseMenuTabs.py
index fe80dbe3..a8389e95 100644
--- a/qt_ui/windows/basemenu/QBaseMenuTabs.py
+++ b/qt_ui/windows/basemenu/QBaseMenuTabs.py
@@ -4,7 +4,6 @@ from game.theater import ControlPoint, OffMapSpawn, Fob
from qt_ui.models import GameModel
from qt_ui.windows.basemenu.DepartingConvoysMenu import DepartingConvoysMenu
from qt_ui.windows.basemenu.airfield.QAirfieldCommand import QAirfieldCommand
-from qt_ui.windows.basemenu.base_defenses.QBaseDefensesHQ import QBaseDefensesHQ
from qt_ui.windows.basemenu.ground_forces.QGroundForcesHQ import QGroundForcesHQ
from qt_ui.windows.basemenu.intel.QIntelInfo import QIntelInfo
@@ -14,9 +13,6 @@ class QBaseMenuTabs(QTabWidget):
super(QBaseMenuTabs, self).__init__()
if not cp.captured:
- if not cp.is_carrier and not isinstance(cp, OffMapSpawn):
- self.base_defenses_hq = QBaseDefensesHQ(cp, game_model.game)
- self.addTab(self.base_defenses_hq, "Base Defenses")
self.intel = QIntelInfo(cp, game_model.game)
self.addTab(self.intel, "Intel")
@@ -30,17 +26,9 @@ class QBaseMenuTabs(QTabWidget):
if cp.helipads:
self.airfield_command = QAirfieldCommand(cp, game_model)
self.addTab(self.airfield_command, "Heliport")
- self.base_defenses_hq = QBaseDefensesHQ(cp, game_model.game)
- self.addTab(self.base_defenses_hq, "Base Defenses")
else:
self.airfield_command = QAirfieldCommand(cp, game_model)
self.addTab(self.airfield_command, "Airfield Command")
-
- if cp.is_carrier:
- self.base_defenses_hq = QBaseDefensesHQ(cp, game_model.game)
- self.addTab(self.base_defenses_hq, "Fleet")
- elif not isinstance(cp, OffMapSpawn):
+ if not isinstance(cp, OffMapSpawn):
self.ground_forces_hq = QGroundForcesHQ(cp, game_model)
self.addTab(self.ground_forces_hq, "Ground Forces HQ")
- self.base_defenses_hq = QBaseDefensesHQ(cp, game_model.game)
- self.addTab(self.base_defenses_hq, "Base Defenses")
diff --git a/qt_ui/windows/basemenu/base_defenses/QBaseDefenseGroupInfo.py b/qt_ui/windows/basemenu/base_defenses/QBaseDefenseGroupInfo.py
deleted file mode 100644
index 618e62dd..00000000
--- a/qt_ui/windows/basemenu/base_defenses/QBaseDefenseGroupInfo.py
+++ /dev/null
@@ -1,106 +0,0 @@
-from PySide2.QtCore import Qt
-from PySide2.QtWidgets import (
- QGridLayout,
- QGroupBox,
- QLabel,
- QPushButton,
- QVBoxLayout,
-)
-
-from game.theater import ControlPoint, TheaterGroundObject
-from qt_ui.dialogs import Dialog
-from qt_ui.uiconstants import VEHICLES_ICONS
-from qt_ui.windows.groundobject.QGroundObjectMenu import QGroundObjectMenu
-from game import db
-from dcs import vehicles
-
-
-class QBaseDefenseGroupInfo(QGroupBox):
- def __init__(self, cp: ControlPoint, ground_object: TheaterGroundObject, game):
- super(QBaseDefenseGroupInfo, self).__init__("Group : " + ground_object.obj_name)
- self.ground_object = ground_object
- self.cp = cp
- self.game = game
- self.buildings = game.theater.find_ground_objects_by_obj_name(
- self.ground_object.obj_name
- )
-
- self.main_layout = QVBoxLayout()
- self.unit_layout = QGridLayout()
-
- self.init_ui()
-
- def init_ui(self):
-
- self.buildLayout()
- self.main_layout.addLayout(self.unit_layout)
- if not self.cp.captured and not self.ground_object.is_dead:
- attack_button = QPushButton("Attack")
- attack_button.setProperty("style", "btn-danger")
- attack_button.setMaximumWidth(180)
- attack_button.clicked.connect(self.onAttack)
- self.main_layout.addWidget(attack_button, 0, Qt.AlignLeft)
-
- if self.cp.captured:
- manage_button = QPushButton("Manage")
- manage_button.setProperty("style", "btn-success")
- manage_button.setMaximumWidth(180)
- manage_button.clicked.connect(self.onManage)
- self.main_layout.addWidget(manage_button, 0, Qt.AlignLeft)
-
- self.setLayout(self.main_layout)
-
- def buildLayout(self):
- unit_dict = {}
- for i in range(self.unit_layout.rowCount()):
- for j in range(self.unit_layout.columnCount()):
- item = self.unit_layout.itemAtPosition(i, j)
- if item is not None and item.widget() is not None:
- item.widget().setParent(None)
- print("Remove " + str(i) + ", " + str(j))
-
- for g in self.ground_object.groups:
- for u in g.units:
- if u.type in unit_dict.keys():
- unit_dict[u.type] = unit_dict[u.type] + 1
- else:
- unit_dict[u.type] = 1
- i = 0
- for k, v in unit_dict.items():
- icon = QLabel()
- if k in VEHICLES_ICONS.keys():
- icon.setPixmap(VEHICLES_ICONS[k])
- else:
- icon.setText("" + k[:8] + "")
- icon.setProperty("style", "icon-armor")
- self.unit_layout.addWidget(icon, i, 0)
- unit_display_name = k
- unit_type = vehicles.vehicle_map.get(k)
- if unit_type is not None:
- unit_display_name = db.unit_get_expanded_info(
- self.game.enemy_country, unit_type, "name"
- )
- self.unit_layout.addWidget(
- QLabel(str(v) + " x " + "" + unit_display_name + ""),
- i,
- 1,
- )
- i = i + 1
-
- if len(unit_dict.items()) == 0:
- self.unit_layout.addWidget(QLabel("/"), 0, 0)
-
- self.setLayout(self.main_layout)
-
- def onAttack(self):
- Dialog.open_new_package_dialog(self.ground_object, parent=self.window())
-
- def onManage(self):
- self.edition_menu = QGroundObjectMenu(
- self.window(), self.ground_object, self.buildings, self.cp, self.game
- )
- self.edition_menu.show()
- self.edition_menu.changed.connect(self.onEdition)
-
- def onEdition(self):
- self.buildLayout()
diff --git a/qt_ui/windows/basemenu/base_defenses/QBaseDefensesHQ.py b/qt_ui/windows/basemenu/base_defenses/QBaseDefensesHQ.py
deleted file mode 100644
index f1d99d67..00000000
--- a/qt_ui/windows/basemenu/base_defenses/QBaseDefensesHQ.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from PySide2.QtWidgets import QFrame, QGridLayout
-
-from game import Game
-from game.theater import ControlPoint
-from qt_ui.windows.basemenu.base_defenses.QBaseInformation import QBaseInformation
-
-
-class QBaseDefensesHQ(QFrame):
- def __init__(self, cp: ControlPoint, game: Game):
- super(QBaseDefensesHQ, self).__init__()
- self.cp = cp
- self.game = game
- self.init_ui()
-
- def init_ui(self):
- airport = self.game.theater.terrain.airport_by_id(self.cp.id)
- layout = QGridLayout()
- layout.addWidget(QBaseInformation(self.cp, airport, self.game))
- self.setLayout(layout)
diff --git a/qt_ui/windows/basemenu/base_defenses/QBaseInformation.py b/qt_ui/windows/basemenu/base_defenses/QBaseInformation.py
deleted file mode 100644
index f2b874dd..00000000
--- a/qt_ui/windows/basemenu/base_defenses/QBaseInformation.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from PySide2.QtGui import Qt
-from PySide2.QtWidgets import (
- QFrame,
- QGridLayout,
- QScrollArea,
- QVBoxLayout,
- QWidget,
-)
-
-from game.theater import Airport, ControlPoint, Fob
-from game.theater.theatergroundobject import BuildingGroundObject
-from qt_ui.windows.basemenu.base_defenses.QBaseDefenseGroupInfo import (
- QBaseDefenseGroupInfo,
-)
-
-
-class QBaseInformation(QFrame):
- def __init__(self, cp: ControlPoint, airport: Airport, game):
- super(QBaseInformation, self).__init__()
- self.cp = cp
- self.airport = airport
- self.game = game
- self.setMinimumWidth(500)
- self.init_ui()
-
- def init_ui(self):
- self.mainLayout = QVBoxLayout()
-
- scroll_content = QWidget()
- task_box_layout = QGridLayout()
- scroll_content.setLayout(task_box_layout)
-
- for g in self.cp.ground_objects:
- # Airbase groups are the objects that are hidden on the map because
- # they're shown in the base menu.
- if not g.airbase_group:
- continue
-
- # Of these, we need to ignore the FOB structure itself since that's
- # not supposed to be targetable.
- if isinstance(self.cp, Fob) and isinstance(g, BuildingGroundObject):
- continue
-
- group_info = QBaseDefenseGroupInfo(self.cp, g, self.game)
- task_box_layout.addWidget(group_info)
-
- scroll_content.setLayout(task_box_layout)
- scroll = QScrollArea()
- scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
- scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
- scroll.setWidgetResizable(True)
- scroll.setWidget(scroll_content)
-
- self.mainLayout.addWidget(scroll)
-
- self.setLayout(self.mainLayout)