def generate(self, is_awacs_enabled): player_cp = self.conflict.from_cp if self.conflict.from_cp.captured else self.conflict.to_cp CALLSIGNS = ["TKR", "TEX", "FUL", "FUE", ""] for i, tanker_unit_type in enumerate( db.find_unittype(Refueling, self.conflict.attackers_side)): self.generated_tankers.append(db.unit_type_name(tanker_unit_type)) tanker_heading = self.conflict.to_cp.position.heading_between_point( self.conflict.from_cp.position) + TANKER_HEADING_OFFSET * i tanker_position = player_cp.position.point_from_heading( tanker_heading, TANKER_DISTANCE) tanker_group = self.mission.refuel_flight( country=self.mission.country(self.game.player_country), name=namegen.next_tanker_name( self.mission.country(self.game.player_country)), airport=None, plane_type=tanker_unit_type, position=tanker_position, altitude=TANKER_ALT, race_distance=58000, frequency=130 + i, start_type=StartType.Warm, speed=574, tacanchannel="{}X".format(60 + i), ) if tanker_unit_type != IL_78M: tanker_group.points[0].tasks.pop( ) # Override PyDCS tacan channel tanker_group.points[0].tasks.append( ActivateBeaconCommand(97 + 1, "X", CALLSIGNS[i], True, tanker_group.units[0].id, True)) tanker_group.points[0].tasks.append(SetInvisibleCommand(True)) tanker_group.points[0].tasks.append(SetImmortalCommand(True)) if is_awacs_enabled: try: awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side)[0] awacs_flight = self.mission.awacs_flight( country=self.mission.country(self.game.player_country), name=namegen.next_awacs_name( self.mission.country(self.game.player_country)), plane_type=awacs_unit, altitude=AWACS_ALT, airport=None, position=self.conflict.position.random_point_within( AWACS_DISTANCE, AWACS_DISTANCE), frequency=233, start_type=StartType.Warm, ) awacs_flight.points[0].tasks.append(SetInvisibleCommand(True)) awacs_flight.points[0].tasks.append(SetImmortalCommand(True)) except: print("No AWACS for faction")
def init_ui(self): layout = QVBoxLayout() scroll_content = QWidget() intelLayout = QVBoxLayout() units = { CAP: db.find_unittype(CAP, self.game.enemy_name), Embarking: db.find_unittype(Embarking, self.game.enemy_name), CAS: db.find_unittype(CAS, self.game.enemy_name), PinpointStrike: db.find_unittype(PinpointStrike, self.game.enemy_name), } for task_type in units.keys(): units_column = list(set(units[task_type])) if sum([self.cp.base.total_units_of_type(u) for u in units_column]) > 0: group = QGroupBox(db.task_name(task_type)) groupLayout = QGridLayout() group.setLayout(groupLayout) row = 0 for unit_type in units_column: existing_units = self.cp.base.total_units_of_type(unit_type) if existing_units == 0: continue groupLayout.addWidget( QLabel( "<b>" + db.unit_get_expanded_info( self.game.enemy_country, unit_type, "name" ) + "</b>" ), row, 0, ) groupLayout.addWidget(QLabel(str(existing_units)), row, 1) row += 1 intelLayout.addWidget(group) scroll_content.setLayout(intelLayout) scroll = QScrollArea() scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) scroll.setWidgetResizable(True) scroll.setWidget(scroll_content) layout.addWidget(scroll) self.setLayout(layout)
def generate(self, is_awacs_enabled): player_cp = self.conflict.from_cp if self.conflict.from_cp.captured else self.conflict.to_cp for i, tanker_unit_type in enumerate( db.find_unittype(Refueling, self.conflict.attackers_side.name)): self.generated_tankers.append(db.unit_type_name(tanker_unit_type)) tanker_heading = self.conflict.to_cp.position.heading_between_point( self.conflict.from_cp.position) + TANKER_HEADING_OFFSET * i tanker_position = player_cp.position.point_from_heading( tanker_heading, TANKER_DISTANCE) tanker_group = self.mission.refuel_flight( country=self.mission.country(self.game.player), name=namegen.next_tanker_name( self.mission.country(self.game.player)), airport=None, plane_type=tanker_unit_type, position=tanker_position, altitude=TANKER_ALT, frequency=130 + i, start_type=StartType.Warm, tacanchannel="{}X".format(97 + i), ) tanker_group.points[0].tasks.append( ActivateBeaconCommand(channel=97 + i, unit_id=tanker_group.id, aa=False)) tanker_group.points[0].tasks.append(SetInvisibleCommand(True)) tanker_group.points[0].tasks.append(SetImmortalCommand(True)) if is_awacs_enabled: awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0] awacs_flight = self.mission.awacs_flight( country=self.mission.country(self.game.player), name=namegen.next_awacs_name( self.mission.country(self.game.player)), plane_type=awacs_unit, altitude=AWACS_ALT, airport=None, position=self.conflict.position.random_point_within( AWACS_DISTANCE, AWACS_DISTANCE), frequency=133, start_type=StartType.Warm, ) awacs_flight.points[0].tasks.append(SetInvisibleCommand(True)) awacs_flight.points[0].tasks.append(SetImmortalCommand(True))
def init_ui(self): main_layout = QVBoxLayout() units = { PinpointStrike: db.find_unittype(PinpointStrike, self.game_model.game.player_name), } scroll_content = QWidget() task_box_layout = QGridLayout() scroll_content.setLayout(task_box_layout) row = 0 for task_type in units.keys(): units_column = list(set(units[task_type])) if len(units_column) == 0: continue units_column.sort(key=lambda u: db.unit_get_expanded_info( self.game_model.game.player_country, u, "name")) for unit_type in units_column: row = self.add_purchase_row(unit_type, task_box_layout, row) stretch = QVBoxLayout() stretch.addStretch() task_box_layout.addLayout(stretch, row, 0) scroll_content.setLayout(task_box_layout) scroll = QScrollArea() scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) scroll.setWidgetResizable(True) scroll.setWidget(scroll_content) main_layout.addWidget(scroll) self.setLayout(main_layout)
def generate_passengers(self, count: int): unit_type = random.choice( db.find_unittype(Nothing, self.conflict.attackers_side.name)) self.m.vehicle_group(country=self.conflict.attackers_side, name=namegen.next_unit_name( self.conflict.attackers_side, unit_type), _type=unit_type, position=self.conflict.ground_attackers_location, group_size=count)
def init_ui(self): layout = QVBoxLayout() intel = QGroupBox("Intel") intelLayout = QVBoxLayout() units = { CAP: db.find_unittype(CAP, self.game.enemy_name), Embarking: db.find_unittype(Embarking, self.game.enemy_name), CAS: db.find_unittype(CAS, self.game.enemy_name), PinpointStrike: db.find_unittype(PinpointStrike, self.game.enemy_name), } for task_type in units.keys(): units_column = list(set(units[task_type])) if sum([self.cp.base.total_units_of_type(u) for u in units_column]) > 0: group = QGroupBox(db.task_name(task_type)) groupLayout = QGridLayout() group.setLayout(groupLayout) row = 0 for unit_type in units_column: existing_units = self.cp.base.total_units_of_type( unit_type) if existing_units == 0: continue groupLayout.addWidget( QLabel("<b>" + db.unit_type_name(unit_type) + "</b>"), row, 0) groupLayout.addWidget(QLabel(str(existing_units)), row, 1) row += 1 intelLayout.addWidget(group) intelLayout.addStretch() intel.setLayout(intelLayout) layout.addWidget(intel) layout.addStretch() self.setLayout(layout)
def init_ui(self): main_layout = QVBoxLayout() tasks = [CAP, CAS, AWACS] scroll_content = QWidget() task_box_layout = QGridLayout() row = 0 unit_types: Set[Type[FlyingType]] = set() for task in tasks: units = db.find_unittype(task, self.game_model.game.player_name) if not units: continue for unit in units: if not issubclass(unit, FlyingType): continue if self.cp.is_carrier and unit not in db.CARRIER_CAPABLE: continue if self.cp.is_lha and unit not in db.LHA_CAPABLE: continue if (self.cp.cptype in [ControlPointType.FOB, ControlPointType.FARP] and unit not in helicopter_map.values()): continue unit_types.add(unit) sorted_units = sorted( unit_types, key=lambda u: db.unit_get_expanded_info( self.game_model.game.player_country, u, "name"), ) for unit_type in sorted_units: row = self.add_purchase_row( unit_type, task_box_layout, row, disabled=not self.cp.can_operate(unit_type), ) stretch = QVBoxLayout() stretch.addStretch() task_box_layout.addLayout(stretch, row, 0) scroll_content.setLayout(task_box_layout) scroll = QScrollArea() scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) scroll.setWidgetResizable(True) scroll.setWidget(scroll_content) main_layout.addLayout(self.hangar_status) main_layout.addWidget(scroll) self.setLayout(main_layout)
def player_attacking(self, flights: db.TaskForceDict): assert Embarking in flights and len(flights) == 1, "Invalid flights" op = InfantryTransportOperation(game=self.game, attacker_name=self.attacker_name, defender_name=self.defender_name, from_cp=self.from_cp, departure_cp=self.departure_cp, to_cp=self.to_cp) air_defense = db.find_unittype(AirDefence, self.defender_name)[0] op.setup(transport=flights[Embarking], aa={air_defense: 2}) self.operation = op
def generate_carrier(self, for_units: typing.Collection[UnitType], country: str, at: Point) -> ShipGroup: type = db.find_unittype(Carriage, country)[0] for unit_type in for_units: if unit_type in db.CARRIER_TYPE_BY_PLANE: type = db.CARRIER_TYPE_BY_PLANE[unit_type] break group = self.m.ship_group( country=self.m.country(country), name=namegen.next_carrier_name(self.m.country(country)), _type=type, position=at) group.points[0].tasks.append(ActivateBeaconCommand(unit_id=group.id, channel=20, callsign="SHDW", aa=False)) group.points[0].tasks.append(ActivateICLSCommand(unit_id=group.id, channel=1)) return group
def generate(self, is_awacs_enabled): player_cp = self.conflict.from_cp if self.conflict.from_cp.captured else self.conflict.to_cp fallback_tanker_number = 0 for i, tanker_unit_type in enumerate( db.find_unittype(Refueling, self.conflict.attackers_side)): variant = db.unit_type_name(tanker_unit_type) freq = self.radio_registry.alloc_uhf() tacan = self.tacan_registry.alloc_for_band(TacanBand.Y) tanker_heading = self.conflict.to_cp.position.heading_between_point( self.conflict.from_cp.position) + TANKER_HEADING_OFFSET * i tanker_position = player_cp.position.point_from_heading( tanker_heading, TANKER_DISTANCE) tanker_group = self.mission.refuel_flight( country=self.mission.country(self.game.player_country), name=namegen.next_tanker_name( self.mission.country(self.game.player_country), tanker_unit_type), airport=None, plane_type=tanker_unit_type, position=tanker_position, altitude=TANKER_ALT, race_distance=58000, frequency=freq.mhz, start_type=StartType.Warm, speed=574, tacanchannel=str(tacan), ) tanker_group.set_frequency(freq.mhz) callsign = callsign_for_support_unit(tanker_group) tacan_callsign = { "Texaco": "TEX", "Arco": "ARC", "Shell": "SHL", }.get(callsign) if tacan_callsign is None: # The dict above is all the callsigns currently in the game, but # non-Western countries don't use the callsigns and instead just # use numbers. It's possible that none of those nations have # TACAN compatible refueling aircraft, but fallback just in # case. tacan_callsign = f"TK{fallback_tanker_number}" fallback_tanker_number += 1 if tanker_unit_type != IL_78M: # Override PyDCS tacan channel. tanker_group.points[0].tasks.pop() tanker_group.points[0].tasks.append( ActivateBeaconCommand(tacan.number, tacan.band.value, tacan_callsign, True, tanker_group.units[0].id, True)) tanker_group.points[0].tasks.append(SetInvisibleCommand(True)) tanker_group.points[0].tasks.append(SetImmortalCommand(True)) self.air_support.tankers.append( TankerInfo(str(tanker_group.name), callsign, variant, freq, tacan)) if is_awacs_enabled: try: freq = self.radio_registry.alloc_uhf() awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side)[0] awacs_flight = self.mission.awacs_flight( country=self.mission.country(self.game.player_country), name=namegen.next_awacs_name( self.mission.country(self.game.player_country)), plane_type=awacs_unit, altitude=AWACS_ALT, airport=None, position=self.conflict.position.random_point_within( AWACS_DISTANCE, AWACS_DISTANCE), frequency=freq.mhz, start_type=StartType.Warm, ) awacs_flight.set_frequency(freq.mhz) awacs_flight.points[0].tasks.append(SetInvisibleCommand(True)) awacs_flight.points[0].tasks.append(SetImmortalCommand(True)) self.air_support.awacs.append( AwacsInfo(str(awacs_flight.name), callsign_for_support_unit(awacs_flight), freq)) except: print("No AWACS for faction")
def init_ui(self): faction = self.game.player_name # Sams possible_sams = get_faction_possible_sams_generator(faction) for sam in possible_sams: self.samCombo.addItem(sam.name + " [$" + str(sam.price) + "M]", userData=sam) self.samCombo.currentIndexChanged.connect(self.samComboChanged) self.buySamLayout.addWidget(QLabel("Site Type :"), 0, 0, Qt.AlignLeft) self.buySamLayout.addWidget(self.samCombo, 0, 1, alignment=Qt.AlignRight) self.buySamLayout.addWidget(self.buySamButton, 1, 1, alignment=Qt.AlignRight) stretch = QVBoxLayout() stretch.addStretch() self.buySamLayout.addLayout(stretch, 2, 0) self.buySamButton.clicked.connect(self.buySam) # Armored units armored_units = db.find_unittype( PinpointStrike, faction) # Todo : refactor this legacy nonsense for unit in set(armored_units): self.buyArmorCombo.addItem(db.unit_type_name_2(unit) + " [$" + str(db.PRICES[unit]) + "M]", userData=unit) self.buyArmorCombo.currentIndexChanged.connect(self.armorComboChanged) self.amount.setMinimum(2) self.amount.setMaximum(8) self.amount.setValue(2) self.amount.valueChanged.connect(self.amountComboChanged) self.buyArmorLayout.addWidget(QLabel("Unit type :"), 0, 0, Qt.AlignLeft) self.buyArmorLayout.addWidget(self.buyArmorCombo, 0, 1, alignment=Qt.AlignRight) self.buyArmorLayout.addWidget(QLabel("Group size :"), 1, 0, alignment=Qt.AlignLeft) self.buyArmorLayout.addWidget(self.amount, 1, 1, alignment=Qt.AlignRight) self.buyArmorLayout.addWidget(self.buyArmorButton, 2, 1, alignment=Qt.AlignRight) stretch2 = QVBoxLayout() stretch2.addStretch() self.buyArmorLayout.addLayout(stretch2, 3, 0) self.buyArmorButton.clicked.connect(self.buyArmor) # Do layout self.buySamBox.setLayout(self.buySamLayout) self.buyArmorBox.setLayout(self.buyArmorLayout) self.mainLayout = QHBoxLayout() self.mainLayout.addWidget(self.buySamBox) if self.ground_object.airbase_group: self.mainLayout.addWidget(self.buyArmorBox) self.setLayout(self.mainLayout) try: self.samComboChanged(0) self.armorComboChanged(0) except: pass