From cb813b70e1361bf9cdc4b635d71721e9ff8a0d0c Mon Sep 17 00:00:00 2001 From: Applevangelist <72444570+Applevangelist@users.noreply.github.com> Date: Wed, 7 Apr 2021 19:31:10 +0200 Subject: [PATCH 1/2] Update Mantis.lua Added option to use AI on/off instead of changing the alert state --- Moose Development/Moose/Functional/Mantis.lua | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/Moose Development/Moose/Functional/Mantis.lua b/Moose Development/Moose/Functional/Mantis.lua index c4564fb94..4d6565262 100644 --- a/Moose Development/Moose/Functional/Mantis.lua +++ b/Moose Development/Moose/Functional/Mantis.lua @@ -20,7 +20,7 @@ -- @module Functional.Mantis -- @image Functional.Mantis.jpg --- Date: Feb 2021 +-- Date: Apr 2021 ------------------------------------------------------------------------- --- **MANTIS** class, extends #Core.Base#BASE @@ -51,6 +51,7 @@ -- @field #number adv_state Advanced mode state tracker -- @field #boolean advAwacs Boolean switch to use Awacs as a separate detection stream -- @field #number awacsrange Detection range of an optional Awacs unit +-- @field #boolean UseAIOnOff Decide if we are using AI on/off (true) or AlarmState red/green (default) -- @field Functional.Shorad#SHORAD Shorad SHORAD Object, if available -- @field #boolean ShoradLink If true, #MANTIS has #SHORAD enabled -- @field #number ShoradTime Timer in seconds, how long #SHORAD will be active after a detection inside of the defense range @@ -189,7 +190,8 @@ MANTIS = { Shorad = nil, ShoradLink = false, ShoradTime = 600, - ShoradActDistance = 15000, + ShoradActDistance = 15000, + UseAIOnOff = false, } ----------------------------------------------------------------------- @@ -206,6 +208,7 @@ do --@param #string coaltion Coalition side of your setup, e.g. "blue", "red" or "neutral" --@param #boolean dynamic Use constant (true) filtering or just filter once (false, default) (optional) --@param #string awacs Group name of your Awacs (optional) + --@param #boolean AIOnOff Make MANTIS switch AI on and off instead of changing the alarm state between RED and GREEN (optional) --@return #MANTIS self --@usage Start up your MANTIS with a basic setting -- @@ -227,7 +230,7 @@ do -- `mybluemantis = MANTIS:New("bluemantis","Blue SAM","Blue EWR",nil,"blue",false,"Blue Awacs")` -- `mybluemantis:Start()` -- - function MANTIS:New(name,samprefix,ewrprefix,hq,coaltion,dynamic,awacs) + function MANTIS:New(name,samprefix,ewrprefix,hq,coaltion,dynamic,awacs, AIOnOff) -- DONE: Create some user functions for these -- DONE: Make HQ useful @@ -260,6 +263,8 @@ do self.ShoradLink = false self.ShoradTime = 600 self.ShoradActDistance = 15000 + -- TODO: add emissions on/off when available .... in 2 weeks + self.UseAIOnOff = AIOnOff or false if type(awacs) == "string" then self.advAwacs = true @@ -299,7 +304,7 @@ do end -- @field #string version - self.version="0.3.7" + self.version="0.4.0" self:I(string.format("***** Starting MANTIS Version %s *****", self.version)) return self @@ -458,6 +463,13 @@ do end end + --- Set using AI on/off instead of changing alarm state + -- @param #MANTIS self + -- @param #boolean switch Decide if we are changing alarm state or AI state + function MANTIS:SetUsingAIOnOff(switch) + self.UseAIOnOff = switch or false + end + --- [Internal] Function to check if HQ is alive -- @param #MANTIS self -- @return #boolean True if HQ is alive, else false @@ -701,7 +713,12 @@ do --cycle through groups and set alarm state etc for _i,_group in pairs (SAM_Grps) do local group = _group - group:OptionAlarmStateGreen() -- AI off + -- TODO: add emissions on/off + if self.UseAIOnOff then + group:SetAIOff() + else + group:OptionAlarmStateGreen() -- AI off + end group:SetOption(AI.Option.Ground.id.AC_ENGAGEMENT_RANGE_RESTRICTION,engagerange) --default engagement will be 75% of firing range if group:IsGround() then local grpname = group:GetName() @@ -804,7 +821,11 @@ do local IsInZone, Distance = self:CheckObjectInZone(detset, samcoordinate) if IsInZone then --check any target in zone if samgroup:IsAlive() then - -- switch off SAM + -- switch on SAM + if self.UseAIOnOff then + -- TODO: add emissions on/off + samgroup:SetAIOn() + end samgroup:OptionAlarmStateRed() -- link in to SHORAD if available -- DONE: Test integration fully @@ -822,7 +843,12 @@ do else if samgroup:IsAlive() then -- switch off SAM - samgroup:OptionAlarmStateGreen() + if self.UseAIOnOff then + -- TODO: add emissions on/off + samgroup:SetAIOff() + else + samgroup:OptionAlarmStateGreen() + end --samgroup:OptionROEWeaponFree() --samgroup:SetAIOn() local text = string.format("SAM %s switched to alarm state GREEN!", name) @@ -857,6 +883,10 @@ do local name = _data[1] local samgroup = GROUP:FindByName(name) if samgroup:IsAlive() then + if self.UseAIOnOff then + -- TODO: add emissions on/off + samgroup:SetAIOn() + end samgroup:OptionAlarmStateRed() end -- end alive end -- end for loop From bddc1d7fdcb6531300141963fecb5606700c4a52 Mon Sep 17 00:00:00 2001 From: Applevangelist <72444570+Applevangelist@users.noreply.github.com> Date: Wed, 7 Apr 2021 19:32:34 +0200 Subject: [PATCH 2/2] Update Shorad.lua Added option to use AI on/off instead of changing the alert state --- Moose Development/Moose/Functional/Shorad.lua | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Functional/Shorad.lua b/Moose Development/Moose/Functional/Shorad.lua index 7ecf59d18..155a86829 100644 --- a/Moose Development/Moose/Functional/Shorad.lua +++ b/Moose Development/Moose/Functional/Shorad.lua @@ -38,6 +38,7 @@ -- @field #boolean DefendMavs Default true, intercept incoming AG-Missiles -- @field #number DefenseLowProb Default 70, minimum detection limit -- @field #number DefenseHighProb Default 90, maximim detection limit +-- @field #boolean UseAIOnOff Decide if we are using AI on/off (true) or AlarmState red/green (default). -- @extends Core.Base#BASE --- *Good friends are worth defending.* Mr Tushman, Wonder (the Movie) @@ -94,7 +95,8 @@ SHORAD = { DefendHarms = true, DefendMavs = true, DefenseLowProb = 70, - DefenseHighProb = 90, + DefenseHighProb = 90, + UseAIOnOff = false, } ----------------------------------------------------------------------- @@ -174,7 +176,8 @@ do self.DefendMavs = true self.DefenseLowProb = 70 -- probability to detect a missile shot, low margin self.DefenseHighProb = 90 -- probability to detect a missile shot, high margin - self:I("*** SHORAD - Started Version 0.0.2") + self.UseAIOnOff = false -- Decide if we are using AI on/off (true) or AlarmState red/green (default) + self:I("*** SHORAD - Started Version 0.1.0") -- Set the string id for output to DCS.log file. self.lid=string.format("SHORAD %s | ", self.name) self:_InitState() @@ -189,7 +192,11 @@ do self:T({set = set}) local aliveset = set:GetAliveSet() --#table for _,_group in pairs (aliveset) do + if self.UseAIOnOff then + _group:SetAIOff() + else _group:OptionAlarmStateGreen() --Wrapper.Group#GROUP + end end -- gather entropy for i=1,10 do @@ -272,6 +279,13 @@ do self.Radius = radius end + --- Set using AI on/off instead of changing alarm state + -- @param #SHORAD self + -- @param #boolean switch Decide if we are changing alarm state or AI state + function SHORAD:SetUsingAIOnOff(switch) + self.UseAIOnOff = switch or false + end + --- Check if a HARM was fired -- @param #SHORAD self -- @param #string WeaponName @@ -396,7 +410,11 @@ do local function SleepShorad(group) local groupname = group:GetName() self.ActiveGroups[groupname] = nil - group:OptionAlarmStateGreen() + if self.UseAIOnOff then + group:SetAIOff() + else + group:OptionAlarmStateGreen() + end local text = string.format("Sleeping SHORAD %s", group:GetName()) self:T(text) local m = MESSAGE:New(text,10,"SHORAD"):ToAllIf(self.debug) @@ -407,6 +425,9 @@ do local text = string.format("Waking up SHORAD %s", _group:GetName()) self:T(text) local m = MESSAGE:New(text,10,"SHORAD"):ToAllIf(self.debug) + if self.UseAIOnOff then + _group:SetAIOn() + end _group:OptionAlarmStateRed() local groupname = _group:GetName() if self.ActiveGroups[groupname] == nil then -- no timer yet for this group