mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Improved menu, added enumerators for ROE/ROT, added random takeoff (untested)
This commit is contained in:
parent
e4e1990657
commit
5992c852da
@ -13,7 +13,6 @@
|
|||||||
-- @type RAT
|
-- @type RAT
|
||||||
-- @field #string ClassName
|
-- @field #string ClassName
|
||||||
-- @field #boolean debug
|
-- @field #boolean debug
|
||||||
-- @field #string templatename
|
|
||||||
-- @field #number spawndelay
|
-- @field #number spawndelay
|
||||||
-- @field #number spawninterval
|
-- @field #number spawninterval
|
||||||
-- @field #number coalition
|
-- @field #number coalition
|
||||||
@ -41,12 +40,14 @@
|
|||||||
-- @field #number statusinterval
|
-- @field #number statusinterval
|
||||||
-- @field #boolean placemarkers
|
-- @field #boolean placemarkers
|
||||||
-- @field #number FLuser
|
-- @field #number FLuser
|
||||||
-- @field #number Vuser
|
-- @field #number FLminuser
|
||||||
|
-- @field #number FLmaxuser
|
||||||
-- @field #boolean commute
|
-- @field #boolean commute
|
||||||
-- @field #boolean continuejourney
|
-- @field #boolean continuejourney
|
||||||
-- @field #number alive
|
-- @field #number alive
|
||||||
-- @field #boolean f10menu
|
-- @field #boolean f10menu
|
||||||
-- @field #table Menu
|
-- @field #table Menu
|
||||||
|
-- @field #string SubMenuName
|
||||||
-- @field #boolean respawn_after_landing
|
-- @field #boolean respawn_after_landing
|
||||||
-- @field #number respawn_delay
|
-- @field #number respawn_delay
|
||||||
-- @field #table RAT
|
-- @field #table RAT
|
||||||
@ -58,7 +59,6 @@
|
|||||||
RAT={
|
RAT={
|
||||||
ClassName = "RAT", -- Name of class: RAT = Random Air Traffic.
|
ClassName = "RAT", -- Name of class: RAT = Random Air Traffic.
|
||||||
debug=false, -- Turn debug messages on or off.
|
debug=false, -- Turn debug messages on or off.
|
||||||
templatename=nil, -- Name of the template group defined in the mission editor.
|
|
||||||
spawndelay=5, -- Delay time in seconds before first spawning happens.
|
spawndelay=5, -- Delay time in seconds before first spawning happens.
|
||||||
spawninterval=5, -- Interval between spawning units/groups. Note that we add a randomization of 50%.
|
spawninterval=5, -- Interval between spawning units/groups. Note that we add a randomization of 50%.
|
||||||
coalition = nil, -- Coalition of spawn group template.
|
coalition = nil, -- Coalition of spawn group template.
|
||||||
@ -71,7 +71,7 @@ RAT={
|
|||||||
AlphaDescent=3.6, -- Default angle of descenti in degrees. A value of 3.6 follows the 3:1 rule of 3 miles of travel and 1000 ft descent.
|
AlphaDescent=3.6, -- Default angle of descenti in degrees. A value of 3.6 follows the 3:1 rule of 3 miles of travel and 1000 ft descent.
|
||||||
roe = "hold", -- ROE of spawned groups, default is weapon hold (this is a peaceful class for civil aircraft or ferry missions). Possible: "hold", "return", "free".
|
roe = "hold", -- ROE of spawned groups, default is weapon hold (this is a peaceful class for civil aircraft or ferry missions). Possible: "hold", "return", "free".
|
||||||
rot = "noreaction", -- ROT of spawned groups, default is no reaction. Possible: "noreaction", "passive", "evade".
|
rot = "noreaction", -- ROT of spawned groups, default is no reaction. Possible: "noreaction", "passive", "evade".
|
||||||
takeoff = 3, -- Takeoff type. 3=hot.
|
takeoff = 0, -- Takeoff type. 0=coldorhot.
|
||||||
mindist = 5000, -- Min distance from departure to destination in meters. Default 5 km.
|
mindist = 5000, -- Min distance from departure to destination in meters. Default 5 km.
|
||||||
maxdist = 500000, -- Max distance from departure to destination in meters. Default 5000 km.
|
maxdist = 500000, -- Max distance from departure to destination in meters. Default 5000 km.
|
||||||
airports_map={}, -- All airports available on current map (Caucasus, Nevada, Normandy, ...).
|
airports_map={}, -- All airports available on current map (Caucasus, Nevada, Normandy, ...).
|
||||||
@ -88,12 +88,12 @@ RAT={
|
|||||||
FLminuser=nil, -- Minimum flight level set by user.
|
FLminuser=nil, -- Minimum flight level set by user.
|
||||||
FLmaxuser=nil, -- Minimum flight level set by user.
|
FLmaxuser=nil, -- Minimum flight level set by user.
|
||||||
FLuser=nil, -- Flight level set by users explicitly.
|
FLuser=nil, -- Flight level set by users explicitly.
|
||||||
Vuser=nil, -- Cruising speed set by user explicitly.
|
|
||||||
commute=false, -- Aircraft commute between departure and destination, i.e. when respawned the departure airport becomes the new destiation.
|
commute=false, -- Aircraft commute between departure and destination, i.e. when respawned the departure airport becomes the new destiation.
|
||||||
continuejourney=false, -- Aircraft will continue their journey, i.e. get respawned at their destination with a new random destination.
|
continuejourney=false, -- Aircraft will continue their journey, i.e. get respawned at their destination with a new random destination.
|
||||||
alive=0, -- Number of groups which are alive.
|
alive=0, -- Number of groups which are alive.
|
||||||
f10menu=true, -- Add an F10 menu for RAT.
|
f10menu=true, -- Add an F10 menu for RAT.
|
||||||
Menu={}, -- F10 menu for this RAT object.
|
Menu={}, -- F10 menu items for this RAT object.
|
||||||
|
SubMenuName=nil, -- Submenu name for RAT object.
|
||||||
respawn_at_landing=false, -- Respawn aircraft the moment they land rather than at engine shutdown.
|
respawn_at_landing=false, -- Respawn aircraft the moment they land rather than at engine shutdown.
|
||||||
respawn_delay=nil, -- Delay in seconds until repawn happens after landing.
|
respawn_delay=nil, -- Delay in seconds until repawn happens after landing.
|
||||||
}
|
}
|
||||||
@ -110,7 +110,7 @@ RAT.cat={
|
|||||||
--- RAT takeoff style.
|
--- RAT takeoff style.
|
||||||
-- @field #RAT waypoint
|
-- @field #RAT waypoint
|
||||||
RAT.waypoint={
|
RAT.waypoint={
|
||||||
random=0,
|
coldorhot=0,
|
||||||
air=1,
|
air=1,
|
||||||
runway=2,
|
runway=2,
|
||||||
hot=3,
|
hot=3,
|
||||||
@ -145,6 +145,22 @@ RAT.unit={
|
|||||||
nm2m=1852,
|
nm2m=1852,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--- RAT rules of engagement.
|
||||||
|
-- @field #RAT roe
|
||||||
|
RAT.roe={
|
||||||
|
weaponhold="hold",
|
||||||
|
weaponfree="free",
|
||||||
|
returnfire="return",
|
||||||
|
}
|
||||||
|
|
||||||
|
--- RAT reaction to threat.
|
||||||
|
-- @field #RAT rot
|
||||||
|
RAT.rot{
|
||||||
|
evade="evade",
|
||||||
|
passive="passive",
|
||||||
|
noreaction="noreaction"
|
||||||
|
}
|
||||||
|
|
||||||
--- Running number of placed markers on the F10 map.
|
--- Running number of placed markers on the F10 map.
|
||||||
-- @field #RAT markerid
|
-- @field #RAT markerid
|
||||||
RAT.markerid=0
|
RAT.markerid=0
|
||||||
@ -180,7 +196,7 @@ myid="RAT | "
|
|||||||
--DONE: Add F10 menu.
|
--DONE: Add F10 menu.
|
||||||
--DONE: Add markers to F10 menu.
|
--DONE: Add markers to F10 menu.
|
||||||
--TODO: Add respawn limit.
|
--TODO: Add respawn limit.
|
||||||
--TODO: Make takeoff method random.
|
--DONE: Make takeoff method random between cold and hot start.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -195,9 +211,6 @@ function RAT:New(groupname)
|
|||||||
-- Inherit SPAWN clase.
|
-- Inherit SPAWN clase.
|
||||||
local self=BASE:Inherit(self, SPAWN:New(groupname)) -- #RAT
|
local self=BASE:Inherit(self, SPAWN:New(groupname)) -- #RAT
|
||||||
|
|
||||||
-- Set template name.
|
|
||||||
self.templatename=groupname
|
|
||||||
|
|
||||||
-- Get template group defined in the mission editor.
|
-- Get template group defined in the mission editor.
|
||||||
local DCSgroup=Group.getByName(groupname)
|
local DCSgroup=Group.getByName(groupname)
|
||||||
|
|
||||||
@ -217,18 +230,10 @@ function RAT:New(groupname)
|
|||||||
self:_GetAirportsOfMap()
|
self:_GetAirportsOfMap()
|
||||||
|
|
||||||
-- Create F10 main menu if it does not exists yet.
|
-- Create F10 main menu if it does not exists yet.
|
||||||
if not RAT.MenuF10 and self.f10menu then
|
if self.f10menu and not RAT.MenuF10 then
|
||||||
RAT.MenuF10 = MENU_MISSION:New("RAT")
|
RAT.MenuF10 = MENU_MISSION:New("RAT")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Craete submenus.
|
|
||||||
if self.f10menu then
|
|
||||||
self.Menu[self.SpawnTemplatePrefix]=MENU_MISSION:New(self.SpawnTemplatePrefix, RAT.MenuF10)
|
|
||||||
self.Menu[self.SpawnTemplatePrefix]["groups"]=MENU_MISSION:New("Groups", self.Menu[self.SpawnTemplatePrefix])
|
|
||||||
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SpawnTemplatePrefix], self.Status, self, true)
|
|
||||||
MENU_MISSION_COMMAND:New("Spawn new group", self.Menu[self.SpawnTemplatePrefix], self._SpawnWithRoute, self)
|
|
||||||
end
|
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -251,15 +256,46 @@ function RAT:Spawn(naircraft)
|
|||||||
|
|
||||||
-- debug message
|
-- debug message
|
||||||
local text=string.format("\n******************************************************\n")
|
local text=string.format("\n******************************************************\n")
|
||||||
text=text..string.format("Spawning %i aircraft from template %s of type %s.\n", naircraft, self.templatename, self.aircraft.type)
|
text=text..string.format("Spawning %i aircraft from template %s of type %s.\n", naircraft, self.SpawnTemplatePrefix, self.aircraft.type)
|
||||||
text=text..string.format("Takeoff type: %i\n", self.takeoff)
|
text=text..string.format("Takeoff type: %i\n", self.takeoff)
|
||||||
text=text..string.format("Friendly coalitions: %s\n", self.friendly)
|
text=text..string.format("Friendly coalitions: %s\n", self.friendly)
|
||||||
|
text=text..string.format("Number of airports on map : %i\n", #self.airports_map)
|
||||||
text=text..string.format("Number of friendly airports: %i\n", #self.airports)
|
text=text..string.format("Number of friendly airports: %i\n", #self.airports)
|
||||||
text=text..string.format("Commuting: %s\n", tostring(self.commute))
|
text=text..string.format("Commute: %s\n", tostring(self.commute))
|
||||||
text=text..string.format("Long Journey: %s\n", tostring(self.continuejourney))
|
text=text..string.format("Journey: %s\n", tostring(self.continuejourney))
|
||||||
|
text=text..string.format("Spawn delay: %4.1f\n", self.spawndelay)
|
||||||
|
text=text..string.format("Spawn interval: %4.1f\n", self.spawninterval)
|
||||||
|
text=text..string.format("Category: %s\n", self.category)
|
||||||
|
text=text..string.format("Vcruisemax: %4.1f\n", self.Vcruisemax)
|
||||||
|
text=text..string.format("Vclimb: %4.1f\n", self.Vclimb)
|
||||||
|
text=text..string.format("Vcruisemax: %4.1f\n", self.Vcruisemax)
|
||||||
|
text=text..string.format("AlphaDescent: %4.2f\n", self.AlphaDescent)
|
||||||
|
text=text..string.format("ROE: %s\n", self.roe)
|
||||||
|
text=text..string.format("ROT: %s\n", self.rot)
|
||||||
|
text=text..string.format("Min dist: %4.1f\n", self.mindist)
|
||||||
|
text=text..string.format("Max dist: %4.1f\n", self.maxdist)
|
||||||
|
text=text..string.format("Report status: %s\n", tostring(self.airports))
|
||||||
|
text=text..string.format("Status interval: %4.1f\n", self.statusinterval)
|
||||||
|
text=text..string.format("Place markers: %s\n", tostring(self.placemarkers))
|
||||||
|
text=text..string.format("FLuser: %s\n", tostring(self.Fluser))
|
||||||
|
text=text..string.format("FLminuser: %s\n", tostring(self.Flminuser))
|
||||||
|
text=text..string.format("FLmaxuser: %s\n", tostring(self.Flmaxuser))
|
||||||
|
text=text..string.format("Respawn after landing: %s\n", tostring(self.respawn_after_landing))
|
||||||
|
text=text..string.format("Respawn after landing: %s\n", tostring(self.respawn_delay))
|
||||||
|
-- @field #number FLminuser
|
||||||
text=text..string.format("******************************************************\n")
|
text=text..string.format("******************************************************\n")
|
||||||
env.info(myid..text)
|
env.info(myid..text)
|
||||||
|
|
||||||
|
|
||||||
|
-- Create submenus.
|
||||||
|
if self.f10menu then
|
||||||
|
self.SubMenuName=self.SpawnTemplatePrefix
|
||||||
|
self.Menu[self.SubMenuName]=MENU_MISSION:New(self.SubMenuName, RAT.MenuF10)
|
||||||
|
self.Menu[self.SubMenuName]["groups"]=MENU_MISSION:New("Groups", self.Menu[self.SubMenuName])
|
||||||
|
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SubMenuName], self.Status, self, true)
|
||||||
|
MENU_MISSION_COMMAND:New("Spawn new group", self.Menu[self.SubMenuName], self._SpawnWithRoute, self)
|
||||||
|
end
|
||||||
|
|
||||||
-- Schedule spawning of aircraft.
|
-- Schedule spawning of aircraft.
|
||||||
local Tstart=self.spawndelay
|
local Tstart=self.spawndelay
|
||||||
local dt=self.spawninterval
|
local dt=self.spawninterval
|
||||||
@ -334,7 +370,7 @@ function RAT:SetTakeoff(type)
|
|||||||
elseif type:lower()=="air" then
|
elseif type:lower()=="air" then
|
||||||
_Type=RAT.waypoint.air
|
_Type=RAT.waypoint.air
|
||||||
else
|
else
|
||||||
_Type=RAT.waypoint.hot
|
_Type=RAT.waypoint.coldorhot
|
||||||
end
|
end
|
||||||
|
|
||||||
self.takeoff=_Type
|
self.takeoff=_Type
|
||||||
@ -460,10 +496,7 @@ end
|
|||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
-- @param #number rate Climb rate in ft/min.
|
-- @param #number rate Climb rate in ft/min.
|
||||||
function RAT:SetClimbRate(rate)
|
function RAT:SetClimbRate(rate)
|
||||||
|
self.Vclimb=rate
|
||||||
-- Convert from ft/min to m/s.
|
|
||||||
self.Vclimb=rate --*RAT.unit.ft2m/60
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Set the angle of descent. Default is 3.6 degrees, which corresponds to 3000 ft descent after one mile of travel.
|
--- Set the angle of descent. Default is 3.6 degrees, which corresponds to 3000 ft descent after one mile of travel.
|
||||||
@ -473,22 +506,16 @@ function RAT:SetDescentAngle(angle)
|
|||||||
self.AlphaDescent=angle
|
self.AlphaDescent=angle
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Set the descent rate.
|
|
||||||
-- @param #RAT self
|
|
||||||
-- @param #number rate Descent rate in ft/min.
|
|
||||||
function RAT:SetDescentRate(rate)
|
|
||||||
-- Convert to m/s.
|
|
||||||
self.Vdescent=rate*RAT.unit.ft2m/60
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Set rules of engagement (ROE). Default is weapon hold. This is a peaceful class.
|
--- Set rules of engagement (ROE). Default is weapon hold. This is a peaceful class.
|
||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
-- @param #string roe "hold" = weapon hold, "return" = return fire, "free" = weapons free.
|
-- @param #string roe "hold" = weapon hold, "return" = return fire, "free" = weapons free.
|
||||||
function RAT:SetROE(roe)
|
function RAT:SetROE(roe)
|
||||||
if roe=="hold" or roe=="return" or roe=="free" then
|
if roe=="return" then
|
||||||
self.roe=roe
|
self.roe=RAT.roe.returnfire
|
||||||
|
elseif roe=="free" then
|
||||||
|
self.roe=RAT.roe.weaponfree
|
||||||
else
|
else
|
||||||
self.roe="hold"
|
self.roe=RAT.roe.weaponhold
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -496,10 +523,12 @@ end
|
|||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
-- @param #string rot "noreaction = no reactino, "passive" = passive defence, "evade" = weapons free.
|
-- @param #string rot "noreaction = no reactino, "passive" = passive defence, "evade" = weapons free.
|
||||||
function RAT:SetROT(rot)
|
function RAT:SetROT(rot)
|
||||||
if rot=="noreaction" or rot=="passive" or rot=="evade" then
|
if rot=="passive" then
|
||||||
self.rot=rot
|
self.rot=RAT.rot.passive
|
||||||
|
elseif rot=="evade" then
|
||||||
|
self.rot=RAT.rot.evade
|
||||||
else
|
else
|
||||||
self.rot="noreaction"
|
self.rot=RAT.rot.noreaction
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -661,10 +690,14 @@ end
|
|||||||
function RAT:_SpawnWithRoute(_departure, _destination)
|
function RAT:_SpawnWithRoute(_departure, _destination)
|
||||||
|
|
||||||
-- Set takeoff type.
|
-- Set takeoff type.
|
||||||
--if self.takeoff==""
|
local _takeoff=self.takeoff
|
||||||
|
if self.takeoff==RAT.waypoint.coldorhot then
|
||||||
|
local temp={RAT.waypoint.cold, RAT.waypoint.hot}
|
||||||
|
_takeoff=temp[math.random(2)]
|
||||||
|
end
|
||||||
|
|
||||||
-- Set flight plan.
|
-- Set flight plan.
|
||||||
local departure, destination, waypoints = self:_SetRoute(_departure, _destination)
|
local departure, destination, waypoints = self:_SetRoute(_takeoff, _departure, _destination)
|
||||||
|
|
||||||
-- Modify the spawn template to follow the flight plan.
|
-- Modify the spawn template to follow the flight plan.
|
||||||
self:_ModifySpawnTemplate(waypoints)
|
self:_ModifySpawnTemplate(waypoints)
|
||||||
@ -673,9 +706,11 @@ function RAT:_SpawnWithRoute(_departure, _destination)
|
|||||||
local group=self:SpawnWithIndex(self.SpawnIndex) -- Wrapper.Group#GROUP
|
local group=self:SpawnWithIndex(self.SpawnIndex) -- Wrapper.Group#GROUP
|
||||||
self.alive=self.alive+1
|
self.alive=self.alive+1
|
||||||
|
|
||||||
-- set ROE to "weapon hold" and ROT to "no reaction"
|
-- Set ROE, default is "weapon hold".
|
||||||
self:_SetROE(group)
|
self:_SetROE(group, self.roe)
|
||||||
self:_SetROT(group)
|
|
||||||
|
-- Set ROT, default is "no reaction".
|
||||||
|
self:_SetROT(group, self.rot)
|
||||||
|
|
||||||
-- Init ratcraft array.
|
-- Init ratcraft array.
|
||||||
self.ratcraft[self.SpawnIndex]={}
|
self.ratcraft[self.SpawnIndex]={}
|
||||||
@ -685,6 +720,7 @@ function RAT:_SpawnWithRoute(_departure, _destination)
|
|||||||
self.ratcraft[self.SpawnIndex]["waypoints"]=waypoints
|
self.ratcraft[self.SpawnIndex]["waypoints"]=waypoints
|
||||||
self.ratcraft[self.SpawnIndex]["status"]="spawned"
|
self.ratcraft[self.SpawnIndex]["status"]="spawned"
|
||||||
self.ratcraft[self.SpawnIndex]["airborn"]=group:InAir()
|
self.ratcraft[self.SpawnIndex]["airborn"]=group:InAir()
|
||||||
|
-- Time and position on ground. For check if aircraft is stuck somewhere.
|
||||||
if group:InAir() then
|
if group:InAir() then
|
||||||
self.ratcraft[self.SpawnIndex]["Tground"]=nil
|
self.ratcraft[self.SpawnIndex]["Tground"]=nil
|
||||||
self.ratcraft[self.SpawnIndex]["Pground"]=nil
|
self.ratcraft[self.SpawnIndex]["Pground"]=nil
|
||||||
@ -692,17 +728,34 @@ function RAT:_SpawnWithRoute(_departure, _destination)
|
|||||||
self.ratcraft[self.SpawnIndex]["Tground"]=timer.getTime()
|
self.ratcraft[self.SpawnIndex]["Tground"]=timer.getTime()
|
||||||
self.ratcraft[self.SpawnIndex]["Pground"]=group:GetCoordinate()
|
self.ratcraft[self.SpawnIndex]["Pground"]=group:GetCoordinate()
|
||||||
end
|
end
|
||||||
|
-- Initial and current position. For calculating the travelled distance.
|
||||||
self.ratcraft[self.SpawnIndex]["P0"]=group:GetCoordinate()
|
self.ratcraft[self.SpawnIndex]["P0"]=group:GetCoordinate()
|
||||||
self.ratcraft[self.SpawnIndex]["Pnow"]=group:GetCoordinate()
|
self.ratcraft[self.SpawnIndex]["Pnow"]=group:GetCoordinate()
|
||||||
self.ratcraft[self.SpawnIndex]["Distance"]=0
|
self.ratcraft[self.SpawnIndex]["Distance"]=0
|
||||||
|
-- Each aircraft gets its own takeoff type and randomized route.
|
||||||
|
self.ratcraft[self.SpawnIndex]["takeoff"]=_takeoff
|
||||||
|
self.ratcraft[self.SpawnIndex]["random_departure"]=self.random_departure
|
||||||
|
self.ratcraft[self.SpawnIndex]["random_destination"]=self.random_destination
|
||||||
|
|
||||||
-- Create submenu for this group.
|
-- Create submenu for this group.
|
||||||
if self.f10menu then
|
if self.f10menu then
|
||||||
local name=self.aircraft.type.." ID "..tostring(self.SpawnIndex)
|
local name=self.aircraft.type.." ID "..tostring(self.SpawnIndex)
|
||||||
self.Menu[self.SpawnTemplatePrefix].groups[self.SpawnIndex]=MENU_MISSION:New(name, self.Menu[self.SpawnTemplatePrefix].groups)
|
-- F10/RAT/<templatename>/Group X
|
||||||
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SpawnTemplatePrefix].groups[self.SpawnIndex], self.Status, self, true, self.SpawnIndex)
|
self.Menu[self.SubMenuName].groups[self.SpawnIndex]=MENU_MISSION:New(name, self.Menu[self.SubMenuName].groups)
|
||||||
MENU_MISSION_COMMAND:New("Place markers", self.Menu[self.SpawnTemplatePrefix].groups[self.SpawnIndex], self._PlaceMarkers, self, waypoints)
|
-- F10/RAT/<templatename>/Group X/ROT
|
||||||
MENU_MISSION_COMMAND:New("Despawn group", self.Menu[self.SpawnTemplatePrefix].groups[self.SpawnIndex], self._Despawn, self, group)
|
self.Menu[self.SubMenuName].groups[self.SpawnIndex].roe=MENU_MISSION:New("Set ROE", self.Menu[self.SubMenuName].groups)
|
||||||
|
MENU_MISSION_COMMAND:New("Weapons hold", self.Menu[self.SubMenuName].groups[self.SpawnIndex].roe, self._SetROE, self, RAT.roe.weaponhold)
|
||||||
|
MENU_MISSION_COMMAND:New("Weapons free", self.Menu[self.SubMenuName].groups[self.SpawnIndex].roe, self._SetROE, self, RAT.roe.weaponfree)
|
||||||
|
MENU_MISSION_COMMAND:New("Return fire", self.Menu[self.SubMenuName].groups[self.SpawnIndex].roe, self._SetROE, self, RAT.roe.returnfire)
|
||||||
|
-- F10/RAT/<templatename>/Group X/ROT
|
||||||
|
self.Menu[self.SubMenuName].groups[self.SpawnIndex].rot=MENU_MISSION:New("Set ROT", self.Menu[self.SubMenuName].groups)
|
||||||
|
MENU_MISSION_COMMAND:New("Weapons hold", self.Menu[self.SubMenuName].groups[self.SpawnIndex].rot, self._SetROT, self, RAT.rot.noreaction)
|
||||||
|
MENU_MISSION_COMMAND:New("Weapons free", self.Menu[self.SubMenuName].groups[self.SpawnIndex].rot, self._SetROT, self, RAT.rot.passive)
|
||||||
|
MENU_MISSION_COMMAND:New("Return fire", self.Menu[self.SubMenuName].groups[self.SpawnIndex].rot, self._SetROT, self, RAT.rot.evade)
|
||||||
|
-- F10/RAT/<templatename>/Group X/
|
||||||
|
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self.Status, self, true, self.SpawnIndex)
|
||||||
|
MENU_MISSION_COMMAND:New("Place markers", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self._PlaceMarkers, self, waypoints)
|
||||||
|
MENU_MISSION_COMMAND:New("Despawn group", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self._Despawn, self, group)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -744,12 +797,13 @@ end
|
|||||||
|
|
||||||
--- Set the route of the AI plane. Due to DCS landing bug, this has to be done before the unit is spawned.
|
--- Set the route of the AI plane. Due to DCS landing bug, this has to be done before the unit is spawned.
|
||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
|
-- @param takeoff #RAT.waypoint Takeoff type.
|
||||||
-- @param Wrapper.Airport#AIRBASE _departure (Optional) Departure airbase.
|
-- @param Wrapper.Airport#AIRBASE _departure (Optional) Departure airbase.
|
||||||
-- @param Wrapper.Airport#AIRBASE _destination (Optional) Destination airbase.
|
-- @param Wrapper.Airport#AIRBASE _destination (Optional) Destination airbase.
|
||||||
-- @return Wrapper.Airport#AIRBASE Departure airbase.
|
-- @return Wrapper.Airport#AIRBASE Departure airbase.
|
||||||
-- @return Wrapper.Airport#AIRBASE Destination airbase.
|
-- @return Wrapper.Airport#AIRBASE Destination airbase.
|
||||||
-- @return #table Table of flight plan waypoints.
|
-- @return #table Table of flight plan waypoints.
|
||||||
function RAT:_SetRoute(_departure, _destination)
|
function RAT:_SetRoute(takeoff, _departure, _destination)
|
||||||
|
|
||||||
-- Min cruise speed 70% of Vmax or 600 km/h whichever is lower.
|
-- Min cruise speed 70% of Vmax or 600 km/h whichever is lower.
|
||||||
local VxCruiseMin = math.min(self.aircraft.Vmax*0.70, 166)
|
local VxCruiseMin = math.min(self.aircraft.Vmax*0.70, 166)
|
||||||
@ -788,12 +842,12 @@ function RAT:_SetRoute(_departure, _destination)
|
|||||||
if _departure then
|
if _departure then
|
||||||
departure=AIRBASE:FindByName(_departure)
|
departure=AIRBASE:FindByName(_departure)
|
||||||
else
|
else
|
||||||
departure=self:_PickDeparture()
|
departure=self:_PickDeparture(takeoff)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Coordinates of departure point.
|
-- Coordinates of departure point.
|
||||||
local Pdeparture
|
local Pdeparture
|
||||||
if self.takeoff==RAT.waypoint.air then
|
if takeoff==RAT.waypoint.air then
|
||||||
-- For an air start, we take a random point within the spawn zone.
|
-- For an air start, we take a random point within the spawn zone.
|
||||||
local vec2=departure:GetRandomVec2()
|
local vec2=departure:GetRandomVec2()
|
||||||
--Pdeparture=COORDINATE:New(vec2.x, self.aircraft.FLcruise, vec2.y)
|
--Pdeparture=COORDINATE:New(vec2.x, self.aircraft.FLcruise, vec2.y)
|
||||||
@ -804,7 +858,7 @@ function RAT:_SetRoute(_departure, _destination)
|
|||||||
|
|
||||||
-- Height ASL of departure point.
|
-- Height ASL of departure point.
|
||||||
local H_departure
|
local H_departure
|
||||||
if self.takeoff==RAT.waypoint.air then
|
if takeoff==RAT.waypoint.air then
|
||||||
-- Departure altitude is 70% of default cruise with 30% variation and limited to 1000 m AGL (50 m for helos).
|
-- Departure altitude is 70% of default cruise with 30% variation and limited to 1000 m AGL (50 m for helos).
|
||||||
local Hmin
|
local Hmin
|
||||||
if self.category==RAT.cat.plane then
|
if self.category==RAT.cat.plane then
|
||||||
@ -997,7 +1051,7 @@ function RAT:_SetRoute(_departure, _destination)
|
|||||||
local c6=Pdestination
|
local c6=Pdestination
|
||||||
|
|
||||||
--Convert coordinates into route waypoints.
|
--Convert coordinates into route waypoints.
|
||||||
local wp0=self:_Waypoint(self.takeoff, c0, VxClimb, H_departure, departure)
|
local wp0=self:_Waypoint(takeoff, c0, VxClimb, H_departure, departure)
|
||||||
local wp1=self:_Waypoint(RAT.waypoint.climb, c1, VxClimb, H_departure+(FLcruise-H_departure)/2)
|
local wp1=self:_Waypoint(RAT.waypoint.climb, c1, VxClimb, H_departure+(FLcruise-H_departure)/2)
|
||||||
local wp2=self:_Waypoint(RAT.waypoint.cruise, c2, VxCruise, FLcruise)
|
local wp2=self:_Waypoint(RAT.waypoint.cruise, c2, VxCruise, FLcruise)
|
||||||
local wp3=self:_Waypoint(RAT.waypoint.cruise, c3, VxCruise, FLcruise)
|
local wp3=self:_Waypoint(RAT.waypoint.cruise, c3, VxCruise, FLcruise)
|
||||||
@ -1026,14 +1080,15 @@ end
|
|||||||
--- Set the departure airport of the AI. If no airport name is given explicitly an airport from the coalition is chosen randomly.
|
--- Set the departure airport of the AI. If no airport name is given explicitly an airport from the coalition is chosen randomly.
|
||||||
-- If takeoff style is set to "air", we use zones around the airports or the zones specified by user input.
|
-- If takeoff style is set to "air", we use zones around the airports or the zones specified by user input.
|
||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
|
-- @param #number takeoff Takeoff type.
|
||||||
-- @return Wrapper.Airbase#AIRBASE Departure airport if spawning at airport.
|
-- @return Wrapper.Airbase#AIRBASE Departure airport if spawning at airport.
|
||||||
-- @return Coore.Zone#ZONE Departure zone if spawning in air.
|
-- @return Coore.Zone#ZONE Departure zone if spawning in air.
|
||||||
function RAT:_PickDeparture()
|
function RAT:_PickDeparture(takeoff)
|
||||||
|
|
||||||
-- Array of possible departure airports or zones.
|
-- Array of possible departure airports or zones.
|
||||||
local departures={}
|
local departures={}
|
||||||
|
|
||||||
if self.takeoff==RAT.waypoint.air then
|
if takeoff==RAT.waypoint.air then
|
||||||
|
|
||||||
if self.random_departure then
|
if self.random_departure then
|
||||||
|
|
||||||
@ -1078,7 +1133,7 @@ function RAT:_PickDeparture()
|
|||||||
local departure=departures[math.random(#departures)]
|
local departure=departures[math.random(#departures)]
|
||||||
|
|
||||||
local text
|
local text
|
||||||
if self.takeoff==RAT.waypoint.air then
|
if takeoff==RAT.waypoint.air then
|
||||||
text="Chosen departure zone: "..departure:GetName()
|
text="Chosen departure zone: "..departure:GetName()
|
||||||
else
|
else
|
||||||
text="Chosen departure airport: "..departure:GetName().." (ID "..departure:GetID()..")"
|
text="Chosen departure airport: "..departure:GetName().." (ID "..departure:GetID()..")"
|
||||||
@ -2025,10 +2080,11 @@ end
|
|||||||
--- Set ROE for a group.
|
--- Set ROE for a group.
|
||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
-- @param Wrapper.Group#GROUP group Group for which the ROE is set.
|
-- @param Wrapper.Group#GROUP group Group for which the ROE is set.
|
||||||
function RAT:_SetROE(group)
|
-- @param #string roe ROE of group.
|
||||||
if self.roe=="return" then
|
function RAT:_SetROE(group, roe)
|
||||||
|
if self.roe==RAT.roe.returnfire then
|
||||||
group:OptionROEReturnFire()
|
group:OptionROEReturnFire()
|
||||||
elseif self.roe=="free" then
|
elseif self.roe==RAT.roe.weaponfree then
|
||||||
group:OptionROEWeaponFree()
|
group:OptionROEWeaponFree()
|
||||||
else
|
else
|
||||||
group:OptionROEHoldFire()
|
group:OptionROEHoldFire()
|
||||||
@ -2039,10 +2095,11 @@ end
|
|||||||
--- Set ROT for a group.
|
--- Set ROT for a group.
|
||||||
-- @param #RAT self
|
-- @param #RAT self
|
||||||
-- @param Wrapper.Group#GROUP group Group for which the ROT is set.
|
-- @param Wrapper.Group#GROUP group Group for which the ROT is set.
|
||||||
function RAT:_SetROT(group)
|
-- @param #string rot ROT of group.
|
||||||
if self.roe=="passive" then
|
function RAT:_SetROT(group, rot)
|
||||||
|
if self.rot==RAT.rot.passive then
|
||||||
group:OptionROTPassiveDefense()
|
group:OptionROTPassiveDefense()
|
||||||
elseif self.roe=="evade" then
|
elseif self.rot==RAT.rot.evade then
|
||||||
group:OptionROTEvadeFire()
|
group:OptionROTEvadeFire()
|
||||||
else
|
else
|
||||||
group:OptionROTNoReaction()
|
group:OptionROTNoReaction()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user