diff --git a/game/db.py b/game/db.py index ce0fee4e..23595deb 100644 --- a/game/db.py +++ b/game/db.py @@ -1,16 +1,10 @@ from datetime import datetime from enum import Enum -from typing import Optional, Type +from typing import Type from dcs.countries import country_dict -from dcs.helicopters import ( - helicopter_map, -) # mypy can't resolve these if they're wildcard imports for some reason. -from dcs.planes import ( - plane_map, -) from dcs.ships import ( CVN_71, CVN_72, @@ -19,12 +13,8 @@ from dcs.ships import ( CV_1143_5, KUZNECOW, Stennis, - ship_map, -) -from dcs.unittype import ShipType, UnitType -from dcs.vehicles import ( - vehicle_map, ) +from dcs.unittype import ShipType # PATCH pydcs data with MODS @@ -141,19 +131,6 @@ def upgrade_to_supercarrier(unit: Type[ShipType], name: str) -> Type[ShipType]: return unit -def unit_type_from_name(name: str) -> Optional[Type[UnitType]]: - if name in vehicle_map: - return vehicle_map[name] - elif name in plane_map: - return plane_map[name] - elif name in ship_map: - return ship_map[name] - if name in helicopter_map: - return helicopter_map[name] - else: - return None - - def country_id_from_name(name: str) -> int: for k, v in country_dict.items(): if v.name == name: diff --git a/game/dcs/__init__.py b/game/dcs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/game/dcs/helpers.py b/game/dcs/helpers.py new file mode 100644 index 00000000..e2b7ef72 --- /dev/null +++ b/game/dcs/helpers.py @@ -0,0 +1,20 @@ +from typing import Optional, Type + +from dcs.helicopters import helicopter_map +from dcs.planes import plane_map +from dcs.ships import ship_map +from dcs.unittype import UnitType +from dcs.vehicles import vehicle_map + + +def unit_type_from_name(name: str) -> Optional[Type[UnitType]]: + if name in vehicle_map: + return vehicle_map[name] + elif name in plane_map: + return plane_map[name] + elif name in ship_map: + return ship_map[name] + if name in helicopter_map: + return helicopter_map[name] + else: + return None diff --git a/game/missiongenerator/kneeboard.py b/game/missiongenerator/kneeboard.py index 59164542..41afc403 100644 --- a/game/missiongenerator/kneeboard.py +++ b/game/missiongenerator/kneeboard.py @@ -39,7 +39,6 @@ from game.ato.flighttype import FlightType from game.ato.flightwaypoint import FlightWaypoint from game.ato.flightwaypointtype import FlightWaypointType from game.data.alic import AlicCodes -from game.db import unit_type_from_name from game.dcs.aircrafttype import AircraftType from game.radio.radios import RadioFrequency from game.theater import ConflictTheater, LatLon, TheaterGroundObject @@ -50,6 +49,7 @@ from gen.runways import RunwayData from .aircraft.flightdata import FlightData from .airsupportgenerator import AwacsInfo, TankerInfo from .briefinggenerator import CommInfo, JtacInfo, MissionInfoGenerator +from ..dcs.helpers import unit_type_from_name if TYPE_CHECKING: from game import Game diff --git a/game/missiongenerator/missiongenerator.py b/game/missiongenerator/missiongenerator.py index 5c284bb5..8836f1e9 100644 --- a/game/missiongenerator/missiongenerator.py +++ b/game/missiongenerator/missiongenerator.py @@ -11,6 +11,7 @@ from dcs.coalition import Coalition from dcs.countries import country_dict from game import db +from game.dcs.helpers import unit_type_from_name from game.missiongenerator.aircraft.aircraftgenerator import ( AircraftGenerator, ) @@ -283,7 +284,7 @@ class MissionGenerator: raise TypeError( "Expected the type of the destroyed static to be a string" ) - utype = db.unit_type_from_name(type_name) + utype = unit_type_from_name(type_name) except KeyError: logging.warning(f"Destroyed unit has no type: {d}") continue diff --git a/game/missiongenerator/tgogenerator.py b/game/missiongenerator/tgogenerator.py index a1076815..7d05c614 100644 --- a/game/missiongenerator/tgogenerator.py +++ b/game/missiongenerator/tgogenerator.py @@ -46,7 +46,7 @@ from dcs.vehicles import vehicle_map from game import db from game.data.building_data import FORTIFICATION_UNITS, FORTIFICATION_UNITS_ID -from game.db import unit_type_from_name +from game.dcs.helpers import unit_type_from_name from game.radio.radios import RadioFrequency, RadioRegistry from game.radio.tacan import TacanBand, TacanChannel, TacanRegistry, TacanUsage from game.theater import ControlPoint, TheaterGroundObject diff --git a/game/theater/controlpoint.py b/game/theater/controlpoint.py index f7aa5a01..a0c57d53 100644 --- a/game/theater/controlpoint.py +++ b/game/theater/controlpoint.py @@ -29,7 +29,7 @@ from dcs.terrain.terrain import Airport, ParkingSlot from dcs.unit import Unit from dcs.unitgroup import ShipGroup, StaticGroup -from game import db +from game.dcs.helpers import unit_type_from_name from game.point_with_heading import PointWithHeading from game.scenery_group import SceneryGroup from game.utils import Heading @@ -520,7 +520,7 @@ class ControlPoint(MissionTarget, ABC): if g.dcs_identifier == "CARRIER": for group in g.groups: for u in group.units: - if db.unit_type_from_name(u.type) in [ + if unit_type_from_name(u.type) in [ Forrestal, Stennis, KUZNECOW, @@ -529,7 +529,7 @@ class ControlPoint(MissionTarget, ABC): elif g.dcs_identifier == "LHA": for group in g.groups: for u in group.units: - if db.unit_type_from_name(u.type) in [LHA_Tarawa]: + if unit_type_from_name(u.type) in [LHA_Tarawa]: return group.name return None @@ -1012,7 +1012,7 @@ class NavalControlPoint(ControlPoint, ABC): # while its escorts are still alive. for group in self.find_main_tgo().groups: for u in group.units: - if db.unit_type_from_name(u.type) in [ + if unit_type_from_name(u.type) in [ Forrestal, Stennis, LHA_Tarawa, diff --git a/game/theater/theatergroundobject.py b/game/theater/theatergroundobject.py index b246a9c3..2be1c41d 100644 --- a/game/theater/theatergroundobject.py +++ b/game/theater/theatergroundobject.py @@ -12,7 +12,7 @@ from dcs.unit import Unit from dcs.unitgroup import ShipGroup, VehicleGroup from dcs.vehicles import vehicle_map -from .. import db +from game.dcs.helpers import unit_type_from_name from ..data.radar_db import LAUNCHER_TRACKER_PAIRS, TELARS, TRACK_RADARS from ..utils import Distance, Heading, meters @@ -155,7 +155,7 @@ class TheaterGroundObject(MissionTarget, Generic[GroupT]): max_range = meters(0) for u in group.units: - unit = db.unit_type_from_name(u.type) + unit = unit_type_from_name(u.type) if unit is None: logging.error(f"Unknown unit type {u.type}") continue