Only allow recruiting carrier units in aircraft carrier groups. Generate one group on carrier when possible.

This commit is contained in:
Khopa 2019-10-26 23:54:33 +02:00
parent 76638b549f
commit e82db1fecd
7 changed files with 79 additions and 29 deletions

View File

@ -745,7 +745,20 @@ TIME_PERIODS = {
"Syrian War [2011]": datetime(2011, 8, 7),
}
CARRIER_CAPABLE = [
FA_18C_hornet,
F_14B,
AV8BNA,
UH_1H,
Mi_8MT,
Ka_50,
SA342L,
SA342M,
SA342Minigun,
SA342Mistral
]
"""
---------- END OF CONFIGURATION SECTION

View File

@ -339,20 +339,31 @@ class AircraftConflictGenerator:
client_count=0,
at=cp.position)
else:
st = StartType.Runway
if flight.start_type == "Cold":
st = StartType.Cold
elif flight.start_type == "Warm":
st = StartType.Warm
group = self._generate_at_airport(
name=namegen.next_unit_name(country, cp.id, flight.unit_type),
side=country,
unit_type=flight.unit_type,
count=flight.count,
client_count=0,
airport=self.m.terrain.airport_by_id(cp.at.id),
start_type=st)
if cp.cptype in [ControlPointType.AIRCRAFT_CARRIER_GROUP, ControlPointType.LHA_GROUP]:
group_name = cp.get_carrier_group_name()
group = self._generate_at_group(
name=namegen.next_unit_name(country, cp.id, flight.unit_type),
side=country,
unit_type=flight.unit_type,
count=flight.count,
client_count=0,
at=self.m.find_group(group_name),)
else:
group = self._generate_at_airport(
name=namegen.next_unit_name(country, cp.id, flight.unit_type),
side=country,
unit_type=flight.unit_type,
count=flight.count,
client_count=0,
airport=self.m.terrain.airport_by_id(cp.at.id),
start_type=st)
except Exception:
# Generated when there is no place on Runway or on Parking Slots
group = self._generate_group(

View File

@ -12,9 +12,11 @@ class CarrierGroupGenerator(GroupGenerator):
def generate(self):
# Add carrier
if self.faction["aircraft_carrier"]:
if "aircraft_carrier" in self.faction.keys():
carrier_type = random.choice(self.faction["aircraft_carrier"])
self.add_unit(carrier_type, "Carrier", self.position.x, self.position.y, self.heading)
else:
return
# Add destroyers escort
dd_type = random.choice(self.faction["destroyer"])

View File

@ -69,7 +69,7 @@ class QLiberationMap(QGraphicsView):
#self.add_game_events()
for cp in self.game.theater.controlpoints:
pos = self._transform_point(cp.position)
scene.addItem(QMapControlPoint(self, pos[0] - CONST.CP_SIZE / 2, pos[1] - CONST.CP_SIZE / 2, CONST.CP_SIZE,

View File

@ -30,29 +30,33 @@ class QMapControlPoint(QGraphicsRectItem):
painter.setBrush(self.brush_color)
painter.setPen(self.pen_color)
if self.isUnderMouse():
painter.setBrush(CONST.COLORS["white"])
painter.setPen(self.pen_color)
if self.model.has_runway():
if self.isUnderMouse():
painter.setBrush(CONST.COLORS["white"])
painter.setPen(self.pen_color)
r = option.rect
painter.drawChord(r, -180*16, -180*16)
r = option.rect
painter.drawChord(r, -180*16, -180*16)
gauge = QRect(r.x(),
r.y()+CONST.CP_SIZE/2 + 2,
r.width(),
CONST.CP_SIZE / 4)
gauge = QRect(r.x(),
r.y()+CONST.CP_SIZE/2 + 2,
r.width(),
CONST.CP_SIZE / 4)
painter.setBrush(CONST.COLORS["bright_red"])
painter.setPen(CONST.COLORS["black"])
painter.drawRect(gauge)
painter.setBrush(CONST.COLORS["bright_red"])
painter.setPen(CONST.COLORS["black"])
painter.drawRect(gauge)
gauge2 = QRect(r.x(),
r.y() + CONST.CP_SIZE / 2 + 2,
r.width()*self.model.base.strength,
CONST.CP_SIZE / 4)
gauge2 = QRect(r.x(),
r.y() + CONST.CP_SIZE / 2 + 2,
r.width()*self.model.base.strength,
CONST.CP_SIZE / 4)
painter.setBrush(CONST.COLORS["green"])
painter.drawRect(gauge2)
painter.setBrush(CONST.COLORS["green"])
painter.drawRect(gauge2)
else:
# TODO : not drawing sunk carriers. Can be improved to display sunk carrier.
pass
painter.restore()
def hoverEnterEvent(self, event: QGraphicsSceneHoverEvent):

View File

@ -6,7 +6,7 @@ from PySide2.QtWidgets import QHBoxLayout, QLabel, QWidget, QDialog, QVBoxLayout
QGroupBox, QSizePolicy, QSpacerItem
from dcs.unittype import UnitType
from game.event import UnitsDeliveryEvent
from game.event import UnitsDeliveryEvent, ControlPointType
from qt_ui.widgets.QBudgetBox import QBudgetBox
from qt_ui.widgets.base.QAirportInformation import QAirportInformation
from qt_ui.widgets.base.QBaseInformation import QBaseInformation
@ -23,6 +23,7 @@ class QBaseMenu(QDialog):
self.cp = controlPoint
self.game = game
self.is_carrier = self.cp.cptype in [ControlPointType.AIRCRAFT_CARRIER_GROUP, ControlPointType.LHA_GROUP]
try:
self.airport = game.theater.terrain.airport_by_id(self.cp.id)
@ -98,6 +99,9 @@ class QBaseMenu(QDialog):
for task_type in units.keys():
if task_type == PinpointStrike and self.is_carrier:
continue
units_column = list(set(units[task_type]))
if len(units_column) == 0: continue
units_column.sort(key=lambda x: db.PRICES[x])
@ -107,6 +111,8 @@ class QBaseMenu(QDialog):
task_box.setLayout(task_box_layout)
row = 0
for unit_type in units_column:
if self.is_carrier and not unit_type in db.CARRIER_CAPABLE:
continue
row = self.add_purchase_row(unit_type, task_box_layout, row)
stretch = QVBoxLayout()

View File

@ -106,6 +106,20 @@ class ControlPoint:
else:
return True
def get_carrier_group_name(self):
"""
Get the carrier group name if the airbase is a carrier
:return: Carrier group name
"""
if self.cptype in [ControlPointType.AIRCRAFT_CARRIER_GROUP, ControlPointType.LHA_GROUP] :
for g in self.ground_objects:
if g.dcs_identifier == "CARRIER":
for group in g.groups:
for u in group.units:
if db.unit_type_from_name(u.type) in [CVN_74_John_C__Stennis, LHA_1_Tarawa, CV_1143_5_Admiral_Kuznetsov]:
return group.name
return None
def is_connected(self, to) -> bool:
return to in self.connected_points