This commit is contained in:
Frank
2020-08-16 00:35:42 +02:00
parent adc89feda9
commit ed47b4b3db
8 changed files with 316 additions and 118 deletions

View File

@@ -1988,6 +1988,7 @@ function AIRWING:CountAssetsOnMission(MissionTypes, Squadron)
end
end
env.info(string.format("FF N=%d Np=%d, Nq=%d", Np+Nq, Np, Nq))
return Np+Nq, Np, Nq
end

View File

@@ -486,6 +486,7 @@ function AUFTRAG:New(Type)
self.engageAsGroup=true
self.missionRepeated=0
self.missionRepeatMax=0
self.NrepeatSuccess=0
self.nassets=1
self.dTevaluate=0
self.Ncasualties=0
@@ -982,6 +983,10 @@ function AUFTRAG:NewBOMBRUNWAY(Airdrome, Altitude)
if type(Airdrome)=="string" then
Airdrome=AIRBASE:FindByName(Airdrome)
end
if Airdrome:IsInstanceOf("AIRBASE") then
end
local mission=AUFTRAG:New(AUFTRAG.Type.BOMBRUNWAY)
@@ -995,7 +1000,7 @@ function AUFTRAG:NewBOMBRUNWAY(Airdrome, Altitude)
-- Mission options:
mission.missionTask=ENUMS.MissionTask.RUNWAYATTACK
mission.missionAltitude=mission.engageAltitude*0.8
mission.missionFraction=0.2
mission.missionFraction=0.75
mission.optionROE=ENUMS.ROE.OpenFire
mission.optionROT=ENUMS.ROT.PassiveDefense
@@ -3052,7 +3057,7 @@ function AUFTRAG:GetDCSMissionTask(TaskControllable)
-- BOMBRUNWAY Mission --
------------------------
local DCStask=CONTROLLABLE.TaskBombingRunway(nil, self.engageTarget.Target, self.engageWeaponType, self.engageWeaponExpend, self.engageQuantity, self.engageDirection, self.engageAsGroup)
local DCStask=CONTROLLABLE.TaskBombingRunway(nil, self.engageTarget:GetObject(), self.engageWeaponType, self.engageWeaponExpend, self.engageQuantity, self.engageDirection, self.engageAsGroup)
table.insert(DCStasks, DCStask)
@@ -3092,7 +3097,7 @@ function AUFTRAG:GetDCSMissionTask(TaskControllable)
-- ESCORT Mission --
--------------------
local DCStask=CONTROLLABLE.TaskEscort(nil, self.engageTarget.Target, self.escortVec3, LastWaypointIndex, self.engageMaxDistance, self.engageTargetTypes)
local DCStask=CONTROLLABLE.TaskEscort(nil, self.engageTarget:GetObject(), self.escortVec3, LastWaypointIndex, self.engageMaxDistance, self.engageTargetTypes)
table.insert(DCStasks, DCStask)
@@ -3102,7 +3107,7 @@ function AUFTRAG:GetDCSMissionTask(TaskControllable)
-- FAC Mission --
-----------------
local DCStask=CONTROLLABLE.TaskFAC_AttackGroup(nil, self.engageTarget.Target, self.engageWeaponType, self.facDesignation, self.facDatalink, self.facFreq, self.facModu, CallsignName, CallsignNumber)
local DCStask=CONTROLLABLE.TaskFAC_AttackGroup(nil, self.engageTarget:GetObject(), self.engageWeaponType, self.facDesignation, self.facDatalink, self.facFreq, self.facModu, CallsignName, CallsignNumber)
table.insert(DCStasks, DCStask)

View File

@@ -416,6 +416,9 @@ function NAVYGROUP:onafterStatus(From, Event, To)
local pos=self:GetCoordinate()
local speed=self.group:GetVelocityKNOTS()
-- Update last known position, orientation, velocity.
self:_UpdatePosition()
-- Check if group started or stopped turning.
self:_CheckTurning()
@@ -440,9 +443,6 @@ function NAVYGROUP:onafterStatus(From, Event, To)
end
-- Check water is ahead.
--collision=self:_CheckCollisionCoord(pos:Translate(freepath+100, hdg))
end
-- Check into wind queue.
@@ -1348,10 +1348,10 @@ function NAVYGROUP:_CheckTurning()
if unit and unit:IsAlive() then
-- Current orientation of carrier.
local vNew=unit:GetOrientationX()
local vNew=self.orientX --unit:GetOrientationX()
-- Last orientation from 30 seconds ago.
local vLast=self.Corientlast or vNew
local vLast=self.orientXLast --self.Corientlast or vNew
-- We only need the X-Z plane.
vNew.y=0 ; vLast.y=0
@@ -1360,7 +1360,7 @@ function NAVYGROUP:_CheckTurning()
local deltaLast=math.deg(math.acos(UTILS.VecDot(vNew,vLast)/UTILS.VecNorm(vNew)/UTILS.VecNorm(vLast)))
-- Last orientation becomes new orientation
self.Corientlast=vNew
--self.Corientlast=vNew
-- Carrier is turning when its heading changed by at least two degrees since last check.
local turning=math.abs(deltaLast)>=2

View File

@@ -2386,7 +2386,7 @@ function OPSGROUP:onafterCheckZone(From, Event, To)
end
if not self:IsStopped() then
self:__CheckZone(-1)
self:__CheckZone(-10)
end
end
@@ -2443,7 +2443,6 @@ function OPSGROUP:_CheckInZones()
self:EnterZone(enterzone)
end
end
end
@@ -3494,6 +3493,30 @@ end
-- Element and Group Status Functions
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--- Check if all elements of the group have the same status (or are dead).
-- @param #OPSGROUP self
-- @param #string unitname Name of unit.
function OPSGROUP:_UpdatePosition()
if self:IsAlive() then
self.positionLast=self.position or self:GetCoordinate()
self.headingLast=self.heading or self:GetHeading()
self.orientXLast=self.orientX or self.group:GetUnit(1):GetOrientationX()
self.velocityLast=self.velocity or self.group:GetVelocityMPS()
self.position=self:GetCoordinate()
self.heading=self:GetHeading()
self.orientX=self.group:GetUnit(1):GetOrientationX()
self.velocity=self.group:GetVelocityMPS()
self.dTpositionUpdate=self.TpositionUpdate and self.TpositionUpdate-timer.getAbsTime() or 0
self.TpositionUpdate=timer.getAbsTime()
end
end
--- Check if all elements of the group have the same status (or are dead).
-- @param #OPSGROUP self
-- @param #string unitname Name of unit.

View File

@@ -574,8 +574,11 @@ function SQUADRON:onafterStatus(From, Event, To)
local NassetsTot=#self.assets
local NassetsInS=self:CountAssetsInStock()
local NassetsQP, NassetsP, NassetsQ=self.airwing and self.airwing:CountAssetsOnMission(nil, self) or 0,0,0
local NassetsQP=0 ; local NassetsP=0 ; local NassetsQ=0
if self.airwing then
NassetsQP, NassetsP, NassetsQ=self.airwing:CountAssetsOnMission(nil, self)
end
-- Short info.
local text=string.format("%s [Type=%s, Callsign=%s, Modex=%d, Skill=%s]: Assets Total=%d, InStock=%d, OnMission=%d [P=%d, Q=%d]",
fsmstate, self.aircrafttype, callsign, modex, skill, NassetsTot, NassetsInS, NassetsQP, NassetsP, NassetsQ)
@@ -613,6 +616,8 @@ function SQUADRON:_CheckAssetStatus()
if mission then
local distance=asset.flightgroup and UTILS.MetersToNM(mission:GetTargetDistance(asset.flightgroup.group:GetCoordinate())) or 0
text=text..string.format(" Mission %s - %s: Status=%s, Dist=%.1f NM", mission.name, mission.type, mission.status, distance)
else
text=text.."Mission None"
end
-- Flight status.