Partial implementation of TGO display.

No threat/detection circles yet.

https://github.com/dcs-liberation/dcs_liberation/issues/2039
This commit is contained in:
Dan Albert
2022-03-02 00:57:58 -08:00
parent 1cd77a4a77
commit 64b01c471b
13 changed files with 216 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ from . import (
flights,
mapzones,
navmesh,
tgos,
waypoints,
)
from .security import ApiKeyManager
@@ -24,6 +25,7 @@ app.include_router(eventstream.router)
app.include_router(flights.router)
app.include_router(mapzones.router)
app.include_router(navmesh.router)
app.include_router(tgos.router)
app.include_router(waypoints.router)

View File

@@ -0,0 +1 @@
from .routes import router

View File

@@ -0,0 +1,40 @@
from __future__ import annotations
from pydantic import BaseModel
from game.server.leaflet import LeafletPoint
from game.theater import TheaterGroundObject
class TgoJs(BaseModel):
name: str
control_point_name: str
category: str
blue: bool
position: LeafletPoint
units: list[str]
threat_ranges: list[float]
detection_ranges: list[float]
dead: bool
sidc: str
@staticmethod
def for_tgo(tgo: TheaterGroundObject) -> TgoJs:
if not tgo.might_have_aa:
threat_ranges = []
detection_ranges = []
else:
threat_ranges = [tgo.threat_range(group).meters for group in tgo.groups]
detection_ranges = [tgo.threat_range(group).meters for group in tgo.groups]
return TgoJs(
name=tgo.name,
control_point_name=tgo.control_point.name,
category=tgo.category,
blue=tgo.control_point.captured,
position=tgo.position.latlng(),
units=[unit.display_name for unit in tgo.units],
threat_ranges=threat_ranges,
detection_ranges=detection_ranges,
dead=tgo.is_dead,
sidc=str(tgo.sidc()),
)

View File

@@ -0,0 +1,17 @@
from fastapi import APIRouter, Depends
from game import Game
from .models import TgoJs
from ..dependencies import GameContext
router: APIRouter = APIRouter(prefix="/tgos")
@router.get("/")
def list_tgos(game: Game = Depends(GameContext.get)) -> list[TgoJs]:
tgos = []
for control_point in game.theater.controlpoints:
for tgo in control_point.connected_objectives:
if not tgo.is_control_point:
tgos.append(TgoJs.for_tgo(tgo))
return tgos