This commit is contained in:
Frank 2020-08-04 16:56:45 +02:00
parent dafbd3f368
commit 76e75505e5
5 changed files with 169 additions and 45 deletions

View File

@ -306,7 +306,7 @@ function ARMYGROUP:onafterStatus(From, Event, To)
self:I(self.lid..text) self:I(self.lid..text)
end end
self:__Status(-10) self:__Status(-30)
end end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ -757,11 +757,6 @@ function ARMYGROUP:_InitGroup()
-- Radio parameters from template. -- Radio parameters from template.
self.radioOn=false -- Radio is always OFF for ground. self.radioOn=false -- Radio is always OFF for ground.
-- We set some values.
self.radioDefault.Freq=133
self.radioDefault.Modu=radio.modulation.AM
self.radio.Freq=133 self.radio.Freq=133
self.radio.Modu=radio.modulation.AM self.radio.Modu=radio.modulation.AM

View File

@ -432,24 +432,24 @@ AUFTRAG.version="0.3.1"
-- TODO list -- TODO list
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO: Clone mission. How? Deepcopy?
-- DONE: Option to assign mission to specific squadrons (requires an AIRWING).
-- TODO: Option to assign a specific payload for the mission (requires an AIRWING). -- TODO: Option to assign a specific payload for the mission (requires an AIRWING).
-- DONE: Add mission start conditions.
-- TODO: Add recovery tanker mission for boat ops.
-- DONE: Add rescue helo mission for boat ops.
-- TODO: Mission success options damaged, destroyed. -- TODO: Mission success options damaged, destroyed.
-- TODO: Recon mission. What input? Set of coordinates?
-- NOPE: Clone mission. How? Deepcopy? ==> Create a new auftrag.
-- TODO: F10 marker to create new missions.
-- TODO: Add recovery tanker mission for boat ops.
-- DONE: Option to assign mission to specific squadrons (requires an AIRWING).
-- DONE: Add mission start conditions.
-- DONE: Add rescue helo mission for boat ops.
-- DONE: Mission ROE and ROT. -- DONE: Mission ROE and ROT.
-- DONE: Mission frequency and TACAN. -- DONE: Mission frequency and TACAN.
-- TODO: Mission formation, etc. -- DONE: Mission formation, etc.
-- DONE: FSM events. -- DONE: FSM events.
-- DONE: F10 marker functions that are updated on Status event. -- DONE: F10 marker functions that are updated on Status event.
-- TODO: F10 marker to create new missions.
-- DONE: Evaluate mission result ==> SUCCESS/FAILURE -- DONE: Evaluate mission result ==> SUCCESS/FAILURE
-- DONE: NewAUTO() NewA2G NewA2A -- DONE: NewAUTO() NewA2G NewA2A
-- DONE: Transport mission. -- DONE: Transport mission.
-- TODO: Recon mission. What input? Set of coordinates? -- DONE: Set mission coalition, e.g. for F10 markers. Could be derived from target if target has a coalition.
-- TODO: Set mission coalition, e.g. for F10 markers. Could be derived from target if target has a coalition.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Constructor -- Constructor
@ -545,7 +545,7 @@ function AUFTRAG:NewANTISHIP(Target, Altitude)
-- DCS task parameters: -- DCS task parameters:
mission.engageWeaponType=ENUMS.WeaponFlag.Auto mission.engageWeaponType=ENUMS.WeaponFlag.Auto
mission.engageWeaponExpend=AI.Task.WeaponExpend.ALL mission.engageWeaponExpend=AI.Task.WeaponExpend.ALL
mission.engageAltitude=Altitude or UTILS.FeetToMeters(2000) mission.engageAltitude=UTILS.FeetToMeters(Altitude or 2000)
-- Mission options: -- Mission options:
mission.missionTask=ENUMS.MissionTask.ANTISHIPSTRIKE mission.missionTask=ENUMS.MissionTask.ANTISHIPSTRIKE

View File

@ -1420,13 +1420,17 @@ function FLIGHTGROUP:onafterSpawned(From, Event, To)
end end
-- Turn on the radio. -- Turn on the radio.
if self.radioDefault and self.radioDefault.Freq then if self.radioDefault then
self:SwitchRadio(self.radioDefault.Freq, self.radioDefault.Modu) self:SwitchRadio(self.radioDefault.Freq, self.radioDefault.Modu)
else
self:SetDefaultRadio(self.radio.Freq, self.radio.Modu)
end end
-- Set callsign. -- Set callsign.
if self.callsignDefault and self.callsignDefault.NameSquad then if self.callsignDefault then
--self:SwitchCallsign(self.callsignDefault.Name, self.callsignNumberDefault) self:SwitchCallsign(self.callsignDefault.NumberSquad, self.callsignDefault.NumberGroup)
else
self:SetDefaultCallsign(self.callsign.NumberSquad, self.callsign.NumberGroup)
end end
-- TODO: make this input. -- TODO: make this input.
@ -2530,12 +2534,14 @@ function FLIGHTGROUP:_InitGroup()
-- Radio parameters from template. -- Radio parameters from template.
self.radioOn=self.template.communication self.radioOn=self.template.communication
self.radio.Freq=self.template.frequency self.radio.Freq=self.template.frequency
self.radio.Modu=self.template.modulation self.radio.Modu=self.template.modulation
self.radioDefault.Freq=self.radio.Freq --TODO callsign from template or getCallsign
self.radioDefault.Modu=self.radio.Modu self.callsign.NumberSquad=self.template.units[1].callsign[1]
self.callsign.NumberGroup=self.template.units[1].callsign[2]
self.callsign.NumberElement=self.template.units[1].callsign[3] -- First element only
self.callsign.NameSquad=UTILS.GetCallsignName(self.callsign.NumberSquad)
-- Set default formation. -- Set default formation.
if self.ishelo then if self.ishelo then

View File

@ -21,6 +21,8 @@
-- @field #table Qintowind Queue of "into wind" turns. -- @field #table Qintowind Queue of "into wind" turns.
-- @field #number depth Ordered depth in meters. -- @field #number depth Ordered depth in meters.
-- @field #boolean collisionwarning If true, collition warning. -- @field #boolean collisionwarning If true, collition warning.
-- @field #boolean pathfindingOn If true, enable pathfining.
-- @field #boolean ispathfinding If true, group is currently path finding.
-- @extends Ops.OpsGroup#OPSGROUP -- @extends Ops.OpsGroup#OPSGROUP
--- *Something must be left to chance; nothing is sure in a sea fight above all.* -- Horatio Nelson --- *Something must be left to chance; nothing is sure in a sea fight above all.* -- Horatio Nelson
@ -70,6 +72,7 @@ NAVYGROUP.version="0.1.0"
-- TODO list -- TODO list
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO: Collision warning.
-- DONE: Detour, add temporary waypoint and resume route. -- DONE: Detour, add temporary waypoint and resume route.
-- DONE: Stop and resume route. -- DONE: Stop and resume route.
-- DONE: Add waypoints. -- DONE: Add waypoints.
@ -112,6 +115,7 @@ function NAVYGROUP:New(GroupName)
self:AddTransition("OnDetour", "DetourReached", "Cruising") -- Group reached the detour coordinate. self:AddTransition("OnDetour", "DetourReached", "Cruising") -- Group reached the detour coordinate.
self:AddTransition("*", "CollitionWarning", "*") -- Collision warning. self:AddTransition("*", "CollitionWarning", "*") -- Collision warning.
self:AddTransition("*", "ClearAhead", "*") -- Clear ahead.
self:AddTransition("*", "Dive", "Diving") -- Command a submarine to dive. self:AddTransition("*", "Dive", "Diving") -- Command a submarine to dive.
self:AddTransition("Diving", "Surface", "Cruising") -- Command a submarine to go to the surface. self:AddTransition("Diving", "Surface", "Cruising") -- Command a submarine to go to the surface.
@ -175,6 +179,14 @@ function NAVYGROUP:SetPatrolAdInfinitum(switch)
return self return self
end end
--- Enable/disable pathfinding.
-- @param #NAVYGROUP self
-- @param #boolean switch If true, enable pathfinding.
-- @return #NAVYGROUP self
function NAVYGROUP:SetPathfinding(Switch)
self.pathfindingOn=Switch
end
--- Add a *scheduled* task. --- Add a *scheduled* task.
-- @param #NAVYGROUP self -- @param #NAVYGROUP self
-- @param Core.Point#COORDINATE Coordinate Coordinate of the target. -- @param Core.Point#COORDINATE Coordinate Coordinate of the target.
@ -386,11 +398,19 @@ function NAVYGROUP:onafterStatus(From, Event, To)
local freepath=10000 local freepath=10000
local collision=false local collision=false
-- Only check if not currently turning.
if not self:IsTurning() then if not self:IsTurning() then
-- Check free path ahead.
freepath=self:_CheckFreePath(freepath, 100)
if freepath<5000 then
self:CollisionWarning()
end
if not self.ispathfinding then if not self.ispathfinding then
freepath=self:_CheckFreePath(freepath, 100)
if freepath<5000 then if freepath<5000 then
self.ispathfinding=self:_FindPathToNextWaypoint() self.ispathfinding=self:_FindPathToNextWaypoint()
@ -498,8 +518,8 @@ function NAVYGROUP:onafterStatus(From, Event, To)
end end
-- Next status update in 10 seconds. -- Next status update in 30 seconds.
self:__Status(-10) self:__Status(-30)
end end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ -549,8 +569,21 @@ function NAVYGROUP:onafterSpawned(From, Event, To)
-- Set default Alarm State. -- Set default Alarm State.
self:SwitchAlarmstate(self.option.Alarm) self:SwitchAlarmstate(self.option.Alarm)
-- Turn TACAN beacon on.
if self.tacanDefault then if self.tacanDefault then
self:SwitchTACAN(self.tacanDefault.Channel, self.tacanDefault.Morse, self.tacanDefault.BeaconName, self.tacanDefault.Band)
end
-- Turn ICLS on.
if self.iclsDefault then
self:SwitchICLS(self.iclsDefault.Channel, self.iclsDefault.Morse, self.iclsDefault.BeaconName)
end
-- Turn on the radio.
if self.radioDefault then
self:SwitchRadio(self.radioDefault.Freq, self.radioDefault.Modu)
else
self:SetDefaultRadio(self.radio.Freq, self.radio.Modu)
end end
end end
@ -1076,9 +1109,6 @@ function NAVYGROUP:_InitGroup()
self.radio.Freq=tonumber(self.template.units[1].frequency)/1000000 self.radio.Freq=tonumber(self.template.units[1].frequency)/1000000
self.radio.Modu=tonumber(self.template.units[1].modulation) self.radio.Modu=tonumber(self.template.units[1].modulation)
self.radioDefault.Freq=self.radio.Freq
self.radioDefault.Modu=self.radio.Modu
-- Set default formation. No really applicable for ships. -- Set default formation. No really applicable for ships.
self.optionDefault.Formation="Off Road" self.optionDefault.Formation="Off Road"
self.option.Formation=self.optionDefault.Formation self.option.Formation=self.optionDefault.Formation
@ -1408,15 +1438,6 @@ function NAVYGROUP:_CheckTurnsIntoWind()
end end
--- Get default cruise speed.
-- @param #NAVYGROUP self
-- @return #number Cruise speed (>0) in knots.
function NAVYGROUP:GetSpeedCruise()
return UTILS.KmphToKnots(self.speedCruise or self.speedmax*0.7)
end
--- Check queued turns into wind. --- Check queued turns into wind.
-- @param #NAVYGROUP self -- @param #NAVYGROUP self
-- @return #NAVYGROUP.IntoWind Next into wind data. -- @return #NAVYGROUP.IntoWind Next into wind data.

View File

@ -2982,7 +2982,7 @@ function OPSGROUP:GetAlarmstate()
return self.option.Alarm return self.option.Alarm
end end
--- Set default TACAN parameters. AA TACANs are always on "Y" band. --- Set default TACAN parameters.
-- @param #OPSGROUP self -- @param #OPSGROUP self
-- @param #number Channel TACAN channel. -- @param #number Channel TACAN channel.
-- @param #string Morse Morse code. Default "XXX". -- @param #string Morse Morse code. Default "XXX".
@ -3009,7 +3009,7 @@ end
-- @return #OPSGROUP self -- @return #OPSGROUP self
function OPSGROUP:SwitchTACAN(Channel, Morse, UnitName, Band) function OPSGROUP:SwitchTACAN(Channel, Morse, UnitName, Band)
if self:IsAlive() and Channel then if self:IsAlive() then
local unit=self.group:GetUnit(1) --Wrapper.Unit#UNIT local unit=self.group:GetUnit(1) --Wrapper.Unit#UNIT
@ -3026,11 +3026,15 @@ function OPSGROUP:SwitchTACAN(Channel, Morse, UnitName, Band)
unit=self.group:GetUnit(1) unit=self.group:GetUnit(1)
end end
if not Channel then
Channel=self.tacanDefault and self.tacanDefault.Channel or nil
end
if not Morse then if not Morse then
Morse=self.tacanDefault and self.tacanDefault.Morse or "XXX" Morse=self.tacanDefault and self.tacanDefault.Morse or "XXX"
end end
if unit and unit:IsAlive() then if unit and unit:IsAlive() and Channel then
local UnitID=unit:GetID() local UnitID=unit:GetID()
@ -3089,6 +3093,103 @@ function OPSGROUP:TurnOffTACAN()
end end
--- Set default ICLS parameters.
-- @param #OPSGROUP self
-- @param #number Channel ICLS channel.
-- @param #string Morse Morse code. Default "XXX".
-- @param #string UnitName Name of the unit acting as beacon.
-- @param #string Band ICLS mode. Default is "X" for ground and "Y" for airborne units.
-- @return #OPSGROUP self
function OPSGROUP:SetDefaultICLS(Channel, Morse, UnitName)
self.iclsDefault={}
self.iclsDefault.Channel=Channel
self.iclsDefault.Morse=Morse or "XXX"
self.iclsDefault.BeaconName=UnitName
return self
end
--- Activate/switch ICLS beacon settings.
-- @param #OPSGROUP self
-- @param #number Channel ICLS Channel.
-- @param #string Morse ICLS morse code. Default is the value set in @{#OPSGROUP.SetDefaultICLS} or if not set "XXX".
-- @param #string UnitName Name of the unit in the group which should activate the ICLS beacon. Can also be given as #number to specify the unit number. Default is the first unit of the group.
-- @return #OPSGROUP self
function OPSGROUP:SwitchICLS(Channel, Morse, UnitName)
if self:IsAlive() then
local unit=self.group:GetUnit(1) --Wrapper.Unit#UNIT
if UnitName then
if type(UnitName)=="number" then
unit=self.group:GetUnit(UnitName)
else
unit=UNIT:FindByName(UnitName)
end
end
if not unit then
self:E(self.lid.."ERROR: Could not get ICLS unit. Trying first unit in the group.")
unit=self.group:GetUnit(1)
end
if not Channel then
Channel=self.iclsDefault and self.iclsDefault.Channel or nil
end
if not Morse then
Morse=self.iclsDefault and self.iclsDefault.Morse or "XXX"
end
if unit and unit:IsAlive() and Channel then
local UnitID=unit:GetID()
-- Activate beacon.
unit:CommandActivateICLS(Channel, UnitID, Morse)
-- Update info.
self.icls={}
self.icls.Channel=Channel
self.icls.Morse=Morse
self.icls.Band=Band
self.icls.BeaconName=unit:GetName()
self.icls.BeaconUnit=unit
-- ICLS is now on.
self.iclsOn=true
self:I(self.lid..string.format("Switching ICLS to Channel %d Morse %s on unit %s", self.icls.Channel, tostring(self.icls.Morse), self.icls.BeaconName))
else
self:E(self.lid.."ERROR: Cound not set ICLS! Unit is not alive.")
end
end
return self
end
--- Deactivate ICLS beacon.
-- @param #OPSGROUP self
-- @return #OPSGROUP self
function OPSGROUP:TurnOffICLS()
if self.icls.BeaconUnit and self.icls.BeaconUnit:IsAlive() then
self.icls.BeaconUnit:CommandDeactivateICLS()
end
self:I(self.lid..string.format("Switching ICLS OFF"))
self.iclsOn=false
end
--- Set default Radio frequency and modulation. --- Set default Radio frequency and modulation.
-- @param #OPSGROUP self -- @param #OPSGROUP self
-- @param #number Frequency Radio frequency in MHz. Default 251 MHz. -- @param #number Frequency Radio frequency in MHz. Default 251 MHz.
@ -3096,6 +3197,7 @@ end
-- @return #OPSGROUP self -- @return #OPSGROUP self
function OPSGROUP:SetDefaultRadio(Frequency, Modulation) function OPSGROUP:SetDefaultRadio(Frequency, Modulation)
self.radioDefault={}
self.radioDefault.Freq=Frequency or 251 self.radioDefault.Freq=Frequency or 251
self.radioDefault.Modu=Modulation or radio.modulation.AM self.radioDefault.Modu=Modulation or radio.modulation.AM