diff --git a/game/inventory.py b/game/inventory.py
index b369ad8b..ff09618b 100644
--- a/game/inventory.py
+++ b/game/inventory.py
@@ -98,6 +98,7 @@ class GlobalAircraftInventory:
inventory = self.inventories[control_point]
for aircraft, count in control_point.base.aircraft.items():
inventory.add_aircraft(aircraft, count)
+ control_point.base.sold_units[aircraft] = 0
def for_control_point(
self,
diff --git a/game/theater/base.py b/game/theater/base.py
index 88ede52f..5b89248e 100644
--- a/game/theater/base.py
+++ b/game/theater/base.py
@@ -29,6 +29,7 @@ class Base:
self.aa: Dict[AirDefence, int] = {}
self.commision_points: Dict[Type, float] = {}
self.strength = 1
+ self.sold_units = {}
@property
def total_aircraft(self) -> int:
diff --git a/gen/ground_forces/ai_ground_planner.py b/gen/ground_forces/ai_ground_planner.py
index e98d82d2..9215a5b0 100644
--- a/gen/ground_forces/ai_ground_planner.py
+++ b/gen/ground_forces/ai_ground_planner.py
@@ -117,6 +117,7 @@ class GroundPlanner:
print(key)
continue
+ self.cp.base.sold_units[key] = 0
available = self.cp.base.armor[key]
while available > 0:
diff --git a/qt_ui/windows/basemenu/QRecruitBehaviour.py b/qt_ui/windows/basemenu/QRecruitBehaviour.py
index 0cccd16d..ab3f3f21 100644
--- a/qt_ui/windows/basemenu/QRecruitBehaviour.py
+++ b/qt_ui/windows/basemenu/QRecruitBehaviour.py
@@ -61,7 +61,13 @@ class QRecruitBehaviour:
unitName = QLabel("" + db.unit_type_name_2(unit_type) + "")
unitName.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
- existing_units = QLabel(str(existing_units))
+ sold_count = self.cp.base.sold_units.get(unit_type)
+ if sold_count is None:
+ sold_count = 0
+ if sold_count > 0:
+ existing_units = QLabel("{} (-{})".format(existing_units, sold_count))
+ else:
+ existing_units = QLabel(str(existing_units))
existing_units.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
amount_bought = QLabel("{}".format(str(scheduled_units)))
@@ -117,9 +123,17 @@ class QRecruitBehaviour:
unit_type in self.pending_deliveries.units and "{}".format(self.pending_deliveries.units[unit_type]) or "0"
))
- self.existing_units_labels[unit_type].setText("{}".format(
- self.cp.base.total_units_of_type(unit_type)
- ))
+ sold_count = self.cp.base.sold_units.get(unit_type)
+ if sold_count is None:
+ sold_count = 0
+ if sold_count > 0:
+ self.existing_units_labels[unit_type].setText("{} (-{})".format(
+ self.cp.base.total_units_of_type(unit_type), self.cp.base.sold_units[unit_type]
+ ))
+ else:
+ self.existing_units_labels[unit_type].setText("{}".format(
+ self.cp.base.total_units_of_type(unit_type)
+ ))
def update_available_budget(self) -> None:
GameUpdateSignal.get_instance().updateBudget(self.game_model.game)
@@ -127,8 +141,16 @@ class QRecruitBehaviour:
def buy(self, unit_type: Type[UnitType]):
price = db.PRICES[unit_type]
if self.budget >= price:
- self.pending_deliveries.order({unit_type: 1})
- self.budget -= price
+ sold_count = self.cp.base.sold_units.get(unit_type)
+ if sold_count is None:
+ sold_count = 0
+ if sold_count > 0:
+ self.cp.base.sold_units[unit_type] -= 1
+ self.cp.base.commision_units({unit_type: 1})
+ self.budget -= price
+ else:
+ self.pending_deliveries.order({unit_type: 1})
+ self.budget -= price
else:
# TODO : display modal warning
logging.info("Not enough money !")
@@ -146,6 +168,7 @@ class QRecruitBehaviour:
price = db.PRICES[unit_type]
self.budget += price
self.cp.base.commit_losses({unit_type: 1})
+ self.cp.base.sold_units[unit_type] += 1
self._update_count_label(unit_type)
self.update_available_budget()
diff --git a/qt_ui/windows/basemenu/airfield/QAircraftRecruitmentMenu.py b/qt_ui/windows/basemenu/airfield/QAircraftRecruitmentMenu.py
index 79ba0d1f..4e92e61c 100644
--- a/qt_ui/windows/basemenu/airfield/QAircraftRecruitmentMenu.py
+++ b/qt_ui/windows/basemenu/airfield/QAircraftRecruitmentMenu.py
@@ -85,6 +85,8 @@ class QAircraftRecruitmentMenu(QFrame, QRecruitBehaviour):
self.setLayout(main_layout)
def buy(self, unit_type):
+ global_inventory = self.game_model.game.aircraft_inventory
+ inventory = global_inventory.for_control_point(self.cp)
if self.maximum_units > 0:
if self.cp.unclaimed_parking(self.game_model.game) <= 0:
logging.debug(f"No space for additional aircraft at {self.cp}.")
@@ -92,7 +94,11 @@ class QAircraftRecruitmentMenu(QFrame, QRecruitBehaviour):
self, "No space for additional aircraft",
f"There is no parking space left at {self.cp.name} to accommodate another plane.", QMessageBox.Ok)
return
-
+ sold_count = self.cp.base.sold_units.get(unit_type)
+ if sold_count is None:
+ sold_count = 0
+ if sold_count > 0:
+ inventory.add_aircraft(unit_type, 1)
super().buy(unit_type)
self.hangar_status.update_label()