mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #896 from FlightControl-Master/FF/Develop
New classes.
This commit is contained in:
commit
0097316333
@ -682,15 +682,15 @@ do -- FSM
|
||||
end
|
||||
|
||||
if execute then
|
||||
self:_call_handler("onafter", EventName, Params, EventName )
|
||||
self:_call_handler("OnAfter", EventName, Params, EventName )
|
||||
|
||||
-- only execute the call if the From state is not equal to the To state! Otherwise this function should never execute!
|
||||
--if from ~= to then
|
||||
self:_call_handler("onenter", To, Params, EventName )
|
||||
self:_call_handler("OnEnter", To, Params, EventName )
|
||||
--end
|
||||
|
||||
self:_call_handler("onafter", EventName, Params, EventName )
|
||||
self:_call_handler("OnAfter", EventName, Params, EventName )
|
||||
|
||||
|
||||
self:_call_handler("onstate", "change", Params, EventName )
|
||||
end
|
||||
else
|
||||
|
||||
@ -469,8 +469,8 @@ do -- COORDINATE
|
||||
-- @param height (Optional) parameter specifying the height ASL.
|
||||
-- @return Temperature in Degrees Celsius.
|
||||
function COORDINATE:GetTemperature(height)
|
||||
self:F2(height)
|
||||
local y=height or self.y
|
||||
env.info("FF height = "..y)
|
||||
local point={x=self.x, y=height or self.y, z=self.z}
|
||||
-- get temperature [K] and pressure [Pa] at point
|
||||
local T,P=atmosphere.getTemperatureAndPressure(point)
|
||||
|
||||
2428
Moose Development/Moose/Functional/Artillery.lua
Normal file
2428
Moose Development/Moose/Functional/Artillery.lua
Normal file
File diff suppressed because it is too large
Load Diff
1001
Moose Development/Moose/Functional/PseudoATC.lua
Normal file
1001
Moose Development/Moose/Functional/PseudoATC.lua
Normal file
File diff suppressed because it is too large
Load Diff
@ -42,20 +42,21 @@
|
||||
--
|
||||
-- # Demo Missions
|
||||
--
|
||||
-- ### [RAT Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/Release/RAT%20-%20Random%20Air%20Traffic)
|
||||
-- ### [ALL Demo Missions pack of the last release](https://github.com/FlightControl-Master/MOOSE_MISSIONS/releases)
|
||||
-- ### [MOOSE - ALL Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS)
|
||||
-- ### [MOOSE - RAT Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/master/RAT%20-%20Random%20Air%20Traffic)
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- # YouTube Channel
|
||||
--
|
||||
-- ### [DCS WORLD - MOOSE - RAT - Random Air Traffic](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl0u4Zxywtg-mx_ov4vi68CO)
|
||||
-- ### [MOOSE YouTube Channel](https://www.youtube.com/channel/UCjrA9j5LQoWsG4SpS8i79Qg)
|
||||
-- ### [MOOSE - RAT - Random Air Traffic](https://www.youtube.com/playlist?list=PL7ZUrU4zZUl0u4Zxywtg-mx_ov4vi68CO)
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- ### Author: **[funkyfranky](https://forums.eagle.ru/member.php?u=115026)**
|
||||
--
|
||||
-- ### Contributions: **Sven van de Velde ([FlightControl](https://forums.eagle.ru/member.php?u=89536))**
|
||||
-- ### Contributions: [FlightControl](https://forums.eagle.ru/member.php?u=89536)
|
||||
--
|
||||
-- ===
|
||||
-- @module Rat
|
||||
@ -116,7 +117,7 @@
|
||||
-- @field #boolean continuejourney Aircraft will continue their journey, i.e. get respawned at their destination with a new random destination.
|
||||
-- @field #number ngroups Number of groups to be spawned in total.
|
||||
-- @field #number alive Number of groups which are alive.
|
||||
-- @field #boolean f10menu Add an F10 menu for RAT.
|
||||
-- @field #boolean f10menu If true, add an F10 radiomenu for RAT. Default is false.
|
||||
-- @field #table Menu F10 menu items for this RAT object.
|
||||
-- @field #string SubMenuName Submenu name for RAT object.
|
||||
-- @field #boolean respawn_at_landing Respawn aircraft the moment they land rather than at engine shutdown.
|
||||
@ -350,7 +351,7 @@ RAT={
|
||||
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.
|
||||
ngroups=nil, -- Number of groups to be spawned in total.
|
||||
f10menu=true, -- Add an F10 menu for RAT.
|
||||
f10menu=false, -- Add an F10 menu for RAT.
|
||||
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.
|
||||
@ -506,7 +507,7 @@ RAT.id="RAT | "
|
||||
--- RAT version.
|
||||
-- @list version
|
||||
RAT.version={
|
||||
version = "2.2.1",
|
||||
version = "2.2.2",
|
||||
print = true,
|
||||
}
|
||||
|
||||
@ -1280,7 +1281,7 @@ end
|
||||
|
||||
--- Check if aircraft have accidentally been spawned on the runway. If so they will be removed immediatly.
|
||||
-- @param #RAT self
|
||||
-- @param #booblen switch If true, check is performed. If false, this check is omitted.
|
||||
-- @param #boolean switch If true, check is performed. If false, this check is omitted.
|
||||
function RAT:CheckOnRunway(switch)
|
||||
self:F2(switch)
|
||||
if switch==nil then
|
||||
@ -1291,7 +1292,7 @@ end
|
||||
|
||||
--- Check if aircraft have accidentally been spawned on top of each other. If yes, they will be removed immediately.
|
||||
-- @param #RAT self
|
||||
-- @param #booblen switch If true, check is performed. If false, this check is omitted.
|
||||
-- @param #boolean switch If true, check is performed. If false, this check is omitted.
|
||||
function RAT:CheckOnTop(switch)
|
||||
self:F2(switch)
|
||||
if switch==nil then
|
||||
@ -1302,7 +1303,7 @@ end
|
||||
|
||||
--- Put parking spot coordinates in a data base for future use of aircraft.
|
||||
-- @param #RAT self
|
||||
-- @param #booblen switch If true, parking spots are memorized. This is also the default setting.
|
||||
-- @param #boolean switch If true, parking spots are memorized. This is also the default setting.
|
||||
function RAT:ParkingSpotDB(switch)
|
||||
self:F2(switch)
|
||||
if switch==nil then
|
||||
@ -1363,6 +1364,21 @@ function RAT:Immortal()
|
||||
self.immortal=true
|
||||
end
|
||||
|
||||
--- Radio menu On. Default is off.
|
||||
-- @param #RAT self
|
||||
function RAT:RadioMenuON()
|
||||
self:F2()
|
||||
self.f10menu=true
|
||||
end
|
||||
|
||||
--- Radio menu Off. This is the default setting.
|
||||
-- @param #RAT self
|
||||
function RAT:RadioMenuOFF()
|
||||
self:F2()
|
||||
self.f10menu=false
|
||||
end
|
||||
|
||||
|
||||
--- Activate uncontrolled aircraft.
|
||||
-- @param #RAT self
|
||||
-- @param #number maxactivated Maximal numnber of activated aircraft. Absolute maximum will be the number of spawned groups. Default is 1.
|
||||
@ -4265,10 +4281,10 @@ end
|
||||
function RAT:_CommandImmortal(group, switch)
|
||||
|
||||
-- Command structure for setting groups to invisible.
|
||||
local SetInvisible = {id = 'SetImmortal', params = {value = switch}}
|
||||
local SetImmortal = {id = 'SetImmortal', params = {value = switch}}
|
||||
|
||||
-- Execute command.
|
||||
group:SetCommand(SetInvisible)
|
||||
group:SetCommand(SetImmortal)
|
||||
end
|
||||
|
||||
--- Adds a parking spot at an airport when it has been used by a spawned RAT aircraft to the RAT parking data base.
|
||||
|
||||
@ -32,12 +32,13 @@
|
||||
--
|
||||
-- # Demo Missions
|
||||
--
|
||||
-- ### [ALL Demo Missions pack of the last release](https://github.com/FlightControl-Master/MOOSE_MISSIONS/releases)
|
||||
-- ### [MOOSE - ALL Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS)
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- # YouTube Channel
|
||||
--
|
||||
--
|
||||
-- ### [MOOSE YouTube Channel](https://www.youtube.com/channel/UCjrA9j5LQoWsG4SpS8i79Qg)
|
||||
-- ### [MOOSE - On the Range - Demonstration Video](https://www.youtube.com/watch?v=kIXcxNB9_3M)
|
||||
--
|
||||
-- ===
|
||||
@ -211,6 +212,9 @@
|
||||
--
|
||||
-- The function @{#RANGE.DebugON}() can be used to send messages on screen. It also smokes all defined strafe and bombing targets, the strafe pit approach boxes and the range zone.
|
||||
--
|
||||
-- Note that it can happen that the RANGE radio menu is not shown. Check that the range object is defined as a **global** variable rather than a local one.
|
||||
-- The could avoid the lua garbage collection to accidentally/falsely deallocate the RANGE objects.
|
||||
--
|
||||
--
|
||||
--
|
||||
-- @field #RANGE
|
||||
@ -279,7 +283,7 @@ RANGE.id="RANGE | "
|
||||
|
||||
--- Range script version.
|
||||
-- @field #number version
|
||||
RANGE.version="1.1.0"
|
||||
RANGE.version="1.1.1"
|
||||
|
||||
--TODO list:
|
||||
--TODO: Add custom weapons, which can be specified by the user.
|
||||
@ -1537,6 +1541,80 @@ function RANGE:_DisplayRangeInfo(_unitname)
|
||||
end
|
||||
end
|
||||
|
||||
--- Display bombing target locations to player.
|
||||
-- @param #RANGE self
|
||||
-- @param #string _unitname Name of the player unit.
|
||||
function RANGE:_DisplayBombTargets(_unitname)
|
||||
self:F(_unitname)
|
||||
|
||||
-- Get player unit and player name.
|
||||
local _unit, _playername = self:_GetPlayerUnitAndName(_unitname)
|
||||
|
||||
-- Check if we have a player.
|
||||
if _unit and _playername then
|
||||
|
||||
-- Player settings.
|
||||
local _settings=_DATABASE:GetPlayerSettings(_playername) or _SETTINGS --Core.Settings#SETTINGS
|
||||
|
||||
-- Message text.
|
||||
local _text="Bomb Target Locations:"
|
||||
|
||||
for _,_bombtarget in pairs(self.bombingTargets) do
|
||||
local _target=_bombtarget.target --Wrapper.Positionable#POSITIONABLE
|
||||
if _target and _target:IsAlive() then
|
||||
|
||||
-- Core.Point#COORDINATE
|
||||
local coord=_target:GetCoordinate() --Core.Point#COORDINATE
|
||||
local mycoord=coord:ToStringA2G(_unit, _settings)
|
||||
_text=_text..string.format("\n- %s: %s",_bombtarget.name, mycoord)
|
||||
end
|
||||
end
|
||||
|
||||
self:_DisplayMessageToGroup(_unit,_text, nil, true)
|
||||
end
|
||||
end
|
||||
|
||||
--- Display pit location and heading to player.
|
||||
-- @param #RANGE self
|
||||
-- @param #string _unitname Name of the player unit.
|
||||
function RANGE:_DisplayStrafePits(_unitname)
|
||||
self:F(_unitname)
|
||||
|
||||
-- Get player unit and player name.
|
||||
local _unit, _playername = self:_GetPlayerUnitAndName(_unitname)
|
||||
|
||||
-- Check if we have a player.
|
||||
if _unit and _playername then
|
||||
|
||||
-- Player settings.
|
||||
local _settings=_DATABASE:GetPlayerSettings(_playername) or _SETTINGS --Core.Settings#SETTINGS
|
||||
|
||||
-- Message text.
|
||||
local _text="Strafe Target Locations:"
|
||||
|
||||
for _,_strafepit in pairs(self.strafeTargets) do
|
||||
local _target=_strafepit --Wrapper.Positionable#POSITIONABLE
|
||||
|
||||
-- Pit parameters.
|
||||
local coord=_strafepit.coordinate --Core.Point#COORDINATE
|
||||
local heading=_strafepit.heading
|
||||
|
||||
-- Turn heading around ==> approach heading.
|
||||
if heading>180 then
|
||||
heading=heading-180
|
||||
else
|
||||
heading=heading+180
|
||||
end
|
||||
|
||||
local mycoord=coord:ToStringA2G(_unit, _settings)
|
||||
_text=_text..string.format("\n- %s: %s - heading %03d",_strafepit.name, mycoord, heading)
|
||||
end
|
||||
|
||||
self:_DisplayMessageToGroup(_unit,_text, nil, true)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Report weather conditions at range. Temperature, QFE pressure and wind data.
|
||||
-- @param #RANGE self
|
||||
-- @param #string _unitname Name of the player unit.
|
||||
@ -1792,11 +1870,11 @@ function RANGE:_AddF10Commands(_unitName)
|
||||
local _statsPath = missionCommands.addSubMenuForGroup(_gid, "Statistics", _rangePath)
|
||||
local _markPath = missionCommands.addSubMenuForGroup(_gid, "Mark Targets", _rangePath)
|
||||
local _settingsPath = missionCommands.addSubMenuForGroup(_gid, "My Settings", _rangePath)
|
||||
local _infoPath = missionCommands.addSubMenuForGroup(_gid, "Range Info", _rangePath)
|
||||
-- F10/On the Range/<Range Name>/My Settings/
|
||||
local _mysmokePath = missionCommands.addSubMenuForGroup(_gid, "Smoke Color", _settingsPath)
|
||||
local _myflarePath = missionCommands.addSubMenuForGroup(_gid, "Flare Color", _settingsPath)
|
||||
|
||||
--TODO: Convert to MOOSE menu.
|
||||
-- F10/On the Range/<Range Name>/Mark Targets/
|
||||
missionCommands.addCommandForGroup(_gid, "Mark On Map", _markPath, self._MarkTargetsOnMap, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Illuminate Range", _markPath, self._IlluminateBombTargets, self, _unitName)
|
||||
@ -1824,9 +1902,11 @@ function RANGE:_AddF10Commands(_unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Smoke Delay On/Off", _settingsPath, self._SmokeBombDelayOnOff, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Smoke Impact On/Off", _settingsPath, self._SmokeBombImpactOnOff, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Flare Hits On/Off", _settingsPath, self._FlareDirectHitsOnOff, self, _unitName)
|
||||
-- F10/On the Range/<Range Name>/
|
||||
missionCommands.addCommandForGroup(_gid, "Range Information", _rangePath, self._DisplayRangeInfo, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Weather Report", _rangePath, self._DisplayRangeWeather, self, _unitName)
|
||||
-- F10/On the Range/<Range Name>/Range Information
|
||||
missionCommands.addCommandForGroup(_gid, "General Info", _infoPath, self._DisplayRangeInfo, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Weather Report", _infoPath, self._DisplayRangeWeather, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Bombing Targets", _infoPath, self._DisplayBombTargets, self, _unitName)
|
||||
missionCommands.addCommandForGroup(_gid, "Strafe Pits", _infoPath, self._DisplayStrafePits, self, _unitName)
|
||||
end
|
||||
else
|
||||
self:T(RANGE.id.."Could not find group or group ID in AddF10Menu() function. Unit name: ".._unitName)
|
||||
|
||||
1844
Moose Development/Moose/Functional/Suppression.lua
Normal file
1844
Moose Development/Moose/Functional/Suppression.lua
Normal file
File diff suppressed because it is too large
Load Diff
@ -1050,9 +1050,10 @@ end
|
||||
-- @param Dcs.DCSTypes#Vec2 Vec2 The point to fire at.
|
||||
-- @param Dcs.DCSTypes#Distance Radius The radius of the zone to deploy the fire at.
|
||||
-- @param #number AmmoCount (optional) Quantity of ammunition to expand (omit to fire until ammunition is depleted).
|
||||
-- @param #number WeaponType (optional) Enum for weapon type ID. This value is only required if you want the group firing to use a specific weapon, for instance using the task on a ship to force it to fire guided missiles at targets within cannon range. See http://wiki.hoggit.us/view/DCS_enum_weapon_flag
|
||||
-- @return Dcs.DCSTasking.Task#Task The DCS task structure.
|
||||
function CONTROLLABLE:TaskFireAtPoint( Vec2, Radius, AmmoCount )
|
||||
self:F2( { self.ControllableName, Vec2, Radius, AmmoCount } )
|
||||
function CONTROLLABLE:TaskFireAtPoint( Vec2, Radius, AmmoCount, WeaponType )
|
||||
self:F2( { self.ControllableName, Vec2, Radius, AmmoCount, WeaponType } )
|
||||
|
||||
-- FireAtPoint = {
|
||||
-- id = 'FireAtPoint',
|
||||
@ -1078,6 +1079,10 @@ function CONTROLLABLE:TaskFireAtPoint( Vec2, Radius, AmmoCount )
|
||||
DCSTask.params.expendQty = AmmoCount
|
||||
DCSTask.params.expendQtyEnabled = true
|
||||
end
|
||||
|
||||
if WeaponType then
|
||||
DCSTask.params.weaponType=WeaponType
|
||||
end
|
||||
|
||||
self:T3( { DCSTask } )
|
||||
return DCSTask
|
||||
|
||||
@ -391,7 +391,7 @@ function POSITIONABLE:GetVelocityVec3()
|
||||
|
||||
local DCSPositionable = self:GetDCSObject()
|
||||
|
||||
if DCSPositionable then
|
||||
if DCSPositionable and DCSPositionable:isExist() then
|
||||
local PositionableVelocityVec3 = DCSPositionable:getVelocity()
|
||||
self:T3( PositionableVelocityVec3 )
|
||||
return PositionableVelocityVec3
|
||||
@ -433,7 +433,7 @@ function POSITIONABLE:GetVelocityKMH()
|
||||
|
||||
local DCSPositionable = self:GetDCSObject()
|
||||
|
||||
if DCSPositionable then
|
||||
if DCSPositionable and DCSPositionable:isExist() then
|
||||
local VelocityVec3 = self:GetVelocityVec3()
|
||||
local Velocity = ( VelocityVec3.x ^ 2 + VelocityVec3.y ^ 2 + VelocityVec3.z ^ 2 ) ^ 0.5 -- in meters / sec
|
||||
local Velocity = Velocity * 3.6 -- now it is in km/h.
|
||||
@ -452,7 +452,7 @@ function POSITIONABLE:GetVelocityMPS()
|
||||
|
||||
local DCSPositionable = self:GetDCSObject()
|
||||
|
||||
if DCSPositionable then
|
||||
if DCSPositionable and DCSPositionable:isExist() then
|
||||
local VelocityVec3 = self:GetVelocityVec3()
|
||||
local Velocity = ( VelocityVec3.x ^ 2 + VelocityVec3.y ^ 2 + VelocityVec3.z ^ 2 ) ^ 0.5 -- in meters / sec
|
||||
self:T3( Velocity )
|
||||
|
||||
@ -161,18 +161,28 @@ end
|
||||
|
||||
--- Destroys the UNIT.
|
||||
-- @param #UNIT self
|
||||
-- @param #boolean GenerateEvent (Optional) true if you want to generate a crash or dead event for the unit.
|
||||
-- @return #nil The DCS Unit is not existing or alive.
|
||||
function UNIT:Destroy()
|
||||
function UNIT:Destroy( GenerateEvent )
|
||||
self:F2( self.ObjectName )
|
||||
|
||||
local DCSObject = self:GetDCSObject()
|
||||
|
||||
if DCSObject then
|
||||
|
||||
local UnitGroup = self:GetGroup()
|
||||
local UnitGroupName = UnitGroup:GetName()
|
||||
self:F( { UnitGroupName = UnitGroupName } )
|
||||
|
||||
if GenerateEvent and GenerateEvent == true then
|
||||
if self:IsAir() then
|
||||
self:CreateEventCrash( timer.getTime(), DCSObject )
|
||||
else
|
||||
self:CreateEventDead( timer.getTime(), DCSObject )
|
||||
end
|
||||
end
|
||||
|
||||
USERFLAG:New( UnitGroupName ):Set( 100 )
|
||||
--BASE:CreateEventCrash( timer.getTime(), DCSObject )
|
||||
DCSObject:destroy()
|
||||
end
|
||||
|
||||
|
||||
@ -54,6 +54,9 @@ Functional/Range.lua
|
||||
Functional/ZoneGoal.lua
|
||||
Functional/ZoneGoalCoalition.lua
|
||||
Functional/ZoneCaptureCoalition.lua
|
||||
Functional/Artillery.lua
|
||||
Functional/Suppression.lua
|
||||
Functional/PseudoATC.lua
|
||||
|
||||
AI/AI_Balancer.lua
|
||||
AI/AI_A2A.lua
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user