calculate heading to center of conflict for sams

This commit is contained in:
RndName 2021-07-20 11:44:27 +02:00 committed by Dan Albert
parent 1094085872
commit dd50ee92a9
3 changed files with 25 additions and 0 deletions

View File

@ -27,6 +27,7 @@ Saves from 4.0.0 are compatible with 4.1.0.
* **[Campaign]** Air defense sites now generate a fixed number of launchers per type. * **[Campaign]** Air defense sites now generate a fixed number of launchers per type.
* **[Campaign]** Added support for Mariana Islands map. * **[Campaign]** Added support for Mariana Islands map.
* **[Mission Generation]** Improvements for better support of the Skynet Plugin and long range SAMs are now acting as EWR * **[Mission Generation]** Improvements for better support of the Skynet Plugin and long range SAMs are now acting as EWR
* **[Mission Generation]** SAM sites are now headed towards the center of the conflict
* **[Plugins]** Increased time JTAC Autolase messages stay visible on the UI. * **[Plugins]** Increased time JTAC Autolase messages stay visible on the UI.
* **[UI]** Added ability to take notes and have those notes appear as a kneeboard page. * **[UI]** Added ability to take notes and have those notes appear as a kneeboard page.
* **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet). * **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet).

View File

@ -48,6 +48,7 @@ class AirDefenseGroupGenerator(VehicleGroupGenerator[SamGroundObject], ABC):
self.vg.name = self.group_name_for_role(self.vg.id, self.primary_group_role()) self.vg.name = self.group_name_for_role(self.vg.id, self.primary_group_role())
self.auxiliary_groups: List[VehicleGroup] = [] self.auxiliary_groups: List[VehicleGroup] = []
self.heading = self.heading_to_conflict()
def add_auxiliary_group(self, role: SkynetRole) -> VehicleGroup: def add_auxiliary_group(self, role: SkynetRole) -> VehicleGroup:
gid = self.game.next_group_id() gid = self.game.next_group_id()

View File

@ -2,6 +2,7 @@ from __future__ import annotations
import logging import logging
import math import math
import operator
import random import random
from collections import Iterable from collections import Iterable
from typing import TYPE_CHECKING, Type, TypeVar, Generic, Any from typing import TYPE_CHECKING, Type, TypeVar, Generic, Any
@ -15,6 +16,7 @@ from dcs.unittype import VehicleType, UnitType, ShipType
from game.dcs.groundunittype import GroundUnitType from game.dcs.groundunittype import GroundUnitType
from game.factions.faction import Faction from game.factions.faction import Faction
from game.theater import MissionTarget
from game.theater.theatergroundobject import TheaterGroundObject, NavalGroundObject from game.theater.theatergroundobject import TheaterGroundObject, NavalGroundObject
from game.utils import Heading from game.utils import Heading
@ -70,6 +72,27 @@ class GroupGenerator(Generic[GroupT, UnitT, UnitTypeT, TgoT]):
) -> UnitT: ) -> UnitT:
raise NotImplementedError raise NotImplementedError
def heading_to_conflict(self) -> int:
# Heading for a Group to the enemy.
# Should be the point between the nearest and the most distant conflict
conflicts: dict[MissionTarget, float] = {}
for conflict in self.game.theater.conflicts():
conflicts[conflict] = conflict.distance_to(self.go)
if len(conflicts) == 0:
return self.heading
closest_conflict = min(conflicts.items(), key=operator.itemgetter(1))[0]
most_distant_conflict = max(conflicts.items(), key=operator.itemgetter(1))[0]
conflict_center = Point(
(closest_conflict.position.x + most_distant_conflict.position.x) / 2,
(closest_conflict.position.y + most_distant_conflict.position.y) / 2,
)
return int(self.go.position.heading_between_point(conflict_center))
class VehicleGroupGenerator( class VehicleGroupGenerator(
Generic[TgoT], GroupGenerator[VehicleGroup, Vehicle, Type[VehicleType], TgoT] Generic[TgoT], GroupGenerator[VehicleGroup, Vehicle, Type[VehicleType], TgoT]