From 8e901b61f4c2792dad8b531505a7835384e0fec1 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 8 Apr 2016 20:03:15 +0200 Subject: [PATCH] Fixed bugs and optimized ESCORT following logic - Optimized the following logic of planes and helicopters. - Fixed bugs with menus already present in the cache of the client. - Fixed a bug in the SPAWN ReSpawn function. - Optimized the JoinUp logic. --- Moose/Base.lua | 4 ++ Moose/Database.lua | 2 +- Moose/Escort.lua | 58 +++++++++++++----- Moose/Group.lua | 31 ++++++++-- Moose/Menu.lua | 25 ++++---- Moose/Spawn.lua | 24 +++++--- .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.lua | 27 ++++---- .../Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz | Bin 46128 -> 45695 bytes 8 files changed, 117 insertions(+), 54 deletions(-) diff --git a/Moose/Base.lua b/Moose/Base.lua index 216b02e76..1d54ac663 100644 --- a/Moose/Base.lua +++ b/Moose/Base.lua @@ -303,6 +303,10 @@ end -- @param #string Class -- @param #string Method function BASE:TraceClassMethod( Class, Method ) + if not _TraceClassMethod[Class] then + _TraceClassMethod[Class] = {} + _TraceClassMethod[Class].Method = {} + end _TraceClassMethod[Class].Method[Method] = true end diff --git a/Moose/Database.lua b/Moose/Database.lua index 479483ec4..b1ac948de 100644 --- a/Moose/Database.lua +++ b/Moose/Database.lua @@ -936,6 +936,6 @@ function LogClose() end end -_Database = DATABASE:New() +_Database = DATABASE:New() -- Database#DATABASE _Database:ScoreOpen() diff --git a/Moose/Escort.lua b/Moose/Escort.lua index 7be1f92fa..60b6c4e6d 100644 --- a/Moose/Escort.lua +++ b/Moose/Escort.lua @@ -29,23 +29,31 @@ -- * **"Scan targets 30 seconds":** Scan 30 seconds for targets. -- * **"Scan targets 60 seconds":** Scan 60 seconds for targets. -- --- **4. Attack nearby targets ...:** This menu item will list all detected targets within an 8km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. +-- **4. Attack targets ...:** This menu item will list all detected targets within a 15km range. Depending on the level of detection (known/unknown) and visuality, the targets type will also be listed. -- --- **5. ROE ...:** Defines the Rules of Engagement of the escort group when in flight. +-- **5. Request assistance from ...:** This menu item will list all detected targets within a 15km range, as with the menu item **Attack Targets**. +-- This menu item allows to request attack support from other escorts supporting the current client group. +-- eg. the function allows a player to request support from the Ship escort to attack a target identified by the Plane escort with its Tomahawk missiles. +-- eg. the function allows a player to request support from other Planes escorting to bomb the unit with illumination missiles or bombs, so that the main plane escort can attack the area. +-- +-- **6. ROE ...:** Defines the Rules of Engagement of the escort group when in flight. -- -- * **"Hold Fire":** The escort group will hold fire. -- * **"Return Fire":** The escort group will return fire. -- * **"Open Fire":** The escort group will open fire on designated targets. -- * **"Weapon Free":** The escort group will engage with any target. -- --- **6. Evasion ...:** Will define the evasion techniques that the escort group will perform during flight or combat. +-- **7. Evasion ...:** Will define the evasion techniques that the escort group will perform during flight or combat. -- -- * **"Fight until death":** The escort group will have no reaction to threats. -- * **"Use flares, chaff and jammers":** The escort group will use passive defense using flares and jammers. No evasive manoeuvres are executed. -- * **"Evade enemy fire":** The rescort group will evade enemy fire before firing. -- * **"Go below radar and evade fire":** The escort group will perform evasive vertical manoeuvres. -- --- **7. Resume Mission ...:** Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- **8. Resume Mission ...:** Escort groups can have their own mission. This menu item will allow the escort group to resume their Mission from a given waypoint. +-- Note that this is really fantastic, as you now have the dynamic of taking control of the escort groups, and allowing them to resume their path or mission. +-- +-- **9. Abort Current Task:** Cancel the current task and rejoin formation. -- -- 1. ESCORT object construction methods. -- -------------------------------------- @@ -112,6 +120,8 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) self.EscortGroup = EscortGroup -- Group#GROUP self.EscortName = EscortName self.EscortBriefing = EscortBriefing + + self:T( EscortGroup:GetClassNameAndID() ) -- Set EscortGroup known at EscortClient. if not self.EscortClient._EscortGroups then @@ -170,7 +180,12 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) end -- Attack Targets - self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack nearby targets", self.EscortMenu ) + self.EscortMenuAttackNearbyTargets = MENU_CLIENT:New( self.EscortClient, "Attack targets", self.EscortMenu ) + + -- Request assistance from other escorts. + -- This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... + self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Request assistance from", self.EscortMenu ) + -- Rules of Engagement self.EscortMenuROE = MENU_CLIENT:New( self.EscortClient, "ROE", self.EscortMenu ) @@ -205,9 +220,6 @@ function ESCORT:New( EscortClient, EscortGroup, EscortName, EscortBriefing ) -- Mission Resume Menu Root self.EscortMenuResumeMission = MENU_CLIENT:New( self.EscortClient, "Resume the escort mission", self.EscortMenu ) - -- Exchange targets with other escorts of the CLIENT. This is very useful to let f.e. an escorting ship attack a target detected by an escorting plane... - self.EscortMenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, "Target assistance from other escorts", self.EscortMenu ) - -- Initialize the EscortGroup EscortGroup:OptionROTVertical() @@ -284,13 +296,27 @@ function ESCORT._JoinUpAndFollow( MenuParam ) local Distance = MenuParam.ParamDistance + self:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) +end + +--- JoinsUp and Follows a CLIENT. +-- @param Escort#ESCORT self +-- @param Group#GROUP EscortGroup +-- @param Client#CLIENT EscortClient +-- @param DCSTypes#Distance Distance +function ESCORT:JoinUpAndFollow( EscortGroup, EscortClient, Distance ) + self:F( { EscortGroup, EscortClient, Distance } ) + if self.FollowScheduler then routines.removeFunction( self.FollowScheduler ) end + EscortGroup:OptionROEHoldFire() + EscortGroup:OptionROTVertical() + self.CT1 = 0 self.GT1 = 0 - self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, 1 ) + self.FollowScheduler = routines.scheduleFunction( self._FollowScheduler, { self, Distance }, timer.getTime() + 1, .5 ) EscortGroup:MessageToClient( "Rejoining and Following at " .. Distance .. "!", 30, EscortClient ) end @@ -631,7 +657,7 @@ function ESCORT:_FollowScheduler( FollowDistance ) local DVu = { x = DV.x / FollowDistance, y = DV.y / FollowDistance, z = DV.z / FollowDistance } -- Now we can calculate the group destination vector GDV. - local GDV = { x = DVu.x * CS * 2 + CVI.x, y = CVI.y, z = DVu.z * CS * 2 + CVI.z } + local GDV = { x = DVu.x * CS * 8 + CVI.x, y = CVI.y, z = DVu.z * CS * 8 + CVI.z } self:T2( { "CV2:", CV2 } ) self:T2( { "CVI:", CVI } ) self:T2( { "GDV:", GDV } ) @@ -642,7 +668,7 @@ function ESCORT:_FollowScheduler( FollowDistance ) -- The calculation of the Speed would simulate that the group would take 30 seconds to overcome -- the requested Distance). local Time = 10 - local CatchUpSpeed = ( CatchUpDistance - ( CS * 2 ) ) / Time + local CatchUpSpeed = ( CatchUpDistance - ( CS * 8.4 ) ) / Time local Speed = CS + CatchUpSpeed if Speed < 0 then @@ -664,10 +690,9 @@ end --- Report Targets Scheduler. -- @param #ESCORT self function ESCORT:_ReportTargetsScheduler() - self:F() + self:F( self.EscortGroup:GetName() ) - - if self.EscortGroup:IsAlive() then + if self.EscortGroup:IsAlive() and self.EscortClient:IsAlive() then local EscortGroupName = self.EscortGroup:GetName() local EscortTargets = self.EscortGroup:GetDetectedTargets() @@ -720,7 +745,10 @@ function ESCORT:_ReportTargetsScheduler() ClientEscortTargets[EscortTargetUnitName].visible = EscortTarget.visible ClientEscortTargets[EscortTargetUnitName].type = EscortTarget.type ClientEscortTargets[EscortTargetUnitName].distance = EscortTarget.distance - + else + if ClientEscortTargets[EscortTargetUnitName] then + ClientEscortTargets[EscortTargetUnitName] = nil + end end end end diff --git a/Moose/Group.lua b/Moose/Group.lua index 9deb1242f..a654a751a 100644 --- a/Moose/Group.lua +++ b/Moose/Group.lua @@ -201,10 +201,11 @@ function GROUP:Destroy() self:F( self.GroupName ) for Index, UnitData in pairs( self.DCSGroup:getUnits() ) do - self:CreateEventCrash( timer.getTime(), UnitData ) + self:CreateEventDead( timer.getTime(), UnitData ) end self.DCSGroup:destroy() + self.DCSGroup = nil end --- Gets the DCS Unit. @@ -752,15 +753,37 @@ function GROUP:TaskRouteToVec3( Point, Speed ) PointFrom.x = GroupPoint.x PointFrom.y = GroupPoint.z PointFrom.alt = GroupPoint.y + PointFrom.alt_type = "BARO" PointFrom.type = "Turning Point" + PointFrom.action = "Turning Point" + PointFrom.speed = Speed + PointFrom.speed_locked = true + PointFrom.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + local PointTo = {} PointTo.x = Point.x PointTo.y = Point.z - PointTo.alt = Point.y + PointTo.alt = Point.y + PointTo.alt_type = "BARO" PointTo.type = "Turning Point" + PointTo.action = "Fly Over Point" PointTo.speed = Speed PointTo.speed_locked = true + PointTo.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + local Points = { PointFrom, PointTo } @@ -1002,8 +1025,8 @@ function GROUP:OptionROEHoldFirePossible() end --- Holding weapons. --- @param #GROUP self --- @return #GROUP self +-- @param Group#GROUP self +-- @return Group#GROUP self function GROUP:OptionROEHoldFire() self:F( { self.GroupName } ) diff --git a/Moose/Menu.lua b/Moose/Menu.lua index c6e6ee7df..f386e118d 100644 --- a/Moose/Menu.lua +++ b/Moose/Menu.lua @@ -120,13 +120,14 @@ function MENU_CLIENT:New( MenuClient, MenuText, ParentMenu ) self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText } ) - if not MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] then - self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) - MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] = self.MenuPath - else - self.MenuPath = MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) end + self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath ) + MenuPath[MenuPathID] = self.MenuPath + self:T( { MenuClient:GetClientGroupName(), self.MenuPath } ) if ParentMenu and ParentMenu.Menus then @@ -211,13 +212,14 @@ function MENU_CLIENT_COMMAND:New( MenuClient, MenuText, ParentMenu, CommandMenuF self:T( { MenuClient:GetClientGroupName(), MenuPath[table.concat(MenuParentPath)], MenuParentPath, MenuText, CommandMenuFunction, CommandMenuArgument } ) - if not MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] then - self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) - MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] = self.MenuPath - else - self.MenuPath = MenuPath[table.concat(MenuParentPath) .. "/" .. MenuText] + local MenuPathID = table.concat(MenuParentPath) .. "/" .. MenuText + if MenuPath[MenuPathID] then + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), MenuPath[MenuPathID] ) end - + + self.MenuPath = missionCommands.addCommandForGroup( self.MenuClient:GetClientGroupID(), MenuText, MenuParentPath, CommandMenuFunction, CommandMenuArgument ) + MenuPath[MenuPathID] = self.MenuPath + self.CommandMenuFunction = CommandMenuFunction self.CommandMenuArgument = CommandMenuArgument @@ -238,6 +240,7 @@ function MENU_CLIENT_COMMAND:Remove() if MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] then MenuPath[table.concat(self.MenuParentPath) .. "/" .. self.MenuText] = nil end + missionCommands.removeItemForGroup( self.MenuClient:GetClientGroupID(), self.MenuPath ) self.ParentMenu.Menus[self.MenuPath] = nil return nil diff --git a/Moose/Spawn.lua b/Moose/Spawn.lua index c30a4b83f..eff339882 100644 --- a/Moose/Spawn.lua +++ b/Moose/Spawn.lua @@ -418,12 +418,15 @@ function SPAWN:ReSpawn( SpawnIndex ) SpawnIndex = 1 end - local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) - local SpawnDCSGroup = SpawnGroup:GetDCSGroup() - if SpawnDCSGroup then - SpawnGroup:Destroy() - end - +-- TODO: This logic makes DCS crash and i don't know why (yet). +-- local SpawnGroup = self:GetGroupFromIndex( SpawnIndex ) +-- if SpawnGroup then +-- local SpawnDCSGroup = SpawnGroup:GetDCSGroup() +-- if SpawnDCSGroup then +-- SpawnGroup:Destroy() +-- end +-- end + return self:SpawnWithIndex( SpawnIndex ) end @@ -762,12 +765,15 @@ end function SPAWN:GetGroupFromIndex( SpawnIndex ) self:F( { self.SpawnTemplatePrefix, self.SpawnAliasPrefix, SpawnIndex } ) - if SpawnIndex then + if not SpawnIndex then + SpawnIndex = 1 + end + + if self.SpawnGroups and self.SpawnGroups[SpawnIndex] then local SpawnGroup = self.SpawnGroups[SpawnIndex].Group return SpawnGroup else - local SpawnGroup = self.SpawnGroups[1].Group - return SpawnGroup + return nil end end diff --git a/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.lua b/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.lua index 9cee0fa40..fa4516e7a 100644 --- a/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.lua +++ b/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.lua @@ -7,33 +7,32 @@ Include.File( "Escort" ) do local function EventAliveHelicopter( Client ) - local SpawnEscortHeli = SPAWN:New( "Escort Helicopter" ) - local SpawnEscortPlane = SPAWN:New( "Escort Plane" ) - local SpawnEscortGround = SPAWN:New( "Escort Ground" ) - local EscortGroupHeli1 = SpawnEscortHeli:Spawn() + local EscortGroupHeli1 = SpawnEscortHeli:ReSpawn(1) local EscortHeli1 = ESCORT:New( Client, EscortGroupHeli1, "Escort Alpha" ) - local EscortGroupPlane = SpawnEscortPlane:Spawn() + local EscortGroupPlane = SpawnEscortPlane:ReSpawn(1) local EscortPlane = ESCORT:New( Client, EscortGroupPlane, "Escort Test Plane" ) - local EscortGroupGround = SpawnEscortGround:Spawn() + local EscortGroupGround = SpawnEscortGround:ReSpawn(1) local EscortGround = ESCORT:New( Client, EscortGroupGround, "Test Ground" ) end local function EventAlivePlane( Client ) - local SpawnEscortPlane = SPAWN:New( "Escort Plane" ) - local EscortGroupPlane = SpawnEscortPlane:Spawn() + local EscortGroupPlane = SpawnEscortPlane:ReSpawn(1) local EscortPlane = ESCORT:New( Client, EscortGroupPlane, "Escort Test Plane" ) - local SpawnEscortGround = SPAWN:New( "Escort Ground" ) - local EscortGroupGround = SpawnEscortGround:Spawn() + local EscortGroupGround = SpawnEscortGround:ReSpawn(1) local EscortGround = ESCORT:New( Client, EscortGroupGround, "Test Ground" ) - local SpawnEscortShip = SPAWN:New( "Escort Ship" ) - local EscortGroupShip = SpawnEscortShip:Spawn() + local EscortGroupShip = SpawnEscortShip:ReSpawn(1) local EscortShip = ESCORT:New( Client, EscortGroupShip, "Test Ship" ) end - local EscortClientHeli = CLIENT:New( "Lead Helicopter", "Fly around and observe the behaviour of the escort helicopter" ):Alive( EventAliveHelicopter ) - local EscortClientPlane = CLIENT:New( "Lead Plane", "Fly around and observe the behaviour of the escort airplane. Select Navigate->Joun-Up and airplane should follow you. Change speed and directions." ) + SpawnEscortHeli = SPAWN:New( "Escort Helicopter" ) + SpawnEscortPlane = SPAWN:New( "Escort Plane" ) + SpawnEscortGround = SPAWN:New( "Escort Ground" ) + SpawnEscortShip = SPAWN:New( "Escort Ship" ) + + EscortClientHeli = CLIENT:New( "Lead Helicopter", "Fly around and observe the behaviour of the escort helicopter" ):Alive( EventAliveHelicopter ) + EscortClientPlane = CLIENT:New( "Lead Plane", "Fly around and observe the behaviour of the escort airplane. Select Navigate->Joun-Up and airplane should follow you. Change speed and directions." ) :Alive( EventAlivePlane ) end diff --git a/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz b/Test Missions/Moose_Test_ESCORT/MOOSE_Test_ESCORT.miz index d8593f8d4c9579bd2c4beecd6c4e6d927d37f532..b644553bda09c93b8234d4fafc2b14be6c928e3d 100644 GIT binary patch delta 16628 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

kW`>Eb!2KOXp+4uVIHp7VX^$(Yb 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 bxNNeAD&2b&0^