mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from shapely.geometry import LineString, Point as ShapelyPoint
|
|
|
|
from game import Game
|
|
from game.server import GameContext
|
|
from game.server.leaflet import LeafletPoly, ShapelyUtil
|
|
from game.ato.flightplan import CasFlightPlan, PatrollingFlightPlan
|
|
|
|
router: APIRouter = APIRouter(prefix="/flights")
|
|
|
|
|
|
@router.get("/{flight_id}/commit-boundary")
|
|
def commit_boundary(
|
|
flight_id: UUID, game: Game = Depends(GameContext.get)
|
|
) -> LeafletPoly:
|
|
flight = game.db.flights.get(flight_id)
|
|
if not isinstance(flight.flight_plan, PatrollingFlightPlan):
|
|
return []
|
|
start = flight.flight_plan.patrol_start
|
|
end = flight.flight_plan.patrol_end
|
|
if isinstance(flight.flight_plan, CasFlightPlan):
|
|
center = flight.flight_plan.target.position
|
|
commit_center = ShapelyPoint(center.x, center.y)
|
|
else:
|
|
commit_center = LineString(
|
|
[
|
|
ShapelyPoint(start.x, start.y),
|
|
ShapelyPoint(end.x, end.y),
|
|
]
|
|
)
|
|
bubble = commit_center.buffer(flight.flight_plan.engagement_distance.meters)
|
|
return ShapelyUtil.poly_to_leaflet(bubble, game.theater)
|