mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
We can't directly use frozen dataclasses from pydcs in our interface because pydantic can't process them. Pydantic is able to automatically convert to our modelview type from the pydcs type though.
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from game.server.leaflet import LeafletPoint, LeafletPoly, ShapelyUtil
|
|
from game.theater import ConflictTheater
|
|
from game.threatzones import ThreatZones
|
|
|
|
|
|
class MapZonesJs(BaseModel):
|
|
inclusion: list[LeafletPoly]
|
|
exclusion: list[LeafletPoly]
|
|
sea: list[LeafletPoly]
|
|
|
|
|
|
class UnculledZoneJs(BaseModel):
|
|
position: LeafletPoint
|
|
radius: float
|
|
|
|
|
|
class ThreatZonesJs(BaseModel):
|
|
full: list[LeafletPoly]
|
|
aircraft: list[LeafletPoly]
|
|
air_defenses: list[LeafletPoly]
|
|
radar_sams: list[LeafletPoly]
|
|
|
|
@classmethod
|
|
def from_zones(cls, zones: ThreatZones, theater: ConflictTheater) -> ThreatZonesJs:
|
|
return ThreatZonesJs(
|
|
full=ShapelyUtil.polys_to_leaflet(zones.all, theater),
|
|
aircraft=ShapelyUtil.polys_to_leaflet(zones.airbases, theater),
|
|
air_defenses=ShapelyUtil.polys_to_leaflet(zones.air_defenses, theater),
|
|
radar_sams=ShapelyUtil.polys_to_leaflet(zones.radar_sam_threats, theater),
|
|
)
|
|
|
|
|
|
class ThreatZoneContainerJs(BaseModel):
|
|
blue: ThreatZonesJs
|
|
red: ThreatZonesJs
|