From 8695953d5af431b28ac1d5e3bb5f212713b8e121 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Tue, 3 Sep 2024 16:47:17 +0200 Subject: [PATCH 1/2] #SPAWN - performance tuning for event workaround --- Moose Development/Moose/Core/Spawn.lua | 235 +++++++++++++--------- Moose Development/Moose/Core/Zone.lua | 178 ++++++++-------- Moose Development/Moose/Wrapper/Group.lua | 194 +++++++++--------- Moose Development/Moose/Wrapper/Unit.lua | 110 +++++----- 4 files changed, 378 insertions(+), 339 deletions(-) diff --git a/Moose Development/Moose/Core/Spawn.lua b/Moose Development/Moose/Core/Spawn.lua index 345f24983..b0aa78852 100644 --- a/Moose Development/Moose/Core/Spawn.lua +++ b/Moose Development/Moose/Core/Spawn.lua @@ -1226,7 +1226,7 @@ end -- @param Core.Point#COORDINATE Coordinate The position to spawn from -- @return #SPAWN self function SPAWN:InitPositionCoordinate(Coordinate) - self:T2( { self.SpawnTemplatePrefix, Coordinate:GetVec2()} ) + --self:T2( { self.SpawnTemplatePrefix, Coordinate:GetVec2()} ) self:InitPositionVec2(Coordinate:GetVec2()) return self end @@ -1236,10 +1236,10 @@ end -- @param DCS#Vec2 Vec2 The position to spawn from -- @return #SPAWN self function SPAWN:InitPositionVec2(Vec2) - self:T2( { self.SpawnTemplatePrefix, Vec2} ) + --self:T2( { self.SpawnTemplatePrefix, Vec2} ) self.SpawnInitPosition = Vec2 self.SpawnFromNewPosition = true - self:T2("MaxGroups:"..self.SpawnMaxGroups) + --self:T2("MaxGroups:"..self.SpawnMaxGroups) for SpawnGroupID = 1, self.SpawnMaxGroups do self:_SetInitialPosition( SpawnGroupID ) end @@ -1334,7 +1334,7 @@ function SPAWN:InitCleanUp( SpawnCleanUpInterval ) self.SpawnCleanUpTimeStamps = {} local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup() - self:T2( { "CleanUp Scheduler:", SpawnGroup } ) + --self:T2( { "CleanUp Scheduler:", SpawnGroup } ) self.CleanUpScheduler = SCHEDULER:New( self, self._SpawnCleanUpScheduler, {}, 1, SpawnCleanUpInterval, 0.2 ) return self @@ -1367,7 +1367,7 @@ function SPAWN:InitArray( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) local SpawnYIndex = 0 for SpawnGroupID = 1, self.SpawnMaxGroups do - self:T2( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) + --self:T2( { SpawnX, SpawnY, SpawnXIndex, SpawnYIndex } ) self.SpawnGroups[SpawnGroupID].Visible = true self.SpawnGroups[SpawnGroupID].Spawned = false @@ -1391,7 +1391,7 @@ function SPAWN:InitArray( SpawnAngle, SpawnWidth, SpawnDeltaX, SpawnDeltaY ) self.SpawnGroups[SpawnGroupID].Visible = true self:HandleEvent( EVENTS.Birth, self._OnBirth ) - --self:HandleEvent( EVENTS.Dead, self._OnDeadOrCrash ) + self:HandleEvent( EVENTS.Dead, self._OnDeadOrCrash ) self:HandleEvent( EVENTS.Crash, self._OnDeadOrCrash ) self:HandleEvent( EVENTS.RemoveUnit, self._OnDeadOrCrash ) self:HandleEvent( EVENTS.UnitLost, self._OnDeadOrCrash ) @@ -1591,7 +1591,7 @@ end -- @param #string SpawnIndex The index of the group to be spawned. -- @return Wrapper.Group#GROUP The group that was spawned. You can use this group for further actions. function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) - + --[[ local set = SET_GROUP:New():FilterAlive():FilterPrefixes({self.SpawnTemplatePrefix, self.SpawnAliasPrefix}):FilterOnce() local aliveunits = 0 set:ForEachGroupAlive( @@ -1602,12 +1602,12 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) if aliveunits ~= self.AliveUnits then self.AliveUnits = aliveunits - self:T2("***** self.AliveUnits accounting failure! Corrected! *****") + --self:T2("***** self.AliveUnits accounting failure! Corrected! *****") end set= nil - - self:T2( { SpawnTemplatePrefix = self.SpawnTemplatePrefix, SpawnIndex = SpawnIndex, AliveUnits = self.AliveUnits, SpawnMaxGroups = self.SpawnMaxGroups } ) + --]] + --self:T2( { SpawnTemplatePrefix = self.SpawnTemplatePrefix, SpawnIndex = SpawnIndex, AliveUnits = self.AliveUnits, SpawnMaxGroups = self.SpawnMaxGroups } ) if self:_GetSpawnIndex( SpawnIndex ) then @@ -1622,12 +1622,12 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) local SpawnTemplate = self.SpawnGroups[self.SpawnIndex].SpawnTemplate local SpawnZone = self.SpawnGroups[self.SpawnIndex].SpawnZone - self:T2( SpawnTemplate.name ) + --self:T2( SpawnTemplate.name ) if SpawnTemplate then local PointVec3 = POINT_VEC3:New( SpawnTemplate.route.points[1].x, SpawnTemplate.route.points[1].alt, SpawnTemplate.route.points[1].y ) - self:T2( { "Current point of ", self.SpawnTemplatePrefix, PointVec3 } ) + --self:T2( { "Current point of ", self.SpawnTemplatePrefix, PointVec3 } ) -- If RandomizePosition, then Randomize the formation in the zone band, keeping the template. if self.SpawnRandomizePosition then @@ -1639,7 +1639,7 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) for UnitID = 1, #SpawnTemplate.units do SpawnTemplate.units[UnitID].x = SpawnTemplate.units[UnitID].x + (RandomVec2.x - CurrentX) SpawnTemplate.units[UnitID].y = SpawnTemplate.units[UnitID].y + (RandomVec2.y - CurrentY) - self:T2( 'SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( 'SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) end end @@ -1660,13 +1660,13 @@ function SPAWN:SpawnWithIndex( SpawnIndex, NoBirth ) end end if (not inZone) then - self:T2("Could not place unit within zone and within radius!") + --self:T2("Could not place unit within zone and within radius!") RandomVec2 = SpawnZone:GetRandomVec2() end end SpawnTemplate.units[UnitID].x = RandomVec2.x SpawnTemplate.units[UnitID].y = RandomVec2.y - self:T2( 'SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( 'SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) end end @@ -1887,6 +1887,7 @@ end --- Spawns new groups at varying time intervals. -- This is useful if you want to have continuity within your missions of certain (AI) groups to be present (alive) within your missions. +-- **WARNING** - Setting a very low SpawnTime heavily impacts your mission performance and CPU time, it is NOT useful to check the alive state of an object every split second! Be reasonable and stay at 15 seconds and above! -- @param #SPAWN self -- @param #number SpawnTime The time interval defined in seconds between each new spawn of new groups. -- @param #number SpawnTimeVariation The variation to be applied on the defined time interval between each new spawn. @@ -1909,6 +1910,14 @@ function SPAWN:SpawnScheduled( SpawnTime, SpawnTimeVariation, WithDelay ) local SpawnTime = SpawnTime or 60 local SpawnTimeVariation = SpawnTimeVariation or 0.5 + -- Noob catch + if SpawnTime < 15 then + self:E("****SPAWN SCHEDULED****\nWARNING - Setting a very low SpawnTime heavily impacts your mission performance and CPU time, it is NOT useful to check the alive state of an object every "..tostring(SpawnTime).." seconds.\nSetting to 15 second intervals.\n*****") + SpawnTime = 15 + end + + if SpawnTimeVariation > 1 or SpawnTimeVariation < 0 then SpawnTimeVariation = 0.5 end + if SpawnTime ~= nil and SpawnTimeVariation ~= nil then local InitialDelay = 0 if WithDelay or self.DelayOnOff == true then @@ -2024,7 +2033,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT -- Get position of airbase. local PointVec3 = SpawnAirbase:GetCoordinate() - self:T2( PointVec3 ) + --self:T2( PointVec3 ) -- Set take off type. Default is hot. Takeoff = Takeoff or SPAWN.Takeoff.Hot @@ -2053,7 +2062,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT --self:F( { GroupAlive = GroupAlive } ) -- Debug output - self:T2( { "Current point of ", self.SpawnTemplatePrefix, SpawnAirbase } ) + --self:T2( { "Current point of ", self.SpawnTemplatePrefix, SpawnAirbase } ) -- Template group, unit and its attributes. local TemplateGroup = GROUP:FindByName( self.SpawnTemplatePrefix ) @@ -2102,7 +2111,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT -- Check if we spawn on ground. local spawnonground = not (Takeoff == SPAWN.Takeoff.Air) - self:T2( { spawnonground = spawnonground, TOtype = Takeoff, TOair = Takeoff == SPAWN.Takeoff.Air } ) + --self:T2( { spawnonground = spawnonground, TOtype = Takeoff, TOair = Takeoff == SPAWN.Takeoff.Air } ) -- Check where we actually spawn if we spawn on ground. local spawnonship = false @@ -2156,7 +2165,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT -- Number of free parking spots at the airbase. if spawnonship or spawnonfarp or spawnonrunway then -- These places work procedural and have some kind of build in queue ==> Less effort. - self:T2( string.format( "Group %s is spawned on farp/ship/runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s is spawned on farp/ship/runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) nfree = SpawnAirbase:GetFreeParkingSpotsNumber( termtype, true ) spots = SpawnAirbase:GetFreeParkingSpotsTable( termtype, true ) --[[ @@ -2169,18 +2178,18 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT if ishelo then if termtype == nil then -- Helo is spawned. Try exclusive helo spots first. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterOnly ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterOnly ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.HelicopterOnly, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots if nfree < nunits then -- Not enough helo ports. Let's try also other terminal types. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterUsable ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterUsable ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.HelicopterUsable, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else -- No terminal type specified. We try all spots except shelters. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), termtype ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), termtype ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, termtype, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end @@ -2189,23 +2198,23 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT if termtype == nil then if isbomber or istransport or istanker or isawacs then -- First we fill the potentially bigger spots. - self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenBig ) ) + --self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenBig ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.OpenBig, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots if nfree < nunits then -- Now we try the smaller ones. - self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenMedOrBig ) ) + --self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenMedOrBig ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.OpenMedOrBig, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else - self:T2( string.format( "Fighter group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.FighterAircraft ) ) + --self:T2( string.format( "Fighter group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.FighterAircraft ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.FighterAircraft, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else -- Terminal type explicitly given. - self:T2( string.format( "Plane group %s is at %s using terminal type %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), tostring( termtype ) ) ) + --self:T2( string.format( "Plane group %s is at %s using terminal type %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), tostring( termtype ) ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, termtype, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end @@ -2215,12 +2224,12 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT -- Debug: Get parking data. --[[ local parkingdata=SpawnAirbase:GetParkingSpotsTable(termtype) - self:T2(string.format("Parking at %s, terminal type %s:", SpawnAirbase:GetName(), tostring(termtype))) + --self:T2(string.format("Parking at %s, terminal type %s:", SpawnAirbase:GetName(), tostring(termtype))) for _,_spot in pairs(parkingdata) do - self:T2(string.format("%s, Termin Index = %3d, Term Type = %03d, Free = %5s, TOAC = %5s, Term ID0 = %3d, Dist2Rwy = %4d", + --self:T2(string.format("%s, Termin Index = %3d, Term Type = %03d, Free = %5s, TOAC = %5s, Term ID0 = %3d, Dist2Rwy = %4d", SpawnAirbase:GetName(), _spot.TerminalID, _spot.TerminalType,tostring(_spot.Free),tostring(_spot.TOAC),_spot.TerminalID0,_spot.DistToRwy)) end - self:T2(string.format("%s at %s: free parking spots = %d - number of units = %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), nfree, nunits)) + --self:T2(string.format("%s at %s: free parking spots = %d - number of units = %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), nfree, nunits)) ]] -- Set this to true if not enough spots are available for emergency air start. @@ -2315,7 +2324,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT SpawnTemplate.parked = true for UnitID = 1, nunits do - self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) -- Template of the current unit. local UnitTemplate = SpawnTemplate.units[UnitID] @@ -2333,7 +2342,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT -- Ships and FARPS seem to have a build in queue. if spawnonship or spawnonfarp or spawnonrunway then - self:T2( string.format( "Group %s spawning at farp, ship or runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s spawning at farp, ship or runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) -- Spawn on ship. We take only the position of the ship. SpawnTemplate.units[UnitID].x = PointVec3.x -- TX @@ -2342,7 +2351,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT else - self:T2( string.format( "Group %s spawning at airbase %s on parking spot id %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), parkingindex[UnitID] ) ) + --self:T2( string.format( "Group %s spawning at airbase %s on parking spot id %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), parkingindex[UnitID] ) ) -- Get coordinates of parking spot. SpawnTemplate.units[UnitID].x = parkingspots[UnitID].x @@ -2354,7 +2363,7 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT else - self:T2( string.format( "Group %s spawning in air at %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s spawning in air at %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) -- Spawn in air as requested initially. Original template orientation is perserved, altitude is already correctly set. SpawnTemplate.units[UnitID].x = TX @@ -2371,9 +2380,9 @@ function SPAWN:SpawnAtAirbase( SpawnAirbase, Takeoff, TakeoffAltitude, TerminalT end -- Debug output. - self:T2( string.format( "Group %s unit number %d: Parking = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking ) ) ) - self:T2( string.format( "Group %s unit number %d: Parking ID = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking_id ) ) ) - self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( string.format( "Group %s unit number %d: Parking = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking ) ) ) + --self:T2( string.format( "Group %s unit number %d: Parking ID = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking_id ) ) ) + --self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) end end @@ -2451,10 +2460,10 @@ function SPAWN:SpawnAtParkingSpot( Airbase, Spots, Takeoff ) -- Get parking spot data. local spot = Airbase:GetParkingSpotData( TerminalID ) - self:T2( { spot = spot } ) + --self:T2( { spot = spot } ) if spot and spot.Free then - self:T2( string.format( "Adding parking spot ID=%d TermType=%d", spot.TerminalID, spot.TerminalType ) ) + --self:T2( string.format( "Adding parking spot ID=%d TermType=%d", spot.TerminalID, spot.TerminalType ) ) table.insert( Parkingdata, spot ) end @@ -2486,7 +2495,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- Get position of airbase. local PointVec3 = SpawnAirbase:GetCoordinate() - self:T2( PointVec3 ) + --self:T2( PointVec3 ) -- Set take off type. Default is hot. local Takeoff = SPAWN.Takeoff.Cold @@ -2502,7 +2511,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex local GroupAlive = self:GetGroupFromIndex( SpawnIndex ) -- Debug output - self:T2( { "Current point of ", self.SpawnTemplatePrefix, SpawnAirbase } ) + --self:T2( { "Current point of ", self.SpawnTemplatePrefix, SpawnAirbase } ) -- Template group, unit and its attributes. local TemplateGroup = GROUP:FindByName( self.SpawnTemplatePrefix ) @@ -2546,7 +2555,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- Check if we spawn on ground. local spawnonground = not (Takeoff == SPAWN.Takeoff.Air) - self:T2( { spawnonground = spawnonground, TOtype = Takeoff, TOair = Takeoff == SPAWN.Takeoff.Air } ) + --self:T2( { spawnonground = spawnonground, TOtype = Takeoff, TOair = Takeoff == SPAWN.Takeoff.Air } ) -- Check where we actually spawn if we spawn on ground. local spawnonship = false @@ -2588,7 +2597,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- Number of free parking spots at the airbase. if spawnonship or spawnonfarp or spawnonrunway then -- These places work procedural and have some kind of build in queue ==> Less effort. - self:T2( string.format( "Group %s is spawned on farp/ship/runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s is spawned on farp/ship/runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) nfree = SpawnAirbase:GetFreeParkingSpotsNumber( termtype, true ) spots = SpawnAirbase:GetFreeParkingSpotsTable( termtype, true ) --[[ @@ -2601,18 +2610,18 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex if ishelo then if termtype == nil then -- Helo is spawned. Try exclusive helo spots first. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterOnly ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterOnly ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.HelicopterOnly, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots if nfree < nunits then -- Not enough helo ports. Let's try also other terminal types. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterUsable ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.HelicopterUsable ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.HelicopterUsable, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else -- No terminal type specified. We try all spots except shelters. - self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), termtype ) ) + --self:T2( string.format( "Helo group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), termtype ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, termtype, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end @@ -2624,23 +2633,23 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- TODO: Some attributes are "Helicopters", "Bombers", "Transports", "Battleplanes". Need to check it out. if isbomber or istransport then -- First we fill the potentially bigger spots. - self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenBig ) ) + --self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenBig ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.OpenBig, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots if nfree < nunits then -- Now we try the smaller ones. - self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenMedOrBig ) ) + --self:T2( string.format( "Transport/bomber group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.OpenMedOrBig ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.OpenMedOrBig, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else - self:T2( string.format( "Fighter group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.FighterAircraft ) ) + --self:T2( string.format( "Fighter group %s is at %s using terminal type %d.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), AIRBASE.TerminalType.FighterAircraft ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, AIRBASE.TerminalType.FighterAircraft, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end else -- Terminal type explicitly given. - self:T2( string.format( "Plane group %s is at %s using terminal type %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), tostring( termtype ) ) ) + --self:T2( string.format( "Plane group %s is at %s using terminal type %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), tostring( termtype ) ) ) spots = SpawnAirbase:FindFreeParkingSpotForAircraft( TemplateGroup, termtype, scanradius, scanunits, scanstatics, scanscenery, verysafe, nunits, Parkingdata ) nfree = #spots end @@ -2650,12 +2659,12 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- Debug: Get parking data. --[[ local parkingdata=SpawnAirbase:GetParkingSpotsTable(termtype) - self:T2(string.format("Parking at %s, terminal type %s:", SpawnAirbase:GetName(), tostring(termtype))) + --self:T2(string.format("Parking at %s, terminal type %s:", SpawnAirbase:GetName(), tostring(termtype))) for _,_spot in pairs(parkingdata) do - self:T2(string.format("%s, Termin Index = %3d, Term Type = %03d, Free = %5s, TOAC = %5s, Term ID0 = %3d, Dist2Rwy = %4d", + --self:T2(string.format("%s, Termin Index = %3d, Term Type = %03d, Free = %5s, TOAC = %5s, Term ID0 = %3d, Dist2Rwy = %4d", SpawnAirbase:GetName(), _spot.TerminalID, _spot.TerminalType,tostring(_spot.Free),tostring(_spot.TOAC),_spot.TerminalID0,_spot.DistToRwy)) end - self:T2(string.format("%s at %s: free parking spots = %d - number of units = %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), nfree, nunits)) + --self:T2(string.format("%s at %s: free parking spots = %d - number of units = %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), nfree, nunits)) ]] -- Set this to true if not enough spots are available for emergency air start. @@ -2733,7 +2742,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex -- Ships and FARPS seem to have a build in queue. if spawnonship or spawnonfarp or spawnonrunway then - self:T2( string.format( "Group %s spawning at farp, ship or runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s spawning at farp, ship or runway %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) -- Spawn on ship. We take only the position of the ship. SpawnTemplate.units[UnitID].x = PointVec3.x -- TX @@ -2742,7 +2751,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex else - self:T2( string.format( "Group %s spawning at airbase %s on parking spot id %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), parkingindex[UnitID] ) ) + --self:T2( string.format( "Group %s spawning at airbase %s on parking spot id %d", self.SpawnTemplatePrefix, SpawnAirbase:GetName(), parkingindex[UnitID] ) ) -- Get coordinates of parking spot. SpawnTemplate.units[UnitID].x = parkingspots[UnitID].x @@ -2754,7 +2763,7 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex else - self:T2( string.format( "Group %s spawning in air at %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) + --self:T2( string.format( "Group %s spawning in air at %s.", self.SpawnTemplatePrefix, SpawnAirbase:GetName() ) ) -- Spawn in air as requested initially. Original template orientation is perserved, altitude is already correctly set. SpawnTemplate.units[UnitID].x = TX @@ -2771,9 +2780,9 @@ function SPAWN:ParkAircraft( SpawnAirbase, TerminalType, Parkingdata, SpawnIndex end -- Debug output. - self:T2( string.format( "Group %s unit number %d: Parking = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking ) ) ) - self:T2( string.format( "Group %s unit number %d: Parking ID = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking_id ) ) ) - self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( string.format( "Group %s unit number %d: Parking = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking ) ) ) + --self:T2( string.format( "Group %s unit number %d: Parking ID = %s", self.SpawnTemplatePrefix, UnitID, tostring( UnitTemplate.parking_id ) ) ) + --self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) end end @@ -2871,7 +2880,7 @@ function SPAWN:SpawnFromVec3( Vec3, SpawnIndex ) --self:F( { self.SpawnTemplatePrefix, Vec3, SpawnIndex } ) local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 ) - self:T2( PointVec3 ) + --self:T2( PointVec3 ) if SpawnIndex then else @@ -2884,7 +2893,7 @@ function SPAWN:SpawnFromVec3( Vec3, SpawnIndex ) if SpawnTemplate then - self:T2( { "Current point of ", self.SpawnTemplatePrefix, Vec3 } ) + --self:T2( { "Current point of ", self.SpawnTemplatePrefix, Vec3 } ) local TemplateHeight = SpawnTemplate.route and SpawnTemplate.route.points[1].alt or nil @@ -2909,7 +2918,7 @@ function SPAWN:SpawnFromVec3( Vec3, SpawnIndex ) if SpawnTemplate.CategoryID ~= Group.Category.SHIP then SpawnTemplate.units[UnitID].alt = Vec3.y or TemplateHeight end - self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) + --self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. SpawnTemplate.units[UnitID].x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. SpawnTemplate.units[UnitID].y ) end SpawnTemplate.route.points[1].x = Vec3.x SpawnTemplate.route.points[1].y = Vec3.z @@ -3168,10 +3177,10 @@ function SPAWN:SpawnGroupName( SpawnIndex ) if SpawnIndex then local SpawnName = string.format( '%s#%03d', SpawnPrefix, SpawnIndex ) - self:T2( SpawnName ) + --self:T2( SpawnName ) return SpawnName else - self:T2( SpawnPrefix ) + --self:T2( SpawnPrefix ) return SpawnPrefix end @@ -3499,7 +3508,7 @@ function SPAWN:_Prepare( SpawnTemplatePrefix, SpawnIndex ) -- R2.2 if SpawnInitKeepUnitIFF == false then UnitPrefix, Rest = string.match( SpawnTemplate.units[UnitID].name, "^([^#]+)#?" ):gsub( "^%s*(.-)%s*$", "%1" ) SpawnTemplate.units[UnitID].name = string.format( '%s#%03d-%02d', UnitPrefix, SpawnIndex, UnitID ) - self:T2( { UnitPrefix, Rest } ) + --self:T2( { UnitPrefix, Rest } ) --else --UnitPrefix=SpawnTemplate.units[UnitID].name end @@ -3713,7 +3722,7 @@ function SPAWN:_RandomizeRoute( SpawnIndex ) SpawnTemplate.route.points[t].alt = nil end - self:T2( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) + --self:T2( 'SpawnTemplate.route.points[' .. t .. '].x = ' .. SpawnTemplate.route.points[t].x .. ', SpawnTemplate.route.points[' .. t .. '].y = ' .. SpawnTemplate.route.points[t].y ) end end @@ -3756,15 +3765,15 @@ end -- @param #number SpawnIndex -- @return #SPAWN self function SPAWN:_SetInitialPosition( SpawnIndex ) - self:T2( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeZones } ) + --self:T2( { self.SpawnTemplatePrefix, SpawnIndex, self.SpawnRandomizeZones } ) if self.SpawnFromNewPosition then - self:T2( "Preparing Spawn at Vec2 ", self.SpawnInitPosition ) + --self:T2( "Preparing Spawn at Vec2 ", self.SpawnInitPosition ) local SpawnVec2 = self.SpawnInitPosition - self:T2( { SpawnVec2 = SpawnVec2 } ) + --self:T2( { SpawnVec2 = SpawnVec2 } ) local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate @@ -3774,11 +3783,11 @@ function SPAWN:_SetInitialPosition( SpawnIndex ) SpawnTemplate.route.points[1].x = SpawnTemplate.route.points[1].x or 0 SpawnTemplate.route.points[1].y = SpawnTemplate.route.points[1].y or 0 - self:T2( { Route = SpawnTemplate.route } ) + --self:T2( { Route = SpawnTemplate.route } ) for UnitID = 1, #SpawnTemplate.units do local UnitTemplate = SpawnTemplate.units[UnitID] - self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) + --self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) local SX = UnitTemplate.x local SY = UnitTemplate.y local BX = SpawnTemplate.route.points[1].x @@ -3789,7 +3798,7 @@ function SPAWN:_SetInitialPosition( SpawnIndex ) UnitTemplate.y = TY -- TODO: Manage altitude based on landheight... -- SpawnTemplate.units[UnitID].alt = SpawnVec2: - self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) + --self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) end SpawnTemplate.route.points[1].x = SpawnVec2.x @@ -3812,26 +3821,26 @@ function SPAWN:_RandomizeZones( SpawnIndex ) if self.SpawnRandomizeZones then local SpawnZone = nil -- Core.Zone#ZONE_BASE while not SpawnZone do - self:T2( { SpawnZoneTableCount = #self.SpawnZoneTable, self.SpawnZoneTable } ) + --self:T2( { SpawnZoneTableCount = #self.SpawnZoneTable, self.SpawnZoneTable } ) local ZoneID = math.random( #self.SpawnZoneTable ) - self:T2( ZoneID ) + --self:T2( ZoneID ) SpawnZone = self.SpawnZoneTable[ZoneID]:GetZoneMaybe() end - self:T2( "Preparing Spawn in Zone", SpawnZone:GetName() ) + --self:T2( "Preparing Spawn in Zone", SpawnZone:GetName() ) local SpawnVec2 = SpawnZone:GetRandomVec2() - self:T2( { SpawnVec2 = SpawnVec2 } ) + --self:T2( { SpawnVec2 = SpawnVec2 } ) local SpawnTemplate = self.SpawnGroups[SpawnIndex].SpawnTemplate self.SpawnGroups[SpawnIndex].SpawnZone = SpawnZone - self:T2( { Route = SpawnTemplate.route } ) + --self:T2( { Route = SpawnTemplate.route } ) for UnitID = 1, #SpawnTemplate.units do local UnitTemplate = SpawnTemplate.units[UnitID] - self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) + --self:T2( 'Before Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) local SX = UnitTemplate.x local SY = UnitTemplate.y local BX = SpawnTemplate.route.points[1].x @@ -3842,7 +3851,7 @@ function SPAWN:_RandomizeZones( SpawnIndex ) UnitTemplate.y = TY -- TODO: Manage altitude based on landheight... -- SpawnTemplate.units[UnitID].alt = SpawnVec2: - self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) + --self:T2( 'After Translation SpawnTemplate.units[' .. UnitID .. '].x = ' .. UnitTemplate.x .. ', SpawnTemplate.units[' .. UnitID .. '].y = ' .. UnitTemplate.y ) end SpawnTemplate.x = SpawnVec2.x SpawnTemplate.y = SpawnVec2.y @@ -3897,11 +3906,11 @@ end -- @param #number SpawnIndex Spawn index. -- @return #number self.SpawnIndex function SPAWN:_GetSpawnIndex( SpawnIndex ) - self:T2( { template=self.SpawnTemplatePrefix, SpawnIndex=SpawnIndex, SpawnMaxGroups=self.SpawnMaxGroups, SpawnMaxUnitsAlive=self.SpawnMaxUnitsAlive, AliveUnits=self.AliveUnits, TemplateUnits=#self.SpawnTemplate.units } ) + --self:T2( { template=self.SpawnTemplatePrefix, SpawnIndex=SpawnIndex, SpawnMaxGroups=self.SpawnMaxGroups, SpawnMaxUnitsAlive=self.SpawnMaxUnitsAlive, AliveUnits=self.AliveUnits, TemplateUnits=#self.SpawnTemplate.units } ) if (self.SpawnMaxGroups == 0) or (SpawnIndex <= self.SpawnMaxGroups) then if (self.SpawnMaxUnitsAlive == 0) or (self.AliveUnits + #self.SpawnTemplate.units <= self.SpawnMaxUnitsAlive) or self.UnControlled == true then - self:T2( { SpawnCount = self.SpawnCount, SpawnIndex = SpawnIndex } ) + --self:T2( { SpawnCount = self.SpawnCount, SpawnIndex = SpawnIndex } ) if SpawnIndex and SpawnIndex >= self.SpawnCount + 1 then self.SpawnCount = self.SpawnCount + 1 SpawnIndex = self.SpawnCount @@ -3932,22 +3941,51 @@ function SPAWN:_OnBirth( EventData ) if SpawnGroup then local EventPrefix = self:_GetPrefixFromGroup( SpawnGroup ) if EventPrefix then -- EventPrefix can be nil if no # is found, which means, no spawnable group! - self:T2( { "Birth Event:", EventPrefix, self.SpawnTemplatePrefix } ) + --self:T2( { "Birth Event:", EventPrefix, self.SpawnTemplatePrefix } ) if EventPrefix == self.SpawnTemplatePrefix or (self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix) then self.AliveUnits = self.AliveUnits + 1 - self:T2( "Alive Units: " .. self.AliveUnits ) + --self:T2( "Alive Units: " .. self.AliveUnits ) end end end end +--- +-- @param #SPAWN self +-- @return #number count +function SPAWN:_CountAliveUnits() + local count = 0 + if self.SpawnAliasPrefix then + if not self.SpawnAliasPrefixEscaped then self.SpawnAliasPrefixEscaped = string.gsub(self.SpawnAliasPrefix,"[%p%s]",".") end + local SpawnAliasPrefix = self.SpawnAliasPrefixEscaped + local agroups = GROUP:FindAllByMatching(SpawnAliasPrefix) + for _,_grp in pairs(agroups) do + local game = self:_GetPrefixFromGroupName(_grp.GroupName) + if game and game == self.SpawnAliasPrefix then + count = count + _grp:CountAliveUnits() + end + end + else + if not self.SpawnTemplatePrefixEscaped then self.SpawnTemplatePrefixEscaped = string.gsub(self.SpawnTemplatePrefix,"[%p%s]",".") end + local SpawnTemplatePrefix = self.SpawnTemplatePrefixEscaped + local groups = GROUP:FindAllByMatching(SpawnTemplatePrefix) + for _,_grp in pairs(groups) do + local game = self:_GetPrefixFromGroupName(_grp.GroupName) + if game and game == self.SpawnTemplatePrefix then + count = count + _grp:CountAliveUnits() + end + end + end + return count +end + --- -- @param #SPAWN self -- @param Core.Event#EVENTDATA EventData function SPAWN:_OnDeadOrCrash( EventData ) - self:T2( "Dead or crash event ID "..tostring(EventData.id or 0)) - self:T2( "Dead or crash event for "..tostring(EventData.IniUnitName or "none") ) + --self:T2( "Dead or crash event ID "..tostring(EventData.id or 0)) + --self:T2( "Dead or crash event for "..tostring(EventData.IniUnitName or "none") ) --if EventData.id == EVENTS.Dead then return end @@ -3959,12 +3997,13 @@ function SPAWN:_OnDeadOrCrash( EventData ) local EventPrefix = self:_GetPrefixFromGroupName(unit.GroupName) if EventPrefix then -- EventPrefix can be nil if no # is found, which means, no spawnable group! - self:T2( { "Dead event: " .. EventPrefix } ) - self:T2(string.format("EventPrefix = %s | SpawnAliasPrefix = %s | Old AliveUnits = %d",EventPrefix or "",self.SpawnAliasPrefix or "",self.AliveUnits or 0)) + --self:T2(string.format("EventPrefix = %s | SpawnAliasPrefix = %s | Old AliveUnits = %d",EventPrefix or "",self.SpawnAliasPrefix or "",self.AliveUnits or 0)) if EventPrefix == self.SpawnTemplatePrefix or ( self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix ) and self.AliveUnits > 0 then - self.AliveUnits = self.AliveUnits - 1 + --self:I( { "Dead event: " .. EventPrefix } ) + --self.AliveUnits = self.AliveUnits - 1 + self.AliveUnits = self:_CountAliveUnits() + --self:I( "New Alive Units: " .. self.AliveUnits ) end - self:T2( "New Alive Units: " .. self.AliveUnits ) end end end @@ -3980,9 +4019,9 @@ function SPAWN:_OnTakeOff( EventData ) if SpawnGroup then local EventPrefix = self:_GetPrefixFromGroup( SpawnGroup ) if EventPrefix then -- EventPrefix can be nil if no # is found, which means, no spawnable group! - self:T2( { "TakeOff event: " .. EventPrefix } ) + --self:T2( { "TakeOff event: " .. EventPrefix } ) if EventPrefix == self.SpawnTemplatePrefix or (self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix) then - self:T2( "self.Landed = false" ) + --self:T2( "self.Landed = false" ) SpawnGroup:SetState( SpawnGroup, "Spawn_Landed", false ) end end @@ -4000,13 +4039,13 @@ function SPAWN:_OnLand( EventData ) if SpawnGroup then local EventPrefix = self:_GetPrefixFromGroup( SpawnGroup ) if EventPrefix then -- EventPrefix can be nil if no # is found, which means, no spawnable group! - self:T2( { "Land event: " .. EventPrefix } ) + --self:T2( { "Land event: " .. EventPrefix } ) if EventPrefix == self.SpawnTemplatePrefix or (self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix) then -- TODO: Check if this is the last unit of the group that lands. SpawnGroup:SetState( SpawnGroup, "Spawn_Landed", true ) if self.RepeatOnLanding then local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T2( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + --self:T2( { "Landed:", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) -- self:ReSpawn( SpawnGroupIndex ) -- Delay respawn by three seconds due to DCS 2.5.4.26368 OB bug https://github.com/FlightControl-Master/MOOSE/issues/1076 -- Bug was initially only for engine shutdown event but after ED "fixed" it, it now happens on landing events. @@ -4029,13 +4068,13 @@ function SPAWN:_OnEngineShutDown( EventData ) if SpawnGroup then local EventPrefix = self:_GetPrefixFromGroup( SpawnGroup ) if EventPrefix then -- EventPrefix can be nil if no # is found, which means, no spawnable group! - self:T2( { "EngineShutdown event: " .. EventPrefix } ) + --self:T2( { "EngineShutdown event: " .. EventPrefix } ) if EventPrefix == self.SpawnTemplatePrefix or (self.SpawnAliasPrefix and EventPrefix == self.SpawnAliasPrefix) then -- todo: test if on the runway local Landed = SpawnGroup:GetState( SpawnGroup, "Spawn_Landed" ) if Landed and self.RepeatOnEngineShutDown then local SpawnGroupIndex = self:GetSpawnIndexFromGroup( SpawnGroup ) - self:T2( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) + --self:T2( { "EngineShutDown: ", "ReSpawn:", SpawnGroup:GetName(), SpawnGroupIndex } ) -- self:ReSpawn( SpawnGroupIndex ) -- Delay respawn by three seconds due to DCS 2.5.4 OB bug https://github.com/FlightControl-Master/MOOSE/issues/1076 SCHEDULER:New( nil, self.ReSpawn, { self, SpawnGroupIndex }, 3 ) @@ -4064,7 +4103,7 @@ function SPAWN:_SpawnCleanUpScheduler() --self:F( { "CleanUp Scheduler:", self.SpawnTemplatePrefix } ) local SpawnGroup, SpawnCursor = self:GetFirstAliveGroup() - self:T2( { "CleanUp Scheduler:", SpawnGroup, SpawnCursor } ) + --self:T2( { "CleanUp Scheduler:", SpawnGroup, SpawnCursor } ) local IsHelo = false @@ -4081,7 +4120,7 @@ function SPAWN:_SpawnCleanUpScheduler() self.SpawnCleanUpTimeStamps[SpawnUnitName] = self.SpawnCleanUpTimeStamps[SpawnUnitName] or {} local Stamp = self.SpawnCleanUpTimeStamps[SpawnUnitName] - self:T2( { SpawnUnitName, Stamp } ) + --self:T2( { SpawnUnitName, Stamp } ) if Stamp.Vec2 then if (SpawnUnit:InAir() == false and SpawnUnit:GetVelocityKMH() < 1) or IsHelo then @@ -4089,7 +4128,7 @@ function SPAWN:_SpawnCleanUpScheduler() if (Stamp.Vec2.x == NewVec2.x and Stamp.Vec2.y == NewVec2.y) or (SpawnUnit:GetLife() <= 1) then -- If the plane is not moving or dead , and is on the ground, assign it with a timestamp... if Stamp.Time + self.SpawnCleanUpInterval < timer.getTime() then - self:T2( { "CleanUp Scheduler:", "ReSpawning:", SpawnGroup:GetName() } ) + --self:T2( { "CleanUp Scheduler:", "ReSpawning:", SpawnGroup:GetName() } ) --self:ReSpawn( SpawnCursor ) SCHEDULER:New( nil, self.ReSpawn, { self, SpawnCursor }, 3 ) Stamp.Vec2 = nil @@ -4118,7 +4157,7 @@ function SPAWN:_SpawnCleanUpScheduler() SpawnGroup, SpawnCursor = self:GetNextAliveGroup( SpawnCursor ) - self:T2( { "CleanUp Scheduler:", SpawnGroup, SpawnCursor } ) + --self:T2( { "CleanUp Scheduler:", SpawnGroup, SpawnCursor } ) end diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index 7750851cb..e90ba2028 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -144,7 +144,7 @@ ZONE_BASE = { -- @return #ZONE_BASE self function ZONE_BASE:New( ZoneName ) local self = BASE:Inherit( self, FSM:New() ) - self:F( ZoneName ) + --self:F( ZoneName ) self.ZoneName = ZoneName @@ -157,7 +157,7 @@ end -- @param #ZONE_BASE self -- @return #string The name of the zone. function ZONE_BASE:GetName() - self:F2() + --self:F2() return self.ZoneName end @@ -167,7 +167,7 @@ end -- @param #string ZoneName The name of the zone. -- @return #ZONE_BASE function ZONE_BASE:SetName( ZoneName ) - self:F2() + --self:F2() self.ZoneName = ZoneName end @@ -177,7 +177,7 @@ end -- @param DCS#Vec2 Vec2 The Vec2 to test. -- @return #boolean true if the Vec2 is within the zone. function ZONE_BASE:IsVec2InZone( Vec2 ) - self:F2( Vec2 ) + --self:F2( Vec2 ) return false end @@ -232,13 +232,13 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return Core.Point#POINT_VEC2 The PointVec2 of the zone. function ZONE_BASE:GetPointVec2() - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) local Vec2 = self:GetVec2() local PointVec2 = POINT_VEC2:NewFromVec2( Vec2 ) - self:T2( { PointVec2 } ) + --self:T2( { PointVec2 } ) return PointVec2 end @@ -248,7 +248,7 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return DCS#Vec3 The Vec3 of the zone. function ZONE_BASE:GetVec3( Height ) - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) Height = Height or 0 @@ -256,7 +256,7 @@ function ZONE_BASE:GetVec3( Height ) local Vec3 = { x = Vec2.x, y = Height and Height or land.getHeight( self:GetVec2() ), z = Vec2.y } - self:T2( { Vec3 } ) + --self:T2( { Vec3 } ) return Vec3 end @@ -266,13 +266,13 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return Core.Point#POINT_VEC3 The PointVec3 of the zone. function ZONE_BASE:GetPointVec3( Height ) - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) local Vec3 = self:GetVec3( Height ) local PointVec3 = POINT_VEC3:NewFromVec3( Vec3 ) - self:T2( { PointVec3 } ) + --self:T2( { PointVec3 } ) return PointVec3 end @@ -282,7 +282,7 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return Core.Point#COORDINATE The Coordinate of the zone. function ZONE_BASE:GetCoordinate( Height ) --R2.1 - self:F2(self.ZoneName) + --self:F2(self.ZoneName) local Vec3 = self:GetVec3( Height ) @@ -363,7 +363,7 @@ end --- Bound the zone boundaries with a tires. -- @param #ZONE_BASE self function ZONE_BASE:BoundZone() - self:F2() + --self:F2() end --- Set draw coalition of zone. @@ -510,7 +510,7 @@ end -- @param #ZONE_BASE self -- @param Utilities.Utils#SMOKECOLOR SmokeColor The smoke color. function ZONE_BASE:SmokeZone( SmokeColor ) - self:F2( SmokeColor ) + --self:F2( SmokeColor ) end @@ -519,7 +519,7 @@ end -- @param #number ZoneProbability A value between 0 and 1. 0 = 0% and 1 = 100% probability. -- @return #ZONE_BASE self function ZONE_BASE:SetZoneProbability( ZoneProbability ) - self:F( { self:GetName(), ZoneProbability = ZoneProbability } ) + --self:F( { self:GetName(), ZoneProbability = ZoneProbability } ) self.ZoneProbability = ZoneProbability or 1 return self @@ -529,7 +529,7 @@ end -- @param #ZONE_BASE self -- @return #number A value between 0 and 1. 0 = 0% and 1 = 100% probability. function ZONE_BASE:GetZoneProbability() - self:F2() + --self:F2() return self.ZoneProbability end @@ -560,7 +560,7 @@ end -- -- The result should be that Zone1 would be more probable selected than Zone2. -- function ZONE_BASE:GetZoneMaybe() - self:F2() + --self:F2() local Randomization = math.random() if Randomization <= self.ZoneProbability then @@ -791,7 +791,7 @@ function ZONE_RADIUS:New( ZoneName, Vec2, Radius, DoNotRegisterZone ) -- Inherit ZONE_BASE. local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) -- #ZONE_RADIUS - self:F( { ZoneName, Vec2, Radius } ) + --self:F( { ZoneName, Vec2, Radius } ) self.Radius = Radius self.Vec2 = Vec2 @@ -947,7 +947,7 @@ end -- @param #number AddOffSet (optional) The angle to be added for the smoking start position. -- @return #ZONE_RADIUS self function ZONE_RADIUS:SmokeZone( SmokeColor, Points, AddHeight, AngleOffset ) - self:F2( SmokeColor ) + --self:F2( SmokeColor ) local Point = {} local Vec2 = self:GetVec2() @@ -978,7 +978,7 @@ end -- @param #number AddHeight (optional) The height to be added for the smoke. -- @return #ZONE_RADIUS self function ZONE_RADIUS:FlareZone( FlareColor, Points, Azimuth, AddHeight ) - self:F2( { FlareColor, Azimuth } ) + --self:F2( { FlareColor, Azimuth } ) local Point = {} local Vec2 = self:GetVec2() @@ -1004,9 +1004,9 @@ end -- @param #ZONE_RADIUS self -- @return DCS#Distance The radius of the zone. function ZONE_RADIUS:GetRadius() - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) - self:T2( { self.Radius } ) + --self:T2( { self.Radius } ) return self.Radius end @@ -1016,10 +1016,10 @@ end -- @param DCS#Distance Radius The radius of the zone. -- @return DCS#Distance The radius of the zone. function ZONE_RADIUS:SetRadius( Radius ) - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) self.Radius = Radius - self:T2( { self.Radius } ) + --self:T2( { self.Radius } ) return self.Radius end @@ -1028,9 +1028,9 @@ end -- @param #ZONE_RADIUS self -- @return DCS#Vec2 The location of the zone. function ZONE_RADIUS:GetVec2() - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) - self:T2( { self.Vec2 } ) + --self:T2( { self.Vec2 } ) return self.Vec2 end @@ -1040,11 +1040,11 @@ end -- @param DCS#Vec2 Vec2 The new location of the zone. -- @return DCS#Vec2 The new location of the zone. function ZONE_RADIUS:SetVec2( Vec2 ) - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) self.Vec2 = Vec2 - self:T2( { self.Vec2 } ) + --self:T2( { self.Vec2 } ) return self.Vec2 end @@ -1054,14 +1054,14 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return DCS#Vec3 The point of the zone. function ZONE_RADIUS:GetVec3( Height ) - self:F2( { self.ZoneName, Height } ) + --self:F2( { self.ZoneName, Height } ) Height = Height or 0 local Vec2 = self:GetVec2() local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y } - self:T2( { Vec3 } ) + --self:T2( { Vec3 } ) return Vec3 end @@ -1138,7 +1138,7 @@ function ZONE_RADIUS:Scan( ObjectCategories, UnitCategories ) self.ScanData.Units[ZoneObject] = ZoneObject - self:F2( { Name = ZoneObject:getName(), Coalition = CoalitionDCSUnit } ) + --self:F2( { Name = ZoneObject:getName(), Coalition = CoalitionDCSUnit } ) end end @@ -1149,7 +1149,7 @@ function ZONE_RADIUS:Scan( ObjectCategories, UnitCategories ) self.ScanData.Scenery[SceneryType] = self.ScanData.Scenery[SceneryType] or {} self.ScanData.Scenery[SceneryType][SceneryName] = SCENERY:Register( tostring(SceneryName), ZoneObject) table.insert(self.ScanData.SceneryTable,self.ScanData.Scenery[SceneryType][SceneryName] ) - self:T( { SCENERY = self.ScanData.Scenery[SceneryType][SceneryName] } ) + --self:T( { SCENERY = self.ScanData.Scenery[SceneryType][SceneryName] } ) end end @@ -1409,7 +1409,7 @@ function ZONE_RADIUS:SearchZone( EvaluateFunction, ObjectCategories ) local ZoneCoord = self:GetCoordinate() local ZoneRadius = self:GetRadius() - self:F({ZoneCoord = ZoneCoord, ZoneRadius = ZoneRadius, ZoneCoordLL = ZoneCoord:ToStringLLDMS()}) + --self:F({ZoneCoord = ZoneCoord, ZoneRadius = ZoneRadius, ZoneCoordLL = ZoneCoord:ToStringLLDMS()}) local SphereSearch = { id = world.VolumeType.SPHERE, @@ -1436,7 +1436,7 @@ end -- @param DCS#Vec2 Vec2 The location to test. -- @return #boolean true if the location is within the zone. function ZONE_RADIUS:IsVec2InZone( Vec2 ) - self:F2( Vec2 ) + --self:F2( Vec2 ) if not Vec2 then return false end @@ -1456,7 +1456,7 @@ end -- @param DCS#Vec3 Vec3 The point to test. -- @return #boolean true if the point is within the zone. function ZONE_RADIUS:IsVec3InZone( Vec3 ) - self:F2( Vec3 ) + --self:F2( Vec3 ) if not Vec3 then return false end local InZone = self:IsVec2InZone( { x = Vec3.x, y = Vec3.z } ) @@ -1521,11 +1521,11 @@ end -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. -- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. function ZONE_RADIUS:GetRandomPointVec2( inner, outer ) - self:F( self.ZoneName, inner, outer ) + --self:F( self.ZoneName, inner, outer ) local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2( inner, outer ) ) - self:T3( { PointVec2 } ) + --self:T3( { PointVec2 } ) return PointVec2 end @@ -1536,11 +1536,11 @@ end -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. -- @return DCS#Vec3 The random location within the zone. function ZONE_RADIUS:GetRandomVec3( inner, outer ) - self:F( self.ZoneName, inner, outer ) + --self:F( self.ZoneName, inner, outer ) local Vec2 = self:GetRandomVec2( inner, outer ) - self:T3( { x = Vec2.x, y = self.y, z = Vec2.y } ) + --self:T3( { x = Vec2.x, y = self.y, z = Vec2.y } ) return { x = Vec2.x, y = self.y, z = Vec2.y } end @@ -1552,11 +1552,11 @@ end -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. -- @return Core.Point#POINT_VEC3 The @{Core.Point#POINT_VEC3} object reflecting the random 3D location within the zone. function ZONE_RADIUS:GetRandomPointVec3( inner, outer ) - self:F( self.ZoneName, inner, outer ) + --self:F( self.ZoneName, inner, outer ) local PointVec3 = POINT_VEC3:NewFromVec2( self:GetRandomVec2( inner, outer ) ) - self:T3( { PointVec3 } ) + --self:T3( { PointVec3 } ) return PointVec3 end @@ -1685,7 +1685,7 @@ function ZONE_RADIUS:GetRandomCoordinateWithoutBuildings(inner,outer,distance,ma T1=timer.getTime() - self:T(string.format("Found a coordinate: %s | Iterations: %d | Time: %.3f",tostring(found),iterations,T1-T0)) + --self:T(string.format("Found a coordinate: %s | Iterations: %d | Time: %.3f",tostring(found),iterations,T1-T0)) if found then return rcoord else return nil end @@ -1754,7 +1754,7 @@ function ZONE:New( ZoneName ) -- Create a new ZONE_RADIUS. local self=BASE:Inherit( self, ZONE_RADIUS:New(ZoneName, {x=Zone.point.x, y=Zone.point.z}, Zone.radius, true)) - self:F(ZoneName) + --self:F(ZoneName) -- Color of zone. self.Color={1, 0, 0, 0.15} @@ -1824,7 +1824,7 @@ function ZONE_UNIT:New( ZoneName, ZoneUNIT, Radius, Offset) self.relative_to_unit = Offset.relative_to_unit or false end - self:F( { ZoneName, ZoneUNIT:GetVec2(), Radius } ) + --self:F( { ZoneName, ZoneUNIT:GetVec2(), Radius } ) self.ZoneUNIT = ZoneUNIT self.LastVec2 = ZoneUNIT:GetVec2() @@ -1840,7 +1840,7 @@ end -- @param #ZONE_UNIT self -- @return DCS#Vec2 The location of the zone based on the @{Wrapper.Unit#UNIT}location and the offset, if any. function ZONE_UNIT:GetVec2() - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) local ZoneVec2 = self.ZoneUNIT:GetVec2() if ZoneVec2 then @@ -1873,7 +1873,7 @@ function ZONE_UNIT:GetVec2() return self.LastVec2 end - self:T2( { ZoneVec2 } ) + --self:T2( { ZoneVec2 } ) return nil end @@ -1882,7 +1882,7 @@ end -- @param #ZONE_UNIT self -- @return DCS#Vec2 The random location within the zone. function ZONE_UNIT:GetRandomVec2() - self:F( self.ZoneName ) + --self:F( self.ZoneName ) local RandomVec2 = {} --local Vec2 = self.ZoneUNIT:GetVec2() -- FF: This does not take care of the new offset feature! @@ -1896,7 +1896,7 @@ function ZONE_UNIT:GetRandomVec2() RandomVec2.x = Vec2.x + math.cos( angle ) * math.random() * self:GetRadius(); RandomVec2.y = Vec2.y + math.sin( angle ) * math.random() * self:GetRadius(); - self:T( { RandomVec2 } ) + --self:T( { RandomVec2 } ) return RandomVec2 end @@ -1906,7 +1906,7 @@ end -- @param DCS#Distance Height The height to add to the land height where the center of the zone is located. -- @return DCS#Vec3 The point of the zone. function ZONE_UNIT:GetVec3( Height ) - self:F2( self.ZoneName ) + --self:F2( self.ZoneName ) Height = Height or 0 @@ -1914,7 +1914,7 @@ function ZONE_UNIT:GetVec3( Height ) local Vec3 = { x = Vec2.x, y = land.getHeight( self:GetVec2() ) + Height, z = Vec2.y } - self:T2( { Vec3 } ) + --self:T2( { Vec3 } ) return Vec3 end @@ -1940,7 +1940,7 @@ ZONE_GROUP = { -- @return #ZONE_GROUP self function ZONE_GROUP:New( ZoneName, ZoneGROUP, Radius ) local self = BASE:Inherit( self, ZONE_RADIUS:New( ZoneName, ZoneGROUP:GetVec2(), Radius, true ) ) - self:F( { ZoneName, ZoneGROUP:GetVec2(), Radius } ) + --self:F( { ZoneName, ZoneGROUP:GetVec2(), Radius } ) self._.ZoneGROUP = ZoneGROUP self._.ZoneVec2Cache = self._.ZoneGROUP:GetVec2() @@ -1956,7 +1956,7 @@ end -- @param #ZONE_GROUP self -- @return DCS#Vec2 The location of the zone based on the @{Wrapper.Group} location. function ZONE_GROUP:GetVec2() - self:F( self.ZoneName ) + --self:F( self.ZoneName ) local ZoneVec2 = nil @@ -1967,7 +1967,7 @@ function ZONE_GROUP:GetVec2() ZoneVec2 = self._.ZoneVec2Cache end - self:T( { ZoneVec2 } ) + --self:T( { ZoneVec2 } ) return ZoneVec2 end @@ -1976,7 +1976,7 @@ end -- @param #ZONE_GROUP self -- @return DCS#Vec2 The random location of the zone based on the @{Wrapper.Group} location. function ZONE_GROUP:GetRandomVec2() - self:F( self.ZoneName ) + --self:F( self.ZoneName ) local Point = {} local Vec2 = self._.ZoneGROUP:GetVec2() @@ -1985,7 +1985,7 @@ function ZONE_GROUP:GetRandomVec2() Point.x = Vec2.x + math.cos( angle ) * math.random() * self:GetRadius(); Point.y = Vec2.y + math.sin( angle ) * math.random() * self:GetRadius(); - self:T( { Point } ) + --self:T( { Point } ) return Point end @@ -1996,11 +1996,11 @@ end -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. -- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. function ZONE_GROUP:GetRandomPointVec2( inner, outer ) - self:F( self.ZoneName, inner, outer ) + --self:F( self.ZoneName, inner, outer ) local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) - self:T3( { PointVec2 } ) + --self:T3( { PointVec2 } ) return PointVec2 end @@ -2183,7 +2183,7 @@ function ZONE_POLYGON_BASE:New( ZoneName, PointsArray ) -- Inherit ZONE_BASE. local self = BASE:Inherit( self, ZONE_BASE:New( ZoneName ) ) - self:F( { ZoneName, PointsArray } ) + --self:F( { ZoneName, PointsArray } ) if PointsArray then @@ -2351,7 +2351,7 @@ end -- @param #ZONE_POLYGON_BASE self -- @return DCS#Vec2 The location of the zone based on the @{Wrapper.Group} location. function ZONE_POLYGON_BASE:GetVec2() - self:F( self.ZoneName ) + --self:F( self.ZoneName ) local Bounds = self:GetBoundingSquare() @@ -2434,9 +2434,9 @@ end -- @param #ZONE_POLYGON_BASE self -- @return #ZONE_POLYGON_BASE self function ZONE_POLYGON_BASE:Flush() - self:F2() + --self:F2() - self:F( { Polygon = self.ZoneName, Coordinates = self._.Polygon } ) + --self:F( { Polygon = self.ZoneName, Coordinates = self._.Polygon } ) return self end @@ -2455,7 +2455,7 @@ function ZONE_POLYGON_BASE:BoundZone( UnBound ) j = #self._.Polygon while i <= #self._.Polygon do - self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) + --self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) local DeltaX = self._.Polygon[j].x - self._.Polygon[i].x local DeltaY = self._.Polygon[j].y - self._.Polygon[i].y @@ -2707,7 +2707,7 @@ end -- @param #number Segments (Optional) Number of segments within boundary line. Default 10. -- @return #ZONE_POLYGON_BASE self function ZONE_POLYGON_BASE:SmokeZone( SmokeColor, Segments ) - self:F2( SmokeColor ) + --self:F2( SmokeColor ) Segments=Segments or 10 @@ -2715,7 +2715,7 @@ function ZONE_POLYGON_BASE:SmokeZone( SmokeColor, Segments ) local j=#self._.Polygon while i <= #self._.Polygon do - self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) + --self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) local DeltaX = self._.Polygon[j].x - self._.Polygon[i].x local DeltaY = self._.Polygon[j].y - self._.Polygon[i].y @@ -2740,7 +2740,7 @@ end -- @param #number AddHeight (optional) The height to be added for the smoke. -- @return #ZONE_POLYGON_BASE self function ZONE_POLYGON_BASE:FlareZone( FlareColor, Segments, Azimuth, AddHeight ) - self:F2(FlareColor) + --self:F2(FlareColor) Segments=Segments or 10 @@ -2750,7 +2750,7 @@ function ZONE_POLYGON_BASE:FlareZone( FlareColor, Segments, Azimuth, AddHeight ) local j=#self._.Polygon while i <= #self._.Polygon do - self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) + --self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) local DeltaX = self._.Polygon[j].x - self._.Polygon[i].x local DeltaY = self._.Polygon[j].y - self._.Polygon[i].y @@ -2773,7 +2773,7 @@ end -- @param DCS#Vec2 Vec2 The location to test. -- @return #boolean true if the location is within the zone. function ZONE_POLYGON_BASE:IsVec2InZone( Vec2 ) - self:F2( Vec2 ) + --self:F2( Vec2 ) if not Vec2 then return false end local Next local Prev @@ -2783,18 +2783,18 @@ function ZONE_POLYGON_BASE:IsVec2InZone( Vec2 ) Prev = #self._.Polygon while Next <= #self._.Polygon do - self:T( { Next, Prev, self._.Polygon[Next], self._.Polygon[Prev] } ) + --self:T( { Next, Prev, self._.Polygon[Next], self._.Polygon[Prev] } ) if ( ( ( self._.Polygon[Next].y > Vec2.y ) ~= ( self._.Polygon[Prev].y > Vec2.y ) ) and ( Vec2.x < ( self._.Polygon[Prev].x - self._.Polygon[Next].x ) * ( Vec2.y - self._.Polygon[Next].y ) / ( self._.Polygon[Prev].y - self._.Polygon[Next].y ) + self._.Polygon[Next].x ) ) then InPolygon = not InPolygon end - self:T2( { InPolygon = InPolygon } ) + --self:T2( { InPolygon = InPolygon } ) Prev = Next Next = Next + 1 end - self:T( { InPolygon = InPolygon } ) + --self:T( { InPolygon = InPolygon } ) return InPolygon end @@ -2803,7 +2803,7 @@ end -- @param DCS#Vec3 Vec3 The point to test. -- @return #boolean true if the point is within the zone. function ZONE_POLYGON_BASE:IsVec3InZone( Vec3 ) - self:F2( Vec3 ) + --self:F2( Vec3 ) if not Vec3 then return false end @@ -2838,11 +2838,11 @@ end -- @param #ZONE_POLYGON_BASE self -- @return @{Core.Point#POINT_VEC2} function ZONE_POLYGON_BASE:GetRandomPointVec2() - self:F2() + --self:F2() local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) - self:T2( PointVec2 ) + --self:T2( PointVec2 ) return PointVec2 end @@ -2851,11 +2851,11 @@ end -- @param #ZONE_POLYGON_BASE self -- @return @{Core.Point#POINT_VEC3} function ZONE_POLYGON_BASE:GetRandomPointVec3() - self:F2() + --self:F2() local PointVec3 = POINT_VEC3:NewFromVec2( self:GetRandomVec2() ) - self:T2( PointVec3 ) + --self:T2( PointVec3 ) return PointVec3 end @@ -2865,11 +2865,11 @@ end -- @param #ZONE_POLYGON_BASE self -- @return Core.Point#COORDINATE function ZONE_POLYGON_BASE:GetRandomCoordinate() - self:F2() + --self:F2() local Coordinate = COORDINATE:NewFromVec2( self:GetRandomVec2() ) - self:T2( Coordinate ) + --self:T2( Coordinate ) return Coordinate end @@ -2886,7 +2886,7 @@ function ZONE_POLYGON_BASE:GetBoundingSquare() local y2 = self._.Polygon[1].y for i = 2, #self._.Polygon do - self:T2( { self._.Polygon[i], x1, y1, x2, y2 } ) + --self:T2( { self._.Polygon[i], x1, y1, x2, y2 } ) x1 = ( x1 > self._.Polygon[i].x ) and self._.Polygon[i].x or x1 x2 = ( x2 < self._.Polygon[i].x ) and self._.Polygon[i].x or x2 y1 = ( y1 > self._.Polygon[i].y ) and self._.Polygon[i].y or y1 @@ -2909,7 +2909,7 @@ function ZONE_POLYGON_BASE:GetBoundingVec2() local y2 = self._.Polygon[1].y for i = 2, #self._.Polygon do - self:T2( { self._.Polygon[i], x1, y1, x2, y2 } ) + --self:T2( { self._.Polygon[i], x1, y1, x2, y2 } ) x1 = ( x1 > self._.Polygon[i].x ) and self._.Polygon[i].x or x1 x2 = ( x2 < self._.Polygon[i].x ) and self._.Polygon[i].x or x2 y1 = ( y1 > self._.Polygon[i].y ) and self._.Polygon[i].y or y1 @@ -2948,7 +2948,7 @@ function ZONE_POLYGON_BASE:Boundary(Coalition, Color, Radius, Alpha, Segments, C Limit = #self._.Polygon end while i <= #self._.Polygon do - self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) + --self:T( { i, j, self._.Polygon[i], self._.Polygon[j] } ) if j ~= Limit then local DeltaX = self._.Polygon[j].x - self._.Polygon[i].x local DeltaY = self._.Polygon[j].y - self._.Polygon[i].y @@ -3019,7 +3019,7 @@ function ZONE_POLYGON:New( ZoneName, ZoneGroup ) local GroupPoints = ZoneGroup:GetTaskRoute() local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, GroupPoints ) ) - self:F( { ZoneName, ZoneGroup, self._.Polygon } ) + --self:F( { ZoneName, ZoneGroup, self._.Polygon } ) -- Zone objects are added to the _DATABASE and SET_ZONE objects. _EVENTDISPATCHER:CreateEventNewZone( self ) @@ -3035,7 +3035,7 @@ end function ZONE_POLYGON:NewFromPointsArray( ZoneName, PointsArray ) local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, PointsArray ) ) - self:F( { ZoneName, self._.Polygon } ) + --self:F( { ZoneName, self._.Polygon } ) -- Zone objects are added to the _DATABASE and SET_ZONE objects. _EVENTDISPATCHER:CreateEventNewZone( self ) @@ -3055,7 +3055,7 @@ function ZONE_POLYGON:NewFromGroupName( GroupName ) local GroupPoints = ZoneGroup:GetTaskRoute() local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( GroupName, GroupPoints ) ) - self:F( { GroupName, ZoneGroup, self._.Polygon } ) + --self:F( { GroupName, ZoneGroup, self._.Polygon } ) -- Zone objects are added to the _DATABASE and SET_ZONE objects. _EVENTDISPATCHER:CreateEventNewZone( self ) @@ -3221,7 +3221,7 @@ function ZONE_POLYGON:Scan( ObjectCategories, UnitCategories ) self.ScanData.Units[ZoneObject] = ZoneObject - self:F2( { Name = ZoneObject:getName(), Coalition = CoalitionDCSUnit } ) + --self:F2( { Name = ZoneObject:getName(), Coalition = CoalitionDCSUnit } ) end end @@ -3232,7 +3232,7 @@ function ZONE_POLYGON:Scan( ObjectCategories, UnitCategories ) self.ScanData.Scenery[SceneryType] = self.ScanData.Scenery[SceneryType] or {} self.ScanData.Scenery[SceneryType][SceneryName] = SCENERY:Register( SceneryName, ZoneObject ) table.insert(self.ScanData.SceneryTable,self.ScanData.Scenery[SceneryType][SceneryName]) - self:T( { SCENERY = self.ScanData.Scenery[SceneryType][SceneryName] } ) + --self:T( { SCENERY = self.ScanData.Scenery[SceneryType][SceneryName] } ) end end @@ -3573,7 +3573,7 @@ do -- ZONE_ELASTIC function ZONE_ELASTIC:Update(Delay, Draw) -- Debug info. - self:T(string.format("Updating ZONE_ELASTIC %s", tostring(self.ZoneName))) + --self:T(string.format("Updating ZONE_ELASTIC %s", tostring(self.ZoneName))) -- Copy all points. local points=UTILS.DeepCopy(self.points or {}) @@ -3987,7 +3987,7 @@ do -- ZONE_AIRBASE -- @param #ZONE_AIRBASE self -- @return DCS#Vec2 The location of the zone based on the AIRBASE location. function ZONE_AIRBASE:GetVec2() - self:F( self.ZoneName ) + --self:F( self.ZoneName ) local ZoneVec2 = nil @@ -3998,7 +3998,7 @@ do -- ZONE_AIRBASE ZoneVec2 = self._.ZoneVec2Cache end - self:T( { ZoneVec2 } ) + --self:T( { ZoneVec2 } ) return ZoneVec2 end @@ -4009,11 +4009,11 @@ do -- ZONE_AIRBASE -- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone. -- @return Core.Point#POINT_VEC2 The @{Core.Point#POINT_VEC2} object reflecting the random 3D location within the zone. function ZONE_AIRBASE:GetRandomPointVec2( inner, outer ) - self:F( self.ZoneName, inner, outer ) + --self:F( self.ZoneName, inner, outer ) local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() ) - self:T3( { PointVec2 } ) + --self:T3( { PointVec2 } ) return PointVec2 end diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index bd27b6212..65e7edb52 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -367,7 +367,7 @@ function GROUP:GetDCSObject() return DCSGroup end - self:T2(string.format("ERROR: Could not get DCS group object of group %s because DCS object could not be found!", tostring(self.GroupName))) + self:E(string.format("ERROR: Could not get DCS group object of group %s because DCS object could not be found!", tostring(self.GroupName))) return nil end @@ -375,7 +375,7 @@ end -- @param Wrapper.Positionable#POSITIONABLE self -- @return DCS#Position The 3D position vectors of the POSITIONABLE or #nil if the groups not existing or alive. function GROUP:GetPositionVec3() -- Overridden from POSITIONABLE:GetPositionVec3() - self:F2( self.PositionableName ) + --self:F2( self.PositionableName ) local DCSPositionable = self:GetDCSObject() @@ -383,7 +383,7 @@ function GROUP:GetPositionVec3() -- Overridden from POSITIONABLE:GetPositionVec3 local unit = DCSPositionable:getUnits()[1] if unit then local PositionablePosition = unit:getPosition().p - self:T3( PositionablePosition ) + --self:T3( PositionablePosition ) return PositionablePosition end end @@ -403,7 +403,7 @@ end -- @param #GROUP self -- @return #boolean `true` if the group is alive *and* active, `false` if the group is alive but inactive or `#nil` if the group does not exist anymore. function GROUP:IsAlive() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() -- DCS#Group @@ -412,7 +412,7 @@ function GROUP:IsAlive() local DCSUnit = DCSGroup:getUnit(1) -- DCS#Unit if DCSUnit then local GroupIsAlive = DCSUnit:isActive() - self:T3( GroupIsAlive ) + --self:T3( GroupIsAlive ) return GroupIsAlive end end @@ -425,7 +425,7 @@ end -- @param #GROUP self -- @return #boolean `true` if group is activated or `#nil` The group is not existing or alive. function GROUP:IsActive() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() -- DCS#Group @@ -468,7 +468,7 @@ end -- Ship:Destroy( false ) -- Don't generate an event upon destruction. -- function GROUP:Destroy( GenerateEvent, delay ) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) if delay and delay>0 then self:ScheduleOnce(delay, GROUP.Destroy, self, GenerateEvent) @@ -511,12 +511,12 @@ end -- @param #GROUP self -- @return DCS#Group.Category The category ID. function GROUP:GetCategory() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) + --self:T3( GroupCategory ) return GroupCategory end @@ -527,7 +527,7 @@ end -- @param #GROUP self -- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship, Train. function GROUP:GetCategoryName() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -539,7 +539,7 @@ function GROUP:GetCategoryName() [Group.Category.TRAIN] = "Train", } local GroupCategory = DCSGroup:getCategory() - self:T3( GroupCategory ) + --self:T3( GroupCategory ) return CategoryNames[GroupCategory] end @@ -570,12 +570,12 @@ end -- @param #GROUP self -- @return DCS#country.id The country identifier or nil if the DCS Group is not existing or alive. function GROUP:GetCountry() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCountry = DCSGroup:getUnit(1):getCountry() - self:T3( GroupCountry ) + --self:T3( GroupCountry ) return GroupCountry end @@ -627,7 +627,7 @@ end -- @param #GROUP self -- @return #number Speed in km/h. function GROUP:GetSpeedMax() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -660,7 +660,7 @@ end -- @param #GROUP self -- @return #number Range in meters. function GROUP:GetRange() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -691,7 +691,7 @@ end -- @param #GROUP self -- @return #table of Wrapper.Unit#UNIT objects, indexed by number. function GROUP:GetUnits() - self:F2( { self.GroupName } ) + --self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -708,7 +708,7 @@ function GROUP:GetUnits() Units[#Units+1]=unit end end - self:T3( Units ) + --self:T3( Units ) return Units end @@ -719,7 +719,7 @@ end -- @param #GROUP self -- @return #list The list of player occupied @{Wrapper.Unit} objects of the @{Wrapper.Group}. function GROUP:GetPlayerUnits() - self:F2( { self.GroupName } ) + --self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -731,7 +731,7 @@ function GROUP:GetPlayerUnits() Units[#Units+1] = PlayerUnit end end - self:T3( Units ) + --self:T3( Units ) return Units end @@ -830,7 +830,7 @@ end -- @param #GROUP self -- @return #number Number of alive units. If DCS group is nil, 0 is returned. function GROUP:CountAliveUnits() - self:F3( { self.GroupName } ) + --self:F3( { self.GroupName } ) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -852,7 +852,7 @@ end -- @param #GROUP self -- @return Wrapper.Unit#UNIT First unit alive. function GROUP:GetFirstUnitAlive() - self:F3({self.GroupName}) + --self:F3({self.GroupName}) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -872,7 +872,7 @@ end -- @param #GROUP self -- @return Wrapper.Unit#UNIT First unit or nil if it does not exist. function GROUP:GetFirstUnit() - self:F3({self.GroupName}) + --self:F3({self.GroupName}) local DCSGroup = self:GetDCSObject() if DCSGroup then @@ -887,7 +887,7 @@ end -- @param Wrapper.Group#GROUP self -- @return DCS#Vec3 The velocity Vec3 vector or `#nil` if the GROUP is not existing or alive. function GROUP:GetVelocityVec3() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() @@ -921,7 +921,7 @@ end -- @param #boolean FromGround Measure from the ground or from sea level (ASL). Provide **true** for measuring from the ground (AGL). **false** or **nil** if you measure from sea level. -- @return #number The altitude of the group or nil if is not existing or alive. function GROUP:GetAltitude(FromGround) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) return self:GetHeight(FromGround) end @@ -930,7 +930,7 @@ end -- @param #boolean FromGround Measure from the ground or from sea level (ASL). Provide **true** for measuring from the ground (AGL). **false** or **nil** if you measure from sea level. -- @return #number The height of the group or nil if is not existing or alive. function GROUP:GetHeight( FromGround ) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() @@ -966,12 +966,12 @@ end -- @param #GROUP self -- @return #number The DCS Group initial size. function GROUP:GetInitialSize() - self:F3( { self.GroupName } ) + --self:F3( { self.GroupName } ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupInitialSize = DCSGroup:getInitialSize() - self:T3( GroupInitialSize ) + --self:T3( GroupInitialSize ) return GroupInitialSize end @@ -983,12 +983,12 @@ end -- @param #GROUP self -- @return #table The DCS Units. function GROUP:GetDCSUnits() - self:F2( { self.GroupName } ) + --self:F2( { self.GroupName } ) local DCSGroup = self:GetDCSObject() if DCSGroup then local DCSUnits = DCSGroup:getUnits() - self:T3( DCSUnits ) + --self:T3( DCSUnits ) return DCSUnits end @@ -1001,7 +1001,7 @@ end -- @param #number delay Delay in seconds, before the group is activated. -- @return #GROUP self function GROUP:Activate(delay) - self:F2( { self.GroupName } ) + --self:F2( { self.GroupName } ) if delay and delay>0 then self:ScheduleOnce(delay, GROUP.Activate, self) else @@ -1015,13 +1015,13 @@ end -- @param #GROUP self -- @return #string The type name of the group. function GROUP:GetTypeName() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupTypeName = DCSGroup:getUnit(1):getTypeName() - self:T3( GroupTypeName ) + --self:T3( GroupTypeName ) return( GroupTypeName ) end @@ -1032,13 +1032,13 @@ end --@param #GROUP self --@return #string NatoReportingName or "Bogey" if unknown. function GROUP:GetNatoReportingName() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupTypeName = DCSGroup:getUnit(1):getTypeName() - self:T3( GroupTypeName ) + --self:T3( GroupTypeName ) return UTILS.GetReportingName(GroupTypeName) end @@ -1050,13 +1050,13 @@ end -- @param #GROUP self -- @return #string The player name of the group. function GROUP:GetPlayerName() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local PlayerName = DCSGroup:getUnit(1):getPlayerName() - self:T3( PlayerName ) + --self:T3( PlayerName ) return( PlayerName ) end @@ -1068,13 +1068,13 @@ end -- @param #GROUP self -- @return #string The CallSign of the first DCS Unit of the DCS Group. function GROUP:GetCallsign() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCallSign = DCSGroup:getUnit(1):getCallsign() - self:T3( GroupCallSign ) + --self:T3( GroupCallSign ) return GroupCallSign end @@ -1151,13 +1151,13 @@ end -- @return Core.Point#POINT_VEC2 The 2D point vector of the first DCS Unit of the GROUP. -- @return #nil The first UNIT is not existing or alive. function GROUP:GetPointVec2() - self:F2(self.GroupName) + --self:F2(self.GroupName) local FirstUnit = self:GetUnit(1) if FirstUnit then local FirstUnitPointVec2 = FirstUnit:GetPointVec2() - self:T3(FirstUnitPointVec2) + --self:T3(FirstUnitPointVec2) return FirstUnitPointVec2 end @@ -1239,13 +1239,13 @@ end -- @usage -- -- If Radius is ignored, returns the DCS#Vec3 of first UNIT of the GROUP function GROUP:GetRandomVec3(Radius) - self:F2(self.GroupName) + --self:F2(self.GroupName) local FirstUnit = self:GetUnit(1) if FirstUnit then local FirstUnitRandomPointVec3 = FirstUnit:GetRandomVec3(Radius) - self:T3(FirstUnitRandomPointVec3) + --self:T3(FirstUnitRandomPointVec3) return FirstUnitRandomPointVec3 end @@ -1258,9 +1258,9 @@ end -- @param #GROUP self -- @return #number Mean heading of the GROUP in degrees or #nil The first UNIT is not existing or alive. function GROUP:GetHeading() - self:F2(self.GroupName) + --self:F2(self.GroupName) - self:F2(self.GroupName) + --self:F2(self.GroupName) local GroupSize = self:GetSize() local HeadingAccumulator = 0 @@ -1289,7 +1289,7 @@ end -- @return #number The fuel state of the unit with the least amount of fuel. -- @return Wrapper.Unit#UNIT reference to #Unit object for further processing. function GROUP:GetFuelMin() - self:F3(self.ControllableName) + --self:F3(self.ControllableName) if not self:GetDCSObject() then BASE:E( { "Cannot GetFuel", Group = self, Alive = self:IsAlive() } ) @@ -1320,7 +1320,7 @@ end -- @return #number The relative amount of fuel (from 0.0 to 1.0). -- @return #nil The GROUP is not existing or alive. function GROUP:GetFuelAvg() - self:F( self.ControllableName ) + --self:F( self.ControllableName ) local DCSControllable = self:GetDCSObject() @@ -1330,7 +1330,7 @@ function GROUP:GetFuelAvg() for UnitID, UnitData in pairs( self:GetUnits() ) do local Unit = UnitData -- Wrapper.Unit#UNIT local UnitFuel = Unit:GetFuel() or 0 - self:F( { Fuel = UnitFuel } ) + --self:F( { Fuel = UnitFuel } ) TotalFuel = TotalFuel + UnitFuel end local GroupFuel = TotalFuel / GroupSize @@ -1360,7 +1360,7 @@ end -- @return #number Number of missiles left. -- @return #number Number of artillery shells left (with explosive mass, included in shells; shells can also be machine gun ammo) function GROUP:GetAmmunition() - self:F( self.ControllableName ) + --self:F( self.ControllableName ) local DCSControllable = self:GetDCSObject() @@ -1431,7 +1431,7 @@ end -- @param Core.Zone#ZONE_BASE Zone The zone to test. -- @return #boolean Returns true if the Group is completely within the @{Core.Zone#ZONE_BASE} function GROUP:IsCompletelyInZone( Zone ) - self:F2( { self.GroupName, Zone } ) + --self:F2( { self.GroupName, Zone } ) if not self:IsAlive() then return false end @@ -1451,7 +1451,7 @@ end -- @param Core.Zone#ZONE_BASE Zone The zone to test. -- @return #boolean Returns true if the Group is partially within the @{Core.Zone#ZONE_BASE} function GROUP:IsPartlyInZone( Zone ) - self:F2( { self.GroupName, Zone } ) + --self:F2( { self.GroupName, Zone } ) local IsOneUnitInZone = false local IsOneUnitOutsideZone = false @@ -1487,7 +1487,7 @@ end -- @param Core.Zone#ZONE_BASE Zone The zone to test. -- @return #boolean Returns true if the Group is not within the @{Core.Zone#ZONE_BASE} function GROUP:IsNotInZone( Zone ) - self:F2( { self.GroupName, Zone } ) + --self:F2( { self.GroupName, Zone } ) if not self:IsAlive() then return true end @@ -1523,7 +1523,7 @@ end -- @param Core.Zone#ZONE_BASE Zone The zone to test. -- @return #number The number of UNITs that are in the @{Core.Zone} function GROUP:CountInZone( Zone ) - self:F2( {self.GroupName, Zone} ) + --self:F2( {self.GroupName, Zone} ) local Count = 0 if not self:IsAlive() then return Count end @@ -1543,13 +1543,13 @@ end -- @param #GROUP self -- @return #boolean Air category evaluation result. function GROUP:IsAir() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local IsAirResult = DCSGroup:getCategory() == Group.Category.AIRPLANE or DCSGroup:getCategory() == Group.Category.HELICOPTER - self:T3( IsAirResult ) + --self:T3( IsAirResult ) return IsAirResult end @@ -1560,13 +1560,13 @@ end -- @param #GROUP self -- @return #boolean true if DCS Group contains Helicopters. function GROUP:IsHelicopter() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) + --self:T2( GroupCategory ) return GroupCategory == Group.Category.HELICOPTER end @@ -1577,13 +1577,13 @@ end -- @param #GROUP self -- @return #boolean true if DCS Group contains AirPlanes. function GROUP:IsAirPlane() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) + --self:T2( GroupCategory ) return GroupCategory == Group.Category.AIRPLANE end @@ -1594,13 +1594,13 @@ end -- @param #GROUP self -- @return #boolean true if DCS Group contains Ground troops. function GROUP:IsGround() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) + --self:T2( GroupCategory ) return GroupCategory == Group.Category.GROUND end @@ -1611,13 +1611,13 @@ end -- @param #GROUP self -- @return #boolean true if DCS Group contains Ships. function GROUP:IsShip() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() if DCSGroup then local GroupCategory = DCSGroup:getCategory() - self:T2( GroupCategory ) + --self:T2( GroupCategory ) return GroupCategory == Group.Category.SHIP end @@ -1629,7 +1629,7 @@ end -- @param #GROUP self -- @return #boolean All units on the ground result. function GROUP:AllOnGround() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() @@ -1642,7 +1642,7 @@ function GROUP:AllOnGround() end end - self:T3( AllOnGroundResult ) + --self:T3( AllOnGroundResult ) return AllOnGroundResult end @@ -1697,7 +1697,7 @@ end -- @param #GROUP self -- @return #number Maximum velocity found. function GROUP:GetMaxVelocity() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() @@ -1725,7 +1725,7 @@ end -- @param #GROUP self -- @return #number Minimum height found. function GROUP:GetMinHeight() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() @@ -1753,7 +1753,7 @@ end -- @param #GROUP self -- @return #number Maximum height found. function GROUP:GetMaxHeight() - self:F2() + --self:F2() local DCSGroup = self:GetDCSObject() @@ -1895,7 +1895,7 @@ end -- @param Core.Point#COORDINATE coordinate Coordinate where the group should be respawned. -- @return #GROUP self function GROUP:InitCoordinate(coordinate) - self:F({coordinate=coordinate}) + --self:F({coordinate=coordinate}) self.InitCoord=coordinate return self end @@ -1905,7 +1905,7 @@ end -- @param #boolean switch If true (or nil), enables the radio comms. If false, disables the radio for the spawned group. -- @return #GROUP self function GROUP:InitRadioCommsOnOff(switch) - self:F({switch=switch}) + --self:F({switch=switch}) if switch==true or switch==nil then self.InitRespawnRadio=true else @@ -1919,7 +1919,7 @@ end -- @param #number frequency The frequency in MHz. -- @return #GROUP self function GROUP:InitRadioFrequency(frequency) - self:F({frequency=frequency}) + --self:F({frequency=frequency}) self.InitRespawnFreq=frequency @@ -1931,7 +1931,7 @@ end -- @param #string modulation Either "FM" or "AM". If no value is given, modulation is set to AM. -- @return #GROUP self function GROUP:InitRadioModulation(modulation) - self:F({modulation=modulation}) + --self:F({modulation=modulation}) if modulation and modulation:lower()=="fm" then self.InitRespawnModu=radio.modulation.FM else @@ -1945,7 +1945,7 @@ end -- @param #string modex Tail number of the first unit. -- @return #GROUP self function GROUP:InitModex(modex) - self:F({modex=modex}) + --self:F({modex=modex}) if modex then self.InitRespawnModex=tonumber(modex) end @@ -2011,7 +2011,7 @@ function GROUP:Respawn( Template, Reset ) --Template.y = nil -- Debug number of units. - self:F( #Template.units ) + --self:F( #Template.units ) -- Reset position etc? if Reset == true then @@ -2019,10 +2019,10 @@ function GROUP:Respawn( Template, Reset ) -- Loop over units in group. for UnitID, UnitData in pairs( self:GetUnits() ) do local GroupUnit = UnitData -- Wrapper.Unit#UNIT - self:F(GroupUnit:GetName()) + --self:F(GroupUnit:GetName()) if GroupUnit:IsAlive() then - self:I("FF Alive") + --self:I("FF Alive") -- Get unit position vector. local GroupUnitVec3 = GroupUnit:GetVec3() @@ -2062,7 +2062,7 @@ function GROUP:Respawn( Template, Reset ) Template.units[UnitID].psi = -Template.units[UnitID].heading -- Debug. - self:F( { UnitID, Template.units[UnitID], Template.units[UnitID] } ) + --self:F( { UnitID, Template.units[UnitID], Template.units[UnitID] } ) end end @@ -2071,7 +2071,7 @@ function GROUP:Respawn( Template, Reset ) -- Loop over template units. for UnitID, TemplateUnitData in pairs( Template.units ) do - self:F( "Reset" ) + --self:F( "Reset" ) -- Position from template. local GroupUnitVec3 = { x = TemplateUnitData.x, y = TemplateUnitData.alt, z = TemplateUnitData.y } @@ -2105,7 +2105,7 @@ function GROUP:Respawn( Template, Reset ) Template.units[UnitID].heading = self.InitRespawnHeading and self.InitRespawnHeading or TemplateUnitData.heading -- Debug. - self:F( { UnitID, Template.units[UnitID], Template.units[UnitID] } ) + --self:F( { UnitID, Template.units[UnitID], Template.units[UnitID] } ) end else @@ -2156,7 +2156,7 @@ function GROUP:Respawn( Template, Reset ) -- Destroy old group. Dont trigger any dead/crash events since this is a respawn. self:Destroy(false) - self:T({Template=Template}) + --self:T({Template=Template}) -- Spawn new group. _DATABASE:Spawn(Template) @@ -2177,7 +2177,7 @@ end -- @param #boolean Uncontrolled (Optional) If true, spawn in uncontrolled state. -- @return Wrapper.Group#GROUP Group spawned at airbase or nil if group could not be spawned. function GROUP:RespawnAtCurrentAirbase(SpawnTemplate, Takeoff, Uncontrolled) -- R2.4 - self:F2( { SpawnTemplate, Takeoff, Uncontrolled} ) + --self:F2( { SpawnTemplate, Takeoff, Uncontrolled} ) if self and self:IsAlive() then @@ -2185,7 +2185,7 @@ function GROUP:RespawnAtCurrentAirbase(SpawnTemplate, Takeoff, Uncontrolled) -- local airbase=self:GetCoordinate():GetClosestAirbase() if airbase then - self:F2("Closest airbase = "..airbase:GetName()) + --self:F2("Closest airbase = "..airbase:GetName()) else self:E("ERROR: could not find closest airbase!") return nil @@ -2236,7 +2236,7 @@ function GROUP:RespawnAtCurrentAirbase(SpawnTemplate, Takeoff, Uncontrolled) -- local Parkingspot, TermialID, Distance=unit:GetCoordinate():GetClosestParkingSpot(airbase) --Parkingspot:MarkToAll("parking spot") - self:T2(string.format("Closest parking spot distance = %s, terminal ID=%s", tostring(Distance), tostring(TermialID))) + --self:T2(string.format("Closest parking spot distance = %s, terminal ID=%s", tostring(Distance), tostring(TermialID))) -- Get unit coordinates for respawning position. local uc=unit:GetCoordinate() @@ -2298,7 +2298,7 @@ end -- @param #GROUP self -- @return #table The MissionTemplate function GROUP:GetTaskMission() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) return UTILS.DeepCopy( _DATABASE.Templates.Groups[self.GroupName].Template ) end @@ -2307,7 +2307,7 @@ end -- @param #GROUP self -- @return #table The mission route defined by points. function GROUP:GetTaskRoute() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) return UTILS.DeepCopy( _DATABASE.Templates.Groups[self.GroupName].Template.route.points ) end @@ -2319,7 +2319,7 @@ end -- @param #boolean Randomize Randomization of the route, when true. -- @param #number Radius When randomization is on, the randomization is within the radius. function GROUP:CopyRoute( Begin, End, Randomize, Radius ) - self:F2( { Begin, End } ) + --self:F2( { Begin, End } ) local Points = {} @@ -2331,7 +2331,7 @@ function GROUP:CopyRoute( Begin, End, Randomize, Radius ) GroupName = self:GetName() end - self:T3( { GroupName } ) + --self:T3( { GroupName } ) local Template = _DATABASE.Templates.Groups[GroupName].Template @@ -2377,7 +2377,7 @@ function GROUP:CalculateThreatLevelA2G() end end - self:T3( MaxThreatLevelA2G ) + --self:T3( MaxThreatLevelA2G ) return MaxThreatLevelA2G end @@ -2404,7 +2404,7 @@ end -- @param Wrapper.Group#GROUP self -- @return #boolean true if in the first unit of the group is in the air or #nil if the GROUP is not existing or not alive. function GROUP:InAir() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local DCSGroup = self:GetDCSObject() @@ -2412,7 +2412,7 @@ function GROUP:InAir() local DCSUnit = DCSGroup:getUnit(1) if DCSUnit then local GroupInAir = DCSGroup:getUnit(1):inAir() - self:T3( GroupInAir ) + --self:T3( GroupInAir ) return GroupInAir end end @@ -2425,7 +2425,7 @@ end -- @param #boolean AllUnits (Optional) If true, check whether all units of the group are airborne. -- @return #boolean True if at least one (optionally all) unit(s) is(are) airborne or false otherwise. Nil if no unit exists or is alive. function GROUP:IsAirborne(AllUnits) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) -- Get all units of the group. local units=self:GetUnits() @@ -2636,7 +2636,7 @@ do -- Route methods -- @param #number Speed (optional) The Speed, if no Speed is given, 80% of maximum Speed of the group is selected. -- @return #GROUP self function GROUP:RouteRTB( RTBAirbase, Speed ) - self:F( { RTBAirbase:GetName(), Speed } ) + --self:F( { RTBAirbase:GetName(), Speed } ) local DCSGroup = self:GetDCSObject() @@ -2662,7 +2662,7 @@ do -- Route methods --local Points={PointFrom, PointAirbase, PointLanding} -- Debug info. - self:T3(Points) + --self:T3(Points) -- Get group template. local Template=self:GetTemplate() @@ -2758,7 +2758,7 @@ do -- Players end if HasPlayers == true then - self:F2( PlayerNames ) + --self:F2( PlayerNames ) return PlayerNames end @@ -2792,7 +2792,7 @@ end -- @param #boolean switch If true, emission is enabled. If false, emission is disabled. -- @return #GROUP self function GROUP:EnableEmission(switch) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local switch = switch or false local DCSUnit = self:GetDCSObject() @@ -2819,7 +2819,7 @@ end -- @param #boolean switch If true, Invisible is enabled. If false, Invisible is disabled. -- @return #GROUP self function GROUP:CommandSetInvisible(switch) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) if switch==nil then switch=false end @@ -2841,7 +2841,7 @@ end -- @param #boolean switch If true, Immortal is enabled. If false, Immortal is disabled. -- @return #GROUP self function GROUP:CommandSetImmortal(switch) - self:F2( self.GroupName ) + --self:F2( self.GroupName ) if switch==nil then switch=false end @@ -2854,7 +2854,7 @@ end -- @param #GROUP self -- @return #string Skill String of skill name. function GROUP:GetSkill() - self:F2( self.GroupName ) + --self:F2( self.GroupName ) local unit = self:GetUnit(1) local name = unit:GetName() local skill = _DATABASE.Templates.Units[name].Template.skill or "Random" diff --git a/Moose Development/Moose/Wrapper/Unit.lua b/Moose Development/Moose/Wrapper/Unit.lua index e75f1f874..7fe7e06f3 100644 --- a/Moose Development/Moose/Wrapper/Unit.lua +++ b/Moose Development/Moose/Wrapper/Unit.lua @@ -273,12 +273,12 @@ end -- @param #number Heading The heading of the unit respawn. function UNIT:ReSpawnAt( Coordinate, Heading ) - self:T( self:Name() ) + --self:T( self:Name() ) local SpawnGroupTemplate = UTILS.DeepCopy( _DATABASE:GetGroupTemplateFromUnitName( self:Name() ) ) - self:T( SpawnGroupTemplate ) + --self:T( SpawnGroupTemplate ) local SpawnGroup = self:GetGroup() - self:T( { SpawnGroup = SpawnGroup } ) + --self:T( { SpawnGroup = SpawnGroup } ) if SpawnGroup then @@ -286,10 +286,10 @@ function UNIT:ReSpawnAt( Coordinate, Heading ) SpawnGroupTemplate.x = Coordinate.x SpawnGroupTemplate.y = Coordinate.z - self:F( #SpawnGroupTemplate.units ) + --self:F( #SpawnGroupTemplate.units ) for UnitID, UnitData in pairs( SpawnGroup:GetUnits() or {} ) do local GroupUnit = UnitData -- #UNIT - self:F( GroupUnit:GetName() ) + --self:F( GroupUnit:GetName() ) if GroupUnit:IsAlive() then local GroupUnitVec3 = GroupUnit:GetVec3() local GroupUnitHeading = GroupUnit:GetHeading() @@ -297,23 +297,23 @@ function UNIT:ReSpawnAt( Coordinate, Heading ) SpawnGroupTemplate.units[UnitID].x = GroupUnitVec3.x SpawnGroupTemplate.units[UnitID].y = GroupUnitVec3.z SpawnGroupTemplate.units[UnitID].heading = GroupUnitHeading - self:F( { UnitID, SpawnGroupTemplate.units[UnitID], SpawnGroupTemplate.units[UnitID] } ) + --self:F( { UnitID, SpawnGroupTemplate.units[UnitID], SpawnGroupTemplate.units[UnitID] } ) end end end for UnitTemplateID, UnitTemplateData in pairs( SpawnGroupTemplate.units ) do - self:T( { UnitTemplateData.name, self:Name() } ) + --self:T( { UnitTemplateData.name, self:Name() } ) SpawnGroupTemplate.units[UnitTemplateID].unitId = nil if UnitTemplateData.name == self:Name() then - self:T("Adjusting") + --self:T("Adjusting") SpawnGroupTemplate.units[UnitTemplateID].alt = Coordinate.y SpawnGroupTemplate.units[UnitTemplateID].x = Coordinate.x SpawnGroupTemplate.units[UnitTemplateID].y = Coordinate.z SpawnGroupTemplate.units[UnitTemplateID].heading = Heading - self:F( { UnitTemplateID, SpawnGroupTemplate.units[UnitTemplateID], SpawnGroupTemplate.units[UnitTemplateID] } ) + --self:F( { UnitTemplateID, SpawnGroupTemplate.units[UnitTemplateID], SpawnGroupTemplate.units[UnitTemplateID] } ) else - self:F( SpawnGroupTemplate.units[UnitTemplateID].name ) + --self:F( SpawnGroupTemplate.units[UnitTemplateID].name ) local GroupUnit = UNIT:FindByName( SpawnGroupTemplate.units[UnitTemplateID].name ) -- #UNIT if GroupUnit and GroupUnit:IsAlive() then local GroupUnitVec3 = GroupUnit:GetVec3() @@ -324,7 +324,7 @@ function UNIT:ReSpawnAt( Coordinate, Heading ) UnitTemplateData.heading = GroupUnitHeading else if SpawnGroupTemplate.units[UnitTemplateID].name ~= self:Name() then - self:T("nilling") + --self:T("nilling") SpawnGroupTemplate.units[UnitTemplateID].delete = true end end @@ -336,7 +336,7 @@ function UNIT:ReSpawnAt( Coordinate, Heading ) while i <= #SpawnGroupTemplate.units do local UnitTemplateData = SpawnGroupTemplate.units[i] - self:T( UnitTemplateData.name ) + --self:T( UnitTemplateData.name ) if UnitTemplateData.delete then table.remove( SpawnGroupTemplate.units, i ) @@ -347,7 +347,7 @@ function UNIT:ReSpawnAt( Coordinate, Heading ) SpawnGroupTemplate.groupId = nil - self:T( SpawnGroupTemplate ) + --self:T( SpawnGroupTemplate ) _DATABASE:Spawn( SpawnGroupTemplate ) end @@ -358,7 +358,7 @@ end -- @param #UNIT self -- @return #boolean `true` if Unit is activated. `nil` The DCS Unit is not existing or alive. function UNIT:IsActive() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -395,7 +395,7 @@ end -- @param #UNIT self -- @return #boolean Returns `true` if Unit is alive and active, `false` if it exists but is not active and `nil` if the object does not exist or DCS `isExist` function returns false. function UNIT:IsAlive() - self:F3( self.UnitName ) + --self:F3( self.UnitName ) local DCSUnit = self:GetDCSObject() -- DCS#Unit @@ -418,7 +418,7 @@ end -- @param #UNIT self -- @return #string The Callsign of the Unit. function UNIT:GetCallsign() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -430,7 +430,7 @@ function UNIT:GetCallsign() return UnitCallSign end - self:F( self.ClassName .. " " .. self.UnitName .. " not found!" ) + --self:F( self.ClassName .. " " .. self.UnitName .. " not found!" ) return nil end @@ -477,7 +477,7 @@ end -- @return #string Player Name -- @return #nil The DCS Unit is not existing or alive. function UNIT:GetPlayerName() - self:F( self.UnitName ) + --self:F( self.UnitName ) local DCSUnit = self:GetDCSObject() -- DCS#Unit @@ -551,7 +551,7 @@ end -- @return #number The Unit number. -- @return #nil The DCS Unit is not existing or alive. function UNIT:GetNumber() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -568,7 +568,7 @@ end -- @param #UNIT self -- @return #number Speed in km/h. function UNIT:GetSpeedMax() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local Desc = self:GetDesc() @@ -585,7 +585,7 @@ end -- @param #UNIT self -- @return #number Range in meters. function UNIT:GetRange() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local Desc = self:GetDesc() @@ -607,7 +607,7 @@ end -- @return #boolean If true, unit is refuelable (checks for the attribute "Refuelable"). -- @return #number Refueling system (if any): 0=boom, 1=probe. function UNIT:IsRefuelable() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local refuelable=self:HasAttribute("Refuelable") @@ -626,7 +626,7 @@ end -- @return #boolean If true, unit is a tanker (checks for the attribute "Tankers"). -- @return #number Refueling system (if any): 0=boom, 1=probe. function UNIT:IsTanker() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local tanker=self:HasAttribute("Tankers") @@ -725,7 +725,7 @@ end -- @param Wrapper.Unit#UNIT self -- @return Wrapper.Group#GROUP The Group of the Unit or `nil` if the unit does not exist. function UNIT:GetGroup() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local UnitGroup = GROUP:FindByName(self.GroupName) if UnitGroup then return UnitGroup @@ -749,13 +749,13 @@ end -- @return #string The name of the DCS Unit. -- @return #nil The DCS Unit is not existing or alive. function UNIT:GetPrefix() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() if DCSUnit then local UnitPrefix = string.match( self.UnitName, ".*#" ):sub( 1, -2 ) - self:T3( UnitPrefix ) + --self:T3( UnitPrefix ) return UnitPrefix end @@ -766,7 +766,7 @@ end -- @param #UNIT self -- @return DCS#Unit.Ammo Table with ammuntion of the unit (or nil). This can be a complex table! function UNIT:GetAmmo() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() if DCSUnit then --local status, unitammo = pcall( @@ -958,7 +958,7 @@ end -- @param #UNIT self -- @return DCS#Unit.Sensors Table of sensors. function UNIT:GetSensors() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -977,7 +977,7 @@ end -- @param #UNIT self -- @return #boolean returns true if the unit has specified types of sensors. This function is more preferable than Unit.getSensors() if you don't want to get information about all the unit's sensors, and just want to check if the unit has specified types of sensors. function UNIT:HasSensors( ... ) - self:F2( arg ) + --self:F2( arg ) local DCSUnit = self:GetDCSObject() @@ -993,7 +993,7 @@ end -- @param #UNIT self -- @return #boolean returns true if the unit is SEADable. function UNIT:HasSEAD() - self:F2() + --self:F2() local DCSUnit = self:GetDCSObject() @@ -1021,7 +1021,7 @@ end -- @return #boolean Indicates if at least one of the unit's radar(s) is on. -- @return DCS#Object The object of the radar's interest. Not nil only if at least one radar of the unit is tracking a target. function UNIT:GetRadar() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -1037,7 +1037,7 @@ end -- @param #UNIT self -- @return #number The relative amount of fuel (from 0.0 to 1.0) or *nil* if the DCS Unit is not existing or alive. function UNIT:GetFuel() - self:F3( self.UnitName ) + --self:F3( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -1054,14 +1054,14 @@ end -- @param #UNIT self -- @return #list A list of one @{Wrapper.Unit}. function UNIT:GetUnits() - self:F3( { self.UnitName } ) + --self:F3( { self.UnitName } ) local DCSUnit = self:GetDCSObject() local Units = {} if DCSUnit then Units[1] = UNIT:Find( DCSUnit ) - self:T3( Units ) + -self:T3( Units ) return Units end @@ -1073,7 +1073,7 @@ end -- @param #UNIT self -- @return #number The Unit's health value or -1 if unit does not exist any more. function UNIT:GetLife() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -1089,7 +1089,7 @@ end -- @param #UNIT self -- @return #number The Unit's initial health value or 0 if unit does not exist any more. function UNIT:GetLife0() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local DCSUnit = self:GetDCSObject() @@ -1105,7 +1105,7 @@ end -- @param #UNIT self -- @return #number The Unit's relative health value, i.e. a number in [0,1] or -1 if unit does not exist any more. function UNIT:GetLifeRelative() - self:F2(self.UnitName) + --self:F2(self.UnitName) if self and self:IsAlive() then local life0=self:GetLife0() @@ -1120,7 +1120,7 @@ end -- @param #UNIT self -- @return #number The Unit's relative health value, i.e. a number in [0,1] or 1 if unit does not exist any more. function UNIT:GetDamageRelative() - self:F2(self.UnitName) + --self:F2(self.UnitName) if self and self:IsAlive() then return 1-self:GetLifeRelative() @@ -1158,7 +1158,7 @@ end -- @param #UNIT self -- @return #number Unit category from `getDesc().category`. function UNIT:GetUnitCategory() - self:F3( self.UnitName ) + --self:F3( self.UnitName ) local DCSUnit = self:GetDCSObject() if DCSUnit then @@ -1172,7 +1172,7 @@ end -- @param #UNIT self -- @return #string Category name = Helicopter, Airplane, Ground Unit, Ship function UNIT:GetCategoryName() - self:F3( self.UnitName ) + --self:F3( self.UnitName ) local DCSUnit = self:GetDCSObject() if DCSUnit then @@ -1184,7 +1184,7 @@ function UNIT:GetCategoryName() [Unit.Category.STRUCTURE] = "Structure", } local UnitCategory = DCSUnit:getDesc().category - self:T3( UnitCategory ) + --self:T3( UnitCategory ) return CategoryNames[UnitCategory] end @@ -1412,7 +1412,7 @@ end -- @return true If the other DCS Unit is within the radius of the 2D point of the DCS Unit. -- @return #nil The DCS Unit is not existing or alive. function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) - self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) + --self:F2( { self.UnitName, AwaitUnit.UnitName, Radius } ) local DCSUnit = self:GetDCSObject() @@ -1421,10 +1421,10 @@ function UNIT:OtherUnitInRadius( AwaitUnit, Radius ) local AwaitUnitVec3 = AwaitUnit:GetVec3() if (((UnitVec3.x - AwaitUnitVec3.x)^2 + (UnitVec3.z - AwaitUnitVec3.z)^2)^0.5 <= Radius) then - self:T3( "true" ) + --self:T3( "true" ) return true else - self:T3( "false" ) + --self:T3( "false" ) return false end end @@ -1442,17 +1442,17 @@ end -- @param #UNIT self -- @return #boolean IsFriendly evaluation result. function UNIT:IsFriendly( FriendlyCoalition ) - self:F2() + --self:F2() local DCSUnit = self:GetDCSObject() if DCSUnit then local UnitCoalition = DCSUnit:getCoalition() - self:T3( { UnitCoalition, FriendlyCoalition } ) + --self:T3( { UnitCoalition, FriendlyCoalition } ) local IsFriendlyResult = ( UnitCoalition == FriendlyCoalition ) - self:F( IsFriendlyResult ) + --self:F( IsFriendlyResult ) return IsFriendlyResult end @@ -1464,17 +1464,17 @@ end -- @param #UNIT self -- @return #boolean Ship category evaluation result. function UNIT:IsShip() - self:F2() + --self:F2() local DCSUnit = self:GetDCSObject() if DCSUnit then local UnitDescriptor = DCSUnit:getDesc() - self:T3( { UnitDescriptor.category, Unit.Category.SHIP } ) + --self:T3( { UnitDescriptor.category, Unit.Category.SHIP } ) local IsShipResult = ( UnitDescriptor.category == Unit.Category.SHIP ) - self:T3( IsShipResult ) + --self:T3( IsShipResult ) return IsShipResult end @@ -1486,7 +1486,7 @@ end -- @param #boolean NoHeloCheck If true, no additonal checks for helos are performed. -- @return #boolean Return true if in the air or #nil if the UNIT is not existing or alive. function UNIT:InAir(NoHeloCheck) - self:F2( self.UnitName ) + --self:F2( self.UnitName ) -- Get DCS unit object. local DCSUnit = self:GetDCSObject() --DCS#Unit @@ -1513,7 +1513,7 @@ function UNIT:InAir(NoHeloCheck) end end - self:T3( UnitInAir ) + --self:T3( UnitInAir ) return UnitInAir end @@ -1708,7 +1708,7 @@ end -- @param #boolean switch If true, emission is enabled. If false, emission is disabled. -- @return #UNIT self function UNIT:EnableEmission(switch) - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local switch = switch or false @@ -1727,7 +1727,7 @@ end -- @param #UNIT self -- @return #string Skill String of skill name. function UNIT:GetSkill() - self:F2( self.UnitName ) + --self:F2( self.UnitName ) local name = self.UnitName local skill = "Random" if _DATABASE.Templates.Units[name] and _DATABASE.Templates.Units[name].Template and _DATABASE.Templates.Units[name].Template.skill then @@ -1743,7 +1743,7 @@ end -- @return #string VCN Voice Callsign Number or nil if not set/capable. -- @return #string Lead If true, unit is Flight Lead, else false or nil. function UNIT:GetSTN() - self:F2(self.UnitName) + --self:F2(self.UnitName) local STN = nil -- STN/TN local VCL = nil -- VoiceCallsignLabel local VCN = nil -- VoiceCallsignNumber From f00d0dc871da851d2f304f6578bf61cbe59bd028 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Fri, 6 Sep 2024 13:40:27 +0200 Subject: [PATCH 2/2] QoL --- Moose Development/Moose/AI/AI_A2G_Dispatcher.lua | 7 ++++++- Moose Development/Moose/Functional/Detection.lua | 11 ++++++----- Moose Development/Moose/Functional/Warehouse.lua | 2 +- Moose Development/Moose/Ops/Airboss.lua | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Moose Development/Moose/AI/AI_A2G_Dispatcher.lua b/Moose Development/Moose/AI/AI_A2G_Dispatcher.lua index 451414f7f..0396e4e9f 100644 --- a/Moose Development/Moose/AI/AI_A2G_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_A2G_Dispatcher.lua @@ -3895,10 +3895,14 @@ do -- AI_A2G_DISPATCHER if Squadron then local FirstUnit = AttackSetUnit:GetRandomSurely() + if FirstUnit then local Coordinate = FirstUnit:GetCoordinate() -- Core.Point#COORDINATE if self.SetSendPlayerMessages then Dispatcher:MessageToPlayers( Squadron, DefenderName .. ", on route to ground target at " .. Coordinate:ToStringA2G( DefenderGroup ), DefenderGroup ) end + else + return + end end self:GetParent(self).onafterEngageRoute( self, DefenderGroup, From, Event, To, AttackSetUnit ) end @@ -4784,4 +4788,5 @@ end Squadron.ResourceCount = Squadron.ResourceCount - Amount end self:T({Squadron = Squadron.Name,SquadronResourceCount = Squadron.ResourceCount}) - end \ No newline at end of file + end + \ No newline at end of file diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 367e460bc..1c1de3d50 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -595,7 +595,8 @@ do -- DETECTION_BASE return self end - + + --- -- @param #DETECTION_BASE self -- @param #string From The From State string. -- @param #string Event The Event string. @@ -615,7 +616,7 @@ do -- DETECTION_BASE self:T( { "DetectionGroup is Alive", Detection:GetName() } ) local DetectionGroupName = Detection:GetName() - local DetectionUnit = Detection:GetUnit( 1 ) + local DetectionUnit = Detection:GetFirstUnitAlive() local DetectedUnits = {} @@ -632,20 +633,20 @@ do -- DETECTION_BASE --self:T(UTILS.PrintTableToLog(DetectedTargets)) - for DetectionObjectID, Detection in pairs( DetectedTargets ) do + for DetectionObjectID, Detection in pairs( DetectedTargets or {}) do local DetectedObject = Detection.object -- DCS#Object if DetectedObject and DetectedObject:isExist() and DetectedObject.id_ < 50000000 then -- and ( DetectedObject:getCategory() == Object.Category.UNIT or DetectedObject:getCategory() == Object.Category.STATIC ) then local DetectedObjectName = DetectedObject:getName() if not self.DetectedObjects[DetectedObjectName] then self.DetectedObjects[DetectedObjectName] = self.DetectedObjects[DetectedObjectName] or {} - self.DetectedObjects[DetectedObjectName].Name = DetectedObjectName + self.DetectedObjects[DetectedObjectName].Name = DetectedObjectName self.DetectedObjects[DetectedObjectName].Object = DetectedObject end end end - for DetectionObjectName, DetectedObjectData in pairs( self.DetectedObjects ) do + for DetectionObjectName, DetectedObjectData in pairs( self.DetectedObjects or {}) do local DetectedObject = DetectedObjectData.Object diff --git a/Moose Development/Moose/Functional/Warehouse.lua b/Moose Development/Moose/Functional/Warehouse.lua index cab1d0899..b7a69a44e 100644 --- a/Moose Development/Moose/Functional/Warehouse.lua +++ b/Moose Development/Moose/Functional/Warehouse.lua @@ -6732,7 +6732,7 @@ end -- @param Wrapper.Group#GROUP deadgroup Group of unit that died. -- @param #WAREHOUSE.Pendingitem request Request that needs to be updated. function WAREHOUSE:_UnitDead(deadunit, deadgroup, request) - self:F(self.lid.."FF unit dead "..deadunit:GetName()) + --self:F(self.lid.."FF unit dead "..deadunit:GetName()) -- Find opsgroup. local opsgroup=_DATABASE:FindOpsGroup(deadgroup) diff --git a/Moose Development/Moose/Ops/Airboss.lua b/Moose Development/Moose/Ops/Airboss.lua index 2fce2dc41..f7b0dc95a 100644 --- a/Moose Development/Moose/Ops/Airboss.lua +++ b/Moose Development/Moose/Ops/Airboss.lua @@ -14678,7 +14678,7 @@ function AIRBOSS:_GetPlayerUnitAndName( _unitName ) -- Get DCS unit from its name. local DCSunit = Unit.getByName( _unitName ) - if DCSunit then + if DCSunit and DCSunit.getPlayerName then -- Get player name if any. local playername = DCSunit:getPlayerName()