diff --git a/Moose Development/Moose/AI/AI_A2A.lua b/Moose Development/Moose/AI/AI_A2A.lua index bc2ee04ba..0cd259add 100644 --- a/Moose Development/Moose/AI/AI_A2A.lua +++ b/Moose Development/Moose/AI/AI_A2A.lua @@ -626,7 +626,7 @@ function AI_A2A:onafterHold( AIGroup, From, Event, To, HoldTime ) --AIGroup:SetState( AIGroup, "AI_A2A", self ) - AIGroup:SetTask( AIGroup:TaskCombo( { TimedOrbitTask, RTBTask, OrbitHoldTask } ), 0 ) + AIGroup:SetTask( AIGroup:TaskCombo( { TimedOrbitTask, RTBTask, OrbitHoldTask } ), 1 ) end end diff --git a/Moose Development/Moose/Core/Spot.lua b/Moose Development/Moose/Core/Spot.lua index 7efcf8af3..5e6eb014f 100644 --- a/Moose Development/Moose/Core/Spot.lua +++ b/Moose Development/Moose/Core/Spot.lua @@ -247,7 +247,7 @@ do if self.Target:IsAlive() then self.SpotIR:setPoint( self.Target:GetPointVec3():AddY(1):AddY(math.random(-100,100)/100):AddX(math.random(-100,100)/100):GetVec3() ) self.SpotLaser:setPoint( self.Target:GetPointVec3():AddY(1):GetVec3() ) - self:__Lasing( -1 ) + self:__Lasing( -0.2 ) else self:E( { "Target is not alive", self.Target:IsAlive() } ) end diff --git a/Moose Development/Moose/Functional/Designate.lua b/Moose Development/Moose/Functional/Designate.lua index 880fe409f..44b26a0b7 100644 --- a/Moose Development/Moose/Functional/Designate.lua +++ b/Moose Development/Moose/Functional/Designate.lua @@ -377,20 +377,22 @@ do -- DESIGNATE self.RecceSet = Detection:GetDetectionSetGroup() self.Recces = {} self.Designating = {} + self:SetDesignateName() self.LaseDuration = 60 self:SetFlashStatusMenu( false ) self:SetMission( Mission ) - self:SetDesignateMenu() self:SetLaserCodes( { 1688, 1130, 4785, 6547, 1465, 4578 } ) -- set self.LaserCodes - self:SetAutoLase( false ) -- set self.Autolase + self:SetAutoLase( false, false ) -- set self.Autolase and don't send message. self:SetThreatLevelPrioritization( false ) -- self.ThreatLevelPrioritization, default is threat level priorization off self:SetMaximumDesignations( 5 ) -- Sets the maximum designations. The default is 5 designations. self:SetMaximumDistanceDesignations( 12000 ) -- Sets the maximum distance on which designations can be accepted. The default is 8000 meters. self:SetMaximumMarkings( 2 ) -- Per target group, a maximum of 2 markings will be made by default. + + self:SetDesignateMenu() self.LaserCodesUsed = {} @@ -488,6 +490,20 @@ do -- DESIGNATE return self end + + --- Set the name of the designation. The name will appear in the menu. + -- This method can be used to control different designations for different plane types. + -- @param #DESIGNATE self + -- @param #string DesignateName + -- @return #DESIGNATE + function DESIGNATE:SetDesignateName( DesignateName ) + + self.DesignateName = "Designation" .. ( DesignateName and ( " for " .. DesignateName ) or "" ) + + return self + end + + --- Generate an array of possible laser codes. -- Each new lase will select a code from this table. -- The entered value can range from 1111 - 1788, @@ -544,18 +560,19 @@ do -- DESIGNATE --- Set auto lase. -- Auto lase will start lasing targets immediately when these are in range. -- @param #DESIGNATE self - -- @param #boolean AutoLase + -- @param #boolean AutoLase (optional) true sets autolase on, false off. Default is off. + -- @param #boolean Message (optional) true is send message, false or nil won't send a message. Default is no message sent. -- @return #DESIGNATE - function DESIGNATE:SetAutoLase( AutoLase ) --R2.1 + function DESIGNATE:SetAutoLase( AutoLase, Message ) - self.AutoLase = AutoLase + self.AutoLase = AutoLase or false - local AutoLaseOnOff = ( AutoLase == true ) and "On" or "Off" - - local CC = self.CC:GetPositionable() - - if CC then - CC:MessageToSetGroup( "Auto Lase " .. AutoLaseOnOff .. ".", 15, self.AttackSet ) + if Message then + local AutoLaseOnOff = ( self.AutoLase == true ) and "On" or "Off" + local CC = self.CC:GetPositionable() + if CC then + CC:MessageToSetGroup( self.DesignateName .. ": Auto Lase " .. AutoLaseOnOff .. ".", 15, self.AttackSet ) + end end self:CoordinateLase() @@ -626,7 +643,7 @@ do -- DESIGNATE self.AttackSet:ForEachGroup( function( AttackGroup ) local DetectionText = self.Detection:DetectedItemReportSummary( DesignateIndex, AttackGroup ):Text( ", " ) - self.CC:GetPositionable():MessageToGroup( "Targets out of LOS\n" .. DetectionText, 10, AttackGroup, "Designate" ) + self.CC:GetPositionable():MessageToGroup( "Targets out of LOS\n" .. DetectionText, 10, AttackGroup, self.DesignateName ) end ) else @@ -649,7 +666,7 @@ do -- DESIGNATE self.AttackSet:ForEachGroup( function( AttackGroup ) local DetectionText = self.Detection:DetectedItemReportSummary( DesignateIndex, AttackGroup ):Text( ", " ) - self.CC:GetPositionable():MessageToGroup( "Targets detected at \n" .. DetectionText, 10, AttackGroup, "Designate" ) + self.CC:GetPositionable():MessageToGroup( "Targets detected at \n" .. DetectionText, 10, AttackGroup, self.DesignateName ) end ) self.Designating[DesignateIndex] = "" @@ -713,7 +730,7 @@ do -- DESIGNATE local CC = self.CC:GetPositionable() - CC:MessageToGroup( DetectedReport:Text( "\n" ), Duration, AttackGroup ) + CC:MessageToGroup( DetectedReport:Text( "\n" ), Duration, AttackGroup, self.DesignateName ) local DesignationReport = REPORT:New( "Marking Targets:\n" ) @@ -729,7 +746,7 @@ do -- DESIGNATE end ) - CC:MessageToGroup( DesignationReport:Text(), Duration, AttackGroup ) + CC:MessageToGroup( DesignationReport:Text(), Duration, AttackGroup, self.DesignateName ) end end ) @@ -757,26 +774,27 @@ do -- DESIGNATE end local MenuTime = timer.getTime() - self.MenuDesignate[AttackGroup] = MENU_GROUP:New( AttackGroup, "Designate", MissionMenu ):SetTime( MenuTime ):SetTag( "Designate" ) + + self.MenuDesignate[AttackGroup] = MENU_GROUP:New( AttackGroup, self.DesignateName, MissionMenu ):SetTime( MenuTime ):SetTag( self.DesignateName ) local MenuDesignate = self.MenuDesignate[AttackGroup] -- Core.Menu#MENU_GROUP -- Set Menu option for auto lase if self.AutoLase then - MENU_GROUP_COMMAND:New( AttackGroup, "Auto Lase Off", MenuDesignate, self.MenuAutoLase, self, false ):SetTime( MenuTime ):SetTag( "Designate" ) + MENU_GROUP_COMMAND:New( AttackGroup, "Auto Lase Off", MenuDesignate, self.MenuAutoLase, self, false ):SetTime( MenuTime ):SetTag( self.DesignateName ) else - MENU_GROUP_COMMAND:New( AttackGroup, "Auto Lase On", MenuDesignate, self.MenuAutoLase, self, true ):SetTime( MenuTime ):SetTag( "Designate" ) + MENU_GROUP_COMMAND:New( AttackGroup, "Auto Lase On", MenuDesignate, self.MenuAutoLase, self, true ):SetTime( MenuTime ):SetTag( self.DesignateName ) end - local StatusMenu = MENU_GROUP:New( AttackGroup, "Status", MenuDesignate ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 15s", StatusMenu, self.MenuStatus, self, AttackGroup, 15 ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 30s", StatusMenu, self.MenuStatus, self, AttackGroup, 30 ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 60s", StatusMenu, self.MenuStatus, self, AttackGroup, 60 ):SetTime( MenuTime ):SetTag( "Designate" ) + local StatusMenu = MENU_GROUP:New( AttackGroup, "Status", MenuDesignate ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 15s", StatusMenu, self.MenuStatus, self, AttackGroup, 15 ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 30s", StatusMenu, self.MenuStatus, self, AttackGroup, 30 ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Report Status 60s", StatusMenu, self.MenuStatus, self, AttackGroup, 60 ):SetTime( MenuTime ):SetTag( self.DesignateName ) if self.FlashStatusMenu[AttackGroup] then - MENU_GROUP_COMMAND:New( AttackGroup, "Flash Status Report Off", StatusMenu, self.MenuFlashStatus, self, AttackGroup, false ):SetTime( MenuTime ):SetTag( "Designate" ) + MENU_GROUP_COMMAND:New( AttackGroup, "Flash Status Report Off", StatusMenu, self.MenuFlashStatus, self, AttackGroup, false ):SetTime( MenuTime ):SetTag( self.DesignateName ) else - MENU_GROUP_COMMAND:New( AttackGroup, "Flash Status Report On", StatusMenu, self.MenuFlashStatus, self, AttackGroup, true ):SetTime( MenuTime ):SetTag( "Designate" ) + MENU_GROUP_COMMAND:New( AttackGroup, "Flash Status Report On", StatusMenu, self.MenuFlashStatus, self, AttackGroup, true ):SetTime( MenuTime ):SetTag( self.DesignateName ) end local DetectedItems = self.Detection:GetDetectedItems() @@ -789,20 +807,20 @@ do -- DESIGNATE local Coord = self.Detection:GetDetectedItemCoordinate( DesignateIndex ) local ID = self.Detection:GetDetectedItemID( DesignateIndex ) - local MenuText = ID .. ", " .. Coord:ToString( AttackGroup ) + local MenuText = ID .. ", " .. Coord:ToString( AttackGroup ) if Designating == "" then MenuText = "(-) " .. MenuText - local DetectedMenu = MENU_GROUP:New( AttackGroup, MenuText, MenuDesignate ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Search other target", DetectedMenu, self.MenuForget, self, DesignateIndex ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 60 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 60 ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 120 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 120 ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Smoke red", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Red ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Smoke blue", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Blue ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Smoke green", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Green ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Smoke white", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.White ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Smoke orange", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Orange ):SetTime( MenuTime ):SetTag( "Designate" ) - MENU_GROUP_COMMAND:New( AttackGroup, "Illuminate", DetectedMenu, self.MenuIlluminate, self, DesignateIndex ):SetTime( MenuTime ):SetTag( "Designate" ) + local DetectedMenu = MENU_GROUP:New( AttackGroup, MenuText, MenuDesignate ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Search other target", DetectedMenu, self.MenuForget, self, DesignateIndex ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 60 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 60 ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 120 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 120 ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Smoke red", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Red ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Smoke blue", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Blue ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Smoke green", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Green ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Smoke white", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.White ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Smoke orange", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Orange ):SetTime( MenuTime ):SetTag( self.DesignateName ) + MENU_GROUP_COMMAND:New( AttackGroup, "Illuminate", DetectedMenu, self.MenuIlluminate, self, DesignateIndex ):SetTime( MenuTime ):SetTag( self.DesignateName ) else if Designating == "Laser" then MenuText = "(L) " .. MenuText @@ -811,15 +829,15 @@ do -- DESIGNATE elseif Designating == "Illuminate" then MenuText = "(I) " .. MenuText end - local DetectedMenu = MENU_GROUP:New( AttackGroup, MenuText, MenuDesignate ):SetTime( MenuTime ):SetTag( "Designate" ) + local DetectedMenu = MENU_GROUP:New( AttackGroup, MenuText, MenuDesignate ):SetTime( MenuTime ):SetTag( self.DesignateName ) if Designating == "Laser" then - MENU_GROUP_COMMAND:New( AttackGroup, "Stop lasing", DetectedMenu, self.MenuLaseOff, self, DesignateIndex ):SetTime( MenuTime ):SetTag( "Designate" ) + MENU_GROUP_COMMAND:New( AttackGroup, "Stop lasing", DetectedMenu, self.MenuLaseOff, self, DesignateIndex ):SetTime( MenuTime ):SetTag( self.DesignateName ) else end end end end - MenuDesignate:Remove( MenuTime, "Designate" ) + MenuDesignate:Remove( MenuTime, self.DesignateName ) end ) @@ -862,7 +880,7 @@ do -- DESIGNATE self:E("AutoLase") - self:SetAutoLase( AutoLase ) + self:SetAutoLase( AutoLase, true ) end --- @@ -912,7 +930,7 @@ do -- DESIGNATE function DESIGNATE:onafterLaseOn( From, Event, To, Index, Duration ) self.Designating[Index] = "Laser" - self:Lasing( Index, Duration ) + self:__Lasing( -1, Index, Duration ) end @@ -924,6 +942,9 @@ do -- DESIGNATE local TargetSetUnit = self.Detection:GetDetectedSet( Index ) local MarkedCount = 0 + local MarkedTypes = {} + local ReportTypes = REPORT:New() + local ReportLaserCodes = REPORT:New() TargetSetUnit:Flush() @@ -980,12 +1001,19 @@ do -- DESIGNATE function Spot:OnAfterDestroyed( From, Event, To ) self:E( "Destroyed Message" ) - self.Recce:MessageToSetGroup( "Target " .. TargetUnit:GetTypeName() .. " destroyed. " .. TargetSetUnit:Count() .. " targets left.", 5, AttackSet ) + self.Recce:ToSetGroup( "Target " .. TargetUnit:GetTypeName() .. " destroyed. " .. TargetSetUnit:Count() .. " targets left.", 5, AttackSet, self.DesignateName ) end self.Recces[TargetUnit] = RecceUnit - RecceUnit:MessageToSetGroup( "Marking " .. TargetUnit:GetTypeName() .. " with laser " .. RecceUnit:GetSpot().LaserCode .. " for " .. Duration .. "s.", 5, self.AttackSet ) + RecceUnit:MessageToSetGroup( "Marking " .. TargetUnit:GetTypeName() .. " with laser " .. RecceUnit:GetSpot().LaserCode .. " for " .. Duration .. "s.", 5, self.AttackSet, self.DesignateName ) -- OK. We have assigned for the Recce a TargetUnit. We can exit the function. + MarkedCount = MarkedCount + 1 + local TargetUnitType = TargetUnit:GetTypeName() + if not MarkedTypes[TargetUnitType] then + MarkedTypes[TargetUnitType] = true + ReportTypes:Add(TargetUnitType) + end + ReportLaserCodes:Add(RecceUnit.LaserCode) return end else @@ -1000,24 +1028,42 @@ do -- DESIGNATE if Recce then Recce:LaseOff() - Recce:MessageToSetGroup( "Target " .. TargetUnit:GetTypeName() "out of LOS. Cancelling lase!", 5, self.AttackSet ) + Recce:MessageToSetGroup( "Target " .. TargetUnit:GetTypeName() "out of LOS. Cancelling lase!", 5, self.AttackSet, self.DesignateName ) end else MarkedCount = MarkedCount + 1 + local TargetUnitType = TargetUnit:GetTypeName() + if not MarkedTypes[TargetUnitType] then + MarkedTypes[TargetUnitType] = true + ReportTypes:Add(TargetUnitType) + end + ReportLaserCodes:Add(RecceUnit.LaserCode) end end end end else MarkedCount = MarkedCount + 1 - Recce:MessageToSetGroup( "Marking " .. TargetUnit:GetTypeName() .. " with laser " .. Recce.LaserCode .. ".", 5, self.AttackSet ) + local TargetUnitType = TargetUnit:GetTypeName() + if not MarkedTypes[TargetUnitType] then + MarkedTypes[TargetUnitType] = true + ReportTypes:Add(TargetUnitType) + end + ReportLaserCodes:Add(Recce.LaserCode) + --Recce:MessageToSetGroup( self.DesignateName .. ": Marking " .. TargetUnit:GetTypeName() .. " with laser " .. Recce.LaserCode .. ".", 5, self.AttackSet ) end end end end ) - self:__Lasing( 30, Index, Duration ) + local MarkedTypesText = ReportTypes:Text(', ') + local MarkedLaserCodesText = ReportLaserCodes:Text(', ') + for MarkedType, MarketCount in pairs( MarkedTypes ) do + self.CC:GetPositionable():MessageToSetGroup( "Marking " .. MarkedCount .. " x " .. MarkedTypesText .. " with lasers " .. MarkedLaserCodesText .. ".", 5, self.AttackSet, self.DesignateName ) + end + + self:__Lasing( -30, Index, Duration ) self:SetDesignateMenu() @@ -1031,7 +1077,7 @@ do -- DESIGNATE local CC = self.CC:GetPositionable() if CC then - CC:MessageToSetGroup( "Stopped lasing.", 5, self.AttackSet ) + CC:MessageToSetGroup( "Stopped lasing.", 5, self.AttackSet, self.DesignateName ) end local TargetSetUnit = self.Detection:GetDetectedSet( Index ) @@ -1040,7 +1086,7 @@ do -- DESIGNATE for TargetID, RecceData in pairs( Recces ) do local Recce = RecceData -- Wrapper.Unit#UNIT - Recce:MessageToSetGroup( "Stopped lasing " .. Recce:GetSpot().Target:GetTypeName() .. ".", 5, self.AttackSet ) + Recce:MessageToSetGroup( "Stopped lasing " .. Recce:GetSpot().Target:GetTypeName() .. ".", 5, self.AttackSet, self.DesignateName ) Recce:LaseOff() end @@ -1077,7 +1123,7 @@ do -- DESIGNATE if RecceUnit then - RecceUnit:MessageToSetGroup( "Smoking " .. SmokeUnit:GetTypeName() .. ".", 5, self.AttackSet ) + RecceUnit:MessageToSetGroup( "Smoking " .. SmokeUnit:GetTypeName() .. ".", 5, self.AttackSet, self.DesignateName ) self.MarkScheduler:Schedule( self, function() @@ -1107,7 +1153,7 @@ do -- DESIGNATE local RecceGroup = self.RecceSet:FindNearestGroupFromPointVec2(TargetUnit:GetPointVec2()) local RecceUnit = RecceGroup:GetUnit( 1 ) if RecceUnit then - RecceUnit:MessageToSetGroup( "Illuminating " .. TargetUnit:GetTypeName() .. ".", 5, self.AttackSet ) + RecceUnit:MessageToSetGroup( "Illuminating " .. TargetUnit:GetTypeName() .. ".", 5, self.AttackSet, self.DesignateName ) self.MarkScheduler:Schedule( self, function() if TargetUnit:IsAlive() then diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index 8d3a037a1..aca0a5936 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -379,7 +379,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime ) end if not WaitTime or WaitTime == 0 then - SetTask( DCSTask ) + self:SetTask( DCSTask ) else self.TaskScheduler:Schedule( self, SetTask, { DCSTask }, WaitTime ) end