Fixed bugs introduced in last update.

Added delete markers to F10 menu.
This commit is contained in:
funkyfranky 2017-09-08 23:22:33 +02:00
parent 5992c852da
commit e205af75ca

View File

@ -50,6 +50,7 @@
-- @field #string SubMenuName
-- @field #boolean respawn_after_landing
-- @field #number respawn_delay
-- @field #table markerids
-- @field #table RAT
-- @extends Functional.Spawn#SPAWN
@ -96,6 +97,7 @@ RAT={
SubMenuName=nil, -- Submenu name for RAT object.
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.
markerids={}, -- Array with marker IDs.
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ -146,19 +148,19 @@ RAT.unit={
}
--- RAT rules of engagement.
-- @field #RAT roe
RAT.roe={
-- @field #RAT ROT
RAT.ROE={
weaponhold="hold",
weaponfree="free",
returnfire="return",
}
--- RAT reaction to threat.
-- @field #RAT rot
RAT.rot{
-- @field #RAT ROT
RAT.ROT={
evade="evade",
passive="passive",
noreaction="noreaction"
noreaction="noreaction",
}
--- Running number of placed markers on the F10 map.
@ -197,6 +199,7 @@ myid="RAT | "
--DONE: Add markers to F10 menu.
--TODO: Add respawn limit.
--DONE: Make takeoff method random between cold and hot start.
--TODO: Check out uncontrolled spawning.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ -208,6 +211,9 @@ myid="RAT | "
-- @usage yak:RAT("RAT_YAK") will create a RAT object called "yak". The template group in the mission editor must have the name "RAT_YAK".
function RAT:New(groupname)
-- Welcome message.
env.info(myid.."Creating new RAT object from template: "..groupname)
-- Inherit SPAWN clase.
local self=BASE:Inherit(self, SPAWN:New(groupname)) -- #RAT
@ -270,18 +276,18 @@ function RAT:Spawn(naircraft)
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("ROE: %s\n", tostring(self.roe))
text=text..string.format("ROT: %s\n", tostring(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("Report status: %s\n", tostring(self.reportstatus))
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))
text=text..string.format("Respawn delay: %s\n", tostring(self.respawn_delay))
-- @field #number FLminuser
text=text..string.format("******************************************************\n")
env.info(myid..text)
@ -292,8 +298,9 @@ function RAT:Spawn(naircraft)
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)
MENU_MISSION_COMMAND:New("Delete markers", self.Menu[self.SubMenuName], self._DeleteMarkers, self, self.markerids)
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SubMenuName], self.Status, self, true)
end
-- Schedule spawning of aircraft.
@ -511,11 +518,11 @@ end
-- @param #string roe "hold" = weapon hold, "return" = return fire, "free" = weapons free.
function RAT:SetROE(roe)
if roe=="return" then
self.roe=RAT.roe.returnfire
self.roe=RAT.ROE.returnfire
elseif roe=="free" then
self.roe=RAT.roe.weaponfree
self.roe=RAT.ROE.weaponfree
else
self.roe=RAT.roe.weaponhold
self.roe=RAT.ROE.weaponhold
end
end
@ -524,11 +531,11 @@ end
-- @param #string rot "noreaction = no reactino, "passive" = passive defence, "evade" = weapons free.
function RAT:SetROT(rot)
if rot=="passive" then
self.rot=RAT.rot.passive
self.rot=RAT.ROT.passive
elseif rot=="evade" then
self.rot=RAT.rot.evade
self.rot=RAT.ROT.evade
else
self.rot=RAT.rot.noreaction
self.rot=RAT.ROT.noreaction
end
end
@ -694,6 +701,7 @@ function RAT:_SpawnWithRoute(_departure, _destination)
if self.takeoff==RAT.waypoint.coldorhot then
local temp={RAT.waypoint.cold, RAT.waypoint.hot}
_takeoff=temp[math.random(2)]
env.info(myid.."Random takeoff type: ".._takeoff)
end
-- Set flight plan.
@ -743,19 +751,20 @@ function RAT:_SpawnWithRoute(_departure, _destination)
-- F10/RAT/<templatename>/Group X
self.Menu[self.SubMenuName].groups[self.SpawnIndex]=MENU_MISSION:New(name, self.Menu[self.SubMenuName].groups)
-- F10/RAT/<templatename>/Group X/ROT
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)
self.Menu[self.SubMenuName].groups[self.SpawnIndex]["roe"]=MENU_MISSION:New("Set ROE", self.Menu[self.SubMenuName].groups[self.SpawnIndex])
MENU_MISSION_COMMAND:New("Weapons hold", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["roe"], self._SetROE, self, group, RAT.ROE.weaponhold)
MENU_MISSION_COMMAND:New("Weapons free", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["roe"], self._SetROE, self, group, RAT.ROE.weaponfree)
MENU_MISSION_COMMAND:New("Return fire", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["roe"], self._SetROE, self, group, 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)
self.Menu[self.SubMenuName].groups[self.SpawnIndex]["rot"]=MENU_MISSION:New("Set ROT", self.Menu[self.SubMenuName].groups[self.SpawnIndex])
MENU_MISSION_COMMAND:New("No reaction", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["rot"], self._SetROT, self, group, RAT.ROT.noreaction)
MENU_MISSION_COMMAND:New("Passive defense", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["rot"], self._SetROT, self, group, RAT.ROT.passive)
MENU_MISSION_COMMAND:New("Evade on fire", self.Menu[self.SubMenuName].groups[self.SpawnIndex]["rot"], self._SetROT, self, group, 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)
MENU_MISSION_COMMAND:New("Despawn group", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self._Despawn, self, group)
MENU_MISSION_COMMAND:New("Place markers", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self._PlaceMarkers, self, waypoints)
--MENU_MISSION_COMMAND:New("Delete markers", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self._DelateMarkers, self, markers)
MENU_MISSION_COMMAND:New("Status report", self.Menu[self.SubMenuName].groups[self.SpawnIndex], self.Status, self, true, self.SpawnIndex)
end
end
@ -1025,9 +1034,9 @@ function RAT:_SetRoute(takeoff, _departure, _destination)
text=text..string.format("h_climb = %6.1f m\n", h_climb)
text=text..string.format("h_descent = %6.1f m\n", h_descent)
text=text..string.format("h_holding = %6.1f m\n", h_holding)
text=text..string.format("FLmin = %6.1f m ASL\n", FLmin)
text=text..string.format("FLmax = %6.1f m ASL\n", FLmax)
text=text..string.format("FLcruise = %6.1f m ASL\n", FLcruise)
text=text..string.format("FLmin = %6.1f m ASL = FL%03d\n", FLmin, FLmin/RAT.unit.FL2m)
text=text..string.format("FLcruise = %6.1f m ASL = FL%03d\n", FLcruise, FLcruise/RAT.unit.FL2m)
text=text..string.format("FLmax = %6.1f m ASL = FL%03d\n", FLmax, FLmax/RAT.unit.FL2m)
text=text..string.format("\nAngles:\n")
text=text..string.format("Alpha climb = %6.1f Deg\n", math.deg(AlphaClimb))
text=text..string.format("Alpha descent = %6.1f Deg\n", math.deg(AlphaDescent))
@ -1976,6 +1985,7 @@ function RAT:_ModifySpawnTemplate(waypoints)
-- Also modify x,y of the template. Not sure why.
SpawnTemplate.x = PointVec3.x
SpawnTemplate.y = PointVec3.z
--SpawnTemplate.uncontrolled=true
-- Update modified template for spawn group.
self.SpawnGroups[self.SpawnIndex].SpawnTemplate=SpawnTemplate
@ -2082,12 +2092,16 @@ end
-- @param Wrapper.Group#GROUP group Group for which the ROE is set.
-- @param #string roe ROE of group.
function RAT:_SetROE(group, roe)
if self.roe==RAT.roe.returnfire then
env.info(myid.."Setting ROE to "..roe.." for group "..group:GetName())
if self.roe==RAT.ROE.returnfire then
group:OptionROEReturnFire()
elseif self.roe==RAT.roe.weaponfree then
env.info(myid.."ROE return fire")
elseif self.roe==RAT.ROE.weaponfree then
group:OptionROEWeaponFree()
env.info(myid.."ROE weapons free")
else
group:OptionROEHoldFire()
env.info(myid.."ROE hold fire")
end
end
@ -2097,9 +2111,10 @@ end
-- @param Wrapper.Group#GROUP group Group for which the ROT is set.
-- @param #string rot ROT of group.
function RAT:_SetROT(group, rot)
if self.rot==RAT.rot.passive then
env.info(myid.."Setting ROT to "..rot.." for group "..group:GetName())
if self.rot==RAT.ROT.passive then
group:OptionROTPassiveDefense()
elseif self.rot==RAT.rot.evade then
elseif self.rot==RAT.ROT.evade then
group:OptionROTEvadeFire()
else
group:OptionROTNoReaction()
@ -2217,6 +2232,7 @@ end
-- @param #table wp Position of marker coming in as waypoint, i.e. has x, y and alt components.
function RAT:_SetMarker(text, wp)
RAT.markerid=RAT.markerid+1
table.insert(self.markerids,RAT.markerid)
if self.debug then
env.info(myid.."Placing marker with ID "..RAT.markerid..": "..text)
end
@ -2226,4 +2242,19 @@ function RAT:_SetMarker(text, wp)
trigger.action.markToAll(RAT.markerid, text, vec)
end
--- Delete all markers on F10 map.
-- @param #RAT self
-- @param #table ids (Optional) Table holding the marker IDs to be deleted.
function RAT:_DeleteMarkers(ids)
if ids then
for k,v in pairs(ids) do
trigger.action.removeMark(k)
end
else
for i=1,RAT.markerid do
trigger.action.removeMark(i)
end
end
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------