Don't allow carrier's path over land in UI

This commit is contained in:
Raffson 2024-12-28 01:02:40 +01:00
parent cf38113cde
commit 592b1a7833
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
2 changed files with 14 additions and 1 deletions

View File

@ -89,6 +89,15 @@ def set_destination(
detail=f"Cannot move {cp} more than " detail=f"Cannot move {cp} more than "
f"{cp.max_move_distance.nautical_miles}nm.", f"{cp.max_move_distance.nautical_miles}nm.",
) )
if (
cp.is_fleet
and game.theater.landmap
and game.theater.landmap.land_inbetween(cp.position, point)
):
raise HTTPException(
status.HTTP_400_BAD_REQUEST,
detail=f"Cannot move {cp} over land.",
)
cp.target_position = point cp.target_position = point
from .. import EventStream from .. import EventStream

View File

@ -10,7 +10,7 @@ from dcs.drawing.polygon import FreeFormPolygon
from dcs.mapping import Point from dcs.mapping import Point
from dcs.mission import Mission from dcs.mission import Mission
from dcs.terrain.terrain import Terrain from dcs.terrain.terrain import Terrain
from shapely import geometry from shapely import geometry, LineString
from shapely.geometry import MultiPolygon, Polygon from shapely.geometry import MultiPolygon, Polygon
@ -32,6 +32,10 @@ class Landmap:
def inclusion_zone_only(self) -> MultiPolygon: def inclusion_zone_only(self) -> MultiPolygon:
return self.inclusion_zones - self.exclusion_zones - self.sea_zones return self.inclusion_zones - self.exclusion_zones - self.sea_zones
def land_inbetween(self, a: Point, b: Point) -> bool:
line = LineString([[a.x, a.y], [b.x, b.y]])
return self.inclusion_zones.intersects(line)
def load_landmap(filename: Path) -> Optional[Landmap]: def load_landmap(filename: Path) -> Optional[Landmap]:
try: try: