mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Changed garrison terminology to battle position. (#2352)
This commit is contained in:
52
game/commander/battlepositions.py
Normal file
52
game/commander/battlepositions.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Iterator
|
||||
from dataclasses import dataclass
|
||||
|
||||
from game.theater import ControlPoint
|
||||
from game.theater.theatergroundobject import VehicleGroupGroundObject
|
||||
from game.utils import meters
|
||||
|
||||
|
||||
@dataclass
|
||||
class BattlePositions:
|
||||
blocking_capture: list[VehicleGroupGroundObject]
|
||||
defending_front_line: list[VehicleGroupGroundObject]
|
||||
|
||||
@property
|
||||
def in_priority_order(self) -> Iterator[VehicleGroupGroundObject]:
|
||||
yield from self.blocking_capture
|
||||
yield from self.defending_front_line
|
||||
|
||||
def eliminate(self, battle_position: VehicleGroupGroundObject) -> None:
|
||||
if battle_position in self.blocking_capture:
|
||||
self.blocking_capture.remove(battle_position)
|
||||
if battle_position in self.defending_front_line:
|
||||
self.defending_front_line.remove(battle_position)
|
||||
|
||||
def __contains__(self, item: VehicleGroupGroundObject) -> bool:
|
||||
return item in self.in_priority_order
|
||||
|
||||
@classmethod
|
||||
def for_control_point(cls, control_point: ControlPoint) -> BattlePositions:
|
||||
"""Categorize battle position groups based on target priority.
|
||||
|
||||
Any battle positions blocking base capture are the highest priority.
|
||||
"""
|
||||
blocking = []
|
||||
defending = []
|
||||
battle_positions = [
|
||||
tgo
|
||||
for tgo in control_point.ground_objects
|
||||
if isinstance(tgo, VehicleGroupGroundObject) and not tgo.is_dead
|
||||
]
|
||||
for battle_position in battle_positions:
|
||||
if (
|
||||
meters(battle_position.distance_to(control_point))
|
||||
< ControlPoint.CAPTURE_DISTANCE
|
||||
):
|
||||
blocking.append(battle_position)
|
||||
else:
|
||||
defending.append(battle_position)
|
||||
|
||||
return BattlePositions(blocking, defending)
|
||||
Reference in New Issue
Block a user