diff --git a/gen/sam/aaa_bofors.py b/gen/sam/aaa_bofors.py index 528edd8b..1d7d18c4 100644 --- a/gen/sam/aaa_bofors.py +++ b/gen/sam/aaa_bofors.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class BoforsGenerator(GroupGenerator): +class BoforsGenerator(AirDefenseGroupGenerator): """ This generate a Bofors flak artillery group """ @@ -25,4 +28,8 @@ class BoforsGenerator(GroupGenerator): index = index+1 self.add_unit(AirDefence.AAA_Bofors_40mm, "AAA#" + str(index), self.position.x + spacing*i, - self.position.y + spacing*j, self.heading) \ No newline at end of file + self.position.y + spacing*j, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/aaa_flak.py b/gen/sam/aaa_flak.py index 5a0d9121..352e5431 100644 --- a/gen/sam/aaa_flak.py +++ b/gen/sam/aaa_flak.py @@ -2,11 +2,22 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -GFLAK = [AirDefence.AAA_Flak_Vierling_38, AirDefence.AAA_8_8cm_Flak_18, AirDefence.AAA_8_8cm_Flak_36, AirDefence.AAA_8_8cm_Flak_37, AirDefence.AAA_8_8cm_Flak_41, AirDefence.AAA_Flak_38] +GFLAK = [ + AirDefence.AAA_Flak_Vierling_38, + AirDefence.AAA_8_8cm_Flak_18, + AirDefence.AAA_8_8cm_Flak_36, + AirDefence.AAA_8_8cm_Flak_37, + AirDefence.AAA_8_8cm_Flak_41, + AirDefence.AAA_Flak_38, +] -class FlakGenerator(GroupGenerator): + +class FlakGenerator(AirDefenseGroupGenerator): """ This generate a German flak artillery group """ @@ -53,4 +64,8 @@ class FlakGenerator(GroupGenerator): for j in range(int(max(1,grid_x/2))): self.add_unit(Unarmed.Blitz_3_6_6700A, "AAA#" + str(index), self.position.x + 200 + 15*i + random.randint(1,5), - self.position.y + 15*j + random.randint(1,5), 90) \ No newline at end of file + self.position.y + 15*j + random.randint(1,5), 90) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/aaa_flak18.py b/gen/sam/aaa_flak18.py index fea85f70..0716f05a 100644 --- a/gen/sam/aaa_flak18.py +++ b/gen/sam/aaa_flak18.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class Flak18Generator(GroupGenerator): +class Flak18Generator(AirDefenseGroupGenerator): """ This generate a German flak artillery group using only free units, thus not requiring the WW2 asset pack """ @@ -27,3 +30,7 @@ class Flak18Generator(GroupGenerator): # Add a commander truck self.add_unit(Unarmed.Blitz_3_6_6700A, "Blitz#", self.position.x - 35, self.position.y - 20, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/aaa_ww2_ally_flak.py b/gen/sam/aaa_ww2_ally_flak.py index 7c449dba..b6a89192 100644 --- a/gen/sam/aaa_ww2_ally_flak.py +++ b/gen/sam/aaa_ww2_ally_flak.py @@ -1,11 +1,14 @@ import random -from dcs.vehicles import AirDefence, Unarmed, Armor +from dcs.vehicles import AirDefence, Armor, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class AllyWW2FlakGenerator(GroupGenerator): +class AllyWW2FlakGenerator(AirDefenseGroupGenerator): """ This generate an ally flak artillery group """ @@ -32,3 +35,7 @@ class AllyWW2FlakGenerator(GroupGenerator): self.add_unit(Armor.M30_Cargo_Carrier, "LOG#1", self.position.x, self.position.y + 20, random.randint(0, 360)) self.add_unit(Armor.M4_Tractor, "LOG#2", self.position.x + 20, self.position.y, random.randint(0, 360)) self.add_unit(Unarmed.Bedford_MWD, "LOG#3", self.position.x - 20, self.position.y, random.randint(0, 360)) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/aaa_zu23_insurgent.py b/gen/sam/aaa_zu23_insurgent.py index ec659756..85d65290 100644 --- a/gen/sam/aaa_zu23_insurgent.py +++ b/gen/sam/aaa_zu23_insurgent.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ZU23InsurgentGenerator(GroupGenerator): +class ZU23InsurgentGenerator(AirDefenseGroupGenerator): """ This generate a ZU23 insurgent flak artillery group """ @@ -25,4 +28,8 @@ class ZU23InsurgentGenerator(GroupGenerator): index = index+1 self.add_unit(AirDefence.AAA_ZU_23_Insurgent_Closed, "AAA#" + str(index), self.position.x + spacing*i, - self.position.y + spacing*j, self.heading) \ No newline at end of file + self.position.y + spacing*j, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/genericsam_group_generator.py b/gen/sam/airdefensegroupgenerator.py similarity index 55% rename from gen/sam/genericsam_group_generator.py rename to gen/sam/airdefensegroupgenerator.py index d7c2cdf1..f58efdf4 100644 --- a/gen/sam/genericsam_group_generator.py +++ b/gen/sam/airdefensegroupgenerator.py @@ -1,11 +1,18 @@ -from abc import ABC +from abc import ABC, abstractmethod +from enum import Enum from game import Game from gen.sam.group_generator import GroupGenerator from game.theater.theatergroundobject import SamGroundObject -class GenericSamGroupGenerator(GroupGenerator, ABC): +class AirDefenseRange(Enum): + Short = "short" + Medium = "medium" + Long = "long" + + +class AirDefenseGroupGenerator(GroupGenerator, ABC): """ This is the base for all SAM group generators """ @@ -13,3 +20,8 @@ class GenericSamGroupGenerator(GroupGenerator, ABC): def __init__(self, game: Game, ground_object: SamGroundObject) -> None: ground_object.skynet_capable = True super().__init__(game, ground_object) + + @classmethod + @abstractmethod + def range(cls) -> AirDefenseRange: + ... diff --git a/gen/sam/cold_war_flak.py b/gen/sam/cold_war_flak.py index c0b7e81d..877a45a7 100644 --- a/gen/sam/cold_war_flak.py +++ b/gen/sam/cold_war_flak.py @@ -2,10 +2,14 @@ import random from dcs.vehicles import AirDefence, Unarmed +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) from gen.sam.group_generator import GroupGenerator -class EarlyColdWarFlakGenerator(GroupGenerator): +class EarlyColdWarFlakGenerator(AirDefenseGroupGenerator): """ This generator attempt to mimic an early cold-war era flak AAA site. The Flak 18 88mm is used as the main long range gun and 2 Bofors 40mm guns provide short range protection. @@ -38,8 +42,12 @@ class EarlyColdWarFlakGenerator(GroupGenerator): # Add a truck self.add_unit(Unarmed.Transport_KAMAZ_43101, "Truck#", self.position.x - 60, self.position.y - 20, self.heading) + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short -class ColdWarFlakGenerator(GroupGenerator): + +class ColdWarFlakGenerator(AirDefenseGroupGenerator): """ This generator attempt to mimic a cold-war era flak AAA site. The Flak 18 88mm is used as the main long range gun while 2 Zu-23 guns provide short range protection. @@ -70,3 +78,7 @@ class ColdWarFlakGenerator(GroupGenerator): # Add a P19 Radar for EWR self.add_unit(AirDefence.SAM_SR_P_19, "SR#0", self.position.x - 60, self.position.y - 20, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/freya_ewr.py b/gen/sam/freya_ewr.py index 70571e56..f244482b 100644 --- a/gen/sam/freya_ewr.py +++ b/gen/sam/freya_ewr.py @@ -1,11 +1,12 @@ -import random +from dcs.vehicles import AirDefence, Infantry, Unarmed -from dcs.vehicles import AirDefence, Unarmed, Infantry - -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class FreyaGenerator(GroupGenerator): +class FreyaGenerator(AirDefenseGroupGenerator): """ This generate a German flak artillery group using only free units, thus not requiring the WW2 asset pack """ @@ -36,4 +37,8 @@ class FreyaGenerator(GroupGenerator): self.add_unit(AirDefence.AAA_Kdo_G_40, "Telemeter#1", self.position.x + 20, self.position.y - 10, self.heading) self.add_unit(Infantry.Infantry_Mauser_98, "Inf#1", self.position.x + 20, self.position.y - 14, self.heading) self.add_unit(Infantry.Infantry_Mauser_98, "Inf#2", self.position.x + 20, self.position.y - 22, self.heading) - self.add_unit(Infantry.Infantry_Mauser_98, "Inf#3", self.position.x + 20, self.position.y - 24, self.heading + 45) \ No newline at end of file + self.add_unit(Infantry.Infantry_Mauser_98, "Inf#3", self.position.x + 20, self.position.y - 24, self.heading + 45) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_avenger.py b/gen/sam/sam_avenger.py index 44d3aed9..32d1c228 100644 --- a/gen/sam/sam_avenger.py +++ b/gen/sam/sam_avenger.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class AvengerGenerator(GroupGenerator): +class AvengerGenerator(AirDefenseGroupGenerator): """ This generate an Avenger group """ @@ -20,3 +23,7 @@ class AvengerGenerator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=110, coverage=180) for i, position in enumerate(positions): self.add_unit(AirDefence.SAM_Avenger_M1097, "SPAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_chaparral.py b/gen/sam/sam_chaparral.py index a8d89181..1e768bf4 100644 --- a/gen/sam/sam_chaparral.py +++ b/gen/sam/sam_chaparral.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ChaparralGenerator(GroupGenerator): +class ChaparralGenerator(AirDefenseGroupGenerator): """ This generate a Chaparral group """ @@ -20,3 +23,7 @@ class ChaparralGenerator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=110, coverage=180) for i, position in enumerate(positions): self.add_unit(AirDefence.SAM_Chaparral_M48, "SPAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_gepard.py b/gen/sam/sam_gepard.py index 501ed7b7..7e8ef223 100644 --- a/gen/sam/sam_gepard.py +++ b/gen/sam/sam_gepard.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class GepardGenerator(GroupGenerator): +class GepardGenerator(AirDefenseGroupGenerator): """ This generate a Gepard group """ @@ -19,3 +22,6 @@ class GepardGenerator(GroupGenerator): self.add_unit(AirDefence.SPAAA_Gepard, "SPAAA2", self.position.x, self.position.y, self.heading) self.add_unit(Unarmed.Transport_M818, "TRUCK", self.position.x + 80, self.position.y, self.heading) + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_group_generator.py b/gen/sam/sam_group_generator.py index 42e05a0f..343a462d 100644 --- a/gen/sam/sam_group_generator.py +++ b/gen/sam/sam_group_generator.py @@ -1,5 +1,5 @@ import random -from typing import Iterable, List, Optional, Type +from typing import Dict, Iterable, List, Optional, Type from dcs.unitgroup import VehicleGroup from dcs.vehicles import AirDefence @@ -30,6 +30,7 @@ from gen.sam.ewrs import ( TallRackGenerator, ) from gen.sam.freya_ewr import FreyaGenerator +from gen.sam.airdefensegroupgenerator import AirDefenseGroupGenerator from gen.sam.group_generator import GroupGenerator from gen.sam.sam_avenger import AvengerGenerator from gen.sam.sam_chaparral import ChaparralGenerator @@ -60,7 +61,7 @@ from gen.sam.sam_zu23 import ZU23Generator from gen.sam.sam_zu23_ural import ZU23UralGenerator from gen.sam.sam_zu23_ural_insurgent import ZU23UralInsurgentGenerator -SAM_MAP = { +SAM_MAP: Dict[str, Type[AirDefenseGroupGenerator]] = { "HawkGenerator": HawkGenerator, "ZU23Generator": ZU23Generator, "ZU23UralGenerator": ZU23UralGenerator, diff --git a/gen/sam/sam_hawk.py b/gen/sam/sam_hawk.py index da8c700a..382c4b69 100644 --- a/gen/sam/sam_hawk.py +++ b/gen/sam/sam_hawk.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class HawkGenerator(GenericSamGroupGenerator): +class HawkGenerator(AirDefenseGroupGenerator): """ This generate an HAWK group """ @@ -25,4 +28,8 @@ class HawkGenerator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=180) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_Hawk_LN_M192, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_Hawk_LN_M192, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_hq7.py b/gen/sam/sam_hq7.py index adba14b5..76951e9a 100644 --- a/gen/sam/sam_hq7.py +++ b/gen/sam/sam_hq7.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class HQ7Generator(GenericSamGroupGenerator): +class HQ7Generator(AirDefenseGroupGenerator): """ This generate an HQ7 group """ @@ -25,4 +28,8 @@ class HQ7Generator(GenericSamGroupGenerator): if num_launchers > 0: positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=360) for i, position in enumerate(positions): - self.add_unit(AirDefence.HQ_7_Self_Propelled_LN, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.HQ_7_Self_Propelled_LN, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_linebacker.py b/gen/sam/sam_linebacker.py index 946d14ed..e2dae5a1 100644 --- a/gen/sam/sam_linebacker.py +++ b/gen/sam/sam_linebacker.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class LinebackerGenerator(GroupGenerator): +class LinebackerGenerator(AirDefenseGroupGenerator): """ This generate an m6 linebacker group """ @@ -20,3 +23,7 @@ class LinebackerGenerator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=110, coverage=180) for i, position in enumerate(positions): self.add_unit(AirDefence.SAM_Linebacker_M6, "M6#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_patriot.py b/gen/sam/sam_patriot.py index 490e6f2f..8c0d38fb 100644 --- a/gen/sam/sam_patriot.py +++ b/gen/sam/sam_patriot.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class PatriotGenerator(GenericSamGroupGenerator): +class PatriotGenerator(AirDefenseGroupGenerator): """ This generate a Patriot group """ @@ -30,4 +33,8 @@ class PatriotGenerator(GenericSamGroupGenerator): num_launchers = random.randint(3, 4) positions = self.get_circular_position(num_launchers, launcher_distance=200, coverage=360) for i, position in enumerate(positions): - self.add_unit(AirDefence.AAA_Vulcan_M163, "SPAAA#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.AAA_Vulcan_M163, "SPAAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Long diff --git a/gen/sam/sam_rapier.py b/gen/sam/sam_rapier.py index 981a098e..5b4dbaa9 100644 --- a/gen/sam/sam_rapier.py +++ b/gen/sam/sam_rapier.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class RapierGenerator(GenericSamGroupGenerator): +class RapierGenerator(AirDefenseGroupGenerator): """ This generate a Rapier Group """ @@ -21,4 +24,8 @@ class RapierGenerator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=80, coverage=240) for i, position in enumerate(positions): - self.add_unit(AirDefence.Rapier_FSA_Launcher, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.Rapier_FSA_Launcher, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_roland.py b/gen/sam/sam_roland.py index 1f970517..3c2685c7 100644 --- a/gen/sam/sam_roland.py +++ b/gen/sam/sam_roland.py @@ -1,9 +1,12 @@ from dcs.vehicles import AirDefence, Unarmed -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class RolandGenerator(GenericSamGroupGenerator): +class RolandGenerator(AirDefenseGroupGenerator): """ This generate a Roland group """ @@ -16,3 +19,6 @@ class RolandGenerator(GenericSamGroupGenerator): self.add_unit(AirDefence.SAM_Roland_ADS, "ADS", self.position.x, self.position.y, self.heading) self.add_unit(Unarmed.Transport_M818, "TRUCK", self.position.x + 80, self.position.y, self.heading) + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_sa10.py b/gen/sam/sam_sa10.py index 25feba4c..371bdb5d 100644 --- a/gen/sam/sam_sa10.py +++ b/gen/sam/sam_sa10.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA10Generator(GenericSamGroupGenerator): +class SA10Generator(AirDefenseGroupGenerator): """ This generate a SA-10 group """ @@ -40,6 +43,10 @@ class SA10Generator(GenericSamGroupGenerator): self.generate_defensive_groups() + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Long + def generate_defensive_groups(self) -> None: # AAA for defending against close targets. num_launchers = random.randint(6, 8) diff --git a/gen/sam/sam_sa11.py b/gen/sam/sam_sa11.py index e7634b92..2fd5a08f 100644 --- a/gen/sam/sam_sa11.py +++ b/gen/sam/sam_sa11.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA11Generator(GenericSamGroupGenerator): +class SA11Generator(AirDefenseGroupGenerator): """ This generate a SA-11 group """ @@ -21,4 +24,8 @@ class SA11Generator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=140, coverage=180) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_11_Buk_LN_9A310M1, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_11_Buk_LN_9A310M1, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_sa13.py b/gen/sam/sam_sa13.py index 8fc069ad..ec7b3693 100644 --- a/gen/sam/sam_sa13.py +++ b/gen/sam/sam_sa13.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA13Generator(GroupGenerator): +class SA13Generator(AirDefenseGroupGenerator): """ This generate a SA-13 group """ @@ -20,4 +23,8 @@ class SA13Generator(GroupGenerator): num_launchers = random.randint(2, 3) positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=360) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_13_Strela_10M3_9A35M3, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_13_Strela_10M3_9A35M3, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_sa15.py b/gen/sam/sam_sa15.py index 09fda2ee..30eaabfe 100644 --- a/gen/sam/sam_sa15.py +++ b/gen/sam/sam_sa15.py @@ -1,9 +1,12 @@ from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA15Generator(GroupGenerator): +class SA15Generator(AirDefenseGroupGenerator): """ This generate a SA-15 group """ @@ -14,4 +17,8 @@ class SA15Generator(GroupGenerator): def generate(self): self.add_unit(AirDefence.SAM_SA_15_Tor_9A331, "ADS", self.position.x, self.position.y, self.heading) self.add_unit(Unarmed.Transport_UAZ_469, "EWR", self.position.x + 40, self.position.y, self.heading) - self.add_unit(Unarmed.Transport_KAMAZ_43101, "TRUCK", self.position.x + 80, self.position.y, self.heading) \ No newline at end of file + self.add_unit(Unarmed.Transport_KAMAZ_43101, "TRUCK", self.position.x + 80, self.position.y, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium \ No newline at end of file diff --git a/gen/sam/sam_sa19.py b/gen/sam/sam_sa19.py index c4f710f4..298ae91c 100644 --- a/gen/sam/sam_sa19.py +++ b/gen/sam/sam_sa19.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA19Generator(GroupGenerator): +class SA19Generator(AirDefenseGroupGenerator): """ This generate a SA-19 group """ @@ -22,3 +25,7 @@ class SA19Generator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=180) for i, position in enumerate(positions): self.add_unit(AirDefence.SAM_SA_19_Tunguska_2S6, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_sa2.py b/gen/sam/sam_sa2.py index ff77265f..c95da151 100644 --- a/gen/sam/sam_sa2.py +++ b/gen/sam/sam_sa2.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA2Generator(GenericSamGroupGenerator): +class SA2Generator(AirDefenseGroupGenerator): """ This generate a SA-2 group """ @@ -21,4 +24,8 @@ class SA2Generator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=180) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_2_LN_SM_90, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_2_LN_SM_90, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_sa3.py b/gen/sam/sam_sa3.py index e57f184c..8ab5cad3 100644 --- a/gen/sam/sam_sa3.py +++ b/gen/sam/sam_sa3.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA3Generator(GenericSamGroupGenerator): +class SA3Generator(AirDefenseGroupGenerator): """ This generate a SA-3 group """ @@ -21,4 +24,8 @@ class SA3Generator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=180) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_3_S_125_LN_5P73, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_3_S_125_LN_5P73, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_sa6.py b/gen/sam/sam_sa6.py index 1028ed76..fab5f01b 100644 --- a/gen/sam/sam_sa6.py +++ b/gen/sam/sam_sa6.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.genericsam_group_generator import GenericSamGroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA6Generator(GenericSamGroupGenerator): +class SA6Generator(AirDefenseGroupGenerator): """ This generate a SA-6 group """ @@ -20,4 +23,8 @@ class SA6Generator(GenericSamGroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=360) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_6_Kub_LN_2P25, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_6_Kub_LN_2P25, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_sa8.py b/gen/sam/sam_sa8.py index 1c09dd2e..2dd104ee 100644 --- a/gen/sam/sam_sa8.py +++ b/gen/sam/sam_sa8.py @@ -1,11 +1,12 @@ -import random - from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA8Generator(GroupGenerator): +class SA8Generator(AirDefenseGroupGenerator): """ This generate a SA-8 group """ @@ -16,3 +17,7 @@ class SA8Generator(GroupGenerator): def generate(self): self.add_unit(AirDefence.SAM_SA_8_Osa_9A33, "OSA", self.position.x, self.position.y, self.heading) self.add_unit(AirDefence.SAM_SA_8_Osa_LD_9T217, "LD", self.position.x + 20, self.position.y, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Medium diff --git a/gen/sam/sam_sa9.py b/gen/sam/sam_sa9.py index d0045bea..f1cfaff7 100644 --- a/gen/sam/sam_sa9.py +++ b/gen/sam/sam_sa9.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class SA9Generator(GroupGenerator): +class SA9Generator(AirDefenseGroupGenerator): """ This generate a SA-9 group """ @@ -20,4 +23,8 @@ class SA9Generator(GroupGenerator): num_launchers = random.randint(2, 3) positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=360) for i, position in enumerate(positions): - self.add_unit(AirDefence.SAM_SA_9_Strela_1_9P31, "LN#" + str(i), position[0], position[1], position[2]) \ No newline at end of file + self.add_unit(AirDefence.SAM_SA_9_Strela_1_9P31, "LN#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_vulcan.py b/gen/sam/sam_vulcan.py index 77cfc0a2..5b67d878 100644 --- a/gen/sam/sam_vulcan.py +++ b/gen/sam/sam_vulcan.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence, Unarmed -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class VulcanGenerator(GroupGenerator): +class VulcanGenerator(AirDefenseGroupGenerator): """ This generate a Vulcan group """ @@ -19,3 +22,7 @@ class VulcanGenerator(GroupGenerator): self.add_unit(AirDefence.AAA_Vulcan_M163, "SPAAA2", self.position.x, self.position.y, self.heading) self.add_unit(Unarmed.Transport_M818, "TRUCK", self.position.x + 80, self.position.y, self.heading) + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short + diff --git a/gen/sam/sam_zsu23.py b/gen/sam/sam_zsu23.py index 7c90cb4d..c25a9295 100644 --- a/gen/sam/sam_zsu23.py +++ b/gen/sam/sam_zsu23.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ZSU23Generator(GroupGenerator): +class ZSU23Generator(AirDefenseGroupGenerator): """ This generate a ZSU 23 group """ @@ -19,3 +22,7 @@ class ZSU23Generator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=120, coverage=180) for i, position in enumerate(positions): self.add_unit(AirDefence.SPAAA_ZSU_23_4_Shilka, "SPAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_zu23.py b/gen/sam/sam_zu23.py index 3134c3a7..494c436d 100644 --- a/gen/sam/sam_zu23.py +++ b/gen/sam/sam_zu23.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ZU23Generator(GroupGenerator): +class ZU23Generator(AirDefenseGroupGenerator): """ This generate a ZU23 flak artillery group """ @@ -25,4 +28,8 @@ class ZU23Generator(GroupGenerator): index = index+1 self.add_unit(AirDefence.AAA_ZU_23_Closed, "AAA#" + str(index), self.position.x + spacing*i, - self.position.y + spacing*j, self.heading) \ No newline at end of file + self.position.y + spacing*j, self.heading) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_zu23_ural.py b/gen/sam/sam_zu23_ural.py index 1eb31b22..2f26436b 100644 --- a/gen/sam/sam_zu23_ural.py +++ b/gen/sam/sam_zu23_ural.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ZU23UralGenerator(GroupGenerator): +class ZU23UralGenerator(AirDefenseGroupGenerator): """ This generate a Zu23 Ural group """ @@ -19,3 +22,7 @@ class ZU23UralGenerator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=80, coverage=360) for i, position in enumerate(positions): self.add_unit(AirDefence.AAA_ZU_23_on_Ural_375, "SPAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short diff --git a/gen/sam/sam_zu23_ural_insurgent.py b/gen/sam/sam_zu23_ural_insurgent.py index 4512cfc7..d8c26995 100644 --- a/gen/sam/sam_zu23_ural_insurgent.py +++ b/gen/sam/sam_zu23_ural_insurgent.py @@ -2,10 +2,13 @@ import random from dcs.vehicles import AirDefence -from gen.sam.group_generator import GroupGenerator +from gen.sam.airdefensegroupgenerator import ( + AirDefenseRange, + AirDefenseGroupGenerator, +) -class ZU23UralInsurgentGenerator(GroupGenerator): +class ZU23UralInsurgentGenerator(AirDefenseGroupGenerator): """ This generate a Zu23 Ural group """ @@ -19,3 +22,8 @@ class ZU23UralInsurgentGenerator(GroupGenerator): positions = self.get_circular_position(num_launchers, launcher_distance=80, coverage=360) for i, position in enumerate(positions): self.add_unit(AirDefence.AAA_ZU_23_Insurgent_on_Ural_375, "SPAA#" + str(i), position[0], position[1], position[2]) + + @classmethod + def range(cls) -> AirDefenseRange: + return AirDefenseRange.Short +