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()