This commit is contained in:
Applevangelist 2025-03-11 18:31:16 +01:00
parent 96ad3ff98b
commit 2fced89dfc

View File

@ -2388,7 +2388,7 @@ function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode,Holdi
LasingDrone.playertask.template = LasingDrone:_GetTemplate(true) LasingDrone.playertask.template = LasingDrone:_GetTemplate(true)
LasingDrone.playertask.alt = Alt or 10000 LasingDrone.playertask.alt = Alt or 10000
LasingDrone.playertask.speed = Speed or 120 LasingDrone.playertask.speed = Speed or 120
LasingDrone.playertask.maxtravel = UTILS.NMToMeters(MaxTravelDist) or UTILS.NMToMeters(100) LasingDrone.playertask.maxtravel = UTILS.NMToMeters(MaxTravelDist or 50)
-- let it orbit the BullsEye if FG -- let it orbit the BullsEye if FG
if LasingDrone:IsFlightgroup() then if LasingDrone:IsFlightgroup() then
@ -2396,6 +2396,7 @@ function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode,Holdi
local BullsCoordinate = COORDINATE:NewFromVec3( coalition.getMainRefPoint( self.Coalition )) local BullsCoordinate = COORDINATE:NewFromVec3( coalition.getMainRefPoint( self.Coalition ))
if HoldingPoint then BullsCoordinate = HoldingPoint end if HoldingPoint then BullsCoordinate = HoldingPoint end
local Orbit = AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,Alt,Speed) local Orbit = AUFTRAG:NewORBIT_CIRCLE(BullsCoordinate,Alt,Speed)
Orbit:SetMissionAltitude(Alt)
LasingDrone:AddMission(Orbit) LasingDrone:AddMission(Orbit)
elseif LasingDrone:IsArmygroup() then elseif LasingDrone:IsArmygroup() then
--settings.IsArmygroup = true --settings.IsArmygroup = true
@ -2410,7 +2411,7 @@ function PLAYERTASKCONTROLLER:EnablePrecisionBombing(FlightGroup,LaserCode,Holdi
elseif FlightGroup.ClassName and (FlightGroup.ClassName == "SET_OPSGROUP") then --SET_OPSGROUP elseif FlightGroup.ClassName and (FlightGroup.ClassName == "SET_OPSGROUP") then --SET_OPSGROUP
FlightGroup:ForEachGroup( FlightGroup:ForEachGroup(
function(group) function(group)
self:EnablePrecisionBombing(group,LaserCode,HoldingPoint,Alt,Speed) self:EnablePrecisionBombing(group,LaserCode,HoldingPoint,Alt,Speed,MaxTravelDist)
end end
) )
else else
@ -2958,6 +2959,7 @@ end
-- @return #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:_CheckPrecisionTasks() function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
self:T(self.lid.."_CheckPrecisionTasks") self:T(self.lid.."_CheckPrecisionTasks")
self:T({count=self.PrecisionTasks:Count(),enabled=self.precisionbombing})
if self.PrecisionTasks:Count() > 0 and self.precisionbombing then if self.PrecisionTasks:Count() > 0 and self.precisionbombing then
-- alive checks -- alive checks
@ -2986,26 +2988,38 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
end -- function end -- function
) )
local function SelectDrone() local function SelectDrone(coord)
local selected = nil local selected = nil
local mindist = math.huge
local dist = math.huge
self.LasingDroneSet:ForEachGroup( self.LasingDroneSet:ForEachGroup(
function(grp) function(grp)
if grp.playertask and (not grp.playertask.busy) then if grp.playertask and (not grp.playertask.busy) then
local gc = grp:GetCoordinate()
if coord and gc then
dist = coord:Get2DDistance(gc)
end
if dist < mindist then
selected = grp selected = grp
mindist = dist
end
end end
end end
) )
return selected return selected
end end
local SelectedDrone = SelectDrone() -- Ops.OpsGroup#OPSGROUP local task = self.PrecisionTasks:Pull() -- Ops.PlayerTask#PLAYERTASK
local taskpt = task.Target:GetCoordinate()
local SelectedDrone = SelectDrone(taskpt) -- Ops.OpsGroup#OPSGROUP
-- do we have a lasing unit assignable? -- do we have a lasing unit assignable?
if SelectedDrone and SelectedDrone:IsAlive() then if SelectedDrone and SelectedDrone:IsAlive() then
if SelectedDrone.playertask and (not SelectedDrone.playertask.busy) then if SelectedDrone.playertask and (not SelectedDrone.playertask.busy) then
-- not busy, get a task -- not busy, get a task
self:T(self.lid.."Sending lasing unit to target") self:T(self.lid.."Sending lasing unit to target")
local task = self.PrecisionTasks:Pull() -- Ops.PlayerTask#PLAYERTASK local isassigned = self:_FindLasingDroneForTaskID(task.PlayerTaskNr)
-- distance check -- distance check
local startpoint = SelectedDrone:GetCoordinate() local startpoint = SelectedDrone:GetCoordinate()
local endpoint = task.Target:GetCoordinate() local endpoint = task.Target:GetCoordinate()
@ -3013,7 +3027,7 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
if startpoint and endpoint then if startpoint and endpoint then
dist = startpoint:Get2DDistance(endpoint) dist = startpoint:Get2DDistance(endpoint)
end end
if dist <= SelectedDrone.playertask.maxtravel then if dist <= SelectedDrone.playertask.maxtravel and (not isassigned) then
SelectedDrone.playertask.id = task.PlayerTaskNr SelectedDrone.playertask.id = task.PlayerTaskNr
SelectedDrone.playertask.busy = true SelectedDrone.playertask.busy = true
SelectedDrone.playertask.inreach = false SelectedDrone.playertask.inreach = false
@ -3052,8 +3066,12 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
else else
self:T(self.lid.."Lasing unit too far from target") self:T(self.lid.."Lasing unit too far from target")
end end
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
end end
end
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
local function DronesWithTask(SelectedDrone) local function DronesWithTask(SelectedDrone)
-- handle drones with a task -- handle drones with a task
@ -3076,10 +3094,12 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
self:T(self.lid.."Laser Off") self:T(self.lid.."Laser Off")
else else
-- not done yet -- not done yet
self:T(self.lid.."Not done yet")
local dcoord = SelectedDrone:GetCoordinate() local dcoord = SelectedDrone:GetCoordinate()
local tcoord = task.Target:GetCoordinate() local tcoord = task.Target:GetCoordinate()
tcoord.y = tcoord.y + 2 tcoord.y = tcoord.y + 2
local dist = dcoord:Get2DDistance(tcoord) local dist = dcoord:Get2DDistance(tcoord)
self:T(self.lid.."Dist "..dist)
-- close enough? -- close enough?
if dist < 3000 and not SelectedDrone:IsLasing() then if dist < 3000 and not SelectedDrone:IsLasing() then
self:T(self.lid.."Laser On") self:T(self.lid.."Laser On")
@ -3122,7 +3142,6 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
self.LasingDroneSet:ForEachGroup(DronesWithTask) self.LasingDroneSet:ForEachGroup(DronesWithTask)
end -- end --
end --
return self return self
end end
@ -3721,7 +3740,7 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Task, Group, Client)
local islasing = LasingDrone:IsLasing() == true and yes or no local islasing = LasingDrone:IsLasing() == true and yes or no
local prectext = self.gettext:GetEntry("POINTERTARGETREPORT",self.locale) local prectext = self.gettext:GetEntry("POINTERTARGETREPORT",self.locale)
prectext = string.format(prectext,inreach,islasing) prectext = string.format(prectext,inreach,islasing)
text = text .. prectext.." ("..self.LaserCode..")" text = text .. prectext.." ("..LasingDrone.playertask.lasercode..")"
end end
end end
-- Buddylasing -- Buddylasing