diff --git a/game/ato/flightplans/airlift.py b/game/ato/flightplans/airlift.py index 5894e202..a99b0622 100644 --- a/game/ato/flightplans/airlift.py +++ b/game/ato/flightplans/airlift.py @@ -23,12 +23,16 @@ class AirliftLayout(StandardLayout): # airfield for cargo planes, as the cargo is pre-loaded. Helicopters will still pick # up the cargo near the airfield. pickup: FlightWaypoint | None + # pickup_zone will be used for player flights to create the CTLD stuff + ctld_pickup_zone: FlightWaypoint | None nav_to_drop_off: list[FlightWaypoint] # There will not be a drop-off waypoint when the drop-off airfield and the arrival # airfield is the same for a cargo plane, as planes will land to unload and we don't # want a double landing. Helicopters will still drop their cargo near the airfield # before landing. drop_off: FlightWaypoint | None + # drop_off_zone will be used for player flights to create the CTLD stuff + ctld_drop_off_zone: FlightWaypoint | None nav_to_home: list[FlightWaypoint] def iter_waypoints(self) -> Iterator[FlightWaypoint]: @@ -36,9 +40,13 @@ class AirliftLayout(StandardLayout): yield from self.nav_to_pickup if self.pickup is not None: yield self.pickup + if self.ctld_pickup_zone is not None: + yield self.ctld_pickup_zone yield from self.nav_to_drop_off if self.drop_off is not None: yield self.drop_off + if self.ctld_drop_off_zone is not None: + yield self.ctld_drop_off_zone yield from self.nav_to_home yield self.arrival if self.divert is not None: @@ -86,33 +94,33 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]): builder = WaypointBuilder(self.flight, self.coalition) pickup = None - refuel = None drop_off = None + pickup_zone = None + drop_off_zone = None + + if cargo.origin != self.flight.departure: + pickup = builder.cargo_pickup(cargo.origin, False) + if cargo.next_stop != self.flight.arrival: + drop_off = builder.cargo_dropoff(cargo.next_stop, False) + if self.flight.is_helo: - # Create a pickupzone where the cargo will be spawned - pickup_zone = MissionTarget( - "Pickup Zone", cargo.origin.position.random_point_within(1000, 200) + # Create CTLD Zones for Helo flights + pickup_zone = builder.cargo_pickup( + MissionTarget( + "Pickup Zone", cargo.origin.position.random_point_within(1000, 200) + ), + True, ) - pickup = builder.cargo_pickup(pickup_zone, True) - # If The cargo is at the departure controlpoint, the pickup waypoint should - # only be created for client flights - pickup.only_for_player = cargo.origin == self.flight.departure - - # Create a dropoff zone where the cargo should be dropped - drop_off_zone = MissionTarget( - "Dropoff zone", - cargo.next_stop.position.random_point_within(1000, 200), + drop_off_zone = builder.cargo_dropoff( + MissionTarget( + "Dropoff zone", + cargo.next_stop.position.random_point_within(1000, 200), + ), + True, ) - drop_off = builder.cargo_dropoff(drop_off_zone, True) - - # Add an additional refuel waypoint - refuel = builder.land_refuel(cargo.next_stop) - else: - # Fixed Wing will get landing&refuel waypoints for pickup and dropoff - if cargo.origin != self.flight.departure: - pickup = builder.cargo_pickup(cargo.origin, False) - if cargo.next_stop != self.flight.arrival: - drop_off = builder.cargo_dropoff(cargo.next_stop, False) + # Show the zone waypoints only to the player + pickup_zone.only_for_player = True + drop_off_zone.only_for_player = True nav_to_pickup = builder.nav_path( self.flight.departure.position, @@ -135,6 +143,7 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]): departure=builder.takeoff(self.flight.departure), nav_to_pickup=nav_to_pickup, pickup=pickup, + ctld_pickup_zone=pickup_zone, nav_to_drop_off=builder.nav_path( cargo.origin.position, cargo.next_stop.position, @@ -142,6 +151,7 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]): altitude_is_agl, ), drop_off=drop_off, + ctld_drop_off_zone=drop_off_zone, nav_to_home=builder.nav_path( cargo.origin.position, self.flight.arrival.position, diff --git a/game/ato/flightplans/waypointbuilder.py b/game/ato/flightplans/waypointbuilder.py index e2b83c67..1e789740 100644 --- a/game/ato/flightplans/waypointbuilder.py +++ b/game/ato/flightplans/waypointbuilder.py @@ -542,7 +542,7 @@ class WaypointBuilder: control_point = pick_up if isinstance(pick_up, ControlPoint) else None if is_helo: return FlightWaypoint( - "PICKUP", + "PICKUPZONE", FlightWaypointType.PICKUP_ZONE, pick_up.position, meters(0), @@ -578,7 +578,7 @@ class WaypointBuilder: "Helicopter airlift drop-off targets should not be control points" ) return FlightWaypoint( - "DROPOFF", + "DROPOFFZONE", FlightWaypointType.DROPOFF_ZONE, drop_off.position, meters(0),