Replace doctrine dict with a real type.

This commit is contained in:
Dan Albert 2020-09-27 19:55:40 -07:00
parent aa309af015
commit 8b717c4f4c
2 changed files with 98 additions and 105 deletions

View File

@ -1,95 +1,88 @@
from dataclasses import dataclass
from game.utils import nm_to_meter, feet_to_meter from game.utils import nm_to_meter, feet_to_meter
MODERN_DOCTRINE = {
"GENERATORS": { @dataclass(frozen=True)
"CAS": True, class Doctrine:
"CAP": True, cas: bool
"SEAD": True, cap: bool
"STRIKE": True, sead: bool
"ANTISHIP": True, strike: bool
}, antiship: bool
"STRIKE_MAX_RANGE": 1500000, strike_max_range: int
"SEAD_MAX_RANGE": 1500000, sead_max_range: int
"CAP_EVERY_X_MINUTES": 20, ingress_egress_distance: int
"CAS_EVERY_X_MINUTES": 30, ingress_altitude: int
"SEAD_EVERY_X_MINUTES": 40, egress_altitude: int
"STRIKE_EVERY_X_MINUTES": 40, min_patrol_altitude: int
max_patrol_altitude: int
pattern_altitude: int
"INGRESS_EGRESS_DISTANCE": nm_to_meter(45), cap_min_track_length: int
"INGRESS_ALT": feet_to_meter(20000), cap_max_track_length: int
"EGRESS_ALT": feet_to_meter(20000), cap_min_distance_from_cp: int
"PATROL_ALT_RANGE": (feet_to_meter(15000), feet_to_meter(33000)), cap_max_distance_from_cp: int
"PATTERN_ALTITUDE": feet_to_meter(5000),
"CAP_PATTERN_LENGTH": (nm_to_meter(15), nm_to_meter(40)),
"FRONTLINE_CAP_DISTANCE_FROM_FRONTLINE": (nm_to_meter(6), nm_to_meter(15)),
"CAP_DISTANCE_FROM_CP": (nm_to_meter(10), nm_to_meter(40)),
"MAX_NUMBER_OF_INTERCEPTION_GROUP": 3, MODERN_DOCTRINE = Doctrine(
} cap=True,
cas=True,
sead=True,
strike=True,
antiship=True,
strike_max_range=1500000,
sead_max_range=1500000,
ingress_egress_distance=nm_to_meter(45),
ingress_altitude=feet_to_meter(20000),
egress_altitude=feet_to_meter(20000),
min_patrol_altitude=feet_to_meter(15000),
max_patrol_altitude=feet_to_meter(33000),
pattern_altitude=feet_to_meter(5000),
cap_min_track_length=nm_to_meter(15),
cap_max_track_length=nm_to_meter(40),
cap_min_distance_from_cp=nm_to_meter(10),
cap_max_distance_from_cp=nm_to_meter(40),
)
COLDWAR_DOCTRINE = { COLDWAR_DOCTRINE = Doctrine(
cap=True,
cas=True,
sead=True,
strike=True,
antiship=True,
strike_max_range=1500000,
sead_max_range=1500000,
ingress_egress_distance=nm_to_meter(30),
ingress_altitude=feet_to_meter(18000),
egress_altitude=feet_to_meter(18000),
min_patrol_altitude=feet_to_meter(10000),
max_patrol_altitude=feet_to_meter(24000),
pattern_altitude=feet_to_meter(5000),
cap_min_track_length=nm_to_meter(12),
cap_max_track_length=nm_to_meter(24),
cap_min_distance_from_cp=nm_to_meter(8),
cap_max_distance_from_cp=nm_to_meter(25),
)
"GENERATORS": { WWII_DOCTRINE = Doctrine(
"CAS": True, cap=True,
"CAP": True, cas=True,
"SEAD": True, sead=False,
"STRIKE": True, strike=True,
"ANTISHIP": True, antiship=True,
}, strike_max_range=1500000,
sead_max_range=1500000,
"STRIKE_MAX_RANGE": 1500000, ingress_egress_distance=nm_to_meter(7),
"SEAD_MAX_RANGE": 1500000, ingress_altitude=feet_to_meter(8000),
egress_altitude=feet_to_meter(8000),
"CAP_EVERY_X_MINUTES": 20, min_patrol_altitude=feet_to_meter(4000),
"CAS_EVERY_X_MINUTES": 30, max_patrol_altitude=feet_to_meter(15000),
"SEAD_EVERY_X_MINUTES": 40, pattern_altitude=feet_to_meter(5000),
"STRIKE_EVERY_X_MINUTES": 40, cap_min_track_length=nm_to_meter(8),
cap_max_track_length=nm_to_meter(18),
"INGRESS_EGRESS_DISTANCE": nm_to_meter(30), cap_min_distance_from_cp=nm_to_meter(0),
"INGRESS_ALT": feet_to_meter(18000), cap_max_distance_from_cp=nm_to_meter(5),
"EGRESS_ALT": feet_to_meter(18000), )
"PATROL_ALT_RANGE": (feet_to_meter(10000), feet_to_meter(24000)),
"PATTERN_ALTITUDE": feet_to_meter(5000),
"CAP_PATTERN_LENGTH": (nm_to_meter(12), nm_to_meter(24)),
"FRONTLINE_CAP_DISTANCE_FROM_FRONTLINE": (nm_to_meter(2), nm_to_meter(8)),
"CAP_DISTANCE_FROM_CP": (nm_to_meter(8), nm_to_meter(25)),
"MAX_NUMBER_OF_INTERCEPTION_GROUP": 3,
}
WWII_DOCTRINE = {
"GENERATORS": {
"CAS": True,
"CAP": True,
"SEAD": False,
"STRIKE": True,
"ANTISHIP": True,
},
"STRIKE_MAX_RANGE": 1500000,
"SEAD_MAX_RANGE": 1500000,
"CAP_EVERY_X_MINUTES": 20,
"CAS_EVERY_X_MINUTES": 30,
"SEAD_EVERY_X_MINUTES": 40,
"STRIKE_EVERY_X_MINUTES": 40,
"INGRESS_EGRESS_DISTANCE": nm_to_meter(7),
"INGRESS_ALT": feet_to_meter(8000),
"EGRESS_ALT": feet_to_meter(8000),
"PATROL_ALT_RANGE": (feet_to_meter(4000), feet_to_meter(15000)),
"PATTERN_ALTITUDE": feet_to_meter(5000),
"CAP_PATTERN_LENGTH": (nm_to_meter(8), nm_to_meter(18)),
"FRONTLINE_CAP_DISTANCE_FROM_FRONTLINE": (nm_to_meter(1), nm_to_meter(6)),
"CAP_DISTANCE_FROM_CP": (nm_to_meter(0), nm_to_meter(5)),
"MAX_NUMBER_OF_INTERCEPTION_GROUP": 3,
}

View File

@ -11,7 +11,7 @@ import logging
import random import random
from typing import List, Optional, TYPE_CHECKING from typing import List, Optional, TYPE_CHECKING
from game.data.doctrine import MODERN_DOCTRINE from game.data.doctrine import Doctrine, MODERN_DOCTRINE
from .flight import Flight, FlightType, FlightWaypointType, FlightWaypoint from .flight import Flight, FlightType, FlightWaypointType, FlightWaypoint
from ..conflictgen import Conflict from ..conflictgen import Conflict
from theater import ControlPoint, FrontLine, MissionTarget, TheaterGroundObject from theater import ControlPoint, FrontLine, MissionTarget, TheaterGroundObject
@ -39,7 +39,7 @@ class FlightPlanBuilder:
faction = self.game.player_faction faction = self.game.player_faction
else: else:
faction = self.game.enemy_faction faction = self.game.enemy_faction
self.doctrine = faction.get("doctrine", MODERN_DOCTRINE) self.doctrine: Doctrine = faction.get("doctrine", MODERN_DOCTRINE)
def populate_flight_plan(self, flight: Flight, def populate_flight_plan(self, flight: Flight,
objective_location: MissionTarget) -> None: objective_location: MissionTarget) -> None:
@ -113,13 +113,13 @@ class FlightPlanBuilder:
egress_heading = heading - 180 - 25 egress_heading = heading - 180 - 25
ingress_pos = location.position.point_from_heading( ingress_pos = location.position.point_from_heading(
ingress_heading, self.doctrine["INGRESS_EGRESS_DISTANCE"] ingress_heading, self.doctrine.ingress_egress_distance
) )
ingress_point = FlightWaypoint( ingress_point = FlightWaypoint(
FlightWaypointType.INGRESS_STRIKE, FlightWaypointType.INGRESS_STRIKE,
ingress_pos.x, ingress_pos.x,
ingress_pos.y, ingress_pos.y,
self.doctrine["INGRESS_ALT"] self.doctrine.ingress_altitude
) )
ingress_point.pretty_name = "INGRESS on " + location.name ingress_point.pretty_name = "INGRESS on " + location.name
ingress_point.description = "INGRESS on " + location.name ingress_point.description = "INGRESS on " + location.name
@ -187,13 +187,13 @@ class FlightPlanBuilder:
flight.points.append(point) flight.points.append(point)
egress_pos = location.position.point_from_heading( egress_pos = location.position.point_from_heading(
egress_heading, self.doctrine["INGRESS_EGRESS_DISTANCE"] egress_heading, self.doctrine.ingress_egress_distance
) )
egress_point = FlightWaypoint( egress_point = FlightWaypoint(
FlightWaypointType.EGRESS, FlightWaypointType.EGRESS,
egress_pos.x, egress_pos.x,
egress_pos.y, egress_pos.y,
self.doctrine["EGRESS_ALT"] self.doctrine.egress_altitude
) )
egress_point.name = "EGRESS" egress_point.name = "EGRESS"
egress_point.pretty_name = "EGRESS from " + location.name egress_point.pretty_name = "EGRESS from " + location.name
@ -222,19 +222,19 @@ class FlightPlanBuilder:
flight.flight_type = FlightType.CAP flight.flight_type = FlightType.CAP
patrol_alt = random.randint( patrol_alt = random.randint(
self.doctrine["PATROL_ALT_RANGE"][0], self.doctrine.min_patrol_altitude,
self.doctrine["PATROL_ALT_RANGE"][1] self.doctrine.max_patrol_altitude
) )
loc = location.position.point_from_heading( loc = location.position.point_from_heading(
random.randint(0, 360), random.randint(0, 360),
random.randint(self.doctrine["CAP_DISTANCE_FROM_CP"][0], random.randint(self.doctrine.cap_min_distance_from_cp,
self.doctrine["CAP_DISTANCE_FROM_CP"][1]) self.doctrine.cap_max_distance_from_cp)
) )
hdg = location.position.heading_between_point(loc) hdg = location.position.heading_between_point(loc)
radius = random.randint( radius = random.randint(
self.doctrine["CAP_PATTERN_LENGTH"][0], self.doctrine.cap_min_track_length,
self.doctrine["CAP_PATTERN_LENGTH"][1] self.doctrine.cap_max_track_length
) )
orbit0p = loc.point_from_heading(hdg - 90, radius) orbit0p = loc.point_from_heading(hdg - 90, radius)
orbit1p = loc.point_from_heading(hdg + 90, radius) orbit1p = loc.point_from_heading(hdg + 90, radius)
@ -286,8 +286,8 @@ class FlightPlanBuilder:
ally_cp, enemy_cp = location.control_points ally_cp, enemy_cp = location.control_points
flight.flight_type = FlightType.CAP flight.flight_type = FlightType.CAP
patrol_alt = random.randint(self.doctrine["PATROL_ALT_RANGE"][0], patrol_alt = random.randint(self.doctrine.min_patrol_altitude,
self.doctrine["PATROL_ALT_RANGE"][1]) self.doctrine.max_patrol_altitude)
# Find targets waypoints # Find targets waypoints
ingress, heading, distance = Conflict.frontline_vector( ingress, heading, distance = Conflict.frontline_vector(
@ -372,13 +372,13 @@ class FlightPlanBuilder:
egress_heading = heading - 180 - 25 egress_heading = heading - 180 - 25
ingress_pos = location.position.point_from_heading( ingress_pos = location.position.point_from_heading(
ingress_heading, self.doctrine["INGRESS_EGRESS_DISTANCE"] ingress_heading, self.doctrine.ingress_egress_distance
) )
ingress_point = FlightWaypoint( ingress_point = FlightWaypoint(
FlightWaypointType.INGRESS_SEAD, FlightWaypointType.INGRESS_SEAD,
ingress_pos.x, ingress_pos.x,
ingress_pos.y, ingress_pos.y,
self.doctrine["INGRESS_ALT"] self.doctrine.ingress_altitude
) )
ingress_point.name = "INGRESS" ingress_point.name = "INGRESS"
ingress_point.pretty_name = "INGRESS on " + location.name ingress_point.pretty_name = "INGRESS on " + location.name
@ -426,13 +426,13 @@ class FlightPlanBuilder:
flight.points.append(point) flight.points.append(point)
egress_pos = location.position.point_from_heading( egress_pos = location.position.point_from_heading(
egress_heading, self.doctrine["INGRESS_EGRESS_DISTANCE"] egress_heading, self.doctrine.ingress_egress_distance
) )
egress_point = FlightWaypoint( egress_point = FlightWaypoint(
FlightWaypointType.EGRESS, FlightWaypointType.EGRESS,
egress_pos.x, egress_pos.x,
egress_pos.y, egress_pos.y,
self.doctrine["EGRESS_ALT"] self.doctrine.egress_altitude
) )
egress_point.name = "EGRESS" egress_point.name = "EGRESS"
egress_point.pretty_name = "EGRESS from " + location.name egress_point.pretty_name = "EGRESS from " + location.name
@ -531,7 +531,7 @@ class FlightPlanBuilder:
FlightWaypointType.ASCEND_POINT, FlightWaypointType.ASCEND_POINT,
pos_ascend.x, pos_ascend.x,
pos_ascend.y, pos_ascend.y,
self.doctrine["PATTERN_ALTITUDE"] self.doctrine.pattern_altitude
) )
ascend.name = "ASCEND" ascend.name = "ASCEND"
ascend.alt_type = "RADIO" ascend.alt_type = "RADIO"
@ -553,7 +553,7 @@ class FlightPlanBuilder:
FlightWaypointType.DESCENT_POINT, FlightWaypointType.DESCENT_POINT,
descend.x, descend.x,
descend.y, descend.y,
self.doctrine["PATTERN_ALTITUDE"] self.doctrine.pattern_altitude
) )
descend.name = "DESCEND" descend.name = "DESCEND"
descend.alt_type = "RADIO" descend.alt_type = "RADIO"