mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #540 from FlightControl-Master/419-A2A-Tasking
419 a2a tasking
This commit is contained in:
commit
2619fe814a
@ -154,27 +154,20 @@ do -- ACT_ROUTE
|
|||||||
--- Get the routing text to be displayed.
|
--- Get the routing text to be displayed.
|
||||||
-- The route mode determines the text displayed.
|
-- The route mode determines the text displayed.
|
||||||
-- @param #ACT_ROUTE self
|
-- @param #ACT_ROUTE self
|
||||||
|
-- @param Wrapper.Controllable#CONTROLLABLE Controllable
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function ACT_ROUTE:GetRouteText( FromCoordinate )
|
function ACT_ROUTE:GetRouteText( Controllable )
|
||||||
|
|
||||||
local RouteText = ""
|
local RouteText = ""
|
||||||
|
|
||||||
if self.Coordinate and self.RouteMode == "B" then
|
if self.Coordinate then
|
||||||
RouteText = "Route to " .. FromCoordinate:GetBRText( self.Coordinate ) .. " km."
|
RouteText = self.Coordinate:ToString( Controllable )
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.Coordinate and self.RouteMode == "C" then
|
if self.Zone then
|
||||||
RouteText = "Route to " .. self.Coordinate:ToString()
|
local Coordinate = self.Zone:GetPointVec3( self.Altitude )
|
||||||
end
|
Coordinate:SetHeading( self.Heading )
|
||||||
|
RouteText = Coordinate:ToString( Controllable )
|
||||||
if self.Zone and self.RouteMode == "B" then
|
|
||||||
local Coordinate = self.Zone:GetCoordinate()
|
|
||||||
RouteText = "Route to zone bearing " .. FromCoordinate:GetBRText( Coordinate ) .. " km."
|
|
||||||
end
|
|
||||||
|
|
||||||
if self.Zone and self.RouteMode == "C" then
|
|
||||||
local Coordinate = self.Zone:GetCoordinate()
|
|
||||||
RouteText = "Route to zone at " .. Coordinate:ToString()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return RouteText
|
return RouteText
|
||||||
@ -353,8 +346,7 @@ do -- ACT_ROUTE_POINT
|
|||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ROUTE_POINT:onafterReport( ProcessUnit, From, Event, To )
|
function ACT_ROUTE_POINT:onafterReport( ProcessUnit, From, Event, To )
|
||||||
|
|
||||||
local TaskUnitCoordinate = ProcessUnit:GetCoordinate()
|
local RouteText = self:GetRouteText( ProcessUnit )
|
||||||
local RouteText = self:GetRouteText( TaskUnitCoordinate )
|
|
||||||
self:Message( RouteText )
|
self:Message( RouteText )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -403,8 +395,12 @@ do -- ACT_ROUTE_ZONE
|
|||||||
--- Set Zone
|
--- Set Zone
|
||||||
-- @param #ACT_ROUTE_ZONE self
|
-- @param #ACT_ROUTE_ZONE self
|
||||||
-- @param Core.Zone#ZONE_BASE Zone The Zone object where to route to.
|
-- @param Core.Zone#ZONE_BASE Zone The Zone object where to route to.
|
||||||
function ACT_ROUTE_ZONE:SetZone( Zone )
|
-- @param #number Altitude
|
||||||
|
-- @param #number Heading
|
||||||
|
function ACT_ROUTE_ZONE:SetZone( Zone, Altitude, Heading ) -- R2.2 Added altitude and heading
|
||||||
self.Zone = Zone
|
self.Zone = Zone
|
||||||
|
self.Altitude = Altitude
|
||||||
|
self.Heading = Heading
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Get Zone
|
--- Get Zone
|
||||||
@ -437,12 +433,9 @@ do -- ACT_ROUTE_ZONE
|
|||||||
-- @param #string From
|
-- @param #string From
|
||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ROUTE_ZONE:onafterReport( ProcessUnit, From, Event, To )
|
function ACT_ROUTE_ZONE:onafterReport( ProcessUnit, From, Event, To )
|
||||||
|
self:E( { ProcessUnit = ProcessUnit } )
|
||||||
|
|
||||||
local ZoneVec2 = self.Zone:GetVec2()
|
local RouteText = self:GetRouteText( ProcessUnit )
|
||||||
local ZoneCoordinate = COORDINATE:New( ZoneVec2.x, ZoneVec2.y )
|
|
||||||
local TaskUnitVec2 = ProcessUnit:GetVec2()
|
|
||||||
local TaskUnitCoordinate = COORDINATE:New( TaskUnitVec2.x, TaskUnitVec2.y )
|
|
||||||
local RouteText = self:GetRouteText( TaskUnitCoordinate )
|
|
||||||
self:Message( RouteText )
|
self:Message( RouteText )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -62,6 +62,7 @@ DATABASE = {
|
|||||||
COUNTRY_ID = {},
|
COUNTRY_ID = {},
|
||||||
COUNTRY_NAME = {},
|
COUNTRY_NAME = {},
|
||||||
NavPoints = {},
|
NavPoints = {},
|
||||||
|
PLAYERSETTINGS = {},
|
||||||
}
|
}
|
||||||
|
|
||||||
local _DATABASECoalition =
|
local _DATABASECoalition =
|
||||||
@ -100,14 +101,14 @@ function DATABASE:New()
|
|||||||
self:HandleEvent( EVENTS.DeleteCargo )
|
self:HandleEvent( EVENTS.DeleteCargo )
|
||||||
|
|
||||||
-- Follow alive players and clients
|
-- Follow alive players and clients
|
||||||
-- self:HandleEvent( EVENTS.PlayerEnterUnit, self._EventOnPlayerEnterUnit )
|
self:HandleEvent( EVENTS.PlayerEnterUnit, self._EventOnPlayerEnterUnit )
|
||||||
self:HandleEvent( EVENTS.PlayerLeaveUnit, self._EventOnPlayerLeaveUnit )
|
self:HandleEvent( EVENTS.PlayerLeaveUnit, self._EventOnPlayerLeaveUnit )
|
||||||
|
|
||||||
self:_RegisterTemplates()
|
self:_RegisterTemplates()
|
||||||
self:_RegisterGroupsAndUnits()
|
self:_RegisterGroupsAndUnits()
|
||||||
self:_RegisterClients()
|
self:_RegisterClients()
|
||||||
self:_RegisterStatics()
|
self:_RegisterStatics()
|
||||||
self:_RegisterPlayers()
|
--self:_RegisterPlayers()
|
||||||
self:_RegisterAirbases()
|
self:_RegisterAirbases()
|
||||||
|
|
||||||
self.UNITS_Position = 0
|
self.UNITS_Position = 0
|
||||||
@ -115,19 +116,25 @@ function DATABASE:New()
|
|||||||
--- @param #DATABASE self
|
--- @param #DATABASE self
|
||||||
local function CheckPlayers( self )
|
local function CheckPlayers( self )
|
||||||
|
|
||||||
local UNITS_Count = #self.UNITS_Index
|
local CoalitionsData = { AlivePlayersRed = coalition.getPlayers( coalition.side.RED ), AlivePlayersBlue = coalition.getPlayers( coalition.side.BLUE ) }
|
||||||
if UNITS_Count > 0 then
|
for CoalitionId, CoalitionData in pairs( CoalitionsData ) do
|
||||||
self.UNITS_Position = ( ( self.UNITS_Position <= UNITS_Count ) and self.UNITS_Position + 1 ) or 1
|
self:E( { "CoalitionData:", CoalitionData } )
|
||||||
local PlayerUnit = self.UNITS[self.UNITS_Index[self.UNITS_Position]]
|
for UnitId, UnitData in pairs( CoalitionData ) do
|
||||||
if PlayerUnit then
|
if UnitData and UnitData:isExist() then
|
||||||
local UnitName = PlayerUnit:GetName()
|
|
||||||
local PlayerName = PlayerUnit:GetPlayerName()
|
local UnitName = UnitData:getName()
|
||||||
--self:E( { UNITS_Count, self.UNITS_Position, UnitName, PlayerName } )
|
local PlayerName = UnitData:getPlayerName()
|
||||||
if PlayerName and PlayerName ~= "" then
|
local PlayerUnit = UNIT:Find( UnitData )
|
||||||
if self.PLAYERS[PlayerName] == nil or self.PLAYERS[PlayerName] ~= UnitName then
|
self:T( { "UnitData:", UnitData, UnitName, PlayerName, PlayerUnit } )
|
||||||
self:E( { "Add player for unit:", UnitName, PlayerName } )
|
|
||||||
self:AddPlayer( UnitName, PlayerName )
|
if PlayerName and PlayerName ~= "" then
|
||||||
--_EVENTDISPATCHER:CreateEventPlayerEnterUnit( PlayerUnit )
|
if self.PLAYERS[PlayerName] == nil or self.PLAYERS[PlayerName] ~= UnitName then
|
||||||
|
self:E( { "Add player for unit:", UnitName, PlayerName } )
|
||||||
|
self:AddPlayer( UnitName, PlayerName )
|
||||||
|
--_EVENTDISPATCHER:CreateEventPlayerEnterUnit( PlayerUnit )
|
||||||
|
local Settings = SETTINGS:Set( PlayerName )
|
||||||
|
Settings:SetPlayerMenu( PlayerUnit )
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -135,7 +142,7 @@ function DATABASE:New()
|
|||||||
end
|
end
|
||||||
|
|
||||||
self:E( "Scheduling" )
|
self:E( "Scheduling" )
|
||||||
--local PlayerCheckSchedule = SCHEDULER:New( nil, CheckPlayers, { self }, 2, 0.1 )
|
PlayerCheckSchedule = SCHEDULER:New( nil, CheckPlayers, { self }, 1, 1 )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -667,7 +674,7 @@ function DATABASE:_EventOnBirth( Event )
|
|||||||
self:AddGroup( Event.IniDCSGroupName )
|
self:AddGroup( Event.IniDCSGroupName )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self:_EventOnPlayerEnterUnit( Event )
|
--self:_EventOnPlayerEnterUnit( Event )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -708,6 +715,8 @@ function DATABASE:_EventOnPlayerEnterUnit( Event )
|
|||||||
if not self.PLAYERS[PlayerName] then
|
if not self.PLAYERS[PlayerName] then
|
||||||
self:AddPlayer( Event.IniUnitName, PlayerName )
|
self:AddPlayer( Event.IniUnitName, PlayerName )
|
||||||
end
|
end
|
||||||
|
local Settings = SETTINGS:Set( PlayerName )
|
||||||
|
Settings:SetPlayerMenu( Event.IniUnit )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -723,6 +732,8 @@ function DATABASE:_EventOnPlayerLeaveUnit( Event )
|
|||||||
if Event.IniObjectCategory == 1 then
|
if Event.IniObjectCategory == 1 then
|
||||||
local PlayerName = Event.IniUnit:GetPlayerName()
|
local PlayerName = Event.IniUnit:GetPlayerName()
|
||||||
if self.PLAYERS[PlayerName] then
|
if self.PLAYERS[PlayerName] then
|
||||||
|
local Settings = SETTINGS:Set( PlayerName )
|
||||||
|
Settings:RemovePlayerMenu( Event.IniUnit )
|
||||||
self:DeletePlayer( PlayerName )
|
self:DeletePlayer( PlayerName )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -891,6 +902,29 @@ function DATABASE:OnEventDeleteCargo( EventData )
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Gets the player settings
|
||||||
|
-- @param #DATABASE self
|
||||||
|
-- @param #string PlayerName
|
||||||
|
-- @return Core.Settings#SETTINGS
|
||||||
|
function DATABASE:GetPlayerSettings( PlayerName )
|
||||||
|
self:E({PlayerName})
|
||||||
|
return self.PLAYERSETTINGS[PlayerName]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Sets the player settings
|
||||||
|
-- @param #DATABASE self
|
||||||
|
-- @param #string PlayerName
|
||||||
|
-- @param Core.Settings#SETTINGS Settings
|
||||||
|
-- @return Core.Settings#SETTINGS
|
||||||
|
function DATABASE:SetPlayerSettings( PlayerName, Settings )
|
||||||
|
self:E({PlayerName, Settings})
|
||||||
|
self.PLAYERSETTINGS[PlayerName] = Settings
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- @param #DATABASE self
|
--- @param #DATABASE self
|
||||||
function DATABASE:_RegisterTemplates()
|
function DATABASE:_RegisterTemplates()
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
466
Moose Development/Moose/Core/Settings.lua
Normal file
466
Moose Development/Moose/Core/Settings.lua
Normal file
@ -0,0 +1,466 @@
|
|||||||
|
--- **Core** - **SETTINGS** classe defines the format settings management for measurement.
|
||||||
|
--
|
||||||
|
-- 
|
||||||
|
--
|
||||||
|
-- ====
|
||||||
|
--
|
||||||
|
-- # Demo Missions
|
||||||
|
--
|
||||||
|
-- ### [SETTINGS Demo Missions source code]()
|
||||||
|
--
|
||||||
|
-- ### [SETTINGS Demo Missions, only for beta testers]()
|
||||||
|
--
|
||||||
|
-- ### [ALL Demo Missions pack of the last release](https://github.com/FlightControl-Master/MOOSE_MISSIONS/releases)
|
||||||
|
--
|
||||||
|
-- ====
|
||||||
|
--
|
||||||
|
-- # YouTube Channel
|
||||||
|
--
|
||||||
|
-- ### [SETTINGS YouTube Channel]()
|
||||||
|
--
|
||||||
|
-- ===
|
||||||
|
--
|
||||||
|
-- ### Authors:
|
||||||
|
--
|
||||||
|
-- * FlightControl : Design & Programming
|
||||||
|
--
|
||||||
|
-- ### Contributions:
|
||||||
|
--
|
||||||
|
-- @module Settings
|
||||||
|
|
||||||
|
|
||||||
|
--- @type SETTINGS
|
||||||
|
-- @field #number LL_Accuracy
|
||||||
|
-- @field #boolean LL_DMS
|
||||||
|
-- @field #number MGRS_Accuracy
|
||||||
|
-- @field #string A2GSystem
|
||||||
|
-- @field #string A2ASystem
|
||||||
|
-- @extends Core.Base#BASE
|
||||||
|
|
||||||
|
--- # SETTINGS class, extends @{Base#BASE}
|
||||||
|
--
|
||||||
|
-- @field #SETTINGS
|
||||||
|
SETTINGS = {
|
||||||
|
ClassName = "SETTINGS",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
do -- SETTINGS
|
||||||
|
|
||||||
|
--- SETTINGS constructor.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:Set( PlayerName )
|
||||||
|
|
||||||
|
if PlayerName == nil then
|
||||||
|
local self = BASE:Inherit( self, BASE:New() ) -- #SETTINGS
|
||||||
|
self:SetMetric() -- Defaults
|
||||||
|
self:SetA2G_MGRS() -- Defaults
|
||||||
|
self:SetA2A_BRA() -- Defaults
|
||||||
|
self:SetLL_Accuracy( 2 ) -- Defaults
|
||||||
|
self:SetLL_DMS( true ) -- Defaults
|
||||||
|
self:SetMGRS_Accuracy( 5 ) -- Defaults
|
||||||
|
return self
|
||||||
|
else
|
||||||
|
local Settings = _DATABASE:GetPlayerSettings( PlayerName )
|
||||||
|
if not Settings then
|
||||||
|
Settings = BASE:Inherit( self, BASE:New() ) -- #SETTINGS
|
||||||
|
_DATABASE:SetPlayerSettings( PlayerName, Settings )
|
||||||
|
end
|
||||||
|
return Settings
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Sets the SETTINGS metric.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
function SETTINGS:SetMetric()
|
||||||
|
self.Metric = true
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Gets if the SETTINGS is metric.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if metric.
|
||||||
|
function SETTINGS:IsMetric()
|
||||||
|
self:E( {Metric = ( self.Metric ~= nil and self.Metric == true ) or ( self.Metric == nil and _SETTINGS:IsMetric() ) } )
|
||||||
|
return ( self.Metric ~= nil and self.Metric == true ) or ( self.Metric == nil and _SETTINGS:IsMetric() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets the SETTINGS imperial.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
function SETTINGS:SetImperial()
|
||||||
|
self.Metric = false
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Gets if the SETTINGS is imperial.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if imperial.
|
||||||
|
function SETTINGS:IsImperial()
|
||||||
|
self:E( {Metric = ( self.Metric ~= nil and self.Metric == false ) or ( self.Metric == nil and _SETTINGS:IsMetric() ) } )
|
||||||
|
return ( self.Metric ~= nil and self.Metric == false ) or ( self.Metric == nil and _SETTINGS:IsMetric() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets the SETTINGS LL accuracy.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @param #number LL_Accuracy
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetLL_Accuracy( LL_Accuracy )
|
||||||
|
self.LL_Accuracy = LL_Accuracy
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Gets the SETTINGS LL accuracy.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #number
|
||||||
|
function SETTINGS:GetLL_Accuracy()
|
||||||
|
return self.LL_Accuracy or _SETTINGS:GetLL_Accuracy()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets the SETTINGS LL DMS.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @param #number LL_DMS
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetLL_DMS( LL_DMS )
|
||||||
|
self.LL_DMS = LL_DMS
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Gets the SETTINGS LL DMS.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #number
|
||||||
|
function SETTINGS:GetLL_DMS()
|
||||||
|
return self.LL_DMS or _SETTINGS:GetLL_DMS()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets the SETTINGS MGRS accuracy.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @param #number MGRS_Accuracy
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetMGRS_Accuracy( MGRS_Accuracy )
|
||||||
|
self.MGRS_Accuracy = MGRS_Accuracy
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Gets the SETTINGS MGRS accuracy.
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #number
|
||||||
|
function SETTINGS:GetMGRS_Accuracy()
|
||||||
|
return self.MGRS_Accuracy or _SETTINGS:GetMGRS_Accuracy()
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Sets A2G LL
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetA2G_LL()
|
||||||
|
self.A2GSystem = "LL"
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Is LL
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if LL
|
||||||
|
function SETTINGS:IsA2G_LL()
|
||||||
|
return ( self.A2GSystem and self.A2GSystem == "LL" ) or ( not self.A2GSystem and _SETTINGS:IsA2G_LL() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets A2G MGRS
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetA2G_MGRS()
|
||||||
|
self.A2GSystem = "MGRS"
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Is MGRS
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if MGRS
|
||||||
|
function SETTINGS:IsA2G_MGRS()
|
||||||
|
return ( self.A2GSystem and self.A2GSystem == "MGRS" ) or ( not self.A2GSystem and _SETTINGS:IsA2G_MGRS() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets A2G BRA
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetA2G_BRA()
|
||||||
|
self.A2GSystem = "BRA"
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Is BRA
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if BRA
|
||||||
|
function SETTINGS:IsA2G_BRA()
|
||||||
|
self:E( { BRA = ( self.A2GSystem and self.A2GSystem == "BRA" ) or ( not self.A2GSystem and _SETTINGS:IsA2G_BRA() ) } )
|
||||||
|
return ( self.A2GSystem and self.A2GSystem == "BRA" ) or ( not self.A2GSystem and _SETTINGS:IsA2G_BRA() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets A2A BRA
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetA2A_BRA()
|
||||||
|
self.A2ASystem = "BRA"
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Is BRA
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if BRA
|
||||||
|
function SETTINGS:IsA2A_BRA()
|
||||||
|
self:E( { BRA = ( self.A2ASystem and self.A2ASystem == "BRA" ) or ( not self.A2ASystem and _SETTINGS:IsA2A_BRA() ) } )
|
||||||
|
return ( self.A2ASystem and self.A2ASystem == "BRA" ) or ( not self.A2ASystem and _SETTINGS:IsA2A_BRA() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Sets A2A BULLS
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetA2A_BULLS()
|
||||||
|
self.A2ASystem = "BULLS"
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Is BULLS
|
||||||
|
-- @param #SETTINGS self
|
||||||
|
-- @return #boolean true if BULLS
|
||||||
|
function SETTINGS:IsA2A_BULLS()
|
||||||
|
return ( self.A2ASystem and self.A2ASystem == "BULLS" ) or ( not self.A2ASystem and _SETTINGS:IsA2A_BULLS() )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetSystemMenu( RootMenu, MenuText )
|
||||||
|
|
||||||
|
MenuText = MenuText or "System Settings"
|
||||||
|
|
||||||
|
if not self.SettingsMenu then
|
||||||
|
self.SettingsMenu = MENU_MISSION:New( MenuText, RootMenu )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.DefaultMenu then
|
||||||
|
self.DefaultMenu:Remove()
|
||||||
|
self.DefaultMenu = nil
|
||||||
|
end
|
||||||
|
self.DefaultMenu = MENU_MISSION:New( "Default Settings", self.SettingsMenu )
|
||||||
|
|
||||||
|
local A2GCoordinateMenu = MENU_MISSION:New( "A2G Coordinate System", self.DefaultMenu )
|
||||||
|
|
||||||
|
if self:IsA2G_LL() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate BRA", A2GCoordinateMenu, self.A2GMenuSystem, self, "BRA" )
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate MGRS", A2GCoordinateMenu, self.A2GMenuSystem, self, "MGRS" )
|
||||||
|
MENU_MISSION_COMMAND:New( "LL Accuracy 1", A2GCoordinateMenu, self.MenuLL_Accuracy, self, 1 )
|
||||||
|
MENU_MISSION_COMMAND:New( "LL Accuracy 2", A2GCoordinateMenu, self.MenuLL_Accuracy, self, 2 )
|
||||||
|
MENU_MISSION_COMMAND:New( "LL Accuracy 3", A2GCoordinateMenu, self.MenuLL_Accuracy, self, 3 )
|
||||||
|
MENU_MISSION_COMMAND:New( "LL Decimal On", A2GCoordinateMenu, self.MenuLL_DMS, self, true )
|
||||||
|
MENU_MISSION_COMMAND:New( "LL Decimal Off", A2GCoordinateMenu, self.MenuLL_DMS, self, false )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2G_MGRS() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate BRA", A2GCoordinateMenu, self.A2GMenuSystem, self, "BRA" )
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate LL", A2GCoordinateMenu, self.A2GMenuSystem, self, "LL" )
|
||||||
|
MENU_MISSION_COMMAND:New( "MGRS Accuracy 1", A2GCoordinateMenu, self.MenuMGRS_Accuracy, self, 1 )
|
||||||
|
MENU_MISSION_COMMAND:New( "MGRS Accuracy 2", A2GCoordinateMenu, self.MenuMGRS_Accuracy, self, 2 )
|
||||||
|
MENU_MISSION_COMMAND:New( "MGRS Accuracy 3", A2GCoordinateMenu, self.MenuMGRS_Accuracy, self, 3 )
|
||||||
|
MENU_MISSION_COMMAND:New( "MGRS Accuracy 4", A2GCoordinateMenu, self.MenuMGRS_Accuracy, self, 4 )
|
||||||
|
MENU_MISSION_COMMAND:New( "MGRS Accuracy 5", A2GCoordinateMenu, self.MenuMGRS_Accuracy, self, 5 )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2G_BRA() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate MGRS", A2GCoordinateMenu, self.A2GMenuSystem, self, "MGRS" )
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate LL", A2GCoordinateMenu, self.A2GMenuSystem, self, "LL" )
|
||||||
|
end
|
||||||
|
|
||||||
|
local A2ACoordinateMenu = MENU_MISSION:New( "A2A Coordinate System", self.DefaultMenu )
|
||||||
|
|
||||||
|
if self:IsA2A_BULLS() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate BRA", A2ACoordinateMenu, self.A2AMenuSystem, self, "BRA" )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2A_BRA() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate BULLS", A2ACoordinateMenu, self.A2AMenuSystem, self, "BULLS" )
|
||||||
|
end
|
||||||
|
|
||||||
|
local MetricsMenu = MENU_MISSION:New( "Measures and Weights System", self.DefaultMenu )
|
||||||
|
|
||||||
|
if self:IsMetric() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate Imperial", MetricsMenu, self.MenuMWSystem, self, false )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsImperial() then
|
||||||
|
MENU_MISSION_COMMAND:New( "Activate Metric", MetricsMenu, self.MenuMWSystem, self, true )
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
-- @param RootMenu
|
||||||
|
-- @param Wrapper.Client#CLIENT PlayerUnit
|
||||||
|
-- @param #string MenuText
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:SetPlayerMenu( PlayerUnit )
|
||||||
|
|
||||||
|
local MenuText = "Player Settings"
|
||||||
|
self.MenuText = MenuText
|
||||||
|
|
||||||
|
local SettingsMenu = _SETTINGS.SettingsMenu
|
||||||
|
|
||||||
|
local PlayerGroup = PlayerUnit:GetGroup()
|
||||||
|
local PlayerName = PlayerUnit:GetPlayerName()
|
||||||
|
local PlayerNames = PlayerGroup:GetPlayerNames()
|
||||||
|
|
||||||
|
local GroupMenu = MENU_GROUP:New( PlayerGroup, MenuText, SettingsMenu )
|
||||||
|
local PlayerMenu = MENU_GROUP:New( PlayerGroup, 'Settings "' .. PlayerName .. '"', GroupMenu )
|
||||||
|
|
||||||
|
self.PlayerMenu = PlayerMenu
|
||||||
|
|
||||||
|
local A2GCoordinateMenu = MENU_GROUP:New( PlayerGroup, "A2G Coordinate System", PlayerMenu )
|
||||||
|
|
||||||
|
if self:IsA2G_LL() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate BRA", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "BRA" )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate MGRS", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "MGRS" )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "LL Accuracy 1", A2GCoordinateMenu, self.MenuGroupLL_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 1 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "LL Accuracy 2", A2GCoordinateMenu, self.MenuGroupLL_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 2 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "LL Accuracy 3", A2GCoordinateMenu, self.MenuGroupLL_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 3 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "LL Decimal On", A2GCoordinateMenu, self.MenuGroupLL_DMSSystem, self, PlayerUnit, PlayerGroup, PlayerName, true )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "LL Decimal Off", A2GCoordinateMenu, self.MenuGroupLL_DMSSystem, self, PlayerUnit, PlayerGroup, PlayerName, false )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2G_MGRS() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate BRA", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "BRA" )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate LL", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "LL" )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "MGRS Accuracy 1", A2GCoordinateMenu, self.MenuGroupMGRS_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 1 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "MGRS Accuracy 2", A2GCoordinateMenu, self.MenuGroupMGRS_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 2 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "MGRS Accuracy 3", A2GCoordinateMenu, self.MenuGroupMGRS_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 3 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "MGRS Accuracy 4", A2GCoordinateMenu, self.MenuGroupMGRS_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 4 )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "MGRS Accuracy 5", A2GCoordinateMenu, self.MenuGroupMGRS_AccuracySystem, self, PlayerUnit, PlayerGroup, PlayerName, 5 )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2G_BRA() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate MGRS", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "MGRS" )
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate LL", A2GCoordinateMenu, self.MenuGroupA2GSystem, self, PlayerUnit, PlayerGroup, PlayerName, "LL" )
|
||||||
|
end
|
||||||
|
|
||||||
|
local A2ACoordinateMenu = MENU_GROUP:New( PlayerGroup, "A2A Coordinate System", PlayerMenu )
|
||||||
|
|
||||||
|
if self:IsA2A_BULLS() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate BRA", A2ACoordinateMenu, self.MenuGroupA2ASystem, self, PlayerUnit, PlayerGroup, PlayerName, "BRA" )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsA2A_BRA() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate BULLS", A2ACoordinateMenu, self.MenuGroupA2ASystem, self, PlayerUnit, PlayerGroup, PlayerName, "BULLS" )
|
||||||
|
end
|
||||||
|
|
||||||
|
local MetricsMenu = MENU_GROUP:New( PlayerGroup, "Measures and Weights System", PlayerMenu )
|
||||||
|
|
||||||
|
if self:IsMetric() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate Imperial", MetricsMenu, self.MenuGroupMWSystem, self, PlayerUnit, PlayerGroup, PlayerName, false )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self:IsImperial() then
|
||||||
|
MENU_GROUP_COMMAND:New( PlayerGroup, "Activate Metric", MetricsMenu, self.MenuGroupMWSystem, self, PlayerUnit, PlayerGroup, PlayerName, true )
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
-- @param RootMenu
|
||||||
|
-- @param Wrapper.Client#CLIENT PlayerUnit
|
||||||
|
-- @return #SETTINGS
|
||||||
|
function SETTINGS:RemovePlayerMenu( PlayerUnit )
|
||||||
|
|
||||||
|
if self.PlayerMenu then
|
||||||
|
self.PlayerMenu:Remove()
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:A2GMenuSystem( A2GSystem )
|
||||||
|
self.A2GSystem = A2GSystem
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:A2AMenuSystem( A2ASystem )
|
||||||
|
self.A2ASystem = A2ASystem
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuLL_Accuracy( LL_Accuracy )
|
||||||
|
self.LL_Accuracy = LL_Accuracy
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuLL_DMS( LL_DMS )
|
||||||
|
self.LL_DMS = LL_DMS
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuMGRS_Accuracy( MGRS_Accuracy )
|
||||||
|
self.MGRS_Accuracy = MGRS_Accuracy
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuMWSystem( MW )
|
||||||
|
self.Metric = MW
|
||||||
|
MESSAGE:New( string.format("Settings: Default measurement format set to %s for all players!.", MW and "Metric" or "Imperial" ), 5 ):ToAll()
|
||||||
|
self:SetSystemMenu()
|
||||||
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupA2GSystem( PlayerUnit, PlayerGroup, PlayerName, A2GSystem )
|
||||||
|
BASE:E( {self, PlayerUnit:GetName(), A2GSystem} )
|
||||||
|
self.A2GSystem = A2GSystem
|
||||||
|
MESSAGE:New( string.format("Settings: A2G format set to %s for player %s.", A2GSystem, PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupA2ASystem( PlayerUnit, PlayerGroup, PlayerName, A2ASystem )
|
||||||
|
self.A2ASystem = A2ASystem
|
||||||
|
MESSAGE:New( string.format("Settings: A2A format set to %s for player %s.", A2ASystem, PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupLL_AccuracySystem( PlayerUnit, PlayerGroup, PlayerName, LL_Accuracy )
|
||||||
|
self.LL_Accuracy = LL_Accuracy
|
||||||
|
MESSAGE:New( string.format("Settings: A2G LL format accuracy set to %d for player %s.", LL_Accuracy, PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupLL_DMSSystem( PlayerUnit, PlayerGroup, PlayerName, LL_DMS )
|
||||||
|
self.LL_DMS = LL_DMS
|
||||||
|
MESSAGE:New( string.format("Settings: A2G LL format mode set to %s for player %s.", LL_DMS and "DMS" or "HMS", PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupMGRS_AccuracySystem( PlayerUnit, PlayerGroup, PlayerName, MGRS_Accuracy )
|
||||||
|
self.MGRS_Accuracy = MGRS_Accuracy
|
||||||
|
MESSAGE:New( string.format("Settings: A2G MGRS format accuracy set to %d for player %s.", MGRS_Accuracy, PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #SETTINGS self
|
||||||
|
function SETTINGS:MenuGroupMWSystem( PlayerUnit, PlayerGroup, PlayerName, MW )
|
||||||
|
self.Metrics = MW
|
||||||
|
MESSAGE:New( string.format("Settings: Measurement format set to %s for player %s.", MW and "Metric" or "Imperial", PlayerName ), 5 ):ToGroup( PlayerGroup )
|
||||||
|
self:RemovePlayerMenu(PlayerUnit)
|
||||||
|
self:SetPlayerMenu(PlayerUnit)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ function ZONE_BASE:GetVec3( Height )
|
|||||||
|
|
||||||
local Vec2 = self:GetVec2()
|
local Vec2 = self:GetVec2()
|
||||||
|
|
||||||
local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y }
|
local Vec3 = { x = Vec2.x, y = Height and Height or land.getHeight( self:GetVec2() ), z = Vec2.y }
|
||||||
|
|
||||||
self:T2( { Vec3 } )
|
self:T2( { Vec3 } )
|
||||||
|
|
||||||
|
|||||||
@ -538,7 +538,7 @@ do -- DESIGNATE
|
|||||||
|
|
||||||
for Index, DetectedItemData in pairs( DetectedItems ) do
|
for Index, DetectedItemData in pairs( DetectedItems ) do
|
||||||
|
|
||||||
local Report = self.Detection:DetectedItemReportSummary( Index )
|
local Report = self.Detection:DetectedItemReportSummary( Index, AttackGroup )
|
||||||
DetectedReport:Add(" - " .. Report)
|
DetectedReport:Add(" - " .. Report)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -639,7 +639,7 @@ do -- DESIGNATE
|
|||||||
|
|
||||||
for Index, DetectedItemData in pairs( DetectedItems ) do
|
for Index, DetectedItemData in pairs( DetectedItems ) do
|
||||||
|
|
||||||
local Report = self.Detection:DetectedItemMenu( Index )
|
local Report = self.Detection:DetectedItemMenu( Index, AttackGroup )
|
||||||
|
|
||||||
if not self.Designating[Index] then
|
if not self.Designating[Index] then
|
||||||
local DetectedMenu = MENU_GROUP:New( AttackGroup, Report, DesignateMenu )
|
local DetectedMenu = MENU_GROUP:New( AttackGroup, Report, DesignateMenu )
|
||||||
|
|||||||
@ -240,6 +240,11 @@ do -- DETECTION_BASE
|
|||||||
-- -- Start the Detection.
|
-- -- Start the Detection.
|
||||||
-- Detection:Start()
|
-- Detection:Start()
|
||||||
--
|
--
|
||||||
|
-- ## Detection of Friendlies Nearby
|
||||||
|
--
|
||||||
|
-- Use the method @{Detection#DETECTION_BASE.SetFriendliesRange}() to set the range what will indicate when friendlies are nearby
|
||||||
|
-- a DetectedItem. The default range is 6000 meters. For air detections, it is advisory to use about 30.000 meters.
|
||||||
|
--
|
||||||
-- ## DETECTION_BASE is a Finite State Machine
|
-- ## DETECTION_BASE is a Finite State Machine
|
||||||
--
|
--
|
||||||
-- Various Events and State Transitions can be tailored using DETECTION_BASE.
|
-- Various Events and State Transitions can be tailored using DETECTION_BASE.
|
||||||
@ -330,6 +335,8 @@ do -- DETECTION_BASE
|
|||||||
Unit.Category.STRUCTURE
|
Unit.Category.STRUCTURE
|
||||||
} )
|
} )
|
||||||
|
|
||||||
|
self:SetFriendliesRange( 6000 )
|
||||||
|
|
||||||
-- Create FSM transitions.
|
-- Create FSM transitions.
|
||||||
|
|
||||||
self:SetStartState( "Stopped" )
|
self:SetStartState( "Stopped" )
|
||||||
@ -880,6 +887,22 @@ do -- DETECTION_BASE
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do -- Friendlies Radius
|
||||||
|
|
||||||
|
--- Set the radius in meters to validate if friendlies are nearby.
|
||||||
|
-- @param #DETECTION_BASE self
|
||||||
|
-- @param #number FriendliesRange Radius to use when checking if Friendlies are nearby.
|
||||||
|
-- @return #DETECTION_BASE self
|
||||||
|
function DETECTION_BASE:SetFriendliesRange( FriendliesRange ) --R2.2 Friendlies range
|
||||||
|
self:F2()
|
||||||
|
|
||||||
|
self.FriendliesRange = FriendliesRange
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
do -- Accept / Reject detected units
|
do -- Accept / Reject detected units
|
||||||
|
|
||||||
--- Accept detections if within a range in meters.
|
--- Accept detections if within a range in meters.
|
||||||
@ -1071,7 +1094,7 @@ do -- DETECTION_BASE
|
|||||||
id = world.VolumeType.SPHERE,
|
id = world.VolumeType.SPHERE,
|
||||||
params = {
|
params = {
|
||||||
point = DetectedUnit:GetVec3(),
|
point = DetectedUnit:GetVec3(),
|
||||||
radius = 6000,
|
radius = self.FriendliesRange,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1308,7 +1331,7 @@ do -- DETECTION_BASE
|
|||||||
--- Get the COORDINATE of a detection item using a given numeric index.
|
--- Get the COORDINATE of a detection item using a given numeric index.
|
||||||
-- @param #DETECTION_BASE self
|
-- @param #DETECTION_BASE self
|
||||||
-- @param #number Index
|
-- @param #number Index
|
||||||
-- @return Core.Point#COORDINATE Coordinate
|
-- @return Core.Point#COORDINATE
|
||||||
function DETECTION_BASE:GetDetectedItemCoordinate( Index )
|
function DETECTION_BASE:GetDetectedItemCoordinate( Index )
|
||||||
|
|
||||||
-- If the Zone is set, return the coordinate of the Zone.
|
-- If the Zone is set, return the coordinate of the Zone.
|
||||||
@ -1317,14 +1340,15 @@ do -- DETECTION_BASE
|
|||||||
|
|
||||||
local DetectedZone = self:GetDetectedItemZone( Index )
|
local DetectedZone = self:GetDetectedItemZone( Index )
|
||||||
if DetectedZone then
|
if DetectedZone then
|
||||||
local Coordinate = DetectedZone:GetCoordinate()
|
local Coordinate = DetectedZone:GetPointVec2()
|
||||||
Coordinate:SetHeading(FirstUnit:GetHeading())
|
Coordinate:SetHeading(FirstUnit:GetHeading())
|
||||||
|
Coordinate:SetAlt( FirstUnit:GetAltitude() )
|
||||||
return Coordinate
|
return Coordinate
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If no Zone is set, return the coordinate of the first unit in the Set
|
-- If no Zone is set, return the coordinate of the first unit in the Set
|
||||||
if FirstUnit then
|
if FirstUnit then
|
||||||
local Coordinate = FirstUnit:GetCoordinate()
|
local Coordinate = FirstUnit:GetPointVec3()
|
||||||
FirstUnit:SetHeading(FirstUnit:GetHeading())
|
FirstUnit:SetHeading(FirstUnit:GetHeading())
|
||||||
return Coordinate
|
return Coordinate
|
||||||
end
|
end
|
||||||
@ -1358,7 +1382,7 @@ do -- DETECTION_BASE
|
|||||||
-- @param #DETECTION_BASE self
|
-- @param #DETECTION_BASE self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_BASE:DetectedItemMenu( Index )
|
function DETECTION_BASE:DetectedItemMenu( Index, AttackGroup )
|
||||||
self:F( Index )
|
self:F( Index )
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -1368,7 +1392,7 @@ do -- DETECTION_BASE
|
|||||||
-- @param #DETECTION_BASE self
|
-- @param #DETECTION_BASE self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_BASE:DetectedItemReportSummary( Index )
|
function DETECTION_BASE:DetectedItemReportSummary( Index, AttackGroup )
|
||||||
self:F( Index )
|
self:F( Index )
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -1376,7 +1400,7 @@ do -- DETECTION_BASE
|
|||||||
--- Report detailed of a detectedion result.
|
--- Report detailed of a detectedion result.
|
||||||
-- @param #DETECTION_BASE self
|
-- @param #DETECTION_BASE self
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_BASE:DetectedReportDetailed()
|
function DETECTION_BASE:DetectedReportDetailed( AttackGroup )
|
||||||
self:F()
|
self:F()
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -1410,7 +1434,7 @@ end
|
|||||||
|
|
||||||
do -- DETECTION_UNITS
|
do -- DETECTION_UNITS
|
||||||
|
|
||||||
--- # 2) DETECTION_UNITS class, extends @{Detection#DETECTION_BASE}
|
--- # DETECTION_UNITS class, extends @{Detection#DETECTION_BASE}
|
||||||
--
|
--
|
||||||
-- The DETECTION_UNITS class will detect units within the battle zone.
|
-- The DETECTION_UNITS class will detect units within the battle zone.
|
||||||
-- It will build a DetectedItems list filled with DetectedItems. Each DetectedItem will contain a field Set, which contains a @{Set#SET_UNIT} containing ONE @{UNIT} object reference.
|
-- It will build a DetectedItems list filled with DetectedItems. Each DetectedItem will contain a field Set, which contains a @{Set#SET_UNIT} containing ONE @{UNIT} object reference.
|
||||||
@ -1573,7 +1597,7 @@ do -- DETECTION_UNITS
|
|||||||
-- @param #DETECTION_UNITS self
|
-- @param #DETECTION_UNITS self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_UNITS:DetectedItemMenu( Index )
|
function DETECTION_UNITS:DetectedItemMenu( Index, AttackGroup )
|
||||||
self:F( Index )
|
self:F( Index )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( Index )
|
local DetectedItem = self:GetDetectedItem( Index )
|
||||||
@ -1592,7 +1616,7 @@ do -- DETECTION_UNITS
|
|||||||
self:T(DetectedItemUnit)
|
self:T(DetectedItemUnit)
|
||||||
|
|
||||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
ReportSummary = string.format(
|
ReportSummary = string.format(
|
||||||
"%s - %s",
|
"%s - %s",
|
||||||
@ -1611,7 +1635,7 @@ do -- DETECTION_UNITS
|
|||||||
-- @param #DETECTION_UNITS self
|
-- @param #DETECTION_UNITS self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_UNITS:DetectedItemReportSummary( Index )
|
function DETECTION_UNITS:DetectedItemReportSummary( Index, AttackGroup )
|
||||||
self:F( { Index, self.DetectedItems } )
|
self:F( { Index, self.DetectedItems } )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( Index )
|
local DetectedItem = self:GetDetectedItem( Index )
|
||||||
@ -1653,7 +1677,7 @@ do -- DETECTION_UNITS
|
|||||||
end
|
end
|
||||||
|
|
||||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
local ThreatLevelA2G = DetectedItemUnit:GetThreatLevel( DetectedItem )
|
local ThreatLevelA2G = DetectedItemUnit:GetThreatLevel( DetectedItem )
|
||||||
|
|
||||||
@ -1678,13 +1702,13 @@ do -- DETECTION_UNITS
|
|||||||
--- Report detailed of a detection result.
|
--- Report detailed of a detection result.
|
||||||
-- @param #DETECTION_UNITS self
|
-- @param #DETECTION_UNITS self
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_UNITS:DetectedReportDetailed()
|
function DETECTION_UNITS:DetectedReportDetailed( AttackGroup )
|
||||||
self:F()
|
self:F()
|
||||||
|
|
||||||
local Report = REPORT:New( "Detected units:" )
|
local Report = REPORT:New( "Detected units:" )
|
||||||
for DetectedItemID, DetectedItem in pairs( self.DetectedItems ) do
|
for DetectedItemID, DetectedItem in pairs( self.DetectedItems ) do
|
||||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemID )
|
local ReportSummary = self:DetectedItemReportSummary( DetectedItemID, AttackGroup )
|
||||||
Report:Add( ReportSummary )
|
Report:Add( ReportSummary )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1843,7 +1867,7 @@ do -- DETECTION_TYPES
|
|||||||
-- @param #DETECTION_TYPES self
|
-- @param #DETECTION_TYPES self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_TYPES:DetectedItemMenu( DetectedTypeName )
|
function DETECTION_TYPES:DetectedItemMenu( DetectedTypeName, AttackGroup )
|
||||||
self:F( DetectedTypeName )
|
self:F( DetectedTypeName )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
||||||
@ -1856,7 +1880,7 @@ do -- DETECTION_TYPES
|
|||||||
local DetectedItemUnit = DetectedSet:GetFirst()
|
local DetectedItemUnit = DetectedSet:GetFirst()
|
||||||
|
|
||||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
self:E( { DetectedItemID,
|
self:E( { DetectedItemID,
|
||||||
DetectedItemCoordText } )
|
DetectedItemCoordText } )
|
||||||
@ -1876,7 +1900,7 @@ do -- DETECTION_TYPES
|
|||||||
-- @param #DETECTION_TYPES self
|
-- @param #DETECTION_TYPES self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_TYPES:DetectedItemReportSummary( DetectedTypeName )
|
function DETECTION_TYPES:DetectedItemReportSummary( DetectedTypeName, AttackGroup )
|
||||||
self:F( DetectedTypeName )
|
self:F( DetectedTypeName )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
||||||
@ -1893,7 +1917,7 @@ do -- DETECTION_TYPES
|
|||||||
local DetectedItemUnit = DetectedSet:GetFirst()
|
local DetectedItemUnit = DetectedSet:GetFirst()
|
||||||
|
|
||||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
local ReportSummary = string.format(
|
local ReportSummary = string.format(
|
||||||
"%s - %s - Threat:[%s](%2d) - %2d of %s",
|
"%s - %s - Threat:[%s](%2d) - %2d of %s",
|
||||||
@ -1913,13 +1937,13 @@ do -- DETECTION_TYPES
|
|||||||
--- Report detailed of a detection result.
|
--- Report detailed of a detection result.
|
||||||
-- @param #DETECTION_TYPES self
|
-- @param #DETECTION_TYPES self
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_TYPES:DetectedReportDetailed()
|
function DETECTION_TYPES:DetectedReportDetailed( AttackGroup )
|
||||||
self:F()
|
self:F()
|
||||||
|
|
||||||
local Report = REPORT:New( "Detected types:" )
|
local Report = REPORT:New( "Detected types:" )
|
||||||
for DetectedItemTypeName, DetectedItem in pairs( self.DetectedItems ) do
|
for DetectedItemTypeName, DetectedItem in pairs( self.DetectedItems ) do
|
||||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemTypeName )
|
local ReportSummary = self:DetectedItemReportSummary( DetectedItemTypeName, AttackGroup )
|
||||||
Report:Add( ReportSummary )
|
Report:Add( ReportSummary )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2000,7 +2024,7 @@ do -- DETECTION_AREAS
|
|||||||
-- @param #DETECTION_AREAS self
|
-- @param #DETECTION_AREAS self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_AREAS:DetectedItemMenu( Index )
|
function DETECTION_AREAS:DetectedItemMenu( Index, AttackGroup )
|
||||||
self:F( Index )
|
self:F( Index )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( Index )
|
local DetectedItem = self:GetDetectedItem( Index )
|
||||||
@ -2012,7 +2036,7 @@ do -- DETECTION_AREAS
|
|||||||
|
|
||||||
local DetectedZone = self:GetDetectedItemZone( Index )
|
local DetectedZone = self:GetDetectedItemZone( Index )
|
||||||
local DetectedItemCoordinate = DetectedZone:GetCoordinate()
|
local DetectedItemCoordinate = DetectedZone:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
local ReportSummary = string.format(
|
local ReportSummary = string.format(
|
||||||
"%s - %s",
|
"%s - %s",
|
||||||
@ -2030,7 +2054,7 @@ do -- DETECTION_AREAS
|
|||||||
-- @param #DETECTION_AREAS self
|
-- @param #DETECTION_AREAS self
|
||||||
-- @param Index
|
-- @param Index
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_AREAS:DetectedItemReportSummary( Index )
|
function DETECTION_AREAS:DetectedItemReportSummary( Index, AttackGroup )
|
||||||
self:F( Index )
|
self:F( Index )
|
||||||
|
|
||||||
local DetectedItem = self:GetDetectedItem( Index )
|
local DetectedItem = self:GetDetectedItem( Index )
|
||||||
@ -2042,7 +2066,7 @@ do -- DETECTION_AREAS
|
|||||||
|
|
||||||
local DetectedZone = self:GetDetectedItemZone( Index )
|
local DetectedZone = self:GetDetectedItemZone( Index )
|
||||||
local DetectedItemCoordinate = DetectedZone:GetCoordinate()
|
local DetectedItemCoordinate = DetectedZone:GetCoordinate()
|
||||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString()
|
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||||
|
|
||||||
local ThreatLevelA2G = self:GetTreatLevelA2G( DetectedItem )
|
local ThreatLevelA2G = self:GetTreatLevelA2G( DetectedItem )
|
||||||
local DetectedItemsCount = DetectedSet:Count()
|
local DetectedItemsCount = DetectedSet:Count()
|
||||||
@ -2067,13 +2091,13 @@ do -- DETECTION_AREAS
|
|||||||
--- Report detailed of a detection result.
|
--- Report detailed of a detection result.
|
||||||
-- @param #DETECTION_AREAS self
|
-- @param #DETECTION_AREAS self
|
||||||
-- @return #string
|
-- @return #string
|
||||||
function DETECTION_AREAS:DetectedReportDetailed() --R2.1 Fixed missing report
|
function DETECTION_AREAS:DetectedReportDetailed( AttackGroup) --R2.1 Fixed missing report
|
||||||
self:F()
|
self:F()
|
||||||
|
|
||||||
local Report = REPORT:New( "Detected areas:" )
|
local Report = REPORT:New( "Detected areas:" )
|
||||||
for DetectedItemIndex, DetectedItem in pairs( self.DetectedItems ) do
|
for DetectedItemIndex, DetectedItem in pairs( self.DetectedItems ) do
|
||||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemIndex )
|
local ReportSummary = self:DetectedItemReportSummary( DetectedItemIndex, AttackGroup )
|
||||||
Report:Add( ReportSummary )
|
Report:Add( ReportSummary )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1164,7 +1164,7 @@ function ESCORT:_ReportTargetsScheduler()
|
|||||||
self:E( { DetectedItemID, DetectedItem } )
|
self:E( { DetectedItemID, DetectedItem } )
|
||||||
-- Remove the sub menus of the Attack menu of the Escort for the EscortGroup.
|
-- Remove the sub menus of the Attack menu of the Escort for the EscortGroup.
|
||||||
|
|
||||||
local DetectedItemReportSummary = self.Detection:DetectedItemReportSummary( DetectedItemID )
|
local DetectedItemReportSummary = self.Detection:DetectedItemReportSummary( DetectedItemID, EscortGroupData )
|
||||||
|
|
||||||
if ClientEscortGroupName == EscortGroupName then
|
if ClientEscortGroupName == EscortGroupName then
|
||||||
|
|
||||||
|
|||||||
@ -125,6 +125,32 @@
|
|||||||
--
|
--
|
||||||
-- The above documents that 2 Scoring objects are created, ScoringFirstMission and ScoringSecondMission.
|
-- The above documents that 2 Scoring objects are created, ScoringFirstMission and ScoringSecondMission.
|
||||||
--
|
--
|
||||||
|
-- ### **IMPORTANT!!!*
|
||||||
|
-- In order to allow DCS world to write CSV files, you need to adapt a configuration file in your DCS world installation **on the server**.
|
||||||
|
-- For this, browse to the **missionscripting.lua** file in your DCS world installation folder.
|
||||||
|
-- For me, this installation folder is in _D:\\Program Files\\Eagle Dynamics\\DCS World\Scripts_.
|
||||||
|
--
|
||||||
|
-- Edit a few code lines in the MissionScripting.lua file. Comment out the lines **os**, **io** and **lfs**:
|
||||||
|
--
|
||||||
|
-- do
|
||||||
|
-- --sanitizeModule('os')
|
||||||
|
-- --sanitizeModule('io')
|
||||||
|
-- --sanitizeModule('lfs')
|
||||||
|
-- require = nil
|
||||||
|
-- loadlib = nil
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- When these lines are not sanitized, functions become available to check the time, and to write files to your system at the above specified location.
|
||||||
|
-- Note that the MissionScripting.lua file provides a warning. So please beware of this warning as outlined by Eagle Dynamics!
|
||||||
|
--
|
||||||
|
-- --Sanitize Mission Scripting environment
|
||||||
|
-- --This makes unavailable some unsecure functions.
|
||||||
|
-- --Mission downloaded from server to client may contain potentialy harmful lua code that may use these functions.
|
||||||
|
-- --You can remove the code below and make availble these functions at your own risk.
|
||||||
|
--
|
||||||
|
-- The MOOSE designer cannot take any responsibility of any damage inflicted as a result of the de-sanitization.
|
||||||
|
-- That being said, I hope that the SCORING class provides you with a great add-on to score your squad mates achievements.
|
||||||
|
--
|
||||||
-- ## 1.9) Configure messages.
|
-- ## 1.9) Configure messages.
|
||||||
--
|
--
|
||||||
-- When players hit or destroy targets, messages are sent.
|
-- When players hit or destroy targets, messages are sent.
|
||||||
|
|||||||
@ -9,4 +9,5 @@ _SCHEDULEDISPATCHER = SCHEDULEDISPATCHER:New() -- Core.Timer#SCHEDULEDISPATCHER
|
|||||||
--- Declare the main database object, which is used internally by the MOOSE classes.
|
--- Declare the main database object, which is used internally by the MOOSE classes.
|
||||||
_DATABASE = DATABASE:New() -- Database#DATABASE
|
_DATABASE = DATABASE:New() -- Database#DATABASE
|
||||||
|
|
||||||
--COORDINATE:CoordinateMenu()
|
_SETTINGS = SETTINGS:Set()
|
||||||
|
_SETTINGS:SetSystemMenu( nil )
|
||||||
|
|||||||
@ -116,13 +116,14 @@ function COMMANDCENTER:New( CommandCenterPositionable, CommandCenterName )
|
|||||||
local MenuMissionsSummary = MENU_GROUP_COMMAND:New( EventGroup, "Missions Status Report", MenuReporting, self.ReportMissionsStatus, self, EventGroup )
|
local MenuMissionsSummary = MENU_GROUP_COMMAND:New( EventGroup, "Missions Status Report", MenuReporting, self.ReportMissionsStatus, self, EventGroup )
|
||||||
local MenuMissionsDetails = MENU_GROUP_COMMAND:New( EventGroup, "Missions Players Report", MenuReporting, self.ReportMissionsPlayers, self, EventGroup )
|
local MenuMissionsDetails = MENU_GROUP_COMMAND:New( EventGroup, "Missions Players Report", MenuReporting, self.ReportMissionsPlayers, self, EventGroup )
|
||||||
self:ReportSummary( EventGroup )
|
self:ReportSummary( EventGroup )
|
||||||
end
|
local PlayerUnit = EventData.IniUnit
|
||||||
local PlayerUnit = EventData.IniUnit
|
for MissionID, Mission in pairs( self:GetMissions() ) do
|
||||||
for MissionID, Mission in pairs( self:GetMissions() ) do
|
local Mission = Mission -- Tasking.Mission#MISSION
|
||||||
local Mission = Mission -- Tasking.Mission#MISSION
|
local PlayerGroup = EventData.IniGroup -- The GROUP object should be filled!
|
||||||
local PlayerGroup = EventData.IniGroup -- The GROUP object should be filled!
|
Mission:JoinUnit( PlayerUnit, PlayerGroup )
|
||||||
Mission:JoinUnit( PlayerUnit, PlayerGroup )
|
end
|
||||||
Mission:ReportDetails()
|
self:SetMenu()
|
||||||
|
_DATABASE:PlayerSettingsMenu( PlayerUnit )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -265,8 +265,6 @@ function MISSION:JoinUnit( PlayerUnit, PlayerGroup )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self:GetCommandCenter():SetMenu()
|
|
||||||
|
|
||||||
return PlayerUnitAdded
|
return PlayerUnitAdded
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1403,9 +1403,10 @@ function TASK:ReportDetails( TaskGroup ) --R2.1 fixed report. Now nicely formatt
|
|||||||
elseif type(TaskInfo) == "table" then
|
elseif type(TaskInfo) == "table" then
|
||||||
if TaskInfoID == "Coordinates" then
|
if TaskInfoID == "Coordinates" then
|
||||||
local FromCoordinate = TaskGroup:GetUnit(1):GetCoordinate()
|
local FromCoordinate = TaskGroup:GetUnit(1):GetCoordinate()
|
||||||
|
local ToCoordinate = TaskInfo -- Core.Point#COORDINATE
|
||||||
Report:Add( TaskInfoIDText )
|
Report:Add( TaskInfoIDText )
|
||||||
Report:AddIndent( TaskInfo:ToStringBRAA( FromCoordinate ) .. ", " .. TaskInfo:ToStringAspect( FromCoordinate ) )
|
Report:AddIndent( ToCoordinate:ToStringBRA( FromCoordinate ) .. ", " .. TaskInfo:ToStringAspect( FromCoordinate ) )
|
||||||
Report:AddIndent( TaskInfo:ToStringBULLS( TaskGroup:GetCoalition() ) )
|
Report:AddIndent( ToCoordinate:ToStringBULLS( TaskGroup:GetCoalition() ) )
|
||||||
else
|
else
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -243,6 +243,8 @@ do -- TASK_A2A
|
|||||||
-- @param Wrapper.Unit#UNIT TaskUnit
|
-- @param Wrapper.Unit#UNIT TaskUnit
|
||||||
function TASK_A2A:SetTargetCoordinate( TargetCoordinate, TaskUnit )
|
function TASK_A2A:SetTargetCoordinate( TargetCoordinate, TaskUnit )
|
||||||
|
|
||||||
|
TargetCoordinate:SetModeA2A()
|
||||||
|
|
||||||
local ProcessUnit = self:GetUnitProcess( TaskUnit )
|
local ProcessUnit = self:GetUnitProcess( TaskUnit )
|
||||||
|
|
||||||
local ActRouteTarget = ProcessUnit:GetProcess( "Engaging", "RouteToTargetPoint" ) -- Actions.Act_Route#ACT_ROUTE_POINT
|
local ActRouteTarget = ProcessUnit:GetProcess( "Engaging", "RouteToTargetPoint" ) -- Actions.Act_Route#ACT_ROUTE_POINT
|
||||||
@ -265,12 +267,12 @@ do -- TASK_A2A
|
|||||||
--- @param #TASK_A2A self
|
--- @param #TASK_A2A self
|
||||||
-- @param Core.Zone#ZONE_BASE TargetZone The Zone object where the Target is located on the map.
|
-- @param Core.Zone#ZONE_BASE TargetZone The Zone object where the Target is located on the map.
|
||||||
-- @param Wrapper.Unit#UNIT TaskUnit
|
-- @param Wrapper.Unit#UNIT TaskUnit
|
||||||
function TASK_A2A:SetTargetZone( TargetZone, TaskUnit )
|
function TASK_A2A:SetTargetZone( TargetZone, Altitude, Heading, TaskUnit )
|
||||||
|
|
||||||
local ProcessUnit = self:GetUnitProcess( TaskUnit )
|
local ProcessUnit = self:GetUnitProcess( TaskUnit )
|
||||||
|
|
||||||
local ActRouteTarget = ProcessUnit:GetProcess( "Engaging", "RouteToTargetZone" ) -- Actions.Act_Route#ACT_ROUTE_ZONE
|
local ActRouteTarget = ProcessUnit:GetProcess( "Engaging", "RouteToTargetZone" ) -- Actions.Act_Route#ACT_ROUTE_ZONE
|
||||||
ActRouteTarget:SetZone( TargetZone )
|
ActRouteTarget:SetZone( TargetZone, Altitude, Heading )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -363,17 +365,20 @@ do -- TASK_INTERCEPT
|
|||||||
|
|
||||||
--TODO: Add BR, Altitude, type of planes...
|
--TODO: Add BR, Altitude, type of planes...
|
||||||
|
|
||||||
local TargetCoord = TargetSetUnit:GetFirst():GetCoordinate()
|
|
||||||
local TargetPositionText = TargetCoord:ToString()
|
|
||||||
local TargetThreatLevel = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Intercept incoming intruders.\n" ..
|
"Intercept incoming intruders.\n"
|
||||||
"Last Known Coordinates: " .. TargetPositionText .. "\n" ..
|
|
||||||
"Threat Level: [" .. string.rep( "■", TargetThreatLevel ) .. "]"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||||
|
TargetCoordinate:SetModeA2A()
|
||||||
|
self:SetInfo( "Coordinates", TargetCoordinate )
|
||||||
|
|
||||||
|
self:SetInfo( "ThreatLevel", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]" )
|
||||||
|
local DetectedItemsCount = TargetSetUnit:Count()
|
||||||
|
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||||
|
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ) )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -72,7 +72,7 @@ do -- TASK_A2A_DISPATCHER
|
|||||||
self.Mission = Mission
|
self.Mission = Mission
|
||||||
|
|
||||||
self.Detection:FilterCategories( Unit.Category.AIRPLANE, Unit.Category.HELICOPTER )
|
self.Detection:FilterCategories( Unit.Category.AIRPLANE, Unit.Category.HELICOPTER )
|
||||||
self.Detection:InitDetectRadar( true )
|
--self.Detection:InitDetectRadar( true )
|
||||||
self.Detection:SetDetectionInterval( 30 )
|
self.Detection:SetDetectionInterval( 30 )
|
||||||
|
|
||||||
self:AddTransition( "Started", "Assign", "Started" )
|
self:AddTransition( "Started", "Assign", "Started" )
|
||||||
@ -105,8 +105,9 @@ do -- TASK_A2A_DISPATCHER
|
|||||||
local DetectedZone = DetectedItem.Zone
|
local DetectedZone = DetectedItem.Zone
|
||||||
|
|
||||||
-- Put here the intercept logic....
|
-- Put here the intercept logic....
|
||||||
|
local FriendliesNearBy = self.Detection:IsFriendliesNearBy( DetectedItem )
|
||||||
|
|
||||||
if true then
|
if not FriendliesNearBy == true then
|
||||||
|
|
||||||
-- Here we're doing something advanced... We're copying the DetectedSet, but making a new Set only with SEADable Radar units in it.
|
-- Here we're doing something advanced... We're copying the DetectedSet, but making a new Set only with SEADable Radar units in it.
|
||||||
local TargetSetUnit = SET_UNIT:New()
|
local TargetSetUnit = SET_UNIT:New()
|
||||||
@ -128,10 +129,13 @@ do -- TASK_A2A_DISPATCHER
|
|||||||
-- @param #boolean DetectedItemID
|
-- @param #boolean DetectedItemID
|
||||||
-- @param #boolean DetectedItemChange
|
-- @param #boolean DetectedItemChange
|
||||||
-- @return Tasking.Task#TASK
|
-- @return Tasking.Task#TASK
|
||||||
function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, DetectedItemID, DetectedItemChanged )
|
function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, DetectedItem, DetectedItemID, DetectedItemChanged )
|
||||||
|
|
||||||
|
|
||||||
if Task then
|
if Task then
|
||||||
if Task:IsStatePlanned() and DetectedItemChanged == true then
|
local FriendliesNearBy = self.Detection:IsFriendliesNearBy( DetectedItem )
|
||||||
|
|
||||||
|
if Task:IsStatePlanned() and DetectedItemChanged == true and FriendliesNearBy then
|
||||||
self:E( "Removing Tasking: " .. Task:GetTaskName() )
|
self:E( "Removing Tasking: " .. Task:GetTaskName() )
|
||||||
Mission:RemoveTask( Task )
|
Mission:RemoveTask( Task )
|
||||||
self.Tasks[DetectedItemID] = nil
|
self.Tasks[DetectedItemID] = nil
|
||||||
@ -173,7 +177,7 @@ do -- TASK_A2A_DISPATCHER
|
|||||||
local DetectedItemChanged = DetectedItem.Changed
|
local DetectedItemChanged = DetectedItem.Changed
|
||||||
|
|
||||||
local Task = self.Tasks[DetectedID]
|
local Task = self.Tasks[DetectedID]
|
||||||
Task = self:EvaluateRemoveTask( Mission, Task, DetectedID, DetectedItemChanged ) -- Task will be removed if it is planned and changed.
|
Task = self:EvaluateRemoveTask( Mission, Task, DetectedItem, DetectedID, DetectedItemChanged ) -- Task will be removed if it is planned and changed.
|
||||||
|
|
||||||
-- Evaluate INTERCEPT
|
-- Evaluate INTERCEPT
|
||||||
if not Task then
|
if not Task then
|
||||||
@ -184,14 +188,8 @@ do -- TASK_A2A_DISPATCHER
|
|||||||
|
|
||||||
if Task then
|
if Task then
|
||||||
self.Tasks[DetectedID] = Task
|
self.Tasks[DetectedID] = Task
|
||||||
Task:SetTargetZone( DetectedZone )
|
Task:SetTargetZone( DetectedZone, DetectedSet:GetFirst():GetAltitude(), DetectedSet:GetFirst():GetHeading() )
|
||||||
Task:SetDispatcher( self )
|
Task:SetDispatcher( self )
|
||||||
Task:SetInfo( "ThreatLevel", "[" .. string.rep( "■", DetectedSet:CalculateThreatLevelA2G() ) .. "]" )
|
|
||||||
local DetectedItemsCount = DetectedSet:Count()
|
|
||||||
local DetectedItemsTypes = DetectedSet:GetTypeNames()
|
|
||||||
Task:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ) )
|
|
||||||
Task:SetInfo( "Coordinates", Detection:GetDetectedItemCoordinate( DetectedIndex ) )
|
|
||||||
Task:SetInfo( "Object", DetectedSet:GetFirst() )
|
|
||||||
Mission:AddTask( Task )
|
Mission:AddTask( Task )
|
||||||
else
|
else
|
||||||
self:E("This should not happen")
|
self:E("This should not happen")
|
||||||
|
|||||||
@ -174,7 +174,7 @@ do -- TASK_A2G
|
|||||||
local TargetUnit = Task.TargetSetUnit:GetFirst() -- Wrapper.Unit#UNIT
|
local TargetUnit = Task.TargetSetUnit:GetFirst() -- Wrapper.Unit#UNIT
|
||||||
if TargetUnit then
|
if TargetUnit then
|
||||||
local Coordinate = TargetUnit:GetCoordinate()
|
local Coordinate = TargetUnit:GetCoordinate()
|
||||||
self:T( { TargetCoordinate = Coordinate, Coordinate:GetX(), Coordinate:GetAlt(), Coordinate:GetZ() } )
|
self:T( { TargetCoordinate = Coordinate, Coordinate:GetX(), Coordinate:GetY(), Coordinate:GetZ() } )
|
||||||
Task:SetTargetCoordinate( TargetUnit:GetCoordinate(), TaskUnit )
|
Task:SetTargetCoordinate( TargetUnit:GetCoordinate(), TaskUnit )
|
||||||
end
|
end
|
||||||
self:__RouteToTargetPoint( 0.1 )
|
self:__RouteToTargetPoint( 0.1 )
|
||||||
@ -375,17 +375,20 @@ do -- TASK_SEAD
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
local TargetCoord = TargetSetUnit:GetFirst():GetCoordinate()
|
|
||||||
local TargetPositionText = TargetCoord:ToString()
|
|
||||||
local TargetThreatLevel = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Suppression of Enemy Air Defenses.\n" ..
|
"Execute a Suppression of Enemy Air Defenses.\n"
|
||||||
"Initial Coordinates: " .. TargetPositionText .. "\n" ..
|
|
||||||
"Threat Level: [" .. string.rep( "■", TargetThreatLevel ) .. "]"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||||
|
TargetCoordinate:SetModeA2G()
|
||||||
|
self:SetInfo( "Coordinates", TargetCoordinate )
|
||||||
|
|
||||||
|
self:SetInfo( "ThreatLevel", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]" )
|
||||||
|
local DetectedItemsCount = TargetSetUnit:Count()
|
||||||
|
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||||
|
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ) )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -415,17 +418,20 @@ do -- TASK_BAI
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
local TargetCoord = TargetSetUnit:GetFirst():GetCoordinate()
|
|
||||||
local TargetPositionText = TargetCoord:ToString()
|
|
||||||
local TargetThreatLevel = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Battlefield Air Interdiction of a group of enemy targets.\n" ..
|
"Execute a Battlefield Air Interdiction of a group of enemy targets.\n"
|
||||||
"Initial Coordinates: " .. TargetPositionText .. "\n" ..
|
|
||||||
"Threat Level: [" .. string.rep( "■", TargetThreatLevel ) .. "]"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||||
|
TargetCoordinate:SetModeA2G()
|
||||||
|
self:SetInfo( "Coordinates", TargetCoordinate )
|
||||||
|
|
||||||
|
self:SetInfo( "ThreatLevel", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]" )
|
||||||
|
local DetectedItemsCount = TargetSetUnit:Count()
|
||||||
|
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||||
|
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ) )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -455,18 +461,21 @@ do -- TASK_CAS
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
local TargetCoord = TargetSetUnit:GetFirst():GetCoordinate()
|
|
||||||
local TargetPositionText = TargetCoord:ToString()
|
|
||||||
local TargetThreatLevel = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Close Air Support for a group of enemy targets.\n" ..
|
"Execute a Close Air Support for a group of enemy targets.\n" ..
|
||||||
"Beware of friendlies at the vicinity!\n" ..
|
"Beware of friendlies at the vicinity!\n"
|
||||||
"Initial Coordinates: " .. TargetPositionText .. "\n" ..
|
|
||||||
"Threat Level: [" .. string.rep( "■", TargetThreatLevel ) .. "]"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||||
|
TargetCoordinate:SetModeA2G()
|
||||||
|
self:SetInfo( "Coordinates", TargetCoordinate )
|
||||||
|
|
||||||
|
self:SetInfo( "ThreatLevel", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]" )
|
||||||
|
local DetectedItemsCount = TargetSetUnit:Count()
|
||||||
|
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||||
|
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ) )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -2217,4 +2217,22 @@ function CONTROLLABLE:WayPointExecute( WayPoint, WaitTime )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns if the Controllable contains AirPlanes.
|
||||||
|
-- @param #CONTROLLABLE self
|
||||||
|
-- @return #boolean true if Controllable contains AirPlanes.
|
||||||
|
function CONTROLLABLE:IsAirPlane()
|
||||||
|
self:F2()
|
||||||
|
|
||||||
|
local DCSObject = self:GetDCSObject()
|
||||||
|
|
||||||
|
if DCSObject then
|
||||||
|
local Category = DCSObject:getDesc().category
|
||||||
|
self:T( Category )
|
||||||
|
return Category == Unit.Category.AIRPLANE
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Message APIs
|
-- Message APIs
|
||||||
@ -485,6 +485,25 @@ function GROUP:GetPointVec2()
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Returns a COORDINATE object indicating the point of the first UNIT of the GROUP within the mission.
|
||||||
|
-- @param Wrapper.Group#GROUP self
|
||||||
|
-- @return Core.Point#COORDINATE The COORDINATE of the GROUP.
|
||||||
|
-- @return #nil The POSITIONABLE is not existing or alive.
|
||||||
|
function GROUP:GetCoordinate()
|
||||||
|
self:F2( self.PositionableName )
|
||||||
|
|
||||||
|
local FirstUnit = self:GetUnit(1)
|
||||||
|
|
||||||
|
if FirstUnit then
|
||||||
|
local FirstUnitCoordinate = FirstUnit:GetCoordinate()
|
||||||
|
self:T3(FirstUnitCoordinate)
|
||||||
|
return FirstUnitCoordinate
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Returns a random @{DCSTypes#Vec3} vector (point in 3D of the UNIT within the mission) within a range around the first UNIT of the GROUP.
|
--- Returns a random @{DCSTypes#Vec3} vector (point in 3D of the UNIT within the mission) within a range around the first UNIT of the GROUP.
|
||||||
-- @param #GROUP self
|
-- @param #GROUP self
|
||||||
-- @param #number Radius
|
-- @param #number Radius
|
||||||
|
|||||||
@ -148,7 +148,7 @@ function POSITIONABLE:GetCoordinate()
|
|||||||
if DCSPositionable then
|
if DCSPositionable then
|
||||||
local PositionableVec3 = self:GetPositionVec3()
|
local PositionableVec3 = self:GetPositionVec3()
|
||||||
|
|
||||||
local PositionableCoordinate = COORDINATE:NewFromVec3( PositionableVec3 )
|
local PositionableCoordinate = POINT_VEC3:NewFromVec3( PositionableVec3 )
|
||||||
PositionableCoordinate:SetHeading( self:GetHeading() )
|
PositionableCoordinate:SetHeading( self:GetHeading() )
|
||||||
|
|
||||||
self:T2( PositionableCoordinate )
|
self:T2( PositionableCoordinate )
|
||||||
|
|||||||
@ -5,6 +5,7 @@ Core/Base.lua
|
|||||||
Core/Scheduler.lua
|
Core/Scheduler.lua
|
||||||
Core/ScheduleDispatcher.lua
|
Core/ScheduleDispatcher.lua
|
||||||
Core/Event.lua
|
Core/Event.lua
|
||||||
|
Core/Settings.lua
|
||||||
Core/Menu.lua
|
Core/Menu.lua
|
||||||
Core/Zone.lua
|
Core/Zone.lua
|
||||||
Core/Database.lua
|
Core/Database.lua
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
|
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
|
||||||
env.info( 'Moose Generation Timestamp: 20170517_1856' )
|
env.info( 'Moose Generation Timestamp: 20170522_1100' )
|
||||||
|
|
||||||
local base = _G
|
local base = _G
|
||||||
|
|
||||||
@ -27,6 +27,7 @@ __Moose.Include( 'Core/Base.lua' )
|
|||||||
__Moose.Include( 'Core/Scheduler.lua' )
|
__Moose.Include( 'Core/Scheduler.lua' )
|
||||||
__Moose.Include( 'Core/ScheduleDispatcher.lua' )
|
__Moose.Include( 'Core/ScheduleDispatcher.lua' )
|
||||||
__Moose.Include( 'Core/Event.lua' )
|
__Moose.Include( 'Core/Event.lua' )
|
||||||
|
__Moose.Include( 'Core/Settings.lua' )
|
||||||
__Moose.Include( 'Core/Menu.lua' )
|
__Moose.Include( 'Core/Menu.lua' )
|
||||||
__Moose.Include( 'Core/Zone.lua' )
|
__Moose.Include( 'Core/Zone.lua' )
|
||||||
__Moose.Include( 'Core/Database.lua' )
|
__Moose.Include( 'Core/Database.lua' )
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user