mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-11 03:43:38 +00:00
Ops
This commit is contained in:
@@ -6000,6 +6000,22 @@ function WAREHOUSE:GetAssetByID(id)
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a warehouse asset from its name.
|
||||
-- @param #WAREHOUSE self
|
||||
-- @param #string GroupName Spawn group name.
|
||||
-- @return #WAREHOUSE.Assetitem The warehouse asset.
|
||||
function WAREHOUSE:GetAssetByName(GroupName)
|
||||
|
||||
local name=self:_GetNameWithOut(GroupName)
|
||||
local _,aid,_=self:_GetIDsFromGroup(GROUP:FindByName(name))
|
||||
|
||||
if aid then
|
||||
return _WAREHOUSEDB.Assets[aid]
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a warehouse request from its unique id.
|
||||
-- @param #WAREHOUSE self
|
||||
-- @param #number id Request ID.
|
||||
|
||||
@@ -579,7 +579,7 @@ function AIRWING:onafterStatus(From, Event, To)
|
||||
-- Count missions not over yet.
|
||||
local nmissions=self:CountMissionsInQueue()
|
||||
|
||||
-- TODO: count payloads, count squadrons, count missions
|
||||
-- TODO: count payloads, assets total
|
||||
local text=string.format("Status %s: missions=%d, payloads=%d, squads=%d", fsmstate, nmissions, #self.payloads, #self.squadrons)
|
||||
self:I(self.lid..text)
|
||||
|
||||
@@ -598,10 +598,10 @@ function AIRWING:onafterStatus(From, Event, To)
|
||||
-------------------
|
||||
local text="Squadrons:"
|
||||
for i,_squadron in pairs(self.squadrons) do
|
||||
local squadron=_squadron --#AIRWING.Squadron
|
||||
local squadron=_squadron --Ops.Squadron#SQUADRON
|
||||
|
||||
-- Squadron text
|
||||
text=text..string.format("\n* %s", squadron.name)
|
||||
text=text..string.format("\n* %s %s", squadron.name, squadron:GetState())
|
||||
|
||||
-- Loop over all assets.
|
||||
for j,_asset in pairs(squadron.assets) do
|
||||
@@ -1026,17 +1026,25 @@ function AIRWING:onafterMissionCancel(From, Event, To, Mission)
|
||||
|
||||
self:I(self.lid..string.format("Cancel mission %s", Mission.name))
|
||||
|
||||
for _,_asset in pairs(Mission.assets) do
|
||||
local asset=_asset --#AIRWING.SquadronAsset
|
||||
|
||||
local flightgroup=asset.flightgroup
|
||||
|
||||
if flightgroup then
|
||||
flightgroup:MissionCancel(Mission)
|
||||
if Mission:IsPlanned() or Mission:IsQueued() or Mission:IsRequested() then
|
||||
|
||||
Mission:Done()
|
||||
|
||||
else
|
||||
|
||||
for _,_asset in pairs(Mission.assets) do
|
||||
local asset=_asset --#AIRWING.SquadronAsset
|
||||
|
||||
local flightgroup=asset.flightgroup
|
||||
|
||||
if flightgroup then
|
||||
flightgroup:MissionCancel(Mission)
|
||||
end
|
||||
|
||||
-- Not requested any more (if it was).
|
||||
asset.requested=nil
|
||||
end
|
||||
|
||||
-- Not requested any more (if it was).
|
||||
asset.requested=nil
|
||||
end
|
||||
|
||||
-- Remove queued request (if any).
|
||||
@@ -1173,13 +1181,19 @@ end
|
||||
-- @param #string To To state.
|
||||
function AIRWING:onafterDestroyed(From, Event, To)
|
||||
|
||||
self:I(self.lid.."Airwing warehouse destroyed!")
|
||||
|
||||
-- Cancel all missions.
|
||||
for _,_mission in pairs(self.missionqueue) do
|
||||
local mission=_mission --Ops.Auftrag#AUFTRAG
|
||||
mission:Cancel()
|
||||
end
|
||||
|
||||
-- Remove all squadron assets.
|
||||
for _,_squadron in pairs(self.squadrons) do
|
||||
local squadron=_squadron --Ops.Squadron#SQUADRON
|
||||
for _,_asset in pairs(squadron.assets) do
|
||||
local asset=_asset
|
||||
squadron:DelAsset(asset)
|
||||
end
|
||||
squadron:Stop()
|
||||
-- Stop Squadron. This also removes all assets.
|
||||
squadron:Stop()
|
||||
end
|
||||
|
||||
-- Call parent warehouse function first.
|
||||
|
||||
@@ -232,6 +232,7 @@ AUFTRAG.TargetType={
|
||||
-- @field #number waypointindex Waypoint index.
|
||||
-- @field Ops.FlightGroup#FLIGHTGROUP.Task waypointtask Waypoint task.
|
||||
-- @field #string status Flight mission status.
|
||||
-- @field Ops.AirWing#AIRWING.SquadronAsset asset The squadron asset.
|
||||
|
||||
|
||||
--- AUFTRAG class version.
|
||||
@@ -312,7 +313,8 @@ function AUFTRAG:New(Type)
|
||||
self:AddTransition("*", "Stop", "*")
|
||||
|
||||
self:AddTransition("*", "Repeat", AUFTRAG.Status.PLANNED)
|
||||
|
||||
|
||||
self:AddTransition("*", "FlightDead", "*")
|
||||
self:AddTransition("*", "AssetDead", "*")
|
||||
|
||||
--[[
|
||||
@@ -1061,6 +1063,11 @@ function AUFTRAG:onafterStatus(From, Event, To)
|
||||
if fsmstate~=self.status then
|
||||
self:E(self.lid..string.format("ERROR: FSM state %s != %s mission status!", fsmstate, self.status))
|
||||
end
|
||||
|
||||
for _,_flightdata in pairs(self.flightdata) do
|
||||
local flightdata=_flightdata --#AUFTRAG.FlightData
|
||||
string.format("%s", flightdata.status)
|
||||
end
|
||||
|
||||
-- Check if mission is OVER (done or cancelled).
|
||||
if self:IsOver() then
|
||||
@@ -1100,6 +1107,32 @@ function AUFTRAG:Evaluate()
|
||||
return self
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- Asset Data
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--- Get asset data table.
|
||||
-- @param #AUFTRAG self
|
||||
-- @param #string AssetName Name of the asset.
|
||||
-- @return #AUFTRAG.FlightData Flight data or nil if flightgroup does not exist.
|
||||
function AUFTRAG:GetAssetDataByName(AssetName)
|
||||
return self.flightdata[tostring(AssetName)]
|
||||
end
|
||||
|
||||
--- Get asset data table.
|
||||
-- @param #AUFTRAG self
|
||||
-- @param #string AssetName Name of the asset.
|
||||
-- @return #AUFTRAG.FlightData Flight data or nil if flightgroup does not exist.
|
||||
function AUFTRAG:NewMissionAsset(AssetName)
|
||||
|
||||
local assetdata={} --#AUFTRAG.FlightData
|
||||
|
||||
--assetdata.status==AUFTRAG.FlightStatus.SCHEDULED
|
||||
|
||||
return self.flightdata[tostring(AssetName)]
|
||||
end
|
||||
|
||||
|
||||
--- Get flight data table.
|
||||
-- @param #AUFTRAG self
|
||||
-- @param Ops.FlightGroup#FLIGHTGROUP flightgroup The flight group.
|
||||
@@ -1129,6 +1162,7 @@ function AUFTRAG:SetFlightStatus(flightgroup, status)
|
||||
end
|
||||
end
|
||||
|
||||
-- Debug info.
|
||||
self:I(self.lid..string.format("Setting flight %s status to %s. IsNotOver=%s CheckFlightsDone=%s", flightgroup.groupname, self:GetFlightStatus(flightgroup), tostring(self:IsNotOver()), tostring(self:CheckFlightsDone())))
|
||||
|
||||
-- Check if ALL flights are done with their mission.
|
||||
@@ -1325,6 +1359,24 @@ function AUFTRAG:onafterDone(From, Event, To)
|
||||
self:I(self.lid..string.format("New mission status=%s", self.status))
|
||||
end
|
||||
|
||||
|
||||
--- On after "FlightDead" event.
|
||||
-- @param #AUFTRAG self
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
-- @param Ops.FlightGroup#FLIGHTGROUP FlightGroup The flightgroup that is dead now.
|
||||
function AUFTRAG:onafterFlightDead(From, Event, To, FlightGroup)
|
||||
|
||||
self:SetFlightStatus(FlightGroup, AUFTRAG.FlightStatus.DONE)
|
||||
|
||||
local asset=self:GetAssetByName(FlightGroup.groupname)
|
||||
if asset then
|
||||
self:AssetDead(asset)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--- On after "AssetDead" event.
|
||||
-- @param #AUFTRAG self
|
||||
-- @param #string From From state.
|
||||
@@ -1332,15 +1384,14 @@ end
|
||||
-- @param #string To To state.
|
||||
-- @param Ops.AirWing#AIRWING.SquadronAsset Asset The asset.
|
||||
function AUFTRAG:onafterAssetDead(From, Event, To, Asset)
|
||||
|
||||
-- Delete asset from mission.
|
||||
self:DelAsset(Asset)
|
||||
|
||||
|
||||
-- Remove flightgroup from mission.
|
||||
self:DelFlightGroup(Asset.flightgroup)
|
||||
--self:DelFlightGroup(Asset.flightgroup)
|
||||
|
||||
local N=self:CountFlightGroups()
|
||||
|
||||
-- All assets dead?
|
||||
if #self.assets==0 then
|
||||
if N==0 then
|
||||
|
||||
if self:IsNotOver() then
|
||||
|
||||
@@ -1350,14 +1401,19 @@ function AUFTRAG:onafterAssetDead(From, Event, To, Asset)
|
||||
else
|
||||
|
||||
self:E(self.lid.."ERROR: All assets are dead not but mission was already over... Investigate!")
|
||||
-- Now this can happen, because when a flightgroup dies (sometimes!), the mission is DONE
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
-- Remove asset from airwing.
|
||||
if self.airwing then
|
||||
self.airwing:RemoveAssetFromSquadron(Asset)
|
||||
end
|
||||
|
||||
-- Delete asset from mission.
|
||||
self:DelAsset(Asset)
|
||||
|
||||
end
|
||||
|
||||
--- On after "Success" event.
|
||||
@@ -1595,7 +1651,7 @@ function AUFTRAG:CountFlightGroups()
|
||||
return N
|
||||
end
|
||||
|
||||
--- Get coordinate of target. First unit/group of the set is used.
|
||||
--- Get coordinate of target.
|
||||
-- @param #AUFTRAG self
|
||||
-- @return Core.Point#COORDINATE The target coordinate or nil.
|
||||
function AUFTRAG:GetTargetCoordinate()
|
||||
|
||||
@@ -2305,10 +2305,7 @@ function FLIGHTGROUP:onafterFlightDead(From, Event, To)
|
||||
for _,_mission in pairs(self.missionqueue) do
|
||||
local mission=_mission --Ops.Auftrag#AUFTRAG
|
||||
|
||||
local asset=mission:GetAssetByName(self.groupname)
|
||||
if asset then
|
||||
mission:AssetDead(asset)
|
||||
end
|
||||
mission:FlightDead(self)
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -264,6 +264,7 @@ function SQUADRON:DelAsset(Asset)
|
||||
for i,_asset in pairs(self.assets) do
|
||||
local asset=_asset --Ops.AirWing#AIRWING.SquadronAsset
|
||||
if Asset.uid==asset.uid then
|
||||
self:T2(self.lid..string.format("Removing asset %s", asset.spawngroupname))
|
||||
table.remove(self.assets, i)
|
||||
break
|
||||
end
|
||||
@@ -277,7 +278,6 @@ end
|
||||
|
||||
--- On after Start event. Starts the FLIGHTGROUP FSM and event handlers.
|
||||
-- @param #SQUADRON self
|
||||
-- @param Wrapper.Group#GROUP Group Flight group.
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
@@ -293,7 +293,6 @@ end
|
||||
|
||||
--- On after "Status" event.
|
||||
-- @param #SQUADRON self
|
||||
-- @param Wrapper.Group#GROUP Group Flight group.
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
@@ -327,6 +326,21 @@ function SQUADRON:_CheckAssetStatus()
|
||||
|
||||
end
|
||||
|
||||
--- On after "Stop" event.
|
||||
-- @param #SQUADRON self
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
function SQUADRON:onafterStop(From, Event, To)
|
||||
|
||||
-- Remove all assets.
|
||||
for i=#self.assets,1,-1 do
|
||||
local asset=self.assets[i]
|
||||
self:DelAsqsset(asset)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- Misc Functions
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
@@ -374,13 +388,14 @@ function SQUADRON:CanMission(Mission)
|
||||
---
|
||||
|
||||
-- Check if this asset is currently on a PATROL mission (STARTED or EXECUTING).
|
||||
if self.airwing:IsAssetOnMission(asset, AUFTRAG.Type.PATROL) and Mission.type~=AUFTRAG.Type.PATROL then
|
||||
if self.airwing:IsAssetOnMission(asset, AUFTRAG.Type.PATROL) and Mission.type==AUFTRAG.Type.INTERCEPT then
|
||||
|
||||
-- Check if the payload of this asset is compatible with the mission.
|
||||
if self:CheckMissionType(Mission.type, asset.payload.missiontypes) then
|
||||
-- Note: we do not check the payload as an asset that is on a PATROL mission should be able to do an intercept as well!
|
||||
--if self:CheckMissionType(Mission.type, asset.payload.missiontypes) then
|
||||
-- TODO: Check if asset actually has weapons left. Difficult!
|
||||
table.insert(assets, asset)
|
||||
end
|
||||
--end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -243,7 +243,11 @@ function WINGCOMMANDER:onafterStatus(From, Event, To)
|
||||
|
||||
-- Add mission to queue.
|
||||
if mission then
|
||||
|
||||
--TODO: Better amount of necessary assets. Count units in asset and in contact. Might need nassetMin/Max.
|
||||
mission.nassets=1
|
||||
|
||||
-- Set mission contact.
|
||||
contact.mission=mission
|
||||
|
||||
-- Add mission to queue.
|
||||
|
||||
Reference in New Issue
Block a user