mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
commit
cb33fde27b
@ -51,6 +51,7 @@ DATABASE = {
|
|||||||
ClientsByID = {},
|
ClientsByID = {},
|
||||||
},
|
},
|
||||||
UNITS = {},
|
UNITS = {},
|
||||||
|
UNITS_Index = {},
|
||||||
STATICS = {},
|
STATICS = {},
|
||||||
GROUPS = {},
|
GROUPS = {},
|
||||||
PLAYERS = {},
|
PLAYERS = {},
|
||||||
@ -99,7 +100,7 @@ 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()
|
||||||
@ -108,6 +109,33 @@ function DATABASE:New()
|
|||||||
self:_RegisterStatics()
|
self:_RegisterStatics()
|
||||||
self:_RegisterPlayers()
|
self:_RegisterPlayers()
|
||||||
self:_RegisterAirbases()
|
self:_RegisterAirbases()
|
||||||
|
|
||||||
|
self.UNITS_Position = 0
|
||||||
|
|
||||||
|
--- @param #DATABASE self
|
||||||
|
local function CheckPlayers( self )
|
||||||
|
|
||||||
|
local UNITS_Count = #self.UNITS_Index
|
||||||
|
if UNITS_Count > 0 then
|
||||||
|
self.UNITS_Position = ( ( self.UNITS_Position <= UNITS_Count ) and self.UNITS_Position + 1 ) or 1
|
||||||
|
local PlayerUnit = self.UNITS[self.UNITS_Index[self.UNITS_Position]]
|
||||||
|
if PlayerUnit then
|
||||||
|
local UnitName = PlayerUnit:GetName()
|
||||||
|
local PlayerName = PlayerUnit:GetPlayerName()
|
||||||
|
--self:E( { UNITS_Count, self.UNITS_Position, UnitName, PlayerName } )
|
||||||
|
if PlayerName and PlayerName ~= "" then
|
||||||
|
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 )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self:E( "Scheduling" )
|
||||||
|
--local PlayerCheckSchedule = SCHEDULER:New( nil, CheckPlayers, { self }, 2, 0.1 )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -130,6 +158,8 @@ function DATABASE:AddUnit( DCSUnitName )
|
|||||||
if not self.UNITS[DCSUnitName] then
|
if not self.UNITS[DCSUnitName] then
|
||||||
local UnitRegister = UNIT:Register( DCSUnitName )
|
local UnitRegister = UNIT:Register( DCSUnitName )
|
||||||
self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName )
|
self.UNITS[DCSUnitName] = UNIT:Register( DCSUnitName )
|
||||||
|
|
||||||
|
table.insert( self.UNITS_Index, DCSUnitName )
|
||||||
end
|
end
|
||||||
|
|
||||||
return self.UNITS[DCSUnitName]
|
return self.UNITS[DCSUnitName]
|
||||||
@ -140,7 +170,7 @@ end
|
|||||||
-- @param #DATABASE self
|
-- @param #DATABASE self
|
||||||
function DATABASE:DeleteUnit( DCSUnitName )
|
function DATABASE:DeleteUnit( DCSUnitName )
|
||||||
|
|
||||||
--self.UNITS[DCSUnitName] = nil
|
self.UNITS[DCSUnitName] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Adds a Static based on the Static Name in the DATABASE.
|
--- Adds a Static based on the Static Name in the DATABASE.
|
||||||
@ -281,7 +311,7 @@ function DATABASE:AddPlayer( UnitName, PlayerName )
|
|||||||
|
|
||||||
if PlayerName then
|
if PlayerName then
|
||||||
self:E( { "Add player for unit:", UnitName, PlayerName } )
|
self:E( { "Add player for unit:", UnitName, PlayerName } )
|
||||||
self.PLAYERS[PlayerName] = self:FindUnit( UnitName )
|
self.PLAYERS[PlayerName] = UnitName
|
||||||
self.PLAYERSJOINED[PlayerName] = PlayerName
|
self.PLAYERSJOINED[PlayerName] = PlayerName
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -730,6 +730,21 @@ do -- Event Creation
|
|||||||
world.onEvent( Event )
|
world.onEvent( Event )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Creation of a S_EVENT_PLAYER_ENTER_UNIT Event.
|
||||||
|
-- @param #EVENT self
|
||||||
|
-- @param Wrapper.Unit#UNIT PlayerUnit.
|
||||||
|
function EVENT:CreateEventPlayerEnterUnit( PlayerUnit )
|
||||||
|
self:F( { PlayerUnit } )
|
||||||
|
|
||||||
|
local Event = {
|
||||||
|
id = EVENTS.PlayerEnterUnit,
|
||||||
|
time = timer.getTime(),
|
||||||
|
initiator = PlayerUnit:GetDCSObject()
|
||||||
|
}
|
||||||
|
|
||||||
|
world.onEvent( Event )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @param #EVENT self
|
--- @param #EVENT self
|
||||||
@ -748,7 +763,7 @@ function EVENT:onEvent( Event )
|
|||||||
|
|
||||||
|
|
||||||
local EventMeta = _EVENTMETA[Event.id]
|
local EventMeta = _EVENTMETA[Event.id]
|
||||||
|
|
||||||
if self and self.Events and self.Events[Event.id] then
|
if self and self.Events and self.Events[Event.id] then
|
||||||
|
|
||||||
if Event.initiator then
|
if Event.initiator then
|
||||||
@ -863,7 +878,7 @@ function EVENT:onEvent( Event )
|
|||||||
local PriorityBegin = PriorityOrder == -1 and 5 or 1
|
local PriorityBegin = PriorityOrder == -1 and 5 or 1
|
||||||
local PriorityEnd = PriorityOrder == -1 and 1 or 5
|
local PriorityEnd = PriorityOrder == -1 and 1 or 5
|
||||||
|
|
||||||
if Event.IniObjectCategory ~= 3 then
|
if Event.IniObjectCategory ~= Object.Category.STATIC then
|
||||||
self:E( { EventMeta.Text, Event, Event.IniDCSUnitName, Event.TgtDCSUnitName, PriorityOrder } )
|
self:E( { EventMeta.Text, Event, Event.IniDCSUnitName, Event.TgtDCSUnitName, PriorityOrder } )
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -874,8 +889,10 @@ function EVENT:onEvent( Event )
|
|||||||
-- Okay, we got the event from DCS. Now loop the SORTED self.EventSorted[] table for the received Event.id, and for each EventData registered, check if a function needs to be called.
|
-- Okay, we got the event from DCS. Now loop the SORTED self.EventSorted[] table for the received Event.id, and for each EventData registered, check if a function needs to be called.
|
||||||
for EventClass, EventData in pairs( self.Events[Event.id][EventPriority] ) do
|
for EventClass, EventData in pairs( self.Events[Event.id][EventPriority] ) do
|
||||||
|
|
||||||
self:E( { "Evaluating: ", EventClass:GetClassNameAndID() } )
|
if Event.IniObjectCategory ~= Object.Category.STATIC then
|
||||||
|
self:E( { "Evaluating: ", EventClass:GetClassNameAndID() } )
|
||||||
|
end
|
||||||
|
|
||||||
Event.IniGroup = GROUP:FindByName( Event.IniDCSGroupName )
|
Event.IniGroup = GROUP:FindByName( Event.IniDCSGroupName )
|
||||||
Event.TgtGroup = GROUP:FindByName( Event.TgtDCSGroupName )
|
Event.TgtGroup = GROUP:FindByName( Event.TgtDCSGroupName )
|
||||||
|
|
||||||
|
|||||||
@ -1014,6 +1014,8 @@ do -- FSM_PROCESS
|
|||||||
Process.fsm:Remove()
|
Process.fsm:Remove()
|
||||||
Process.fsm = nil
|
Process.fsm = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self._Processes = nil
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|||||||
@ -91,7 +91,7 @@ do -- MENU_BASE
|
|||||||
-- @param #boolean RemoveParent If true, the parent menu is automatically removed when this menu is the last child menu of that parent @{Menu}.
|
-- @param #boolean RemoveParent If true, the parent menu is automatically removed when this menu is the last child menu of that parent @{Menu}.
|
||||||
-- @return #MENU_BASE
|
-- @return #MENU_BASE
|
||||||
function MENU_BASE:SetRemoveParent( RemoveParent )
|
function MENU_BASE:SetRemoveParent( RemoveParent )
|
||||||
self:F( { RemoveParent } )
|
self:F2( { RemoveParent } )
|
||||||
self.MenuRemoveParent = RemoveParent
|
self.MenuRemoveParent = RemoveParent
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -780,9 +780,9 @@ do
|
|||||||
self = MenuGroup._Menus[Path]
|
self = MenuGroup._Menus[Path]
|
||||||
else
|
else
|
||||||
self = BASE:Inherit( self, MENU_BASE:New( MenuText, ParentMenu ) )
|
self = BASE:Inherit( self, MENU_BASE:New( MenuText, ParentMenu ) )
|
||||||
if MenuGroup:IsAlive() then
|
--if MenuGroup:IsAlive() then
|
||||||
MenuGroup._Menus[Path] = self
|
MenuGroup._Menus[Path] = self
|
||||||
end
|
--end
|
||||||
|
|
||||||
self.MenuGroup = MenuGroup
|
self.MenuGroup = MenuGroup
|
||||||
self.Path = Path
|
self.Path = Path
|
||||||
@ -839,7 +839,7 @@ do
|
|||||||
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1
|
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1
|
||||||
if self.ParentMenu.MenuCount == 0 then
|
if self.ParentMenu.MenuCount == 0 then
|
||||||
if self.MenuRemoveParent == true then
|
if self.MenuRemoveParent == true then
|
||||||
self:T( "Removing Parent Menu " )
|
self:T2( "Removing Parent Menu " )
|
||||||
self.ParentMenu:Remove()
|
self.ParentMenu:Remove()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -886,9 +886,9 @@ do
|
|||||||
else
|
else
|
||||||
self = BASE:Inherit( self, MENU_COMMAND_BASE:New( MenuText, ParentMenu, CommandMenuFunction, arg ) )
|
self = BASE:Inherit( self, MENU_COMMAND_BASE:New( MenuText, ParentMenu, CommandMenuFunction, arg ) )
|
||||||
|
|
||||||
if MenuGroup:IsAlive() then
|
--if MenuGroup:IsAlive() then
|
||||||
MenuGroup._Menus[Path] = self
|
MenuGroup._Menus[Path] = self
|
||||||
end
|
--end
|
||||||
|
|
||||||
self.Path = Path
|
self.Path = Path
|
||||||
self.MenuGroup = MenuGroup
|
self.MenuGroup = MenuGroup
|
||||||
@ -902,7 +902,7 @@ do
|
|||||||
if self.ParentMenu and self.ParentMenu.Menus then
|
if self.ParentMenu and self.ParentMenu.Menus then
|
||||||
self.ParentMenu.Menus[MenuText] = self
|
self.ParentMenu.Menus[MenuText] = self
|
||||||
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount + 1
|
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount + 1
|
||||||
self:F( { ParentMenu.Menus, MenuText } )
|
self:F2( { ParentMenu.Menus, MenuText } )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -927,7 +927,7 @@ do
|
|||||||
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1
|
self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1
|
||||||
if self.ParentMenu.MenuCount == 0 then
|
if self.ParentMenu.MenuCount == 0 then
|
||||||
if self.MenuRemoveParent == true then
|
if self.MenuRemoveParent == true then
|
||||||
self:T( "Removing Parent Menu " )
|
self:T2( "Removing Parent Menu " )
|
||||||
self.ParentMenu:Remove()
|
self.ParentMenu:Remove()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -731,7 +731,7 @@ end
|
|||||||
-- @param #ZONE_UNIT self
|
-- @param #ZONE_UNIT self
|
||||||
-- @return Dcs.DCSTypes#Vec2 The location of the zone based on the @{Unit#UNIT}location.
|
-- @return Dcs.DCSTypes#Vec2 The location of the zone based on the @{Unit#UNIT}location.
|
||||||
function ZONE_UNIT:GetVec2()
|
function ZONE_UNIT:GetVec2()
|
||||||
self:F( self.ZoneName )
|
self:F2( self.ZoneName )
|
||||||
|
|
||||||
local ZoneVec2 = self.ZoneUNIT:GetVec2()
|
local ZoneVec2 = self.ZoneUNIT:GetVec2()
|
||||||
if ZoneVec2 then
|
if ZoneVec2 then
|
||||||
@ -741,7 +741,7 @@ function ZONE_UNIT:GetVec2()
|
|||||||
return self.LastVec2
|
return self.LastVec2
|
||||||
end
|
end
|
||||||
|
|
||||||
self:T( { ZoneVec2 } )
|
self:T2( { ZoneVec2 } )
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|||||||
@ -567,7 +567,7 @@ do -- DETECTION_BASE
|
|||||||
self.DetectDLINK
|
self.DetectDLINK
|
||||||
)
|
)
|
||||||
|
|
||||||
self:T( { TargetIsDetected = TargetIsDetected, TargetIsVisible = TargetIsVisible, TargetLastTime = TargetLastTime, TargetKnowType = TargetKnowType, TargetKnowDistance = TargetKnowDistance, TargetLastPos = TargetLastPos, TargetLastVelocity = TargetLastVelocity } )
|
self:T2( { TargetIsDetected = TargetIsDetected, TargetIsVisible = TargetIsVisible, TargetLastTime = TargetLastTime, TargetKnowType = TargetKnowType, TargetKnowDistance = TargetKnowDistance, TargetLastPos = TargetLastPos, TargetLastVelocity = TargetLastVelocity } )
|
||||||
|
|
||||||
local DetectionAccepted = true
|
local DetectionAccepted = true
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ do -- DETECTION_BASE
|
|||||||
|
|
||||||
local DetectedUnitCategory = DetectedObject:getDesc().category
|
local DetectedUnitCategory = DetectedObject:getDesc().category
|
||||||
|
|
||||||
self:T( { "Detected Target:", DetectionGroupName, DetectedObjectName, Distance, DetectedUnitCategory } )
|
self:T2( { "Detected Target:", DetectionGroupName, DetectedObjectName, Distance, DetectedUnitCategory } )
|
||||||
|
|
||||||
-- Calculate Acceptance
|
-- Calculate Acceptance
|
||||||
|
|
||||||
@ -1154,7 +1154,7 @@ do -- DETECTION_BASE
|
|||||||
-- @param #string ObjectName
|
-- @param #string ObjectName
|
||||||
-- @return #DETECTION_BASE.DetectedObject
|
-- @return #DETECTION_BASE.DetectedObject
|
||||||
function DETECTION_BASE:GetDetectedObject( ObjectName )
|
function DETECTION_BASE:GetDetectedObject( ObjectName )
|
||||||
self:F( ObjectName )
|
self:F2( ObjectName )
|
||||||
|
|
||||||
if ObjectName then
|
if ObjectName then
|
||||||
local DetectedObject = self.DetectedObjects[ObjectName]
|
local DetectedObject = self.DetectedObjects[ObjectName]
|
||||||
|
|||||||
@ -76,6 +76,7 @@ do -- DETECTION MANAGER
|
|||||||
self:SetReportInterval( 30 )
|
self:SetReportInterval( 30 )
|
||||||
self:SetReportDisplayTime( 25 )
|
self:SetReportDisplayTime( 25 )
|
||||||
|
|
||||||
|
self:E( { Detection = Detection } )
|
||||||
Detection:__Start( 1 )
|
Detection:__Start( 1 )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|||||||
@ -549,7 +549,7 @@ function MISSION:GetTasksRemaining()
|
|||||||
local TasksRemaining = 0
|
local TasksRemaining = 0
|
||||||
for TaskID, Task in pairs( self:GetTasks() ) do
|
for TaskID, Task in pairs( self:GetTasks() ) do
|
||||||
local Task = Task -- Tasking.Task#TASK
|
local Task = Task -- Tasking.Task#TASK
|
||||||
if Task:IsStateSuccess() or Task:IsStateFAILED() then
|
if Task:IsStateSuccess() or Task:IsStateFailed() then
|
||||||
else
|
else
|
||||||
TasksRemaining = TasksRemaining + 1
|
TasksRemaining = TasksRemaining + 1
|
||||||
end
|
end
|
||||||
|
|||||||
@ -724,7 +724,12 @@ end
|
|||||||
-- @param #TASK self
|
-- @param #TASK self
|
||||||
function TASK:MenuTaskAbort( TaskGroup )
|
function TASK:MenuTaskAbort( TaskGroup )
|
||||||
|
|
||||||
self:Abort()
|
for PlayerUnitName, PlayerUnit in pairs( TaskGroup:GetUnits() ) do
|
||||||
|
self:AbortUnit( PlayerUnit )
|
||||||
|
end
|
||||||
|
|
||||||
|
self:GetMission():GetCommandCenter():GetPositionable():MessageToSetGroup( "Abort", 15, self.SetGroup )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -724,7 +724,7 @@ function UNIT:IsInZone( Zone )
|
|||||||
if self:IsAlive() then
|
if self:IsAlive() then
|
||||||
local IsInZone = Zone:IsVec3InZone( self:GetVec3() )
|
local IsInZone = Zone:IsVec3InZone( self:GetVec3() )
|
||||||
|
|
||||||
self:T( { IsInZone } )
|
self:T2( { IsInZone } )
|
||||||
return IsInZone
|
return IsInZone
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user