Prepare the generators for template migration

adopt armor and ship generators for randomization
This commit is contained in:
RndName 2022-01-15 23:26:46 +01:00
parent 9e6b1cf716
commit 6baf36c587
66 changed files with 600 additions and 798 deletions

View File

@ -1,40 +0,0 @@
import logging
import random
from typing import Optional
from dcs.unitgroup import VehicleGroup
from game import Game
from game.factions import FACTIONS
from game.theater.theatergroundobject import CoastalSiteGroundObject
from gen.coastal.silkworm import SilkwormGenerator
COASTAL_MAP = {
"SilkwormGenerator": SilkwormGenerator,
}
def generate_coastal_group(
game: Game, ground_object: CoastalSiteGroundObject, faction_name: str
) -> Optional[VehicleGroup]:
"""
This generate a coastal defenses group
:return: The generated group, or None if this faction does not support coastal
defenses.
"""
faction = FACTIONS[faction_name]
if len(faction.coastal_defenses) > 0:
generators = faction.coastal_defenses
if len(generators) > 0:
gen = random.choice(generators)
if gen in COASTAL_MAP.keys():
generator = COASTAL_MAP[gen](game, ground_object, faction)
generator.generate()
return generator.get_generated_group()
else:
logging.info(
"Unable to generate missile group, generator : "
+ str(gen)
+ "does not exists"
)
return None

View File

@ -1,124 +0,0 @@
import random
from gen.sam.group_generator import ShipGroupGenerator
from game.utils import Heading
from dcs.ships import USS_Arleigh_Burke_IIa, TICONDEROG
class CarrierGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
# Carrier Strike Group 8
if self.faction.carrier_names[0] == "Carrier Strike Group 8":
carrier_type = random.choice(self.faction.aircraft_carrier)
self.add_unit(
carrier_type,
"CVN-75 Harry S. Truman",
self.position.x,
self.position.y,
self.heading,
)
# Add Arleigh Burke escort
self.add_unit(
USS_Arleigh_Burke_IIa,
"USS Ramage",
self.position.x + 6482,
self.position.y + 6667,
self.heading,
)
self.add_unit(
USS_Arleigh_Burke_IIa,
"USS Mitscher",
self.position.x - 7963,
self.position.y + 7037,
self.heading,
)
self.add_unit(
USS_Arleigh_Burke_IIa,
"USS Forrest Sherman",
self.position.x - 7408,
self.position.y - 7408,
self.heading,
)
self.add_unit(
USS_Arleigh_Burke_IIa,
"USS Lassen",
self.position.x + 8704,
self.position.y - 6296,
self.heading,
)
# Add Ticonderoga escort
if self.heading >= Heading.from_degrees(180):
self.add_unit(
TICONDEROG,
"USS Hué City",
self.position.x + 2222,
self.position.y - 3333,
self.heading,
)
else:
self.add_unit(
TICONDEROG,
"USS Hué City",
self.position.x - 3333,
self.position.y + 2222,
self.heading,
)
self.get_generated_group().points[0].speed = 20
##################################################################################################
# Add carrier for normal generation
else:
if len(self.faction.aircraft_carrier) > 0:
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
if len(self.faction.destroyers) > 0:
dd_type = random.choice(self.faction.destroyers)
self.add_unit(
dd_type,
"DD1",
self.position.x + 2500,
self.position.y + 4500,
self.heading,
)
self.add_unit(
dd_type,
"DD2",
self.position.x + 2500,
self.position.y - 4500,
self.heading,
)
self.add_unit(
dd_type,
"DD3",
self.position.x + 4500,
self.position.y + 8500,
self.heading,
)
self.add_unit(
dd_type,
"DD4",
self.position.x + 4500,
self.position.y - 8500,
self.heading,
)
self.get_generated_group().points[0].speed = 20

View File

@ -1,70 +0,0 @@
from __future__ import annotations
import random
from typing import TYPE_CHECKING
from dcs.ships import (
Type_052C,
Type_052B,
Type_054A,
)
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.fleet.dd_group import DDGroupGenerator
from gen.sam.group_generator import ShipGroupGenerator
if TYPE_CHECKING:
from game.game import Game
class ChineseNavyGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
include_frigate = random.choice([True, True, False])
include_dd = random.choice([True, False])
if not any([include_frigate, include_dd]):
include_frigate = True
if include_frigate:
self.add_unit(
Type_054A,
"FF1",
self.position.x + 1200,
self.position.y + 900,
self.heading,
)
self.add_unit(
Type_054A,
"FF2",
self.position.x + 1200,
self.position.y - 900,
self.heading,
)
if include_dd:
dd_type = random.choice([Type_052C, Type_052B])
self.add_unit(
dd_type,
"DD1",
self.position.x + 2400,
self.position.y + 900,
self.heading,
)
self.add_unit(
dd_type,
"DD2",
self.position.x + 2400,
self.position.y - 900,
self.heading,
)
self.get_generated_group().points[0].speed = 20
class Type54GroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(Type54GroupGenerator, self).__init__(
game, ground_object, faction, Type_054A
)

View File

@ -1,34 +0,0 @@
import random
from gen.sam.group_generator import ShipGroupGenerator
class LHAGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
# Add carrier
if len(self.faction.helicopter_carrier) > 0:
carrier_type = random.choice(self.faction.helicopter_carrier)
self.add_unit(
carrier_type, "LHA", self.position.x, self.position.y, self.heading
)
# Add destroyers escort
if len(self.faction.destroyers) > 0:
dd_type = random.choice(self.faction.destroyers)
self.add_unit(
dd_type,
"DD1",
self.position.x + 1250,
self.position.y + 1450,
self.heading,
)
self.add_unit(
dd_type,
"DD2",
self.position.x + 1250,
self.position.y - 1450,
self.heading,
)
self.get_generated_group().points[0].speed = 20

View File

@ -1,108 +0,0 @@
from __future__ import annotations
import random
from typing import TYPE_CHECKING
from dcs.ships import (
ALBATROS,
MOLNIYA,
NEUSTRASH,
REZKY,
MOSCOW,
KILO,
SOM,
)
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.fleet.dd_group import DDGroupGenerator
from gen.sam.group_generator import ShipGroupGenerator
if TYPE_CHECKING:
from game.game import Game
class RussianNavyGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
include_frigate = random.choice([True, True, False])
include_dd = random.choice([True, False])
if include_dd:
include_cc = random.choice([True, False])
else:
include_cc = False
if not any([include_frigate, include_dd, include_cc]):
include_frigate = True
if include_frigate:
frigate_type = random.choice([ALBATROS, MOLNIYA])
self.add_unit(
frigate_type,
"FF1",
self.position.x + 1200,
self.position.y + 900,
self.heading,
)
self.add_unit(
frigate_type,
"FF2",
self.position.x + 1200,
self.position.y - 900,
self.heading,
)
if include_dd:
dd_type = random.choice([NEUSTRASH, REZKY])
self.add_unit(
dd_type,
"DD1",
self.position.x + 2400,
self.position.y + 900,
self.heading,
)
self.add_unit(
dd_type,
"DD2",
self.position.x + 2400,
self.position.y - 900,
self.heading,
)
if include_cc:
# Only include the Moskva for now, the Pyotry Velikiy is an unkillable monster.
# See https://github.com/dcs-liberation/dcs_liberation/issues/567
self.add_unit(
MOSCOW,
"CC1",
self.position.x,
self.position.y,
self.heading,
)
self.get_generated_group().points[0].speed = 20
class GrishaGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(GrishaGroupGenerator, self).__init__(
game, ground_object, faction, ALBATROS
)
class MolniyaGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(MolniyaGroupGenerator, self).__init__(
game, ground_object, faction, MOLNIYA
)
class KiloSubGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(KiloSubGroupGenerator, self).__init__(game, ground_object, faction, KILO)
class TangoSubGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(TangoSubGroupGenerator, self).__init__(game, ground_object, faction, SOM)

View File

@ -1,106 +0,0 @@
from __future__ import annotations
import logging
import random
from typing import Optional, TYPE_CHECKING
from dcs.unitgroup import ShipGroup
from game.factions import FACTIONS
from game.theater.theatergroundobject import (
CarrierGroundObject,
LhaGroundObject,
ShipGroundObject,
)
from gen.fleet.carrier_group import CarrierGroupGenerator
from gen.fleet.cn_dd_group import ChineseNavyGroupGenerator, Type54GroupGenerator
from gen.fleet.dd_group import (
ArleighBurkeGroupGenerator,
OliverHazardPerryGroupGenerator,
)
from gen.fleet.lacombattanteII import LaCombattanteIIGroupGenerator
from gen.fleet.lha_group import LHAGroupGenerator
from gen.fleet.ru_dd_group import (
GrishaGroupGenerator,
KiloSubGroupGenerator,
MolniyaGroupGenerator,
RussianNavyGroupGenerator,
TangoSubGroupGenerator,
)
from gen.fleet.schnellboot import SchnellbootGroupGenerator
from gen.fleet.uboat import UBoatGroupGenerator
from gen.fleet.ww2lst import WW2LSTGroupGenerator
if TYPE_CHECKING:
from game import Game
SHIP_MAP = {
"SchnellbootGroupGenerator": SchnellbootGroupGenerator,
"WW2LSTGroupGenerator": WW2LSTGroupGenerator,
"UBoatGroupGenerator": UBoatGroupGenerator,
"OliverHazardPerryGroupGenerator": OliverHazardPerryGroupGenerator,
"ArleighBurkeGroupGenerator": ArleighBurkeGroupGenerator,
"RussianNavyGroupGenerator": RussianNavyGroupGenerator,
"ChineseNavyGroupGenerator": ChineseNavyGroupGenerator,
"GrishaGroupGenerator": GrishaGroupGenerator,
"MolniyaGroupGenerator": MolniyaGroupGenerator,
"KiloSubGroupGenerator": KiloSubGroupGenerator,
"TangoSubGroupGenerator": TangoSubGroupGenerator,
"Type54GroupGenerator": Type54GroupGenerator,
"LaCombattanteIIGroupGenerator": LaCombattanteIIGroupGenerator,
}
def generate_ship_group(
game: Game, ground_object: ShipGroundObject, faction_name: str
) -> Optional[ShipGroup]:
"""
This generate a ship group
:return: The generated group, or None if this faction does not support ships.
"""
faction = FACTIONS[faction_name]
if len(faction.navy_generators) > 0:
gen = random.choice(faction.navy_generators)
if gen in SHIP_MAP.keys():
generator = SHIP_MAP[gen](game, ground_object, faction)
print(generator.position)
generator.generate()
return generator.get_generated_group()
else:
logging.info(
"Unable to generate ship group, generator : "
+ str(gen)
+ "does not exists"
)
return None
def generate_carrier_group(
faction: str, game: Game, ground_object: CarrierGroundObject
) -> ShipGroup:
"""Generates a carrier group.
:param faction: The faction the TGO belongs to.
:param game: The Game the group is being generated for.
:param ground_object: The ground object which will own the ship group
:return: The generated group.
"""
generator = CarrierGroupGenerator(game, ground_object, FACTIONS[faction])
generator.generate()
return generator.get_generated_group()
def generate_lha_group(
faction: str, game: Game, ground_object: LhaGroundObject
) -> ShipGroup:
"""Generate an LHA group.
:param faction: The faction the TGO belongs to.
:param game: The Game the group is being generated for.
:param ground_object: The ground object which will own the ship group
:return: The generated group.
"""
generator = LHAGroupGenerator(game, ground_object, FACTIONS[faction])
generator.generate()
return generator.get_generated_group()

View File

@ -4,7 +4,7 @@ import logging
import math
import operator
from collections.abc import Iterable
from typing import Any, Generic, TYPE_CHECKING, Type, TypeVar
from typing import Any, Generic, TYPE_CHECKING, Type, TypeVar, Iterator
from dcs import unitgroup
from dcs.mapping import Point
@ -26,7 +26,7 @@ if TYPE_CHECKING:
GroupT = TypeVar("GroupT", VehicleGroup, ShipGroup)
UnitT = TypeVar("UnitT", bound=Unit)
UnitTypeT = TypeVar("UnitTypeT", bound=Type[UnitType])
TgoT = TypeVar("TgoT", bound=TheaterGroundObject[Any])
TgoT = TypeVar("TgoT", bound=TheaterGroundObject)
# TODO: Generate a group description rather than a pydcs group.
@ -42,6 +42,7 @@ class GroupGenerator(Generic[GroupT, UnitT, UnitTypeT, TgoT]):
self.heading: Heading = Heading.random()
self.price = 0
self.vg: GroupT = group
self.auxiliary_groups: list[GroupT] = []
def generate(self) -> None:
raise NotImplementedError
@ -49,6 +50,11 @@ class GroupGenerator(Generic[GroupT, UnitT, UnitTypeT, TgoT]):
def get_generated_group(self) -> GroupT:
return self.vg
@property
def groups(self) -> Iterator[GroupT]:
yield self.vg
yield from self.auxiliary_groups
def add_unit(
self,
unit_type: UnitTypeT,
@ -107,6 +113,12 @@ class VehicleGroupGenerator(
wp = self.vg.add_waypoint(self.position, PointAction.OffRoad, 0)
wp.ETA_locked = True
def add_vehicle_group(self) -> VehicleGroup:
gid = self.game.next_group_id()
group = VehicleGroup(gid, f"{self.go.group_name} #{len(self.auxiliary_groups)}")
self.auxiliary_groups.append(group)
return group
def generate(self) -> None:
raise NotImplementedError
@ -187,6 +199,12 @@ class ShipGroupGenerator(
wp = self.vg.add_waypoint(self.position, 0)
wp.ETA_locked = True
def add_auxiliary_group(self) -> ShipGroup:
gid = self.game.next_group_id()
group = ShipGroup(gid, f"{self.go.group_name} #{len(self.auxiliary_groups)}")
self.auxiliary_groups.append(group)
return group
def generate(self) -> None:
raise NotImplementedError

View File

@ -1,38 +0,0 @@
import logging
import random
from typing import Optional
from dcs.unitgroup import VehicleGroup
from game import Game
from game.factions import FACTIONS
from game.theater.theatergroundobject import MissileSiteGroundObject
from gen.missiles.scud_site import ScudGenerator
from gen.missiles.v1_group import V1GroupGenerator
MISSILES_MAP = {"V1GroupGenerator": V1GroupGenerator, "ScudGenerator": ScudGenerator}
def generate_missile_group(
game: Game, ground_object: MissileSiteGroundObject, faction_name: str
) -> Optional[VehicleGroup]:
"""
This generate a missiles group
:return: Nothing, but put the group reference inside the ground object
"""
faction = FACTIONS[faction_name]
if len(faction.missiles) > 0:
generators = faction.missiles
if len(generators) > 0:
gen = random.choice(generators)
if gen in MISSILES_MAP.keys():
generator = MISSILES_MAP[gen](game, ground_object, faction)
generator.generate()
return generator.get_generated_group()
else:
logging.info(
"Unable to generate missile group, generator : "
+ str(gen)
+ "does not exists"
)
return None

View File

@ -1,65 +0,0 @@
import random
from typing import List, Optional, Type
from dcs.unitgroup import VehicleGroup
from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import EwrGroundObject
from gen.sam.ewrs import (
BigBirdGenerator,
BoxSpringGenerator,
DogEarGenerator,
FlatFaceGenerator,
HawkEwrGenerator,
PatriotEwrGenerator,
RolandEwrGenerator,
SnowDriftGenerator,
StraightFlushGenerator,
TallRackGenerator,
EwrGenerator,
TinShieldGenerator,
)
EWR_MAP = {
"BoxSpringGenerator": BoxSpringGenerator,
"TallRackGenerator": TallRackGenerator,
"DogEarGenerator": DogEarGenerator,
"RolandEwrGenerator": RolandEwrGenerator,
"FlatFaceGenerator": FlatFaceGenerator,
"PatriotEwrGenerator": PatriotEwrGenerator,
"BigBirdGenerator": BigBirdGenerator,
"SnowDriftGenerator": SnowDriftGenerator,
"StraightFlushGenerator": StraightFlushGenerator,
"HawkEwrGenerator": HawkEwrGenerator,
"TinShieldGenerator": TinShieldGenerator,
}
def get_faction_possible_ewrs_generator(
faction: Faction,
) -> List[Type[EwrGenerator]]:
"""
Return the list of possible EWR generators for the given faction
:param faction: Faction name to search units for
"""
return [EWR_MAP[s] for s in faction.ewrs]
def generate_ewr_group(
game: Game, ground_object: EwrGroundObject, faction: Faction
) -> Optional[VehicleGroup]:
"""Generates an early warning radar group.
:param game: The Game.
:param ground_object: The ground object which will own the EWR group.
:param faction: Owner faction.
:return: The generated group, or None if one could not be generated.
"""
generators = get_faction_possible_ewrs_generator(faction)
if len(generators) > 0:
generator_class = random.choice(generators)
generator = generator_class(game, ground_object)
generator.generate()
return generator.get_generated_group()
return None

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
from game.utils import Heading

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,7 +1,7 @@
import random
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
from pydcs_extensions.highdigitsams import highdigitsams

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from dcs.vehicles import AirDefence, Armor, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
from game.utils import Heading

View File

@ -1,7 +1,7 @@
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,41 +1,17 @@
from __future__ import annotations
from abc import ABC, abstractmethod
from enum import Enum
from typing import Iterator, List
from dcs.unitgroup import VehicleGroup
from game import Game
from game.theater.theatergroundobject import SamGroundObject
from gen.sam.group_generator import VehicleGroupGenerator
class SkynetRole(Enum):
#: A radar SAM that should be controlled by Skynet.
Sam = "Sam"
#: A radar SAM that should be controlled and used as an EWR by Skynet.
SamAsEwr = "SamAsEwr"
#: An air defense unit that should be used as point defense by Skynet.
PointDefense = "PD"
#: All other types of groups that might be present in a SAM TGO. This includes
#: SHORADS, AAA, supply trucks, etc. Anything that shouldn't be controlled by Skynet
#: should use this role.
NoSkynetBehavior = "NoSkynetBehavior"
class AirDefenseRange(Enum):
AAA = ("AAA", SkynetRole.NoSkynetBehavior)
Short = ("short", SkynetRole.NoSkynetBehavior)
Medium = ("medium", SkynetRole.Sam)
Long = ("long", SkynetRole.SamAsEwr)
def __init__(self, description: str, default_role: SkynetRole) -> None:
self.range_name = description
self.default_role = default_role
from game.theater.theatergroundobject import (
SamGroundObject,
SkynetRole,
AirDefenseRange,
)
from gen.group_generator import VehicleGroupGenerator
class AirDefenseGroupGenerator(VehicleGroupGenerator[SamGroundObject], ABC):
@ -48,7 +24,6 @@ class AirDefenseGroupGenerator(VehicleGroupGenerator[SamGroundObject], ABC):
self.vg.name = self.group_name_for_role(self.vg.id, self.primary_group_role())
self.auxiliary_groups: List[VehicleGroup] = []
self.heading = self.heading_to_conflict()
def add_auxiliary_group(self, role: SkynetRole) -> VehicleGroup:
gid = self.game.next_group_id()
@ -67,9 +42,7 @@ class AirDefenseGroupGenerator(VehicleGroupGenerator[SamGroundObject], ABC):
# that the PD will know which group it's protecting. We then append the role so
# our config knows what to do with the group, and finally the GID of *this*
# group to ensure no conflicts.
return "|".join(
[self.go.faction_color, "SAM", str(self.go.group_id), role.value, str(gid)]
)
return "|".join([self.go.faction_color, "SAM", role.value, str(gid)])
def get_generated_group(self) -> VehicleGroup:
raise RuntimeError(

View File

@ -4,11 +4,11 @@ from typing import Optional
from dcs.unitgroup import VehicleGroup
from game import Game
from game.data.groundunitclass import GroundUnitClass
from game.data.units import UnitClass
from game.dcs.groundunittype import GroundUnitType
from game.factions import FACTIONS
from game.theater.theatergroundobject import VehicleGroupGroundObject
from gen.defenses.armored_group_generator import (
from gen.to_remove.armored_group_generator import (
ArmoredGroupGenerator,
FixedSizeArmorGroupGenerator,
)
@ -22,10 +22,10 @@ def generate_armor_group(
:return: Generated group
"""
armor_types = (
GroundUnitClass.Apc,
GroundUnitClass.Atgm,
GroundUnitClass.Ifv,
GroundUnitClass.Tank,
UnitClass.Apc,
UnitClass.Atgm,
UnitClass.Ifv,
UnitClass.Tank,
)
possible_unit = [
u for u in FACTIONS[faction].frontline_units if u.unit_class in armor_types

View File

@ -1,9 +1,13 @@
import random
import dcs.vehicles
from dcs import Point
from game import Game
from game.dcs.groundunittype import GroundUnitType
from game.theater.theatergroundobject import VehicleGroupGroundObject
from gen.sam.group_generator import VehicleGroupGenerator
from game.utils import Heading
from gen.group_generator import VehicleGroupGenerator
class ArmoredGroupGenerator(VehicleGroupGenerator[VehicleGroupGroundObject]):
@ -15,6 +19,7 @@ class ArmoredGroupGenerator(VehicleGroupGenerator[VehicleGroupGroundObject]):
) -> None:
super().__init__(game, ground_object)
self.unit_type = unit_type
self.heading = Heading.from_degrees(0)
def generate(self) -> None:
grid_x = random.randint(2, 3)
@ -46,9 +51,10 @@ class FixedSizeArmorGroupGenerator(VehicleGroupGenerator[VehicleGroupGroundObjec
super().__init__(game, ground_object)
self.unit_type = unit_type
self.size = size
self.spacing = random.randint(20, 70)
self.heading = Heading.from_degrees(0)
def generate(self) -> None:
spacing = random.randint(20, 70)
index = 0
for i in range(self.size):
@ -56,7 +62,23 @@ class FixedSizeArmorGroupGenerator(VehicleGroupGenerator[VehicleGroupGroundObjec
self.add_unit(
self.unit_type.dcs_unit_type,
"Armor#" + str(index),
self.position.x + spacing * i,
self.position.x + self.spacing * i,
self.position.y,
self.heading,
)
class FixedSizeArmorGroupGeneratorWithAA(FixedSizeArmorGroupGenerator):
def generate(self) -> None:
super(FixedSizeArmorGroupGeneratorWithAA, self).generate()
aux_group = self.add_vehicle_group()
index = 0
for i in [1, 2]:
index = index + 1
self.add_unit_to_group(
aux_group,
dcs.vehicles.AirDefence.M6_Linebacker,
"Anti Air#" + str(index),
Point(self.position.x - self.spacing * i, self.position.y),
self.heading,
)

View File

@ -0,0 +1,124 @@
import random
import dcs.ships
from dcs import Point
from gen.group_generator import ShipGroupGenerator
from game.utils import Heading
from dcs.ships import USS_Arleigh_Burke_IIa, TICONDEROG
class CarrierGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
self.add_unit(
dcs.ships.Stennis,
"Carrier",
self.position.x,
self.position.y,
self.heading,
)
aux_group = self.add_auxiliary_group()
# Add destroyers escort
dd_type = dcs.ships.USS_Arleigh_Burke_IIa
self.add_unit_to_group(
aux_group,
dd_type,
"DD1",
Point(self.position.x + 2500, self.position.y + 4500),
self.heading,
)
self.add_unit_to_group(
aux_group,
dd_type,
"DD2",
Point(self.position.x + 2500, self.position.y - 4500),
self.heading,
)
self.add_unit_to_group(
aux_group,
dd_type,
"DD3",
Point(self.position.x + 4500, self.position.y + 8500),
self.heading,
)
self.add_unit_to_group(
aux_group,
dd_type,
"DD4",
Point(self.position.x + 4500, self.position.y - 8500),
self.heading,
)
self.get_generated_group().points[0].speed = 20
class CarrierStrikeGroup8Generator(ShipGroupGenerator):
def generate(self) -> None:
# Carrier Strike Group 8
carrier_type = dcs.ships.Stennis
self.add_unit(
carrier_type,
"CVN-75 Harry S. Truman",
self.position.x,
self.position.y,
self.heading,
)
aux_group = self.add_auxiliary_group()
# Add Arleigh Burke escort
self.add_unit_to_group(
aux_group,
USS_Arleigh_Burke_IIa,
"USS Ramage",
Point(self.position.x + 6482, self.position.y + 6667),
self.heading,
)
self.add_unit_to_group(
aux_group,
USS_Arleigh_Burke_IIa,
"USS Mitscher",
Point(self.position.x - 7963, self.position.y + 7037),
self.heading,
)
self.add_unit_to_group(
aux_group,
USS_Arleigh_Burke_IIa,
"USS Forrest Sherman",
Point(self.position.x - 7408, self.position.y - 7408),
self.heading,
)
self.add_unit_to_group(
aux_group,
USS_Arleigh_Burke_IIa,
"USS Lassen",
Point(self.position.x + 8704, self.position.y - 6296),
self.heading,
)
# Add Ticonderoga escort
if self.heading >= Heading.from_degrees(180):
self.add_unit_to_group(
aux_group,
TICONDEROG,
"USS Hué City",
Point(self.position.x + 2222, self.position.y - 3333),
self.heading,
)
else:
self.add_unit_to_group(
aux_group,
TICONDEROG,
"USS Hué City",
Point(self.position.x - 3333, self.position.y + 2222),
self.heading,
)
self.get_generated_group().points[0].speed = 20

View File

@ -0,0 +1,59 @@
from __future__ import annotations
import random
from typing import TYPE_CHECKING
from dcs.ships import (
Type_052C,
Type_052B,
Type_054A,
)
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.to_remove.dd_group import DDGroupGenerator
from gen.group_generator import ShipGroupGenerator
if TYPE_CHECKING:
from game.game import Game
class ChineseNavyGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
self.add_unit(
Type_054A,
"FF1",
self.position.x + 1200,
self.position.y + 900,
self.heading,
)
self.add_unit(
Type_054A,
"FF2",
self.position.x + 1200,
self.position.y - 900,
self.heading,
)
self.add_unit(
Type_052C,
"DD1",
self.position.x + 2400,
self.position.y + 900,
self.heading,
)
self.add_unit(
Type_052C,
"DD2",
self.position.x + 2400,
self.position.y - 900,
self.heading,
)
self.get_generated_group().points[0].speed = 20
class Type54GroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(Type54GroupGenerator, self).__init__(
game, ground_object, faction, Type_054A
)

View File

@ -0,0 +1,13 @@
import logging
import random
from typing import Optional
from dcs.unitgroup import VehicleGroup
from game import db, Game
from game.theater.theatergroundobject import CoastalSiteGroundObject
from gen.to_remove.silkworm import SilkwormGenerator
COASTAL_MAP = {
"SilkwormGenerator": SilkwormGenerator,
}

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -7,7 +7,7 @@ from dcs.unittype import ShipType
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.sam.group_generator import ShipGroupGenerator
from gen.group_generator import ShipGroupGenerator
if TYPE_CHECKING:
from game.game import Game

View File

@ -0,0 +1,27 @@
from gen.to_remove.ewrs import (
BigBirdGenerator,
BoxSpringGenerator,
DogEarGenerator,
FlatFaceGenerator,
HawkEwrGenerator,
PatriotEwrGenerator,
RolandEwrGenerator,
SnowDriftGenerator,
StraightFlushGenerator,
TallRackGenerator,
TinShieldGenerator,
)
EWR_MAP = {
"BoxSpringGenerator": BoxSpringGenerator,
"TallRackGenerator": TallRackGenerator,
"DogEarGenerator": DogEarGenerator,
"RolandEwrGenerator": RolandEwrGenerator,
"FlatFaceGenerator": FlatFaceGenerator,
"PatriotEwrGenerator": PatriotEwrGenerator,
"BigBirdGenerator": BigBirdGenerator,
"SnowDriftGenerator": SnowDriftGenerator,
"StraightFlushGenerator": StraightFlushGenerator,
"HawkEwrGenerator": HawkEwrGenerator,
"TinShieldGenerator": TinShieldGenerator,
}

View File

@ -4,11 +4,11 @@ from dcs.unittype import VehicleType
from dcs.vehicles import AirDefence
from game.theater.theatergroundobject import EwrGroundObject
from gen.sam.group_generator import VehicleGroupGenerator
from gen.group_generator import VehicleGroupGenerator
class EwrGenerator(VehicleGroupGenerator[EwrGroundObject]):
unit_type: Type[VehicleType]
unit_type: Type[VehicleType] = AirDefence.P_19_s_125_sr
@classmethod
def name(cls) -> str:
@ -20,7 +20,7 @@ class EwrGenerator(VehicleGroupGenerator[EwrGroundObject]):
"EWR",
self.position.x,
self.position.y,
self.heading_to_conflict(),
self.heading,
)

View File

@ -1,7 +1,7 @@
from dcs.vehicles import AirDefence, Infantry, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
from game.utils import Heading

View File

@ -3,7 +3,7 @@ from dcs.ships import La_Combattante_II
from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.fleet.dd_group import DDGroupGenerator
from gen.to_remove.dd_group import DDGroupGenerator
class LaCombattanteIIGroupGenerator(DDGroupGenerator):

View File

@ -0,0 +1,39 @@
import random
import dcs.ships
from dcs import Point
from gen.group_generator import ShipGroupGenerator
class LHAGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
# Add carrier
self.add_unit(
dcs.ships.LHA_Tarawa,
"LHA",
self.position.x,
self.position.y,
self.heading,
)
# Add destroyers escort
aux_group = self.add_auxiliary_group()
dd_type = dcs.ships.USS_Arleigh_Burke_IIa
self.add_unit_to_group(
aux_group,
dd_type,
"DD1",
Point(self.position.x + 1250, self.position.y + 1450),
self.heading,
)
self.add_unit_to_group(
aux_group,
dd_type,
"DD2",
Point(self.position.x + 1250, self.position.y - 1450),
self.heading,
)
self.get_generated_group().points[0].speed = 20

View File

@ -0,0 +1,12 @@
import logging
import random
from typing import Optional
from dcs.unitgroup import VehicleGroup
from game import db, Game
from game.theater.theatergroundobject import MissileSiteGroundObject
from gen.to_remove.scud_site import ScudGenerator
from gen.to_remove.v1_group import V1GroupGenerator
MISSILES_MAP = {"V1GroupGenerator": V1GroupGenerator, "ScudGenerator": ScudGenerator}

View File

@ -0,0 +1,92 @@
from __future__ import annotations
import random
from typing import TYPE_CHECKING
from dcs.ships import (
ALBATROS,
MOLNIYA,
NEUSTRASH,
REZKY,
MOSCOW,
KILO,
SOM,
)
from game.factions.faction import Faction
from game.theater.theatergroundobject import ShipGroundObject
from gen.to_remove.dd_group import DDGroupGenerator
from gen.group_generator import ShipGroupGenerator
if TYPE_CHECKING:
from game.game import Game
class RussianNavyGroupGenerator(ShipGroupGenerator):
def generate(self) -> None:
self.add_unit(
ALBATROS,
"FF1",
self.position.x + 1200,
self.position.y + 900,
self.heading,
)
self.add_unit(
ALBATROS,
"FF2",
self.position.x + 1200,
self.position.y - 900,
self.heading,
)
self.add_unit(
NEUSTRASH,
"DD1",
self.position.x + 2400,
self.position.y + 900,
self.heading,
)
self.add_unit(
NEUSTRASH,
"DD2",
self.position.x + 2400,
self.position.y - 900,
self.heading,
)
# Only include the Moskva for now, the Pyotry Velikiy is an unkillable monster.
# See https://github.com/dcs-liberation/dcs_liberation/issues/567
self.add_unit(
MOSCOW,
"CC1",
self.position.x,
self.position.y,
self.heading,
)
self.get_generated_group().points[0].speed = 20
class GrishaGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(GrishaGroupGenerator, self).__init__(
game, ground_object, faction, ALBATROS
)
class MolniyaGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(MolniyaGroupGenerator, self).__init__(
game, ground_object, faction, MOLNIYA
)
class KiloSubGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(KiloSubGroupGenerator, self).__init__(game, ground_object, faction, KILO)
class TangoSubGroupGenerator(DDGroupGenerator):
def __init__(self, game: Game, ground_object: ShipGroundObject, faction: Faction):
super(TangoSubGroupGenerator, self).__init__(game, ground_object, faction, SOM)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -5,34 +5,33 @@ from dcs.unitgroup import VehicleGroup
from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import SamGroundObject
from gen.sam.aaa_bofors import BoforsGenerator
from gen.sam.aaa_flak import FlakGenerator
from gen.sam.aaa_flak18 import Flak18Generator
from gen.sam.aaa_ks19 import KS19Generator
from gen.sam.aaa_ww2_ally_flak import AllyWW2FlakGenerator
from gen.sam.aaa_zsu57 import ZSU57Generator
from gen.sam.aaa_zu23_insurgent import ZU23InsurgentGenerator
from gen.sam.airdefensegroupgenerator import (
from game.theater.theatergroundobject import SamGroundObject, AirDefenseRange
from gen.to_remove.aaa_bofors import BoforsGenerator
from gen.to_remove.aaa_flak import FlakGenerator
from gen.to_remove.aaa_flak18 import Flak18Generator
from gen.to_remove.aaa_ks19 import KS19Generator
from gen.to_remove.aaa_ww2_ally_flak import AllyWW2FlakGenerator
from gen.to_remove.aaa_zsu57 import ZSU57Generator
from gen.to_remove.aaa_zu23_insurgent import ZU23InsurgentGenerator
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
AirDefenseRange,
)
from gen.sam.cold_war_flak import (
from gen.to_remove.cold_war_flak import (
ColdWarFlakGenerator,
EarlyColdWarFlakGenerator,
)
from gen.sam.freya_ewr import FreyaGenerator
from gen.sam.sam_avenger import AvengerGenerator
from gen.sam.sam_chaparral import ChaparralGenerator
from gen.sam.sam_gepard import GepardGenerator
from gen.sam.sam_hawk import HawkGenerator
from gen.sam.sam_hq7 import HQ7Generator
from gen.sam.sam_linebacker import LinebackerGenerator
from gen.sam.sam_nasams import NasamBGenerator, NasamCGenerator
from gen.sam.sam_patriot import PatriotGenerator
from gen.sam.sam_rapier import RapierGenerator
from gen.sam.sam_roland import RolandGenerator
from gen.sam.sam_sa10 import (
from gen.to_remove.freya_ewr import FreyaGenerator
from gen.to_remove.sam_avenger import AvengerGenerator
from gen.to_remove.sam_chaparral import ChaparralGenerator
from gen.to_remove.sam_gepard import GepardGenerator
from gen.to_remove.sam_hawk import HawkGenerator
from gen.to_remove.sam_hq7 import HQ7Generator
from gen.to_remove.sam_linebacker import LinebackerGenerator
from gen.to_remove.sam_nasams import NasamBGenerator, NasamCGenerator
from gen.to_remove.sam_patriot import PatriotGenerator
from gen.to_remove.sam_rapier import RapierGenerator
from gen.to_remove.sam_roland import RolandGenerator
from gen.to_remove.sam_sa10 import (
SA10Generator,
Tier2SA10Generator,
Tier3SA10Generator,
@ -42,22 +41,22 @@ from gen.sam.sam_sa10 import (
SA20BGenerator,
SA23Generator,
)
from gen.sam.sam_sa11 import SA11Generator
from gen.sam.sam_sa13 import SA13Generator
from gen.sam.sam_sa15 import SA15Generator
from gen.sam.sam_sa17 import SA17Generator
from gen.sam.sam_sa19 import SA19Generator
from gen.sam.sam_sa2 import SA2Generator
from gen.sam.sam_sa3 import SA3Generator
from gen.sam.sam_sa5 import SA5Generator, SA5FlatFaceGenerator
from gen.sam.sam_sa6 import SA6Generator
from gen.sam.sam_sa8 import SA8Generator
from gen.sam.sam_sa9 import SA9Generator
from gen.sam.sam_vulcan import VulcanGenerator
from gen.sam.sam_zsu23 import ZSU23Generator
from gen.sam.sam_zu23 import ZU23Generator
from gen.sam.sam_zu23_ural import ZU23UralGenerator
from gen.sam.sam_zu23_ural_insurgent import ZU23UralInsurgentGenerator
from gen.to_remove.sam_sa11 import SA11Generator
from gen.to_remove.sam_sa13 import SA13Generator
from gen.to_remove.sam_sa15 import SA15Generator
from gen.to_remove.sam_sa17 import SA17Generator
from gen.to_remove.sam_sa19 import SA19Generator
from gen.to_remove.sam_sa2 import SA2Generator
from gen.to_remove.sam_sa3 import SA3Generator
from gen.to_remove.sam_sa5 import SA5Generator, SA5FlatFaceGenerator
from gen.to_remove.sam_sa6 import SA6Generator
from gen.to_remove.sam_sa8 import SA8Generator
from gen.to_remove.sam_sa9 import SA9Generator
from gen.to_remove.sam_vulcan import VulcanGenerator
from gen.to_remove.sam_zsu23 import ZSU23Generator
from gen.to_remove.sam_zu23 import ZU23Generator
from gen.to_remove.sam_zu23_ural import ZU23UralGenerator
from gen.to_remove.sam_zu23_ural_insurgent import ZU23UralInsurgentGenerator
SAM_MAP: Dict[str, Type[AirDefenseGroupGenerator]] = {
"HawkGenerator": HawkGenerator,

View File

@ -1,12 +1,9 @@
import random
from dcs.mapping import Point
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange, SkynetRole
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)

View File

@ -1,12 +1,9 @@
import random
from dcs.mapping import Point
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange, SkynetRole
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,13 +1,12 @@
from typing import Type
from dcs.mapping import Point
from dcs.unittype import VehicleType
from dcs.vehicles import AirDefence
from game import Game
from game.theater import SamGroundObject
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,10 +1,9 @@
from dcs.mapping import Point
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import SkynetRole, AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)

View File

@ -1,11 +1,8 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import SkynetRole, AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)

View File

@ -1,9 +1,8 @@
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import SkynetRole, AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)

View File

@ -6,10 +6,9 @@ from dcs.vehicles import AirDefence
from game import Game
from game.theater import SamGroundObject
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import SkynetRole, AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
SkynetRole,
)
from pydcs_extensions.highdigitsams import highdigitsams

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,7 +1,7 @@
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,7 +1,7 @@
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
from pydcs_extensions.highdigitsams import highdigitsams

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -5,8 +5,8 @@ from dcs.vehicles import AirDefence, Unarmed
from game import Game
from game.theater import SamGroundObject
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)
@ -70,6 +70,8 @@ class SA5FlatFaceGenerator(SA5Generator):
This generate a SA-5 group using the P-19 FlatFace SR
"""
name = "SA-5/S-200 Site wit FlatFace SR"
def __init__(self, game: Game, ground_object: SamGroundObject):
super().__init__(game, ground_object)
self.sr: Type[VehicleType] = AirDefence.P_19_s_125_sr

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,7 +1,7 @@
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -2,8 +2,8 @@ import random
from dcs.vehicles import AirDefence, Unarmed
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -1,9 +1,7 @@
import random
from dcs.vehicles import AirDefence
from gen.sam.airdefensegroupgenerator import (
AirDefenseRange,
from game.theater.theatergroundobject import AirDefenseRange
from gen.to_remove.airdefensegroupgenerator import (
AirDefenseGroupGenerator,
)

View File

@ -2,7 +2,7 @@ import random
from dcs.ships import Schnellboot_type_S130
from gen.sam.group_generator import ShipGroupGenerator
from gen.group_generator import ShipGroupGenerator
class SchnellbootGroupGenerator(ShipGroupGenerator):

View File

@ -6,7 +6,7 @@ from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import MissileSiteGroundObject
from game.utils import Heading
from gen.sam.group_generator import VehicleGroupGenerator
from gen.group_generator import VehicleGroupGenerator
class ScudGenerator(VehicleGroupGenerator[MissileSiteGroundObject]):

View File

@ -0,0 +1,52 @@
from __future__ import annotations
import logging
import random
from typing import TYPE_CHECKING, Optional
from dcs.unitgroup import ShipGroup
from game import db
from game.theater.theatergroundobject import (
LhaGroundObject,
CarrierGroundObject,
ShipGroundObject,
)
from gen.to_remove.carrier_group import CarrierGroupGenerator
from gen.to_remove.cn_dd_group import ChineseNavyGroupGenerator, Type54GroupGenerator
from gen.to_remove.dd_group import (
ArleighBurkeGroupGenerator,
OliverHazardPerryGroupGenerator,
)
from gen.to_remove.lacombattanteII import LaCombattanteIIGroupGenerator
from gen.to_remove.lha_group import LHAGroupGenerator
from gen.to_remove.ru_dd_group import (
RussianNavyGroupGenerator,
GrishaGroupGenerator,
MolniyaGroupGenerator,
KiloSubGroupGenerator,
TangoSubGroupGenerator,
)
from gen.to_remove.schnellboot import SchnellbootGroupGenerator
from gen.to_remove.uboat import UBoatGroupGenerator
from gen.to_remove.ww2lst import WW2LSTGroupGenerator
if TYPE_CHECKING:
from game import Game
SHIP_MAP = {
"SchnellbootGroupGenerator": SchnellbootGroupGenerator,
"WW2LSTGroupGenerator": WW2LSTGroupGenerator,
"UBoatGroupGenerator": UBoatGroupGenerator,
"OliverHazardPerryGroupGenerator": OliverHazardPerryGroupGenerator,
"ArleighBurkeGroupGenerator": ArleighBurkeGroupGenerator,
"RussianNavyGroupGenerator": RussianNavyGroupGenerator,
"ChineseNavyGroupGenerator": ChineseNavyGroupGenerator,
"GrishaGroupGenerator": GrishaGroupGenerator,
"MolniyaGroupGenerator": MolniyaGroupGenerator,
"KiloSubGroupGenerator": KiloSubGroupGenerator,
"TangoSubGroupGenerator": TangoSubGroupGenerator,
"Type54GroupGenerator": Type54GroupGenerator,
"LaCombattanteIIGroupGenerator": LaCombattanteIIGroupGenerator,
}

View File

@ -4,7 +4,7 @@ from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import CoastalSiteGroundObject
from game.utils import Heading
from gen.sam.group_generator import VehicleGroupGenerator
from gen.group_generator import VehicleGroupGenerator
class SilkwormGenerator(VehicleGroupGenerator[CoastalSiteGroundObject]):

View File

@ -2,7 +2,7 @@ import random
from dcs.ships import Uboat_VIIC
from gen.sam.group_generator import ShipGroupGenerator
from gen.group_generator import ShipGroupGenerator
class UBoatGroupGenerator(ShipGroupGenerator):

View File

@ -6,7 +6,7 @@ from game import Game
from game.factions.faction import Faction
from game.theater.theatergroundobject import MissileSiteGroundObject
from game.utils import Heading
from gen.sam.group_generator import VehicleGroupGenerator
from gen.group_generator import VehicleGroupGenerator
class V1GroupGenerator(VehicleGroupGenerator[MissileSiteGroundObject]):

View File

@ -2,7 +2,7 @@ import random
from dcs.ships import USS_Samuel_Chase, LST_Mk2
from gen.sam.group_generator import ShipGroupGenerator
from gen.group_generator import ShipGroupGenerator
class WW2LSTGroupGenerator(ShipGroupGenerator):