diff --git a/game/db.py b/game/db.py index 8141e237..6302863b 100644 --- a/game/db.py +++ b/game/db.py @@ -30,9 +30,11 @@ from game.factions.russia_1965 import Russia_1965 from game.factions.russia_1990 import Russia_1990 from game.factions.russia_2010 import Russia_2010 from game.factions.spain_1990 import Spain_1990 +from game.factions.sweden_1990 import Sweden_1990 from game.factions.turkey_2005 import Turkey_2005 from game.factions.uae_2005 import UAE_2005 from game.factions.uk_1990 import UnitedKingdom_1990 +from game.factions.ukraine_2010 import Ukraine_2010 from game.factions.usa_1944 import USA_1944 from game.factions.usa_1955 import USA_1955 from game.factions.usa_1960 import USA_1960 @@ -162,23 +164,26 @@ PRICES = { Armor.IFV_BMD_1: 8, Armor.IFV_BMP_1: 14, Armor.IFV_BMP_2: 16, - Armor.IFV_BMP_3: 20, + Armor.IFV_BMP_3: 18, + Armor.ZBD_04A: 12, Armor.APC_Cobra: 4, Armor.APC_M113: 6, Armor.APC_M1043_HMMWV_Armament: 2, Armor.ATGM_M1045_HMMWV_TOW: 8, Armor.IFV_M2A2_Bradley: 12, - Armor.APC_M1126_Stryker_ICV: 16, - Armor.ATGM_M1134_Stryker: 18, + Armor.APC_M1126_Stryker_ICV: 10, + Armor.ATGM_M1134_Stryker: 12, Armor.MBT_M60A3_Patton: 18, Armor.MBT_M1A2_Abrams: 35, Armor.MBT_Leclerc: 35, Armor.MBT_Leopard_1A3: 24, Armor.MBT_Leopard_2: 35, Armor.MBT_Merkava_Mk__4: 35, - Armor.TPz_Fuchs: 8, + Armor.TPz_Fuchs: 5, Armor.MBT_Challenger_II: 30, + Armor.IFV_Marder: 10, + Armor.IFV_MCV_80: 10, Unarmed.Transport_UAZ_469: 3, Unarmed.Transport_Ural_375: 3, @@ -336,9 +341,24 @@ UNIT_BY_TASK = { Armor.ARV_BRDM_2, Armor.ARV_BRDM_2, Armor.ARV_BTR_RD, + Armor.ARV_BTR_RD, + Armor.ARV_BTR_RD, + Armor.ARV_BTR_RD, Armor.APC_BTR_80, Armor.APC_BTR_80, Armor.APC_BTR_80, + Armor.APC_BTR_80, + Armor.APC_BTR_80, + Armor.IFV_BMP_1, + Armor.IFV_BMP_1, + Armor.IFV_BMP_1, + Armor.IFV_BMP_2, + Armor.IFV_BMP_2, + Armor.IFV_BMP_3, + Armor.IFV_BMP_3, + Armor.ZBD_04A, + Armor.ZBD_04A, + Armor.ZBD_04A, Armor.MBT_T_55, Armor.MBT_T_55, Armor.MBT_T_55, @@ -368,6 +388,16 @@ UNIT_BY_TASK = { Armor.IFV_M2A2_Bradley, Armor.ATGM_M1134_Stryker, Armor.ATGM_M1134_Stryker, + Armor.APC_M1126_Stryker_ICV, + Armor.APC_M1126_Stryker_ICV, + Armor.APC_M1126_Stryker_ICV, + Armor.IFV_MCV_80, + Armor.IFV_MCV_80, + Armor.IFV_MCV_80, + Armor.IFV_Marder, + Armor.IFV_Marder, + Armor.IFV_Marder, + Armor.IFV_Marder, Armor.MBT_M60A3_Patton, Armor.MBT_M60A3_Patton, Armor.MBT_M60A3_Patton, @@ -531,6 +561,8 @@ FACTIONS = { "United Kingdown 1990": UnitedKingdom_1990, "Spain 1990": Spain_1990, "Italy 1990": Italy_1990, + "Sweden 1990": Sweden_1990, + "Ukrain 2010": Ukraine_2010, "India 2010": India_2010, "Israel 2000": Israel_2000, "Turkey 2005": Turkey_2005, @@ -899,7 +931,6 @@ class DefaultLiveries: class Default(Enum): af_standard = "" -# TODO : refactor/remove OH_58D.Liveries = DefaultLiveries F_16C_50.Liveries = DefaultLiveries P_51D_30_NA.Liveries = DefaultLiveries \ No newline at end of file diff --git a/game/factions/germany_1990.py b/game/factions/germany_1990.py index e819b8ca..23d36843 100644 --- a/game/factions/germany_1990.py +++ b/game/factions/germany_1990.py @@ -23,6 +23,7 @@ Germany_1990 = { Armor.TPz_Fuchs, Armor.MBT_Leopard_1A3, Armor.MBT_Leopard_2, + Armor.IFV_Marder, Unarmed.Transport_M818, Infantry.Infantry_M4, diff --git a/game/factions/israel_2000.py b/game/factions/israel_2000.py index 438bf33e..c7449fa0 100644 --- a/game/factions/israel_2000.py +++ b/game/factions/israel_2000.py @@ -20,7 +20,7 @@ Israel_2000 = { AH_64D, Armor.MBT_Merkava_Mk__4, - Armor.APC_M113, # Standing as VAB + Armor.APC_M113, Unarmed.Transport_M818, Infantry.Infantry_M4, diff --git a/game/factions/sweden_1990.py b/game/factions/sweden_1990.py new file mode 100644 index 00000000..4a1c711a --- /dev/null +++ b/game/factions/sweden_1990.py @@ -0,0 +1,31 @@ +from dcs.vehicles import * +from dcs.ships import * +from dcs.planes import * +from dcs.helicopters import * + +Sweden_1990 = { + "country": "Sweden", + "side": "blue", + "units": [ + AJS37, + + UH_1H, + + AirDefence.SAM_Hawk_LN_M192, + + Armor.IFV_MCV_80, # Standing as Strf 90 + Armor.MBT_Leopard_2, + Armor.APC_M1126_Stryker_ICV, # Closest thing available + + Unarmed.Transport_Ural_375, + Unarmed.Transport_UAZ_469, + Infantry.Soldier_AK, + CV_1143_5_Admiral_Kuznetsov, + Bulk_cargo_ship_Yakushev, + Dry_cargo_ship_Ivanov, + Tanker_Elnya_160, + ], + "shorad":[ + AirDefence.SAM_Avenger_M1097 + ] +} \ No newline at end of file diff --git a/game/factions/uk_1990.py b/game/factions/uk_1990.py index 5febf4dd..33cb324e 100644 --- a/game/factions/uk_1990.py +++ b/game/factions/uk_1990.py @@ -20,7 +20,7 @@ UnitedKingdom_1990 = { AH_64A, Armor.MBT_Challenger_II, - Armor.IFV_M2A2_Bradley, # Standing as Warrior IFV + Armor.IFV_MCV_80, Unarmed.Transport_M818, Infantry.Infantry_M4, diff --git a/game/factions/ukraine_2010.py b/game/factions/ukraine_2010.py new file mode 100644 index 00000000..f5650fa7 --- /dev/null +++ b/game/factions/ukraine_2010.py @@ -0,0 +1,51 @@ +from dcs.vehicles import * +from dcs.ships import * +from dcs.planes import * +from dcs.helicopters import * + +Ukraine_2010 = { + "country": "Ukraine", + "side": "blue", + "units": [ + Su_25, + Su_25T, + Su_24M, + Su_27, + MiG_29S, + L_39ZA, + + IL_76MD, + IL_78M, + An_26B, + An_30M, + Yak_40, + A_50, + + Mi_8MT, + Mi_24V, + + AirDefence.SAM_SA_3_S_125_LN_5P73, + AirDefence.SAM_SA_11_Buk_LN_9A310M1, + AirDefence.SAM_SA_10_S_300PS_LN_5P85C, + + Armor.APC_M1043_HMMWV_Armament, + Armor.IFV_BMP_3, + Armor.IFV_BMP_2, + Armor.APC_BTR_80, + Armor.MBT_T_80U, + Armor.MBT_T_72B, + + Unarmed.Transport_Ural_375, + Unarmed.Transport_UAZ_469, + Infantry.Soldier_AK, + CV_1143_5_Admiral_Kuznetsov, + Bulk_cargo_ship_Yakushev, + Dry_cargo_ship_Ivanov, + Tanker_Elnya_160, + ], + "shorad":[ + AirDefence.SAM_SA_19_Tunguska_2S6, + AirDefence.SAM_SA_13_Strela_10M3_9A35M3, + AirDefence.AAA_ZU_23_on_Ural_375 + ] +} \ No newline at end of file diff --git a/qt_ui/main.py b/qt_ui/main.py index 36e53797..e17a0d0d 100644 --- a/qt_ui/main.py +++ b/qt_ui/main.py @@ -29,6 +29,8 @@ if __name__ == "__main__": app = QApplication(sys.argv) uiconstants.load_icons() uiconstants.load_event_icons() + uiconstants.load_aircraft_icons() + uiconstants.load_vehicle_icons() # Splash screen setup pixmap = QPixmap("./resources/ui/splash_screen.png") diff --git a/qt_ui/uiconstants.py b/qt_ui/uiconstants.py index 532898da..1cef14aa 100644 --- a/qt_ui/uiconstants.py +++ b/qt_ui/uiconstants.py @@ -1,4 +1,5 @@ # URL for UI links +import os from typing import Dict from PySide2.QtGui import QColor, QFont, QPixmap @@ -38,7 +39,8 @@ CP_SIZE = 25 FONT = QFont("Arial", 12, weight=5, italic=True) - +AIRCRAFT_ICONS: Dict[str, QPixmap] = {} +VEHICLES_ICONS: Dict[str, QPixmap] = {} ICONS: Dict[str, QPixmap] = {} def load_icons(): @@ -93,4 +95,22 @@ def load_event_icons(): NavalInterceptEvent: "naval_intercept", StrikeEvent: "strike", UnitsDeliveryEvent: "delivery"}.items(): - EVENT_ICONS[category] = QPixmap("./resources/ui/events/" + image + ".png") \ No newline at end of file + EVENT_ICONS[category] = QPixmap("./resources/ui/events/" + image + ".png") + + +def load_aircraft_icons(): + for aircraft in os.listdir("./resources/ui/units/aircrafts/"): + print(aircraft) + if aircraft.endswith(".jpg"): + print(aircraft[:-7] + " : " + os.path.join("./resources/ui/units/aircrafts/", aircraft) + " ") + AIRCRAFT_ICONS[aircraft[:-7]] = QPixmap(os.path.join("./resources/ui/units/aircrafts/", aircraft)) + AIRCRAFT_ICONS["F-16C_50"] = AIRCRAFT_ICONS["F-16C"] + AIRCRAFT_ICONS["FA-18C_hornet"] = AIRCRAFT_ICONS["FA-18C"] + + +def load_vehicle_icons(): + for vehicle in os.listdir("./resources/ui/units/vehicles/"): + print(vehicle) + if vehicle.endswith(".jpg"): + print(vehicle[:-7] + " : " + os.path.join("./resources/ui/units/vehicles/", vehicle) + " ") + VEHICLES_ICONS[vehicle[:-7]] = QPixmap(os.path.join("./resources/ui/units/vehicles/", vehicle)) diff --git a/qt_ui/widgets/QTopPanel.py b/qt_ui/widgets/QTopPanel.py index 80480943..cf02b625 100644 --- a/qt_ui/widgets/QTopPanel.py +++ b/qt_ui/widgets/QTopPanel.py @@ -1,4 +1,4 @@ -from PySide2.QtWidgets import QFrame, QHBoxLayout, QPushButton, QVBoxLayout, QMessageBox +from PySide2.QtWidgets import QFrame, QHBoxLayout, QPushButton, QVBoxLayout, QMessageBox, QGridLayout from game import Game from qt_ui.widgets.QBudgetBox import QBudgetBox @@ -7,6 +7,7 @@ from qt_ui.widgets.QTurnCounter import QTurnCounter import qt_ui.uiconstants as CONST from qt_ui.windows.GameUpdateSignal import GameUpdateSignal +from qt_ui.windows.mission.QMissionPlanning import QMissionPlanning from qt_ui.windows.settings.QSettingsWindow import QSettingsWindow @@ -23,11 +24,17 @@ class QTopPanel(QFrame): self.turnCounter = QTurnCounter() self.budgetBox = QBudgetBox() + self.passTurnButton = QPushButton("Pass Turn") self.passTurnButton.setIcon(CONST.ICONS["PassTurn"]) self.passTurnButton.setProperty("style", "btn-primary") self.passTurnButton.clicked.connect(self.passTurn) + self.proceedButton = QPushButton("Proceed") + self.proceedButton.setIcon(CONST.ICONS["PassTurn"]) + self.proceedButton.setProperty("style", "btn-primary") + self.proceedButton.clicked.connect(self.proceed) + self.submenus = QVBoxLayout() self.settings = QPushButton("Settings") self.settings.setIcon(CONST.ICONS["Settings"]) @@ -48,6 +55,7 @@ class QTopPanel(QFrame): self.layout.addWidget(self.turnCounter) self.layout.addWidget(self.budgetBox) self.layout.addWidget(self.passTurnButton) + self.layout.addWidget(self.proceedButton) self.setLayout(self.layout) def setGame(self, game:Game): @@ -66,4 +74,8 @@ class QTopPanel(QFrame): def passTurn(self): self.game.pass_turn() - GameUpdateSignal.get_instance().updateGame(self.game) \ No newline at end of file + GameUpdateSignal.get_instance().updateGame(self.game) + + def proceed(self): + self.subwindow = QMissionPlanning(self.game) + self.subwindow.show() \ No newline at end of file diff --git a/qt_ui/widgets/base/QBaseInformation.py b/qt_ui/widgets/base/QBaseInformation.py index 0bea5bdb..1fd7968b 100644 --- a/qt_ui/widgets/base/QBaseInformation.py +++ b/qt_ui/widgets/base/QBaseInformation.py @@ -1,5 +1,7 @@ from PySide2.QtWidgets import QGridLayout, QLabel, QGroupBox, QVBoxLayout +from game import db +from qt_ui.uiconstants import AIRCRAFT_ICONS, VEHICLES_ICONS from theater import ControlPoint, Airport @@ -26,7 +28,14 @@ class QBaseInformation(QGroupBox): i = 0 for k,v in unit_dict.items(): - self.layout.addWidget(QLabel(str(v) + " x " + k), i, 0) + icon = QLabel() + if k in VEHICLES_ICONS.keys(): + icon.setPixmap(VEHICLES_ICONS[k]) + else: + icon.setText(""+k[:6]+"") + icon.setProperty("style", "icon-plane") + self.layout.addWidget(icon, i, 0) + self.layout.addWidget(QLabel(str(v) + " x " + k), i, 1) i = i + 1 stretch = QVBoxLayout() diff --git a/qt_ui/widgets/base/QPlannedFlightView.py b/qt_ui/widgets/base/QPlannedFlightView.py deleted file mode 100644 index 6032579f..00000000 --- a/qt_ui/widgets/base/QPlannedFlightView.py +++ /dev/null @@ -1,29 +0,0 @@ -from PySide2.QtWidgets import QGridLayout, QLabel, QGroupBox, QVBoxLayout, QHBoxLayout - -from game import db -from gen.flights.ai_flight_planner import FlightPlanner - - -class QPlannedFlightView(QGroupBox): - - def __init__(self, flight_planner:FlightPlanner): - super(QPlannedFlightView, self).__init__("Planned flights") - self.flight_planner = flight_planner - self.init_ui() - - def init_ui(self): - self.layout = QGridLayout() - - for i,f in enumerate(self.flight_planner.flights): - ftype = QLabel("" + f.flight_type.name + "") - count = QLabel(str(f.count) + " x " + db.unit_type_name(f.unit_type)) - sched = QLabel(" in " + str(f.scheduled_in) + " minutes") - - self.layout.addWidget(ftype, i, 0) - self.layout.addWidget(count, i, 1) - self.layout.addWidget(sched, i, 2) - - stretch = QVBoxLayout() - stretch.addStretch() - self.layout.addLayout(stretch, len(self.flight_planner.flights)+1, 0) - self.setLayout(self.layout) diff --git a/qt_ui/widgets/map/QLiberationMap.py b/qt_ui/widgets/map/QLiberationMap.py index e7d48ff5..2e0dc7a8 100644 --- a/qt_ui/widgets/map/QLiberationMap.py +++ b/qt_ui/widgets/map/QLiberationMap.py @@ -83,13 +83,28 @@ class QLiberationMap(QGraphicsView): text.setPos(pos[0] + CONST.CP_SIZE + 1, pos[1] - CONST.CP_SIZE / 2 + 1) + if cp.captured: + pen = QPen(brush=CONST.COLORS["blue"]) + brush = CONST.COLORS["blue_transparent"] + + flight_path_pen = QPen(brush=CONST.COLORS["blue"]) + flight_path_pen.setColor(CONST.COLORS["blue"]) + flight_path_pen.setWidth(1) + flight_path_pen.setStyle(Qt.DashDotLine) + else: + pen = QPen(brush=CONST.COLORS["red"]) + brush = CONST.COLORS["red_transparent"] + + flight_path_pen = QPen(brush=CONST.COLORS["bright_red"]) + flight_path_pen.setColor(CONST.COLORS["bright_red"]) + flight_path_pen.setWidth(1) + flight_path_pen.setStyle(Qt.DashDotLine) + for ground_object in cp.ground_objects: - if ground_object.airbase_group: - continue - go_pos = self._transform_point(ground_object.position) - scene.addItem(QMapGroundObject(self, go_pos[0], go_pos[1], 16, 16, cp, ground_object)) + if not ground_object.airbase_group: + scene.addItem(QMapGroundObject(self, go_pos[0], go_pos[1], 16, 16, cp, ground_object)) if ground_object.category == "aa" and self.get_display_rule("sam"): max_range = 0 @@ -99,17 +114,24 @@ class QLiberationMap(QGraphicsView): unit = db.unit_type_from_name(u.type) if unit.threat_range > max_range: max_range = unit.threat_range - if cp.captured: - pen = QPen(brush=CONST.COLORS["blue"]) - brush = CONST.COLORS["blue_transparent"] - else: - pen = QPen(brush=CONST.COLORS["red"]) - brush = CONST.COLORS["red_transparent"] + scene.addEllipse(go_pos[0] - max_range/300.0 + 8, go_pos[1] - max_range/300.0 + 8, max_range/150.0, max_range/150.0, pen, brush) if self.get_display_rule("lines"): self.scene_create_lines_for_cp(cp) + if cp.id in self.game.planners.keys(): + planner = self.game.planners[cp.id] + for flight in planner.flights: + scene.addEllipse(pos[0], pos[1], 4, 4) + prev_pos = list(pos) + for points in flight.points: + new_pos = self._transform_point(Point(points[0], points[1])) + scene.addLine(prev_pos[0]+2, prev_pos[1]+2, new_pos[0]+2, new_pos[1]+2, flight_path_pen) + scene.addEllipse(new_pos[0], new_pos[1], 4, 4, pen, brush) + prev_pos = list(new_pos) + scene.addLine(prev_pos[0] + 2, prev_pos[1] + 2, pos[0] + 2, pos[1] + 2, flight_path_pen) + def scene_create_lines_for_cp(self, cp: ControlPoint): scene = self.scene() pos = self._transform_point(cp.position) diff --git a/qt_ui/windows/QBaseMenu.py b/qt_ui/windows/QBaseMenu.py index 219318cb..bedad38a 100644 --- a/qt_ui/windows/QBaseMenu.py +++ b/qt_ui/windows/QBaseMenu.py @@ -7,9 +7,10 @@ from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget, QDialog, QVBoxLayout from dcs.unittype import UnitType from game.event import UnitsDeliveryEvent +from qt_ui.widgets.QBudgetBox import QBudgetBox from qt_ui.widgets.base.QAirportInformation import QAirportInformation from qt_ui.widgets.base.QBaseInformation import QBaseInformation -from qt_ui.widgets.base.QPlannedFlightView import QPlannedFlightView +from qt_ui.windows.mission.QPlannedFlightsView import QPlannedFlightsView from qt_ui.windows.GameUpdateSignal import GameUpdateSignal from theater import ControlPoint, CAP, Embarking, CAS, PinpointStrike, db from game import Game @@ -90,6 +91,9 @@ class QBaseMenu(QDialog): self.recruitment = QGroupBox("Recruitment") self.recruitmentLayout = QVBoxLayout() + self.budget = QBudgetBox() + self.budget.setBudget(self.game.budget, self.game.budget_reward_amount) + self.recruitmentLayout.addWidget(self.budget) for task_type in units.keys(): @@ -147,7 +151,7 @@ class QBaseMenu(QDialog): self.rightLayout = QVBoxLayout() try: - self.rightLayout.addWidget(QPlannedFlightView(self.game.planners[self.cp.id])) + self.rightLayout.addWidget(QPlannedFlightsView(self.game.planners[self.cp.id])) except Exception: traceback.print_exc() self.rightLayout.addWidget(QAirportInformation(self.cp, self.airport)) @@ -212,7 +216,7 @@ class QBaseMenu(QDialog): if self.game.budget >= price: self.deliveryEvent.deliver({unit_type: 1}) self.game.budget -= price - + self.budget.setBudget(self.game.budget, self.game.budget_reward_amount) self._update_count_label(unit_type) def sell(self, unit_type): diff --git a/qt_ui/windows/mission/QChooseAirbase.py b/qt_ui/windows/mission/QChooseAirbase.py new file mode 100644 index 00000000..dc1a79d2 --- /dev/null +++ b/qt_ui/windows/mission/QChooseAirbase.py @@ -0,0 +1,34 @@ +from PySide2.QtCore import Signal +from PySide2.QtWidgets import QGroupBox, QHBoxLayout, QComboBox, QLabel + +from game import Game + + +class QChooseAirbase(QGroupBox): + + selected_airbase_changed = Signal(str) + + def __init__(self, game:Game, title=""): + super(QChooseAirbase, self).__init__(title) + self.game = game + + self.layout = QHBoxLayout() + self.depart_from_label = QLabel("Airbase : ") + self.depart_from = QComboBox() + + for i, cp in enumerate([b for b in self.game.theater.controlpoints if b.captured]): + self.depart_from.addItem(str(cp.name), cp) + self.depart_from.setCurrentIndex(0) + self.depart_from.currentTextChanged.connect(self._on_airbase_selected) + self.layout.addWidget(self.depart_from_label) + self.layout.addWidget(self.depart_from) + self.setLayout(self.layout) + + def _on_airbase_selected(self): + selected = self.depart_from.currentText() + print("Airbase changed to : " + selected) + self.selected_airbase_changed.emit(selected) + print("Airbase changed to : " + selected) + + + diff --git a/qt_ui/windows/mission/QFlightItem.py b/qt_ui/windows/mission/QFlightItem.py new file mode 100644 index 00000000..e93a9b9e --- /dev/null +++ b/qt_ui/windows/mission/QFlightItem.py @@ -0,0 +1,20 @@ +from PySide2.QtGui import QStandardItem, QIcon + +from game import db +from gen.flights.flight import Flight +from qt_ui.uiconstants import AIRCRAFT_ICONS + + +class QFlightItem(QStandardItem): + + def __init__(self, flight:Flight): + super(QFlightItem, self).__init__() + self.flight = flight + + if db.unit_type_name(self.flight.unit_type).replace("/", " ") in AIRCRAFT_ICONS.keys(): + icon = QIcon((AIRCRAFT_ICONS[db.unit_type_name(self.flight.unit_type)])) + self.setIcon(icon) + self.setEditable(False) + self.setText("["+str(self.flight.flight_type.name[:6])+"] " + + str(self.flight.count) + " x " + db.unit_type_name(self.flight.unit_type) + + " in " + str(self.flight.scheduled_in) + " minutes") diff --git a/qt_ui/windows/mission/QMissionPlanning.py b/qt_ui/windows/mission/QMissionPlanning.py new file mode 100644 index 00000000..ee126413 --- /dev/null +++ b/qt_ui/windows/mission/QMissionPlanning.py @@ -0,0 +1,63 @@ +from PySide2.QtCore import Qt, Slot, QItemSelectionModel, QPoint +from PySide2.QtWidgets import QDialog, QGridLayout, QScrollArea, QVBoxLayout +from game import Game +from qt_ui.windows.mission.QPlannedFlightsView import QPlannedFlightsView +from qt_ui.windows.mission.QChooseAirbase import QChooseAirbase +from qt_ui.windows.mission.flight.QFlightPlanner import QFlightPlanner + + +class QMissionPlanning(QDialog): + + def __init__(self, game: Game): + super(QMissionPlanning, self).__init__() + self.game = game + self.setWindowFlags(Qt.WindowStaysOnTopHint) + self.setMinimumSize(750, 350) + self.setModal(True) + self.setWindowTitle("Mission Preparation") + self.init_ui() + print("DONE") + + def init_ui(self): + + self.captured_cp = [cp for cp in self.game.theater.controlpoints if cp.captured] + + self.layout = QGridLayout() + self.left_bar_layout = QVBoxLayout() + + self.select_airbase = QChooseAirbase(self.game) + self.select_airbase.selected_airbase_changed.connect(self.on_departure_cp_changed) + self.planned_flight_view = QPlannedFlightsView(None) + if self.captured_cp[0].id in self.game.planners.keys(): + self.planner = self.game.planners[self.captured_cp[0].id] + self.planned_flight_view.set_flight_planner(self.planner) + + self.planned_flight_view.selectionModel().setCurrentIndex(self.planned_flight_view.indexAt(QPoint(1, 1)), QItemSelectionModel.Select) + self.planned_flight_view.selectionModel().selectionChanged.connect(self.on_flight_selection_change) + + self.flight_planner = QFlightPlanner(self.planned_flight_view.flight_planner.flights[0], self.game) + + + self.left_bar_layout.addWidget(self.select_airbase) + self.left_bar_layout.addWidget(self.planned_flight_view) + + self.layout.addLayout(self.left_bar_layout, 0, 0) + self.layout.addWidget(self.flight_planner, 0, 1) + + self.setLayout(self.layout) + + @Slot(str) + def on_departure_cp_changed(self, cp_name): + cps = [cp for cp in self.game.theater.controlpoints if cp.name == cp_name] + if len(cps) == 1: + self.planner = self.game.planners[cps[0].id] + self.planned_flight_view.set_flight_planner(self.planner) + else: + self.planned_flight_view.set_flight_planner(None) + + def on_flight_selection_change(self): + index = self.planned_flight_view.selectionModel().currentIndex().row() + flight = self.planner.flights[index] + + self.flight_planner = QFlightPlanner(flight, self.game) + self.layout.addWidget(self.flight_planner,0 ,1) diff --git a/qt_ui/windows/mission/QPlannedFlightsView.py b/qt_ui/windows/mission/QPlannedFlightsView.py new file mode 100644 index 00000000..3d6c0ff2 --- /dev/null +++ b/qt_ui/windows/mission/QPlannedFlightsView.py @@ -0,0 +1,30 @@ +from PySide2.QtCore import QSize +from PySide2.QtGui import QStandardItemModel +from PySide2.QtWidgets import QListView + +from gen.flights.ai_flight_planner import FlightPlanner +from qt_ui.windows.mission.QFlightItem import QFlightItem + + +class QPlannedFlightsView(QListView): + + def __init__(self, flight_planner: FlightPlanner): + super(QPlannedFlightsView, self).__init__() + self.model = QStandardItemModel(self) + self.setModel(self.model) + self.setIconSize(QSize(91, 24)) + if flight_planner: + self.set_flight_planner(flight_planner) + + def update_content(self): + for i, f in enumerate(self.flight_planner.flights): + self.model.appendRow(QFlightItem(f)) + + def clear_layout(self): + self.model.removeRows(0, self.model.rowCount()) + + def set_flight_planner(self, flight_planner: FlightPlanner): + self.clear_layout() + self.flight_planner = flight_planner + if self.flight_planner: + self.update_content() diff --git a/qt_ui/windows/mission/flight/QF14FlightComputerEditor.py b/qt_ui/windows/mission/flight/QF14FlightComputerEditor.py new file mode 100644 index 00000000..e69de29b diff --git a/qt_ui/windows/mission/flight/QFlightAircraftEditor.py b/qt_ui/windows/mission/flight/QFlightAircraftEditor.py new file mode 100644 index 00000000..e69de29b diff --git a/qt_ui/windows/mission/flight/QFlightPlanner.py b/qt_ui/windows/mission/flight/QFlightPlanner.py new file mode 100644 index 00000000..36cf1af5 --- /dev/null +++ b/qt_ui/windows/mission/flight/QFlightPlanner.py @@ -0,0 +1,19 @@ +from PySide2.QtWidgets import QTabWidget + +from gen.flights.flight import Flight +from game import Game +from qt_ui.windows.mission.flight.payload.QFlightPayloadTab import QFlightPayloadTab +from qt_ui.windows.mission.flight.settings.QGeneralFlightSettingsTab import QGeneralFlightSettingsTab +from qt_ui.windows.mission.flight.waypoints.QFlightWaypointTab import QFlightWaypointTab + + +class QFlightPlanner(QTabWidget): + + def __init__(self, flight: Flight, game: Game): + super(QFlightPlanner, self).__init__() + self.general_settings_tab = QGeneralFlightSettingsTab(flight, game) + self.payload_tab = QFlightPayloadTab(flight) + self.waypoint_tab = QFlightWaypointTab(flight) + self.addTab(self.general_settings_tab, "General Flight settings") + self.addTab(self.payload_tab, "Payload") + self.addTab(self.waypoint_tab, "Waypoints") \ No newline at end of file diff --git a/qt_ui/windows/mission/flight/QFlightWaypointsEditor.py b/qt_ui/windows/mission/flight/QFlightWaypointsEditor.py new file mode 100644 index 00000000..e69de29b diff --git a/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py new file mode 100644 index 00000000..2f6f25b5 --- /dev/null +++ b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py @@ -0,0 +1,16 @@ +from PySide2.QtWidgets import QFrame, QGridLayout, QLabel + +from gen.flights.flight import Flight + + +class QFlightPayloadTab(QFrame): + + def __init__(self, flight: Flight): + super(QFlightPayloadTab, self).__init__() + self.flight = flight + self.init_ui() + + def init_ui(self): + layout = QGridLayout() + layout.addWidget(QLabel("Coming in two weeks")) + self.setLayout(layout) diff --git a/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py b/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py new file mode 100644 index 00000000..69b9e90c --- /dev/null +++ b/qt_ui/windows/mission/flight/settings/QFlightDepartureEditor.py @@ -0,0 +1,28 @@ +from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox + + +class QFlightDepartureEditor(QGroupBox): + + def __init__(self, flight): + super(QFlightDepartureEditor, self).__init__("Departure") + self.flight = flight + + layout = QHBoxLayout() + self.depart_from = QLabel("Departing from " + self.flight.from_cp.name + "") + self.depart_at_t = QLabel("At T +") + self.minutes = QLabel(" minutes") + + self.departure_delta = QSpinBox(self) + self.departure_delta.setMinimum(0) + self.departure_delta.setMaximum(120) + self.departure_delta.setValue(self.flight.scheduled_in) + self.departure_delta.valueChanged.connect(self.change_scheduled) + + layout.addWidget(self.depart_from) + layout.addWidget(self.depart_at_t) + layout.addWidget(self.departure_delta) + layout.addWidget(self.minutes) + self.setLayout(layout) + + def change_scheduled(self): + self.flight.scheduled_in = int(self.departure_delta.value()) diff --git a/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py b/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py new file mode 100644 index 00000000..7ef2b076 --- /dev/null +++ b/qt_ui/windows/mission/flight/settings/QFlightSlotEditor.py @@ -0,0 +1,50 @@ +from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout + + +class QFlightSlotEditor(QGroupBox): + + def __init__(self, flight, game): + super(QFlightSlotEditor, self).__init__("Slots") + self.flight = flight + self.game = game + + layout = QGridLayout() + + self.aircraft_count = QLabel("Aircraft count :") + self.aircraft_count_spinner = QSpinBox() + self.aircraft_count_spinner.setMinimum(1) + self.aircraft_count_spinner.setMaximum(4) + self.aircraft_count_spinner.setValue(flight.count) + self.aircraft_count_spinner.valueChanged.connect(self._changed_aircraft_count) + + self.client_count = QLabel("Client slots count :") + self.client_count_spinner = QSpinBox() + self.client_count_spinner.setMinimum(0) + self.client_count_spinner.setMaximum(4) + self.client_count_spinner.setValue(flight.client_count) + self.client_count_spinner.valueChanged.connect(self._changed_client_count) + + if not self.flight.unit_type.flyable: + self.client_count_spinner.setValue(0) + self.client_count_spinner.setEnabled(False) + + layout.addWidget(self.aircraft_count, 0, 0) + layout.addWidget(self.aircraft_count_spinner, 0, 1) + + layout.addWidget(self.client_count, 1, 0) + layout.addWidget(self.client_count_spinner, 1, 1) + + self.setLayout(layout) + + def _changed_aircraft_count(self): + self.flight.count = int(self.aircraft_count_spinner.value()) + # TODO check if enough aircraft are available + + def _changed_client_count(self): + self.flight.client_count = int(self.client_count_spinner.value()) + self._cap_client_count() + + def _cap_client_count(self): + if self.flight.client_count > self.flight.count: + self.flight.client_count = self.flight.count + self.client_count_spinner.setValue(self.flight.client_count) \ No newline at end of file diff --git a/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py b/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py new file mode 100644 index 00000000..c1e82ef3 --- /dev/null +++ b/qt_ui/windows/mission/flight/settings/QFlightTypeTaskInfo.py @@ -0,0 +1,28 @@ +from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout + +from game import db +from qt_ui.uiconstants import AIRCRAFT_ICONS + + +class QFlightTypeTaskInfo(QGroupBox): + + def __init__(self, flight): + super(QFlightTypeTaskInfo, self).__init__("Flight") + self.flight = flight + + layout = QGridLayout() + + self.aircraft_icon = QLabel() + if db.unit_type_name(self.flight.unit_type) in AIRCRAFT_ICONS: + self.aircraft_icon.setPixmap(AIRCRAFT_ICONS[db.unit_type_name(self.flight.unit_type)]) + + self.task = QLabel("Task :") + self.task_type = QLabel(flight.flight_type.name) + self.task_type.setProperty("style", flight.flight_type.name) + + layout.addWidget(self.aircraft_icon, 0, 0) + + layout.addWidget(self.task, 1, 0) + layout.addWidget(self.task_type, 1, 1) + + self.setLayout(layout) diff --git a/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py b/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py new file mode 100644 index 00000000..067f3b29 --- /dev/null +++ b/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py @@ -0,0 +1,29 @@ +from PySide2.QtWidgets import QFrame, QGridLayout, QVBoxLayout + +from gen.flights.flight import Flight +from game import Game +from qt_ui.windows.mission.flight.settings.QFlightDepartureEditor import QFlightDepartureEditor +from qt_ui.windows.mission.flight.settings.QFlightSlotEditor import QFlightSlotEditor +from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import QFlightTypeTaskInfo + + +class QGeneralFlightSettingsTab(QFrame): + + def __init__(self, flight: Flight, game: Game): + super(QGeneralFlightSettingsTab, self).__init__() + self.flight = flight + self.game = game + self.init_ui() + + def init_ui(self): + layout = QGridLayout() + self.flight_info = QFlightTypeTaskInfo(self.flight) + self.flight_departure = QFlightDepartureEditor(self.flight) + self.flight_slots = QFlightSlotEditor(self.flight, self.game) + layout.addWidget(self.flight_info, 0, 0) + layout.addWidget(self.flight_departure, 1, 0) + layout.addWidget(self.flight_slots, 2, 0) + vstretch = QVBoxLayout() + vstretch.addStretch() + layout.addLayout(vstretch, 3, 0) + self.setLayout(layout) diff --git a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py new file mode 100644 index 00000000..9325d7b7 --- /dev/null +++ b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py @@ -0,0 +1,16 @@ +from PySide2.QtWidgets import QFrame, QGridLayout, QLabel + +from gen.flights.flight import Flight + + +class QFlightWaypointTab(QFrame): + + def __init__(self, flight: Flight): + super(QFlightWaypointTab, self).__init__() + self.flight = flight + self.init_ui() + + def init_ui(self): + layout = QGridLayout() + layout.addWidget(QLabel("Coming in two weeks")) + self.setLayout(layout) diff --git a/resources/stylesheets/style.css b/resources/stylesheets/style.css index e018df5a..8b1b0764 100644 --- a/resources/stylesheets/style.css +++ b/resources/stylesheets/style.css @@ -59,6 +59,48 @@ QLabel[style="base-title"]{ border: 1px solid #ccc; } +QLabel[style="icon-plane"]{ + background-color:#48719D; + min-height:24px; + border: 1px solid black; + text-align:center; + color:white; +} + +QLabel[style="bordered"]{ + border: 1px solid black; +} + +QLabel[style="BARCAP"]{ + border: 1px solid black; + background-color: #445299; + color:white; +} + +QLabel[style="INTERCEPTION"]{ + border: 1px solid black; + background-color: #7752bc; + color:white; +} + +QLabel[style="CAS"]{ + border: 1px solid black; + background-color: #ab2244; + color:white; +} + +QLabel[style="DEAD"]{ + border: 1px solid black; + background-color: #cc8844; + color:white; +} + +QLabel[style="SEAD"]{ + border: 1px solid black; + background-color: #aa7744; + color:white; +} + /*QBaseMenu{ background-color:#699245; color:white; diff --git a/resources/ui/units/aircrafts/A-10A_24.jpg b/resources/ui/units/aircrafts/A-10A_24.jpg new file mode 100644 index 00000000..0c5ae447 Binary files /dev/null and b/resources/ui/units/aircrafts/A-10A_24.jpg differ diff --git a/resources/ui/units/aircrafts/A-10C_24.jpg b/resources/ui/units/aircrafts/A-10C_24.jpg new file mode 100644 index 00000000..433b0f45 Binary files /dev/null and b/resources/ui/units/aircrafts/A-10C_24.jpg differ diff --git a/resources/ui/units/aircrafts/A-50_24.jpg b/resources/ui/units/aircrafts/A-50_24.jpg new file mode 100644 index 00000000..c79c6836 Binary files /dev/null and b/resources/ui/units/aircrafts/A-50_24.jpg differ diff --git a/resources/ui/units/aircrafts/AH-1W_24.jpg b/resources/ui/units/aircrafts/AH-1W_24.jpg new file mode 100644 index 00000000..cbab793f Binary files /dev/null and b/resources/ui/units/aircrafts/AH-1W_24.jpg differ diff --git a/resources/ui/units/aircrafts/AH-64A_24.jpg b/resources/ui/units/aircrafts/AH-64A_24.jpg new file mode 100644 index 00000000..65ad0301 Binary files /dev/null and b/resources/ui/units/aircrafts/AH-64A_24.jpg differ diff --git a/resources/ui/units/aircrafts/AH-64D_24.jpg b/resources/ui/units/aircrafts/AH-64D_24.jpg new file mode 100644 index 00000000..cbc1ff42 Binary files /dev/null and b/resources/ui/units/aircrafts/AH-64D_24.jpg differ diff --git a/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg b/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg new file mode 100644 index 00000000..a973d5a2 Binary files /dev/null and b/resources/ui/units/aircrafts/AJS37 Viggen_24.jpg differ diff --git a/resources/ui/units/aircrafts/AV8BNA_24.jpg b/resources/ui/units/aircrafts/AV8BNA_24.jpg new file mode 100644 index 00000000..b688a886 Binary files /dev/null and b/resources/ui/units/aircrafts/AV8BNA_24.jpg differ diff --git a/resources/ui/units/aircrafts/An-26B_24.jpg b/resources/ui/units/aircrafts/An-26B_24.jpg new file mode 100644 index 00000000..8d6bc573 Binary files /dev/null and b/resources/ui/units/aircrafts/An-26B_24.jpg differ diff --git a/resources/ui/units/aircrafts/An-30M_24.jpg b/resources/ui/units/aircrafts/An-30M_24.jpg new file mode 100644 index 00000000..e532aefa Binary files /dev/null and b/resources/ui/units/aircrafts/An-30M_24.jpg differ diff --git a/resources/ui/units/aircrafts/B-17G_24.jpg b/resources/ui/units/aircrafts/B-17G_24.jpg new file mode 100644 index 00000000..8f0c23ed Binary files /dev/null and b/resources/ui/units/aircrafts/B-17G_24.jpg differ diff --git a/resources/ui/units/aircrafts/B-1B_24.jpg b/resources/ui/units/aircrafts/B-1B_24.jpg new file mode 100644 index 00000000..1e9603aa Binary files /dev/null and b/resources/ui/units/aircrafts/B-1B_24.jpg differ diff --git a/resources/ui/units/aircrafts/B-52H_24.jpg b/resources/ui/units/aircrafts/B-52H_24.jpg new file mode 100644 index 00000000..0db4c82c Binary files /dev/null and b/resources/ui/units/aircrafts/B-52H_24.jpg differ diff --git a/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg b/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg new file mode 100644 index 00000000..f024fabb Binary files /dev/null and b/resources/ui/units/aircrafts/Bf 109 K-4_24.jpg differ diff --git a/resources/ui/units/aircrafts/C-101EB CC_24.jpg b/resources/ui/units/aircrafts/C-101EB CC_24.jpg new file mode 100644 index 00000000..22f59644 Binary files /dev/null and b/resources/ui/units/aircrafts/C-101EB CC_24.jpg differ diff --git a/resources/ui/units/aircrafts/C-130_24.jpg b/resources/ui/units/aircrafts/C-130_24.jpg new file mode 100644 index 00000000..b970e798 Binary files /dev/null and b/resources/ui/units/aircrafts/C-130_24.jpg differ diff --git a/resources/ui/units/aircrafts/CH-47D_24.jpg b/resources/ui/units/aircrafts/CH-47D_24.jpg new file mode 100644 index 00000000..48647792 Binary files /dev/null and b/resources/ui/units/aircrafts/CH-47D_24.jpg differ diff --git a/resources/ui/units/aircrafts/CH-53E_24.jpg b/resources/ui/units/aircrafts/CH-53E_24.jpg new file mode 100644 index 00000000..3191ffaa Binary files /dev/null and b/resources/ui/units/aircrafts/CH-53E_24.jpg differ diff --git a/resources/ui/units/aircrafts/Christen Eagle II_24.jpg b/resources/ui/units/aircrafts/Christen Eagle II_24.jpg new file mode 100644 index 00000000..50f87597 Binary files /dev/null and b/resources/ui/units/aircrafts/Christen Eagle II_24.jpg differ diff --git a/resources/ui/units/aircrafts/E-2D_24.jpg b/resources/ui/units/aircrafts/E-2D_24.jpg new file mode 100644 index 00000000..9cf5dd65 Binary files /dev/null and b/resources/ui/units/aircrafts/E-2D_24.jpg differ diff --git a/resources/ui/units/aircrafts/E-3C_24.jpg b/resources/ui/units/aircrafts/E-3C_24.jpg new file mode 100644 index 00000000..b1df7a9f Binary files /dev/null and b/resources/ui/units/aircrafts/E-3C_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-117A_24.jpg b/resources/ui/units/aircrafts/F-117A_24.jpg new file mode 100644 index 00000000..13b9f5be Binary files /dev/null and b/resources/ui/units/aircrafts/F-117A_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-14A_24.jpg b/resources/ui/units/aircrafts/F-14A_24.jpg new file mode 100644 index 00000000..6ff978cb Binary files /dev/null and b/resources/ui/units/aircrafts/F-14A_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-14B_24.jpg b/resources/ui/units/aircrafts/F-14B_24.jpg new file mode 100644 index 00000000..b6d90a23 Binary files /dev/null and b/resources/ui/units/aircrafts/F-14B_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-15C_24.jpg b/resources/ui/units/aircrafts/F-15C_24.jpg new file mode 100644 index 00000000..33298e46 Binary files /dev/null and b/resources/ui/units/aircrafts/F-15C_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-15E_24.jpg b/resources/ui/units/aircrafts/F-15E_24.jpg new file mode 100644 index 00000000..2f1f5154 Binary files /dev/null and b/resources/ui/units/aircrafts/F-15E_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-16C_24.jpg b/resources/ui/units/aircrafts/F-16C_24.jpg new file mode 100644 index 00000000..96d6deac Binary files /dev/null and b/resources/ui/units/aircrafts/F-16C_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-4E_24.jpg b/resources/ui/units/aircrafts/F-4E_24.jpg new file mode 100644 index 00000000..231566fb Binary files /dev/null and b/resources/ui/units/aircrafts/F-4E_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-5E_24.jpg b/resources/ui/units/aircrafts/F-5E_24.jpg new file mode 100644 index 00000000..244100e9 Binary files /dev/null and b/resources/ui/units/aircrafts/F-5E_24.jpg differ diff --git a/resources/ui/units/aircrafts/F-86F_24.jpg b/resources/ui/units/aircrafts/F-86F_24.jpg new file mode 100644 index 00000000..9a1cd52f Binary files /dev/null and b/resources/ui/units/aircrafts/F-86F_24.jpg differ diff --git a/resources/ui/units/aircrafts/FA-18C_24.jpg b/resources/ui/units/aircrafts/FA-18C_24.jpg new file mode 100644 index 00000000..e20a2fc8 Binary files /dev/null and b/resources/ui/units/aircrafts/FA-18C_24.jpg differ diff --git a/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg b/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg new file mode 100644 index 00000000..68895960 Binary files /dev/null and b/resources/ui/units/aircrafts/Fw 190 A-8_24.jpg differ diff --git a/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg b/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg new file mode 100644 index 00000000..af7c52c4 Binary files /dev/null and b/resources/ui/units/aircrafts/Fw 190 D-9_24.jpg differ diff --git a/resources/ui/units/aircrafts/Hawk T.1A_24.jpg b/resources/ui/units/aircrafts/Hawk T.1A_24.jpg new file mode 100644 index 00000000..cba6259f Binary files /dev/null and b/resources/ui/units/aircrafts/Hawk T.1A_24.jpg differ diff --git a/resources/ui/units/aircrafts/I-16_24.jpg b/resources/ui/units/aircrafts/I-16_24.jpg new file mode 100644 index 00000000..118c699f Binary files /dev/null and b/resources/ui/units/aircrafts/I-16_24.jpg differ diff --git a/resources/ui/units/aircrafts/IL-76MD_24.jpg b/resources/ui/units/aircrafts/IL-76MD_24.jpg new file mode 100644 index 00000000..a25bad96 Binary files /dev/null and b/resources/ui/units/aircrafts/IL-76MD_24.jpg differ diff --git a/resources/ui/units/aircrafts/IL-78M_24.jpg b/resources/ui/units/aircrafts/IL-78M_24.jpg new file mode 100644 index 00000000..a27276e1 Binary files /dev/null and b/resources/ui/units/aircrafts/IL-78M_24.jpg differ diff --git a/resources/ui/units/aircrafts/J-11A_24.jpg b/resources/ui/units/aircrafts/J-11A_24.jpg new file mode 100644 index 00000000..6d0934a0 Binary files /dev/null and b/resources/ui/units/aircrafts/J-11A_24.jpg differ diff --git a/resources/ui/units/aircrafts/KC-135_24.jpg b/resources/ui/units/aircrafts/KC-135_24.jpg new file mode 100644 index 00000000..118a0a83 Binary files /dev/null and b/resources/ui/units/aircrafts/KC-135_24.jpg differ diff --git a/resources/ui/units/aircrafts/KJ-2000_24.jpg b/resources/ui/units/aircrafts/KJ-2000_24.jpg new file mode 100644 index 00000000..23c8a011 Binary files /dev/null and b/resources/ui/units/aircrafts/KJ-2000_24.jpg differ diff --git a/resources/ui/units/aircrafts/Ka-27_24.jpg b/resources/ui/units/aircrafts/Ka-27_24.jpg new file mode 100644 index 00000000..16baf14a Binary files /dev/null and b/resources/ui/units/aircrafts/Ka-27_24.jpg differ diff --git a/resources/ui/units/aircrafts/Ka-50_24.jpg b/resources/ui/units/aircrafts/Ka-50_24.jpg new file mode 100644 index 00000000..214e487e Binary files /dev/null and b/resources/ui/units/aircrafts/Ka-50_24.jpg differ diff --git a/resources/ui/units/aircrafts/L-39C_24.jpg b/resources/ui/units/aircrafts/L-39C_24.jpg new file mode 100644 index 00000000..ffff344b Binary files /dev/null and b/resources/ui/units/aircrafts/L-39C_24.jpg differ diff --git a/resources/ui/units/aircrafts/L-39ZA_24.jpg b/resources/ui/units/aircrafts/L-39ZA_24.jpg new file mode 100644 index 00000000..6658aa4d Binary files /dev/null and b/resources/ui/units/aircrafts/L-39ZA_24.jpg differ diff --git a/resources/ui/units/aircrafts/M-2000C_24.jpg b/resources/ui/units/aircrafts/M-2000C_24.jpg new file mode 100644 index 00000000..f3f4bae7 Binary files /dev/null and b/resources/ui/units/aircrafts/M-2000C_24.jpg differ diff --git a/resources/ui/units/aircrafts/MB-339A PAN_24.jpg b/resources/ui/units/aircrafts/MB-339A PAN_24.jpg new file mode 100644 index 00000000..60f5ae4d Binary files /dev/null and b/resources/ui/units/aircrafts/MB-339A PAN_24.jpg differ diff --git a/resources/ui/units/aircrafts/MQ RQ-1_24.jpg b/resources/ui/units/aircrafts/MQ RQ-1_24.jpg new file mode 100644 index 00000000..732d3f69 Binary files /dev/null and b/resources/ui/units/aircrafts/MQ RQ-1_24.jpg differ diff --git a/resources/ui/units/aircrafts/Mi-24_24.jpg b/resources/ui/units/aircrafts/Mi-24_24.jpg new file mode 100644 index 00000000..97efd518 Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-24_24.jpg differ diff --git a/resources/ui/units/aircrafts/Mi-26_24.jpg b/resources/ui/units/aircrafts/Mi-26_24.jpg new file mode 100644 index 00000000..9b0204ef Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-26_24.jpg differ diff --git a/resources/ui/units/aircrafts/Mi-28_24.jpg b/resources/ui/units/aircrafts/Mi-28_24.jpg new file mode 100644 index 00000000..48d8cc97 Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-28_24.jpg differ diff --git a/resources/ui/units/aircrafts/Mi-8MT_24.jpg b/resources/ui/units/aircrafts/Mi-8MT_24.jpg new file mode 100644 index 00000000..052c9925 Binary files /dev/null and b/resources/ui/units/aircrafts/Mi-8MT_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-15bis_24.jpg b/resources/ui/units/aircrafts/MiG-15bis_24.jpg new file mode 100644 index 00000000..e581ad93 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-15bis_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-19P_24.jpg b/resources/ui/units/aircrafts/MiG-19P_24.jpg new file mode 100644 index 00000000..76aa4a3e Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-19P_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-21Bis_24.jpg b/resources/ui/units/aircrafts/MiG-21Bis_24.jpg new file mode 100644 index 00000000..07de7821 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-21Bis_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-23MLD_24.jpg b/resources/ui/units/aircrafts/MiG-23MLD_24.jpg new file mode 100644 index 00000000..876a6c2b Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-23MLD_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-25PD_24.jpg b/resources/ui/units/aircrafts/MiG-25PD_24.jpg new file mode 100644 index 00000000..861561c1 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-25PD_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-25RBT_24.jpg b/resources/ui/units/aircrafts/MiG-25RBT_24.jpg new file mode 100644 index 00000000..379d0771 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-25RBT_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-27K_24.jpg b/resources/ui/units/aircrafts/MiG-27K_24.jpg new file mode 100644 index 00000000..1f8dcbff Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-27K_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-29A_24.jpg b/resources/ui/units/aircrafts/MiG-29A_24.jpg new file mode 100644 index 00000000..2ad3e728 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-29A_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-29S_24.jpg b/resources/ui/units/aircrafts/MiG-29S_24.jpg new file mode 100644 index 00000000..3cdf8e64 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-29S_24.jpg differ diff --git a/resources/ui/units/aircrafts/MiG-31_24.jpg b/resources/ui/units/aircrafts/MiG-31_24.jpg new file mode 100644 index 00000000..c1c1a238 Binary files /dev/null and b/resources/ui/units/aircrafts/MiG-31_24.jpg differ diff --git a/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg b/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg new file mode 100644 index 00000000..bc5eeb84 Binary files /dev/null and b/resources/ui/units/aircrafts/Mirage 2000-5_24.jpg differ diff --git a/resources/ui/units/aircrafts/OH-58D_24.jpg b/resources/ui/units/aircrafts/OH-58D_24.jpg new file mode 100644 index 00000000..8392fe4f Binary files /dev/null and b/resources/ui/units/aircrafts/OH-58D_24.jpg differ diff --git a/resources/ui/units/aircrafts/P-51D_24.jpg b/resources/ui/units/aircrafts/P-51D_24.jpg new file mode 100644 index 00000000..a8601eab Binary files /dev/null and b/resources/ui/units/aircrafts/P-51D_24.jpg differ diff --git a/resources/ui/units/aircrafts/S-3B_24.jpg b/resources/ui/units/aircrafts/S-3B_24.jpg new file mode 100644 index 00000000..422feba0 Binary files /dev/null and b/resources/ui/units/aircrafts/S-3B_24.jpg differ diff --git a/resources/ui/units/aircrafts/SA342L_24.jpg b/resources/ui/units/aircrafts/SA342L_24.jpg new file mode 100644 index 00000000..75e0a003 Binary files /dev/null and b/resources/ui/units/aircrafts/SA342L_24.jpg differ diff --git a/resources/ui/units/aircrafts/SA342M_24.jpg b/resources/ui/units/aircrafts/SA342M_24.jpg new file mode 100644 index 00000000..78417f99 Binary files /dev/null and b/resources/ui/units/aircrafts/SA342M_24.jpg differ diff --git a/resources/ui/units/aircrafts/SA342Minigun_24.jpg b/resources/ui/units/aircrafts/SA342Minigun_24.jpg new file mode 100644 index 00000000..517e33c4 Binary files /dev/null and b/resources/ui/units/aircrafts/SA342Minigun_24.jpg differ diff --git a/resources/ui/units/aircrafts/SA342Mistral_24.jpg b/resources/ui/units/aircrafts/SA342Mistral_24.jpg new file mode 100644 index 00000000..b59d8d20 Binary files /dev/null and b/resources/ui/units/aircrafts/SA342Mistral_24.jpg differ diff --git a/resources/ui/units/aircrafts/SH-60B_24.jpg b/resources/ui/units/aircrafts/SH-60B_24.jpg new file mode 100644 index 00000000..24365edb Binary files /dev/null and b/resources/ui/units/aircrafts/SH-60B_24.jpg differ diff --git a/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg b/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg new file mode 100644 index 00000000..b2b5e77f Binary files /dev/null and b/resources/ui/units/aircrafts/Spitfire LF Mk. IX_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-17M4_24.jpg b/resources/ui/units/aircrafts/Su-17M4_24.jpg new file mode 100644 index 00000000..1af68e96 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-17M4_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-24MR_24.jpg b/resources/ui/units/aircrafts/Su-24MR_24.jpg new file mode 100644 index 00000000..0a30caad Binary files /dev/null and b/resources/ui/units/aircrafts/Su-24MR_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-24M_24.jpg b/resources/ui/units/aircrafts/Su-24M_24.jpg new file mode 100644 index 00000000..ca3e9241 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-24M_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-25TM_24.jpg b/resources/ui/units/aircrafts/Su-25TM_24.jpg new file mode 100644 index 00000000..452d3365 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25TM_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-25T_24.jpg b/resources/ui/units/aircrafts/Su-25T_24.jpg new file mode 100644 index 00000000..b0a75db9 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25T_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-25_24.jpg b/resources/ui/units/aircrafts/Su-25_24.jpg new file mode 100644 index 00000000..61e7d5a2 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-25_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-27_24.jpg b/resources/ui/units/aircrafts/Su-27_24.jpg new file mode 100644 index 00000000..2beaff02 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-27_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-30_24.jpg b/resources/ui/units/aircrafts/Su-30_24.jpg new file mode 100644 index 00000000..7f492d73 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-30_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-33_24.jpg b/resources/ui/units/aircrafts/Su-33_24.jpg new file mode 100644 index 00000000..3bf34d0e Binary files /dev/null and b/resources/ui/units/aircrafts/Su-33_24.jpg differ diff --git a/resources/ui/units/aircrafts/Su-34_24.jpg b/resources/ui/units/aircrafts/Su-34_24.jpg new file mode 100644 index 00000000..3309ff97 Binary files /dev/null and b/resources/ui/units/aircrafts/Su-34_24.jpg differ diff --git a/resources/ui/units/aircrafts/Tornado_24.jpg b/resources/ui/units/aircrafts/Tornado_24.jpg new file mode 100644 index 00000000..9e9c00e1 Binary files /dev/null and b/resources/ui/units/aircrafts/Tornado_24.jpg differ diff --git a/resources/ui/units/aircrafts/Tu-142M_24.jpg b/resources/ui/units/aircrafts/Tu-142M_24.jpg new file mode 100644 index 00000000..65c377a6 Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-142M_24.jpg differ diff --git a/resources/ui/units/aircrafts/Tu-160_24.jpg b/resources/ui/units/aircrafts/Tu-160_24.jpg new file mode 100644 index 00000000..2b1f09ab Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-160_24.jpg differ diff --git a/resources/ui/units/aircrafts/Tu-22M3_24.jpg b/resources/ui/units/aircrafts/Tu-22M3_24.jpg new file mode 100644 index 00000000..290558f7 Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-22M3_24.jpg differ diff --git a/resources/ui/units/aircrafts/Tu-95_24.jpg b/resources/ui/units/aircrafts/Tu-95_24.jpg new file mode 100644 index 00000000..446c0014 Binary files /dev/null and b/resources/ui/units/aircrafts/Tu-95_24.jpg differ diff --git a/resources/ui/units/aircrafts/UH-1H_24.jpg b/resources/ui/units/aircrafts/UH-1H_24.jpg new file mode 100644 index 00000000..423db195 Binary files /dev/null and b/resources/ui/units/aircrafts/UH-1H_24.jpg differ diff --git a/resources/ui/units/aircrafts/UH-60A_24.jpg b/resources/ui/units/aircrafts/UH-60A_24.jpg new file mode 100644 index 00000000..f26d9a4d Binary files /dev/null and b/resources/ui/units/aircrafts/UH-60A_24.jpg differ diff --git a/resources/ui/units/aircrafts/Yak-40_24.jpg b/resources/ui/units/aircrafts/Yak-40_24.jpg new file mode 100644 index 00000000..80aa9cb9 Binary files /dev/null and b/resources/ui/units/aircrafts/Yak-40_24.jpg differ diff --git a/resources/ui/units/readme.md b/resources/ui/units/readme.md new file mode 100644 index 00000000..96c96f1a --- /dev/null +++ b/resources/ui/units/readme.md @@ -0,0 +1,29 @@ +In this folder are icons for the different units in DCS / DCS Liberation. + +# How were these retrieved : +- I took screenshoot of the units from the encyclopedia in DCS. If you want to add more pictures, please do the same, so that the units have the same background. +- Then resized all the image so that have static size. Aspect ratio is not perfect, but it's hard to notice on such small image. + +```python + +import os +from PIL import Image + +for img_name in os.listdir("."): + if os.path.isfile(img_name) and img_name.endswith(".png"): + print(img_name) + img = Image.open(img_name) + img = img.resize((64,24), Image.ANTIALIAS) + img.save('./out/' + img_name[:-4] + "_24.jpg") + +``` + +You need PIL to run the script : + +``` +pip install PIL +``` + +If you want access to get my high res screenshoot, i still have them, but to reduce size and ram usage, i believe it's better to use super small jpg icons instead. + +@Khopa \ No newline at end of file diff --git a/resources/ui/units/vehicles/AAV-7_24.jpg b/resources/ui/units/vehicles/AAV-7_24.jpg new file mode 100644 index 00000000..c1b33ce6 Binary files /dev/null and b/resources/ui/units/vehicles/AAV-7_24.jpg differ diff --git a/resources/ui/units/vehicles/BMD-1_24.jpg b/resources/ui/units/vehicles/BMD-1_24.jpg new file mode 100644 index 00000000..43c88734 Binary files /dev/null and b/resources/ui/units/vehicles/BMD-1_24.jpg differ diff --git a/resources/ui/units/vehicles/BMP-1_24.jpg b/resources/ui/units/vehicles/BMP-1_24.jpg new file mode 100644 index 00000000..262049c8 Binary files /dev/null and b/resources/ui/units/vehicles/BMP-1_24.jpg differ diff --git a/resources/ui/units/vehicles/BMP-2_24.jpg b/resources/ui/units/vehicles/BMP-2_24.jpg new file mode 100644 index 00000000..eda8b8e2 Binary files /dev/null and b/resources/ui/units/vehicles/BMP-2_24.jpg differ diff --git a/resources/ui/units/vehicles/BMP-3_24.jpg b/resources/ui/units/vehicles/BMP-3_24.jpg new file mode 100644 index 00000000..99bd096c Binary files /dev/null and b/resources/ui/units/vehicles/BMP-3_24.jpg differ diff --git a/resources/ui/units/vehicles/BTR-80_24.jpg b/resources/ui/units/vehicles/BTR-80_24.jpg new file mode 100644 index 00000000..ca3f814e Binary files /dev/null and b/resources/ui/units/vehicles/BTR-80_24.jpg differ diff --git a/resources/ui/units/vehicles/BTR-RD_24.jpg b/resources/ui/units/vehicles/BTR-RD_24.jpg new file mode 100644 index 00000000..be9ac063 Binary files /dev/null and b/resources/ui/units/vehicles/BTR-RD_24.jpg differ diff --git a/resources/ui/units/vehicles/Bedford MWD_24.jpg b/resources/ui/units/vehicles/Bedford MWD_24.jpg new file mode 100644 index 00000000..3bc24074 Binary files /dev/null and b/resources/ui/units/vehicles/Bedford MWD_24.jpg differ diff --git a/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg b/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg new file mode 100644 index 00000000..8fd93005 Binary files /dev/null and b/resources/ui/units/vehicles/Blitz 3.6-6700A_24.jpg differ diff --git a/resources/ui/units/vehicles/CCKW 353_24.jpg b/resources/ui/units/vehicles/CCKW 353_24.jpg new file mode 100644 index 00000000..ceb33eb2 Binary files /dev/null and b/resources/ui/units/vehicles/CCKW 353_24.jpg differ diff --git a/resources/ui/units/vehicles/Challenger 2_24.jpg b/resources/ui/units/vehicles/Challenger 2_24.jpg new file mode 100644 index 00000000..7a5e0df9 Binary files /dev/null and b/resources/ui/units/vehicles/Challenger 2_24.jpg differ diff --git a/resources/ui/units/vehicles/Cobra_24.jpg b/resources/ui/units/vehicles/Cobra_24.jpg new file mode 100644 index 00000000..58ac6182 Binary files /dev/null and b/resources/ui/units/vehicles/Cobra_24.jpg differ diff --git a/resources/ui/units/vehicles/Cromwell IV_24.jpg b/resources/ui/units/vehicles/Cromwell IV_24.jpg new file mode 100644 index 00000000..adf20478 Binary files /dev/null and b/resources/ui/units/vehicles/Cromwell IV_24.jpg differ diff --git a/resources/ui/units/vehicles/Jagdpanther_24.jpg b/resources/ui/units/vehicles/Jagdpanther_24.jpg new file mode 100644 index 00000000..8505fe10 Binary files /dev/null and b/resources/ui/units/vehicles/Jagdpanther_24.jpg differ diff --git a/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg b/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg new file mode 100644 index 00000000..2bc0c950 Binary files /dev/null and b/resources/ui/units/vehicles/Jagdpanzer IV_24.jpg differ diff --git a/resources/ui/units/vehicles/LAV-25_24.jpg b/resources/ui/units/vehicles/LAV-25_24.jpg new file mode 100644 index 00000000..170edeb1 Binary files /dev/null and b/resources/ui/units/vehicles/LAV-25_24.jpg differ diff --git a/resources/ui/units/vehicles/Leclerc_24.jpg b/resources/ui/units/vehicles/Leclerc_24.jpg new file mode 100644 index 00000000..d722c378 Binary files /dev/null and b/resources/ui/units/vehicles/Leclerc_24.jpg differ diff --git a/resources/ui/units/vehicles/Leopard 1A3_24.jpg b/resources/ui/units/vehicles/Leopard 1A3_24.jpg new file mode 100644 index 00000000..7108ef34 Binary files /dev/null and b/resources/ui/units/vehicles/Leopard 1A3_24.jpg differ diff --git a/resources/ui/units/vehicles/Leopard-2_24.jpg b/resources/ui/units/vehicles/Leopard-2_24.jpg new file mode 100644 index 00000000..6a58616f Binary files /dev/null and b/resources/ui/units/vehicles/Leopard-2_24.jpg differ diff --git a/resources/ui/units/vehicles/M 818_24.jpg b/resources/ui/units/vehicles/M 818_24.jpg new file mode 100644 index 00000000..23372bf0 Binary files /dev/null and b/resources/ui/units/vehicles/M 818_24.jpg differ diff --git a/resources/ui/units/vehicles/M-1 Abrams_24.jpg b/resources/ui/units/vehicles/M-1 Abrams_24.jpg new file mode 100644 index 00000000..d0bf9a66 Binary files /dev/null and b/resources/ui/units/vehicles/M-1 Abrams_24.jpg differ diff --git a/resources/ui/units/vehicles/M-113_24.jpg b/resources/ui/units/vehicles/M-113_24.jpg new file mode 100644 index 00000000..8319228d Binary files /dev/null and b/resources/ui/units/vehicles/M-113_24.jpg differ diff --git a/resources/ui/units/vehicles/M-2 Bradley_24.jpg b/resources/ui/units/vehicles/M-2 Bradley_24.jpg new file mode 100644 index 00000000..037dddf1 Binary files /dev/null and b/resources/ui/units/vehicles/M-2 Bradley_24.jpg differ diff --git a/resources/ui/units/vehicles/M1043 HMMWV_24.jpg b/resources/ui/units/vehicles/M1043 HMMWV_24.jpg new file mode 100644 index 00000000..f24eddfd Binary files /dev/null and b/resources/ui/units/vehicles/M1043 HMMWV_24.jpg differ diff --git a/resources/ui/units/vehicles/M109_24.jpg b/resources/ui/units/vehicles/M109_24.jpg new file mode 100644 index 00000000..2d0994d6 Binary files /dev/null and b/resources/ui/units/vehicles/M109_24.jpg differ diff --git a/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg b/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg new file mode 100644 index 00000000..0eafe997 Binary files /dev/null and b/resources/ui/units/vehicles/M1126 Stryker IFV_24.jpg differ diff --git a/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg b/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg new file mode 100644 index 00000000..a899065a Binary files /dev/null and b/resources/ui/units/vehicles/M1128 Stryker MGS_24.jpg differ diff --git a/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg b/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg new file mode 100644 index 00000000..22ccbc68 Binary files /dev/null and b/resources/ui/units/vehicles/M1134 Stryker ATGM_24.jpg differ diff --git a/resources/ui/units/vehicles/M12_24.jpg b/resources/ui/units/vehicles/M12_24.jpg new file mode 100644 index 00000000..fb047d17 Binary files /dev/null and b/resources/ui/units/vehicles/M12_24.jpg differ diff --git a/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg b/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg new file mode 100644 index 00000000..b25731fe Binary files /dev/null and b/resources/ui/units/vehicles/M30 Cargo Carrier_24.jpg differ diff --git a/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg b/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg new file mode 100644 index 00000000..b34c4420 Binary files /dev/null and b/resources/ui/units/vehicles/M4A4 Sherman Firefly_24.jpg differ diff --git a/resources/ui/units/vehicles/M4A4 Sherman_24.jpg b/resources/ui/units/vehicles/M4A4 Sherman_24.jpg new file mode 100644 index 00000000..a902812f Binary files /dev/null and b/resources/ui/units/vehicles/M4A4 Sherman_24.jpg differ diff --git a/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg b/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg new file mode 100644 index 00000000..c4dd91ef Binary files /dev/null and b/resources/ui/units/vehicles/MCV-80 Warrior_24.jpg differ diff --git a/resources/ui/units/vehicles/MTLB_24.jpg b/resources/ui/units/vehicles/MTLB_24.jpg new file mode 100644 index 00000000..e9112723 Binary files /dev/null and b/resources/ui/units/vehicles/MTLB_24.jpg differ diff --git a/resources/ui/units/vehicles/Merkava Mk IV_24.jpg b/resources/ui/units/vehicles/Merkava Mk IV_24.jpg new file mode 100644 index 00000000..dfd47a68 Binary files /dev/null and b/resources/ui/units/vehicles/Merkava Mk IV_24.jpg differ diff --git a/resources/ui/units/vehicles/Panther G_24.jpg b/resources/ui/units/vehicles/Panther G_24.jpg new file mode 100644 index 00000000..00ba7851 Binary files /dev/null and b/resources/ui/units/vehicles/Panther G_24.jpg differ diff --git a/resources/ui/units/vehicles/PzKpfw IV H_24.jpg b/resources/ui/units/vehicles/PzKpfw IV H_24.jpg new file mode 100644 index 00000000..af068594 Binary files /dev/null and b/resources/ui/units/vehicles/PzKpfw IV H_24.jpg differ diff --git a/resources/ui/units/vehicles/T-55_24.jpg b/resources/ui/units/vehicles/T-55_24.jpg new file mode 100644 index 00000000..e2d6c5e0 Binary files /dev/null and b/resources/ui/units/vehicles/T-55_24.jpg differ diff --git a/resources/ui/units/vehicles/T-72B_24.jpg b/resources/ui/units/vehicles/T-72B_24.jpg new file mode 100644 index 00000000..dc8c5ff3 Binary files /dev/null and b/resources/ui/units/vehicles/T-72B_24.jpg differ diff --git a/resources/ui/units/vehicles/T-80U_24.jpg b/resources/ui/units/vehicles/T-80U_24.jpg new file mode 100644 index 00000000..8537a9b3 Binary files /dev/null and b/resources/ui/units/vehicles/T-80U_24.jpg differ diff --git a/resources/ui/units/vehicles/T-90_24.jpg b/resources/ui/units/vehicles/T-90_24.jpg new file mode 100644 index 00000000..d79bcb4c Binary files /dev/null and b/resources/ui/units/vehicles/T-90_24.jpg differ diff --git a/resources/ui/units/vehicles/TPZ_24.jpg b/resources/ui/units/vehicles/TPZ_24.jpg new file mode 100644 index 00000000..425b9a82 Binary files /dev/null and b/resources/ui/units/vehicles/TPZ_24.jpg differ diff --git a/resources/ui/units/vehicles/Tiger II_24.jpg b/resources/ui/units/vehicles/Tiger II_24.jpg new file mode 100644 index 00000000..0e6c9e9a Binary files /dev/null and b/resources/ui/units/vehicles/Tiger II_24.jpg differ diff --git a/resources/ui/units/vehicles/Tiger I_24.jpg b/resources/ui/units/vehicles/Tiger I_24.jpg new file mode 100644 index 00000000..40b257c8 Binary files /dev/null and b/resources/ui/units/vehicles/Tiger I_24.jpg differ diff --git a/resources/ui/units/vehicles/ZBD-04A_24.jpg b/resources/ui/units/vehicles/ZBD-04A_24.jpg new file mode 100644 index 00000000..552ed345 Binary files /dev/null and b/resources/ui/units/vehicles/ZBD-04A_24.jpg differ