mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
xx
This commit is contained in:
parent
96ad3ff98b
commit
2fced89dfc
@ -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
|
||||||
selected = grp
|
local gc = grp:GetCoordinate()
|
||||||
|
if coord and gc then
|
||||||
|
dist = coord:Get2DDistance(gc)
|
||||||
|
end
|
||||||
|
if dist < mindist then
|
||||||
|
selected = grp
|
||||||
|
mindist = dist
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
return selected
|
return selected
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local task = self.PrecisionTasks:Pull() -- Ops.PlayerTask#PLAYERTASK
|
||||||
|
local taskpt = task.Target:GetCoordinate()
|
||||||
|
|
||||||
local SelectedDrone = SelectDrone() -- Ops.OpsGroup#OPSGROUP
|
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,10 +3066,14 @@ 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
|
||||||
local function DronesWithTask(SelectedDrone)
|
|
||||||
|
self.PrecisionTasks:Push(task,task.PlayerTaskNr)
|
||||||
|
|
||||||
|
|
||||||
|
local function DronesWithTask(SelectedDrone)
|
||||||
-- handle drones with a task
|
-- handle drones with a task
|
||||||
if SelectedDrone.playertask and SelectedDrone.playertask.busy then
|
if SelectedDrone.playertask and SelectedDrone.playertask.busy then
|
||||||
-- drone is busy, set up laser when over target
|
-- drone is busy, set up laser when over target
|
||||||
@ -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")
|
||||||
@ -3120,8 +3140,7 @@ function PLAYERTASKCONTROLLER:_CheckPrecisionTasks()
|
|||||||
end -- end function
|
end -- end function
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user