- Fixed bug in parking spot distance for ships.
- Added enroute  anti-ship task for anti-ship missions.
This commit is contained in:
Frank 2022-07-18 22:59:49 +02:00
parent f23416dfb8
commit 888734b7d1
5 changed files with 81 additions and 11 deletions

View File

@ -5282,6 +5282,10 @@ function AUFTRAG:GetDCSMissionTask()
-- ANTISHIP Mission --
----------------------
-- Add enroute anti-ship task.
local DCStask=CONTROLLABLE.EnRouteTaskAntiShip(nil)
table.insert(self.enrouteTasks, DCStask)
self:_GetDCSAttackTask(self.engageTarget, DCStasks)
elseif self.type==AUFTRAG.Type.AWACS then
@ -5620,8 +5624,6 @@ function AUFTRAG:GetDCSMissionTask()
end
--table.insert(DCStasks, DCStask)
elseif self.type==AUFTRAG.Type.BARRAGE then
---------------------

View File

@ -875,16 +875,14 @@ function FLIGHTGROUP:Status()
if element.parking then
-- Get distance to assigned parking spot.
local dist=element.unit:GetCoord():Get2DDistance(element.parking.Coordinate)
local dist=self:_GetDistToParking(element.parking, element.unit:GetCoord())
--env.info(string.format("FF dist to parking spot %d = %.1f meters", element.parking.TerminalID, dist))
-- If distance >10 meters, we consider the unit as taxiing.
-- At least for fighters, the initial distance seems to be around 1.8 meters.
-- Debug info.
self:T(self.lid..string.format("Distance to parking spot %d = %.1f meters", element.parking.TerminalID, dist))
-- If distance >10 meters, we consider the unit as taxiing. At least for fighters, the initial distance seems to be around 1.8 meters.
if dist>12 and element.engineOn then
--if element.status==OPSGROUP.ElementStatus.ENGINEON then
self:ElementTaxiing(element)
--end
self:ElementTaxiing(element)
end
else
@ -4604,6 +4602,53 @@ function FLIGHTGROUP:_GetPlayerData()
return nil
end
--- Get distance to parking spot. Takes extra care of ships.
-- @param #FLIGHTGROUP self
-- @param Wrapper.Airbase#AIRBASE.ParkingSpot Spot Parking Spot.
-- @param Core.Point#COORDINATE Coordinate Reference coordinate.
-- @return #number Distance to parking spot in meters.
function FLIGHTGROUP:_GetDistToParking(Spot, Coordinate)
local dist=99999
if Spot then
-- Get the airbase this spot belongs to.
local airbase=AIRBASE:FindByName(Spot.AirbaseName)
if airbase:IsShip() then --or airbase:IsHelipad() then
-- Vec2 of airbase.
local a=airbase:GetVec2()
-- Vec2 of parking spot.
local b=Spot.Coordinate:GetVec2()
-- Vec2 of ref coordinate.
local c=Coordinate:GetVec2()
-- Vector from ref coord to airbase. This still needs to be rotated.
local t=UTILS.Vec2Substract(c,a)
-- Get the heading of the unit.
local unit=UNIT:FindByName(Spot.AirbaseName)
local hdg=unit:GetHeading()
-- Rotate the vector so that it corresponds to facing "North".
t=UTILS.Vec2Rotate2D(t, -hdg)
-- Distance from spot to ref coordinate.
dist=UTILS.VecDist2D(b,t)
else
-- Normal case.
dist=Coordinate:Get2DDistance(Spot.Coordinate)
end
end
return dist
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

View File

@ -3595,7 +3595,7 @@ function OPSGROUP:PushTask(DCSTask)
text=text..string.format("\n[%d] %s", i, tostring(task.id))
end
end
self:T(self.lid..text)
self:T(self.lid..text)
end
return self
@ -3756,6 +3756,7 @@ function OPSGROUP:AddTaskEnroute(task)
end
if not gotit then
self:T(self.lid..string.format("Adding enroute task"))
table.insert(self.taskenroute, task)
end

View File

@ -1105,6 +1105,7 @@ function AIRBASE:_InitParkingSpots()
park.TerminalType=spot.Term_Type
park.TOAC=spot.TO_AC
park.ClientSpot, park.ClientName=isClient(park.Coordinate)
park.AirbaseName=self.AirbaseName
self.NparkingTotal=self.NparkingTotal+1

View File

@ -1557,6 +1557,27 @@ function CONTROLLABLE:EnRouteTaskEngageTargetsInZone( Vec2, Radius, TargetTypes,
return DCSTask
end
--- (AIR) Enroute anti-ship task.
-- @param #CONTROLLABLE self
-- @param DCS#AttributeNameArray TargetTypes Array of target categories allowed to engage. Default `{"Ships"}`.
-- @param #number Priority (Optional) All en-route tasks have the priority parameter. This is a number (less value - higher priority) that determines actions related to what task will be performed first. Default 0.
-- @return DCS#Task The DCS task structure.
function CONTROLLABLE:EnRouteTaskAntiShip(TargetTypes, Priority)
local DCSTask = {
id = 'EngageTargets',
key = "AntiShip",
--auto = false,
--enabled = true,
params = {
targetTypes = TargetTypes or {"Ships"},
priority = Priority or 0
}
}
return DCSTask
end
--- (AIR) Engaging a controllable. The task does not assign the target controllable to the unit/controllable to attack now; it just allows the unit/controllable to engage the target controllable as well as other assigned targets.
-- @param #CONTROLLABLE self