mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #2195 from FlightControl-Master/FF/Ops
OPSGROUP v1.0.3
This commit is contained in:
commit
1fbe78b667
@ -68,7 +68,7 @@ ARMYGROUP = {
|
|||||||
|
|
||||||
--- Army Group version.
|
--- Army Group version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
ARMYGROUP.version="1.0.1"
|
ARMYGROUP.version="1.0.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -2049,12 +2049,14 @@ end
|
|||||||
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
||||||
-- @param #ARMYGROUP self
|
-- @param #ARMYGROUP self
|
||||||
-- @param #table Template Template used to init the group. Default is `self.template`.
|
-- @param #table Template Template used to init the group. Default is `self.template`.
|
||||||
|
-- @param #number Delay Delay in seconds before group is initialized. Default `nil`, *i.e.* instantaneous.
|
||||||
-- @return #ARMYGROUP self
|
-- @return #ARMYGROUP self
|
||||||
function ARMYGROUP:_InitGroup(Template, Delay)
|
function ARMYGROUP:_InitGroup(Template, Delay)
|
||||||
|
|
||||||
if Delay and Delay>0 then
|
if Delay and Delay>0 then
|
||||||
self:ScheduleOnce(Delay, ARMYGROUP._InitGroup, self, Template, 0)
|
self:ScheduleOnce(Delay, ARMYGROUP._InitGroup, self, Template, 0)
|
||||||
else
|
else
|
||||||
|
|
||||||
-- First check if group was already initialized.
|
-- First check if group was already initialized.
|
||||||
if self.groupinitialized then
|
if self.groupinitialized then
|
||||||
self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!")
|
self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!")
|
||||||
@ -2101,62 +2103,16 @@ function ARMYGROUP:_InitGroup(Template, Delay)
|
|||||||
-- Get current formation from first waypoint.
|
-- Get current formation from first waypoint.
|
||||||
self.option.Formation=template.route.points[1].action
|
self.option.Formation=template.route.points[1].action
|
||||||
|
|
||||||
-- Set default formation to "on road".
|
|
||||||
self.optionDefault.Formation=ENUMS.Formation.Vehicle.OnRoad
|
|
||||||
|
|
||||||
-- First check if group was already initialized.
|
|
||||||
if self.groupinitialized then
|
|
||||||
self:T(self.lid.."WARNING: Group was already initialized! Will NOT do it again!")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
self:T(self.lid.."FF Initializing Group")
|
|
||||||
|
|
||||||
-- Get template of group.
|
|
||||||
local template=Template or self:_GetTemplate()
|
|
||||||
|
|
||||||
-- Ground are always AI.
|
|
||||||
self.isAI=true
|
|
||||||
|
|
||||||
-- Is (template) group late activated.
|
|
||||||
self.isLateActivated=template.lateActivation
|
|
||||||
|
|
||||||
-- Ground groups cannot be uncontrolled.
|
|
||||||
self.isUncontrolled=false
|
|
||||||
|
|
||||||
-- Max speed in km/h.
|
|
||||||
self.speedMax=self.group:GetSpeedMax()
|
|
||||||
|
|
||||||
-- Is group mobile?
|
|
||||||
if self.speedMax>3.6 then
|
|
||||||
self.isMobile=true
|
|
||||||
else
|
|
||||||
self.isMobile=false
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Cruise speed in km/h
|
|
||||||
self.speedCruise=self.speedMax*0.7
|
|
||||||
|
|
||||||
-- Group ammo.
|
|
||||||
self.ammo=self:GetAmmoTot()
|
|
||||||
|
|
||||||
-- Radio parameters from template.
|
|
||||||
self.radio.On=false -- Radio is always OFF for ground.
|
|
||||||
self.radio.Freq=133
|
|
||||||
self.radio.Modu=radio.modulation.AM
|
|
||||||
|
|
||||||
-- Set default radio.
|
|
||||||
self:SetDefaultRadio(self.radio.Freq, self.radio.Modu, self.radio.On)
|
|
||||||
|
|
||||||
-- Get current formation from first waypoint.
|
|
||||||
self.option.Formation=template.route.points[1].action
|
|
||||||
|
|
||||||
-- Set default formation to "on road".
|
-- Set default formation to "on road".
|
||||||
self.optionDefault.Formation=ENUMS.Formation.Vehicle.OnRoad
|
self.optionDefault.Formation=ENUMS.Formation.Vehicle.OnRoad
|
||||||
|
|
||||||
-- Default TACAN off.
|
-- Default TACAN off.
|
||||||
|
if not self.tacanDefault then
|
||||||
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
||||||
|
end
|
||||||
|
if not self.tacan then
|
||||||
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
||||||
|
end
|
||||||
|
|
||||||
-- Units of the group.
|
-- Units of the group.
|
||||||
local units=self.group:GetUnits()
|
local units=self.group:GetUnits()
|
||||||
@ -2177,7 +2133,6 @@ function ARMYGROUP:_InitGroup(Template, Delay)
|
|||||||
self:_AddElementByName(unitname)
|
self:_AddElementByName(unitname)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Init done.
|
-- Init done.
|
||||||
self.groupinitialized=true
|
self.groupinitialized=true
|
||||||
end
|
end
|
||||||
|
|||||||
@ -217,7 +217,7 @@ FLIGHTGROUP.Players={}
|
|||||||
|
|
||||||
--- FLIGHTGROUP class version.
|
--- FLIGHTGROUP class version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
FLIGHTGROUP.version="1.0.2"
|
FLIGHTGROUP.version="1.0.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -3803,8 +3803,13 @@ end
|
|||||||
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
||||||
-- @param #FLIGHTGROUP self
|
-- @param #FLIGHTGROUP self
|
||||||
-- @param #table Template Template used to init the group. Default is `self.template`.
|
-- @param #table Template Template used to init the group. Default is `self.template`.
|
||||||
|
-- @param #number Delay Delay in seconds before group is initialized. Default `nil`, *i.e.* instantaneous.
|
||||||
-- @return #FLIGHTGROUP self
|
-- @return #FLIGHTGROUP self
|
||||||
function FLIGHTGROUP:_InitGroup(Template)
|
function FLIGHTGROUP:_InitGroup(Template, Delay)
|
||||||
|
|
||||||
|
if Delay and Delay>0 then
|
||||||
|
self:ScheduleOnce(Delay, FLIGHTGROUP._InitGroup, self, Template, 0)
|
||||||
|
else
|
||||||
|
|
||||||
-- First check if group was already initialized.
|
-- First check if group was already initialized.
|
||||||
if self.groupinitialized then
|
if self.groupinitialized then
|
||||||
@ -3878,8 +3883,12 @@ function FLIGHTGROUP:_InitGroup(Template)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Default TACAN off.
|
-- Default TACAN off.
|
||||||
|
if not self.tacanDefault then
|
||||||
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
||||||
|
end
|
||||||
|
if not self.tacan then
|
||||||
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
||||||
|
end
|
||||||
|
|
||||||
-- Is this purely AI?
|
-- Is this purely AI?
|
||||||
self.isAI=not self:_IsHuman(group)
|
self.isAI=not self:_IsHuman(group)
|
||||||
@ -3911,6 +3920,7 @@ function FLIGHTGROUP:_InitGroup(Template)
|
|||||||
|
|
||||||
-- Init done.
|
-- Init done.
|
||||||
self.groupinitialized=true
|
self.groupinitialized=true
|
||||||
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|||||||
@ -91,7 +91,7 @@ NAVYGROUP = {
|
|||||||
|
|
||||||
--- NavyGroup version.
|
--- NavyGroup version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
NAVYGROUP.version="1.0.2"
|
NAVYGROUP.version="1.0.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -775,7 +775,7 @@ end
|
|||||||
|
|
||||||
--- Update status.
|
--- Update status.
|
||||||
-- @param #NAVYGROUP self
|
-- @param #NAVYGROUP self
|
||||||
function NAVYGROUP:Status(From, Event, To)
|
function NAVYGROUP:Status()
|
||||||
|
|
||||||
-- FSM state.
|
-- FSM state.
|
||||||
local fsmstate=self:GetState()
|
local fsmstate=self:GetState()
|
||||||
@ -978,6 +978,35 @@ function NAVYGROUP:Status(From, Event, To)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Elements
|
||||||
|
---
|
||||||
|
|
||||||
|
if self.verbose>=2 then
|
||||||
|
local text="Elements:"
|
||||||
|
for i,_element in pairs(self.elements) do
|
||||||
|
local element=_element --Ops.OpsGroup#OPSGROUP.Element
|
||||||
|
|
||||||
|
local name=element.name
|
||||||
|
local status=element.status
|
||||||
|
local unit=element.unit
|
||||||
|
local life,life0=self:GetLifePoints(element)
|
||||||
|
|
||||||
|
local life0=element.life0
|
||||||
|
|
||||||
|
-- Get ammo.
|
||||||
|
local ammo=self:GetAmmoElement(element)
|
||||||
|
|
||||||
|
-- Output text for element.
|
||||||
|
text=text..string.format("\n[%d] %s: status=%s, life=%.1f/%.1f, guns=%d, rockets=%d, bombs=%d, missiles=%d, cargo=%d/%d kg",
|
||||||
|
i, name, status, life, life0, ammo.Guns, ammo.Rockets, ammo.Bombs, ammo.Missiles, element.weightCargo, element.weightMaxCargo)
|
||||||
|
end
|
||||||
|
if #self.elements==0 then
|
||||||
|
text=text.." none!"
|
||||||
|
end
|
||||||
|
self:I(self.lid..text)
|
||||||
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Engage Detected Targets
|
-- Engage Detected Targets
|
||||||
---
|
---
|
||||||
@ -1041,7 +1070,7 @@ function NAVYGROUP:onafterSpawned(From, Event, To)
|
|||||||
|
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
if self.verbose>=1 then
|
if self.verbose>=1 then
|
||||||
local text=string.format("Initialized Navy Group %s:\n", self.groupname)
|
local text=string.format("Initialized Navy Group %s [GID=%d]:\n", self.groupname, self.group:GetID())
|
||||||
text=text..string.format("Unit type = %s\n", self.actype)
|
text=text..string.format("Unit type = %s\n", self.actype)
|
||||||
text=text..string.format("Speed max = %.1f Knots\n", UTILS.KmphToKnots(self.speedMax))
|
text=text..string.format("Speed max = %.1f Knots\n", UTILS.KmphToKnots(self.speedMax))
|
||||||
text=text..string.format("Speed cruise = %.1f Knots\n", UTILS.KmphToKnots(self.speedCruise))
|
text=text..string.format("Speed cruise = %.1f Knots\n", UTILS.KmphToKnots(self.speedCruise))
|
||||||
@ -1841,8 +1870,14 @@ end
|
|||||||
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
--- Initialize group parameters. Also initializes waypoints if self.waypoints is nil.
|
||||||
-- @param #NAVYGROUP self
|
-- @param #NAVYGROUP self
|
||||||
-- @param #table Template Template used to init the group. Default is `self.template`.
|
-- @param #table Template Template used to init the group. Default is `self.template`.
|
||||||
|
-- @param #number Delay Delay in seconds before group is initialized. Default `nil`, *i.e.* instantaneous.
|
||||||
-- @return #NAVYGROUP self
|
-- @return #NAVYGROUP self
|
||||||
function NAVYGROUP:_InitGroup(Template)
|
function NAVYGROUP:_InitGroup(Template, Delay)
|
||||||
|
|
||||||
|
if Delay and Delay>0 then
|
||||||
|
-- Delayed call
|
||||||
|
self:ScheduleOnce(Delay, NAVYGROUP._InitGroup, self, Template, 0)
|
||||||
|
else
|
||||||
|
|
||||||
-- First check if group was already initialized.
|
-- First check if group was already initialized.
|
||||||
if self.groupinitialized then
|
if self.groupinitialized then
|
||||||
@ -1888,13 +1923,21 @@ function NAVYGROUP:_InitGroup(Template)
|
|||||||
self.optionDefault.Formation="Off Road"
|
self.optionDefault.Formation="Off Road"
|
||||||
self.option.Formation=self.optionDefault.Formation
|
self.option.Formation=self.optionDefault.Formation
|
||||||
|
|
||||||
-- Default TACAN off.
|
-- Default TACAN off (we check if something is set already to keep those values in case of respawn)
|
||||||
|
if not self.tacanDefault then
|
||||||
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
self:SetDefaultTACAN(nil, nil, nil, nil, true)
|
||||||
|
end
|
||||||
|
if not self.tacan then
|
||||||
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
self.tacan=UTILS.DeepCopy(self.tacanDefault)
|
||||||
|
end
|
||||||
|
|
||||||
-- Default ICLS off.
|
-- Default ICLS off.
|
||||||
|
if not self.iclsDefault then
|
||||||
self:SetDefaultICLS(nil, nil, nil, true)
|
self:SetDefaultICLS(nil, nil, nil, true)
|
||||||
|
end
|
||||||
|
if not self.icls then
|
||||||
self.icls=UTILS.DeepCopy(self.iclsDefault)
|
self.icls=UTILS.DeepCopy(self.iclsDefault)
|
||||||
|
end
|
||||||
|
|
||||||
-- Get all units of the group.
|
-- Get all units of the group.
|
||||||
local units=self.group:GetUnits()
|
local units=self.group:GetUnits()
|
||||||
@ -1915,6 +1958,7 @@ function NAVYGROUP:_InitGroup(Template)
|
|||||||
|
|
||||||
-- Init done.
|
-- Init done.
|
||||||
self.groupinitialized=true
|
self.groupinitialized=true
|
||||||
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|||||||
@ -512,7 +512,7 @@ OPSGROUP.CargoStatus={
|
|||||||
|
|
||||||
--- OpsGroup version.
|
--- OpsGroup version.
|
||||||
-- @field #string version
|
-- @field #string version
|
||||||
OPSGROUP.version="1.0.1"
|
OPSGROUP.version="1.0.3"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- TODO list
|
-- TODO list
|
||||||
@ -7675,6 +7675,7 @@ function OPSGROUP:Teleport(Coordinate, Delay, NoPauseMission)
|
|||||||
unit.heading=math.rad(heading)
|
unit.heading=math.rad(heading)
|
||||||
unit.psi=-unit.heading
|
unit.psi=-unit.heading
|
||||||
else
|
else
|
||||||
|
-- Remove unit from spawn template because it is already dead
|
||||||
table.remove(units, i)
|
table.remove(units, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -7762,25 +7763,41 @@ function OPSGROUP:_Respawn(Delay, Template, Reset)
|
|||||||
-- Despawn old group. Dont trigger any remove unit event since this is a respawn.
|
-- Despawn old group. Dont trigger any remove unit event since this is a respawn.
|
||||||
self:Despawn(0, true)
|
self:Despawn(0, true)
|
||||||
|
|
||||||
else
|
end
|
||||||
|
|
||||||
---
|
|
||||||
-- Group is NOT ALIVE
|
|
||||||
---
|
|
||||||
|
|
||||||
-- Ensure elements in utero.
|
-- Ensure elements in utero.
|
||||||
for _,_element in pairs(self.elements) do
|
for _,_element in pairs(self.elements) do
|
||||||
local element=_element --#OPSGROUP.Element
|
local element=_element --#OPSGROUP.Element
|
||||||
|
if element and element.status~=OPSGROUP.ElementStatus.DEAD then
|
||||||
self:ElementInUtero(element)
|
self:ElementInUtero(element)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Spawn with a little delay (especially Navy groups caused problems if they were instantly respawned)
|
||||||
|
self:_Spawn(0.01, Template)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Spawn group from a given template.
|
||||||
|
-- @param #OPSGROUP self
|
||||||
|
-- @param #number Delay Delay in seconds before respawn happens. Default 0.
|
||||||
|
-- @param DCS#Template Template (optional) The template of the Group retrieved with GROUP:GetTemplate(). If the template is not provided, the template will be retrieved of the group itself.
|
||||||
|
-- @return #OPSGROUP self
|
||||||
|
function OPSGROUP:_Spawn(Delay, Template)
|
||||||
|
if Delay and Delay>0 then
|
||||||
|
self:ScheduleOnce(Delay, OPSGROUP._Spawn, self, 0, Template)
|
||||||
|
else
|
||||||
-- Debug output.
|
-- Debug output.
|
||||||
self:T({Template=Template})
|
self:T2({Template=Template})
|
||||||
|
|
||||||
-- Spawn new group.
|
-- Spawn new group.
|
||||||
self.group=_DATABASE:Spawn(Template)
|
self.group=_DATABASE:Spawn(Template)
|
||||||
|
--local countryID=self.group:GetCountry()
|
||||||
|
--local categoryID=self.group:GetCategory()
|
||||||
|
--local dcsgroup=coalition.addGroup(countryID, categoryID, Template)
|
||||||
|
|
||||||
-- Set DCS group and controller.
|
-- Set DCS group and controller.
|
||||||
self.dcsgroup=self:GetDCSGroup()
|
self.dcsgroup=self:GetDCSGroup()
|
||||||
@ -7794,7 +7811,6 @@ function OPSGROUP:_Respawn(Delay, Template, Reset)
|
|||||||
self.isDead=false
|
self.isDead=false
|
||||||
self.isDestroyed=false
|
self.isDestroyed=false
|
||||||
|
|
||||||
|
|
||||||
self.groupinitialized=false
|
self.groupinitialized=false
|
||||||
self.wpcounter=1
|
self.wpcounter=1
|
||||||
self.currentwp=1
|
self.currentwp=1
|
||||||
@ -7802,15 +7818,12 @@ function OPSGROUP:_Respawn(Delay, Template, Reset)
|
|||||||
-- Init waypoints.
|
-- Init waypoints.
|
||||||
self:_InitWaypoints()
|
self:_InitWaypoints()
|
||||||
|
|
||||||
-- Init Group.
|
-- Init Group. This call is delayed because NAVY groups did not like to be initialized just yet (group did not contain any units).
|
||||||
self:_InitGroup(Template)
|
self:_InitGroup(Template, 0.001)
|
||||||
|
|
||||||
-- Reset events.
|
-- Reset events.
|
||||||
--self:ResetEvents()
|
--self:ResetEvents()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return self
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "InUtero" event.
|
--- On after "InUtero" event.
|
||||||
@ -7830,24 +7843,6 @@ end
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
function OPSGROUP:onafterDamaged(From, Event, To)
|
function OPSGROUP:onafterDamaged(From, Event, To)
|
||||||
self:T(self.lid..string.format("Group damaged at t=%.3f", timer.getTime()))
|
self:T(self.lid..string.format("Group damaged at t=%.3f", timer.getTime()))
|
||||||
|
|
||||||
--[[
|
|
||||||
local lifemin=nil
|
|
||||||
for _,_element in pairs(self.elements) do
|
|
||||||
local element=_element --#OPSGROUP.Element
|
|
||||||
if element.status~=OPSGROUP.ElementStatus.DEAD and element.status~=OPSGROUP.ElementStatus.INUTERO then
|
|
||||||
local life, life0=self:GetLifePoints(element)
|
|
||||||
if lifemin==nil or life<lifemin then
|
|
||||||
lifemin=life
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if lifemin and lifemin/self.life<0.5 then
|
|
||||||
self:RTB()
|
|
||||||
end
|
|
||||||
]]
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "Destroyed" event.
|
--- On after "Destroyed" event.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user