Fixed bug when buying armor at base

This commit is contained in:
Khopa 2020-09-25 00:25:20 +02:00
parent fb40e9273d
commit c96b5cf4d7
4 changed files with 45 additions and 12 deletions

View File

@ -3,22 +3,38 @@ import random
from dcs.vehicles import Armor from dcs.vehicles import Armor
from game import db from game import db
from gen.defenses.armored_group_generator import ArmoredGroupGenerator from gen.defenses.armored_group_generator import ArmoredGroupGenerator, FixedSizeArmorGroupGenerator
def generate_armor_group(faction:str, game, ground_object): def generate_armor_group(faction:str, game, ground_object):
""" """
This generate a group of ground units This generate a group of ground units
:param parentCp: The parent control point
:param ground_object: The ground object which will own the group
:param country: Owner country
:return: Generated group :return: Generated group
""" """
possible_unit = [u for u in db.FACTIONS[faction]["units"] if u in Armor.__dict__.values()] possible_unit = [u for u in db.FACTIONS[faction]["units"] if u in Armor.__dict__.values()]
if len(possible_unit) > 0: if len(possible_unit) > 0:
unit_type = random.choice(possible_unit) unit_type = random.choice(possible_unit)
generator = ArmoredGroupGenerator(game, ground_object, unit_type) return generate_armor_group_of_type(game, ground_object, unit_type)
generator.generate()
return generator.get_generated_group()
return None return None
def generate_armor_group_of_type(game, ground_object, unit_type):
"""
This generate a group of ground units of given type
:return: Generated group
"""
generator = ArmoredGroupGenerator(game, ground_object, unit_type)
generator.generate()
return generator.get_generated_group()
def generate_armor_group_of_type_and_size(game, ground_object, unit_type, size: int):
"""
This generate a group of ground units of given type and size
:return: Generated group
"""
generator = FixedSizeArmorGroupGenerator(game, ground_object, unit_type, size)
generator.generate()
return generator.get_generated_group()

View File

@ -25,3 +25,20 @@ class ArmoredGroupGenerator(GroupGenerator):
self.position.y + spacing * j, self.heading) self.position.y + spacing * j, self.heading)
class FixedSizeArmorGroupGenerator(GroupGenerator):
def __init__(self, game, ground_object, unit_type, size):
super(FixedSizeArmorGroupGenerator, self).__init__(game, ground_object)
self.unit_type = unit_type
self.size = size
def generate(self):
spacing = random.randint(20, 70)
index = 0
for i in range(self.size):
index = index + 1
self.add_unit(self.unit_type, "Armor#" + str(index),
self.position.x + spacing * i,
self.position.y, self.heading)

View File

@ -39,8 +39,6 @@ class QBaseDefenseGroupInfo(QGroupBox):
item = self.unit_layout.itemAt(i) item = self.unit_layout.itemAt(i)
if item is not None and item.widget() is not None: if item is not None and item.widget() is not None:
self.unit_layout.removeItem(item) self.unit_layout.removeItem(item)
item.widget().setParent(None)
item.widget().deleteLater()
for g in self.ground_object.groups: for g in self.ground_object.groups:
for u in g.units: for u in g.units:

View File

@ -1,7 +1,7 @@
import logging import logging
from PySide2 import QtCore from PySide2 import QtCore
from PySide2.QtGui import QCloseEvent, Qt from PySide2.QtGui import Qt
from PySide2.QtWidgets import QHBoxLayout, QDialog, QGridLayout, QLabel, QGroupBox, QVBoxLayout, QPushButton, \ from PySide2.QtWidgets import QHBoxLayout, QDialog, QGridLayout, QLabel, QGroupBox, QVBoxLayout, QPushButton, \
QComboBox, QSpinBox, QMessageBox QComboBox, QSpinBox, QMessageBox
from dcs import Point from dcs import Point
@ -9,7 +9,7 @@ from dcs import Point
from game import Game, db from game import Game, db
from game.data.building_data import FORTIFICATION_BUILDINGS from game.data.building_data import FORTIFICATION_BUILDINGS
from game.db import PRICES, unit_type_of, PinpointStrike from game.db import PRICES, unit_type_of, PinpointStrike
from gen.defenses.armor_group_generator import generate_armor_group from gen.defenses.armor_group_generator import generate_armor_group_of_type_and_size
from gen.sam.sam_group_generator import get_faction_possible_sams_generator from gen.sam.sam_group_generator import get_faction_possible_sams_generator
from qt_ui.uiconstants import EVENT_ICONS from qt_ui.uiconstants import EVENT_ICONS
from qt_ui.widgets.QBudgetBox import QBudgetBox from qt_ui.widgets.QBudgetBox import QBudgetBox
@ -288,7 +288,9 @@ class QBuyGroupForGroundObjectDialog(QDialog):
self.buyArmorButton.setText("Buy [$" + str(db.PRICES[self.buyArmorCombo.itemData(self.buyArmorCombo.currentIndex())] * self.amount.value()) + "M][-$" + str(self.current_group_value) + "M]") self.buyArmorButton.setText("Buy [$" + str(db.PRICES[self.buyArmorCombo.itemData(self.buyArmorCombo.currentIndex())] * self.amount.value()) + "M][-$" + str(self.current_group_value) + "M]")
def buyArmor(self): def buyArmor(self):
print("Buy Armor ")
utype = self.buyArmorCombo.itemData(self.buyArmorCombo.currentIndex()) utype = self.buyArmorCombo.itemData(self.buyArmorCombo.currentIndex())
print(utype)
price = db.PRICES[utype] * self.amount.value() - self.current_group_value price = db.PRICES[utype] * self.amount.value() - self.current_group_value
if price > self.game.budget: if price > self.game.budget:
self.error_money() self.error_money()
@ -298,7 +300,7 @@ class QBuyGroupForGroundObjectDialog(QDialog):
self.game.budget -= price self.game.budget -= price
# Generate Armor # Generate Armor
group = generate_armor_group(self.game.player_name, self.game, self.ground_object) group = generate_armor_group_of_type_and_size(self.game, self.ground_object, utype, int(self.amount.value()))
self.ground_object.groups = [group] self.ground_object.groups = [group]
GameUpdateSignal.get_instance().updateBudget(self.game) GameUpdateSignal.get_instance().updateBudget(self.game)