This commit is contained in:
Frank
2020-04-01 01:46:01 +02:00
parent 3e5b87411e
commit 81977aa04d
6 changed files with 95 additions and 25 deletions
+5
View File
@@ -203,6 +203,11 @@ function AIRWING:AddSquadron(Squadron)
-- Set airwing to squadron. -- Set airwing to squadron.
Squadron:SetAirwing(self) Squadron:SetAirwing(self)
-- Start squadron.
if Squadron:IsStopped() then
Squadron:Start()
end
return self return self
end end
+10 -2
View File
@@ -267,6 +267,7 @@ AUFTRAG.version="0.0.9"
-- DONE: NewAUTO() NewA2G NewA2A -- DONE: NewAUTO() NewA2G NewA2A
-- TODO: Transport mission. -- TODO: Transport mission.
-- TODO: Recon mission. -- TODO: Recon mission.
-- TODO: Set mission coalition, e.g. for F10 markers.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Constructor -- Constructor
@@ -1874,15 +1875,22 @@ end
-- @return #AUFTRAG self -- @return #AUFTRAG self
function AUFTRAG:UpdateMarker() function AUFTRAG:UpdateMarker()
-- Marker text.
local text=string.format("%s %s", self.name, self.status) local text=string.format("%s %s", self.name, self.status)
text=text..string.format("Targets=%d", self:CountMissionTargets()) text=text..string.format("Targets=%d", self:CountMissionTargets())
-- Remove old marker.
if self.markerID then if self.markerID then
COORDINATE.RemoveMark(nil, self.markerID) COORDINATE.RemoveMark(nil, self.markerID)
end end
self.markerID=self:GetTargetCoordinate():MarkToAll(text, true) -- Get target coordinates. Can be nil!
local targetcoord=self:GetTargetCoordinate()
-- New marker!
if targetcoord then
self.markerID=targetcoord:MarkToAll(text, true)
end
return self return self
end end
@@ -1262,6 +1262,31 @@ function FLIGHTGROUP:GetFuelMin()
return fuelmin*100 return fuelmin*100
end end
--- Self destruction of group. An explosion is created at the position of each element.
-- @param #FLIGHTGROUP self
-- @param #number Delay Delay in seconds. Default now.
-- @param #number ExplosionPower (Optional) Explosion power in kg TNT. Default 500 kg.
-- @return #number Relative fuel in percent.
function FLIGHTGROUP:SelfDestruction(Delay, ExplosionPower)
if Delay and Delay>0 then
self:ScheduleOnce(Delay, FLIGHTGROUP.SelfDestruction, self, 0, ExplosionPower)
else
-- Loop over all elements.
for i,_element in pairs(self.elements) do
local element=_element --#FLIGHTGROUP.Element
local unit=element.unit
if unit and unit:IsAlive() then
unit:Explode(ExplosionPower)
end
end
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Start & Status -- Start & Status
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+53 -21
View File
@@ -2,7 +2,10 @@
-- --
-- **Main Features:** -- **Main Features:**
-- --
-- * Stuff -- * Set parameters like livery, skill valid for all squadron members.
-- * Define modex and callsigns.
-- * Define mission types, this squadron can perform (see Ops.Auftrag#AUFTRAG).
-- * Pause/unpause squadron operations.
-- --
-- === -- ===
-- --
@@ -67,11 +70,6 @@ SQUADRON = {
refuelSystem = nil, refuelSystem = nil,
} }
--- Flight group element.
-- @type SQUADRON.Flight
-- @field Ops.FlightGroup#FLIGHTGROUP flightgroup The flight group object.
-- @field #string mission Mission assigned to the flight.
--- SQUADRON class version. --- SQUADRON class version.
-- @field #string version -- @field #string version
SQUADRON.version="0.0.5" SQUADRON.version="0.0.5"
@@ -133,10 +131,10 @@ function SQUADRON:New(TemplateGroupName, Ngroups, SquadronName)
-- Add FSM transitions. -- Add FSM transitions.
-- From State --> Event --> To State -- From State --> Event --> To State
self:AddTransition("Stopped", "Start", "Running") -- Start FSM. self:AddTransition("Stopped", "Start", "OnDuty") -- Start FSM.
self:AddTransition("*", "Status", "*") -- Status update. self:AddTransition("*", "Status", "*") -- Status update.
self:AddTransition("Running", "Pause", "Paused") -- Pause squadron. self:AddTransition("OnDuty", "Pause", "Paused") -- Pause squadron.
self:AddTransition("Paused", "Unpause", "Running") -- Unpause squadron. self:AddTransition("Paused", "Unpause", "OnDuty") -- Unpause squadron.
self:AddTransition("*", "Stop", "Stopped") -- Stop squadron. self:AddTransition("*", "Stop", "Stopped") -- Stop squadron.
@@ -329,7 +327,7 @@ function SQUADRON:GetCallsign(Asset)
Asset.callsign[i]=callsign Asset.callsign[i]=callsign
self:I({callsign=callsign}) self:T3({callsign=callsign})
--TODO: there is also a table entry .name, which is a string. --TODO: there is also a table entry .name, which is a string.
end end
@@ -355,7 +353,7 @@ function SQUADRON:GetModex(Asset)
self.modexcounter=self.modexcounter+1 self.modexcounter=self.modexcounter+1
self:I({modex=Asset.modex[i]}) self:T3({modex=Asset.modex[i]})
end end
@@ -363,6 +361,28 @@ function SQUADRON:GetModex(Asset)
end end
--- Check if squadron is "OnDuty".
-- @param #SQUADRON self
-- @return #boolean If true, squdron is in state "OnDuty".
function SQUADRON:IsOnDuty()
return self:Is("OnDuty")
end
--- Check if squadron is "Stopped".
-- @param #SQUADRON self
-- @return #boolean If true, squdron is in state "Stopped".
function SQUADRON:IsStopped()
return self:Is("Stopped")
end
--- Check if squadron is "Paused".
-- @param #SQUADRON self
-- @return #boolean If true, squdron is in state "Paused".
function SQUADRON:IsPaused()
return self:Is("Paused")
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Start & Status -- Start & Status
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -375,7 +395,7 @@ end
function SQUADRON:onafterStart(From, Event, To) function SQUADRON:onafterStart(From, Event, To)
-- Short info. -- Short info.
local text=string.format("Starting SQUADRON %s.", self.name) local text=string.format("Starting SQUADRON", self.name)
self:I(self.lid..text) self:I(self.lid..text)
-- Start the status monitoring. -- Start the status monitoring.
@@ -396,11 +416,12 @@ function SQUADRON:onafterStatus(From, Event, To)
--self:_CheckAssetStatus() --self:_CheckAssetStatus()
-- Short info. -- Short info.
local text=string.format("Status %s", fsmstate) local text=string.format("Status %s: Assets %d", fsmstate, #self.assets)
self:I(self.sid..text) self:I(self.lid..text)
if not self:IsStopped() then
self:__Status(-30) self:__Status(-30)
end
end end
@@ -424,10 +445,12 @@ end
-- @param #string To To state. -- @param #string To To state.
function SQUADRON:onafterStop(From, Event, To) function SQUADRON:onafterStop(From, Event, To)
self:I(self.lid.."STOPPING Squadron!")
-- Remove all assets. -- Remove all assets.
for i=#self.assets,1,-1 do for i=#self.assets,1,-1 do
local asset=self.assets[i] local asset=self.assets[i]
self:DelAsqsset(asset) self:DelAsset(asset)
end end
end end
@@ -466,16 +489,16 @@ function SQUADRON:CanMission(Mission)
local TargetDistance=Mission:GetTargetDistance(self.airwing:GetCoordinate()) local TargetDistance=Mission:GetTargetDistance(self.airwing:GetCoordinate())
for _,_asset in pairs(self.assets) do for _,_asset in pairs(self.assets) do
local asset=_asset --#AIRWING.SquadronAsset local asset=_asset --Ops.AirWing#AIRWING.SquadronAsset
-- Set range is valid. -- Set range is valid. Mission engage distance can overrule the squad engage range.
if TargetDistance<=self.engageRange or (Mission.engageMaxDistance and TargetDistance<=Mission.engageMaxDistance) then if TargetDistance<=self.engageRange or (Mission.engageMaxDistance and TargetDistance<=Mission.engageMaxDistance) then
-- Check if asset is currently on a mission (STARTED or QUEUED). -- Check if asset is currently on a mission (STARTED or QUEUED).
if self.airwing:IsAssetOnMission(asset) then if self.airwing:IsAssetOnMission(asset) then
--- ---
-- This asset is already on a mission -- Asset is already on a mission
--- ---
-- Check if this asset is currently on a PATROL mission (STARTED or EXECUTING). -- Check if this asset is currently on a PATROL mission (STARTED or EXECUTING).
@@ -493,11 +516,15 @@ function SQUADRON:CanMission(Mission)
else else
--- ---
-- This asset as no current mission -- Asset as no current mission
--- ---
if asset.spawned then if asset.spawned then
---
-- Asset is already SPAWNED (could be uncontrolled on the airfield)
---
local combatready=false local combatready=false
local flightgroup=asset.flightgroup local flightgroup=asset.flightgroup
if flightgroup then if flightgroup then
@@ -515,6 +542,11 @@ function SQUADRON:CanMission(Mission)
else else
---
-- Asset is still in STOCK
---
-- Check that asset is not already requeseted for another mission.
if not asset.requested then if not asset.requested then
-- Check if we got a payload and reserve it for this asset. -- Check if we got a payload and reserve it for this asset.
+1 -1
View File
@@ -96,7 +96,7 @@ ENUMS.WeaponFlag={
ENUMS.MissionTask={ ENUMS.MissionTask={
NOTHING="Nothing", NOTHING="Nothing",
AFAC="AFAC", AFAC="AFAC",
ANTISHIPSTRIKE="Anti-ship Strike", ANTISHIPSTRIKE="Antiship Strike",
AWACS="AWACS", AWACS="AWACS",
CAP="CAP", CAP="CAP",
CAS="CAS", CAS="CAS",
+1 -1
View File
@@ -65,7 +65,7 @@ CALLSIGN={
Enfield=1, Enfield=1,
Springfield=2, Springfield=2,
Uzi=3, Uzi=3,
Cold=4, Colt=4,
Dodge=5, Dodge=5,
Ford=6, Ford=6,
Chevy=7, Chevy=7,