From d7f1a74caf3a68ec251ef0e8b81faf70e605ff8a Mon Sep 17 00:00:00 2001
From: FlightControl DETECTION classes facilitate the detection of enemy units within the battle zone executed by FACs (Forward Air Controllers) or RECCEs (Reconnassance Units).
DETECTION uses the in-built detection capabilities of DCS World, but adds new functionalities. Please watch this youtube video that explains the detection concepts. Find the DETECTION classes documentation further in this document in the globals section. DETECTION_BASE class, extends Fsm#FSM The DETECTION_BASE class defines the core functions to administer detected objects. Filter the detected units based on Unit.Category Multiple Unit.Category entries can be given as a table and then these will be evaluated as an OR expression. DETECTION_BASE class, extends Fsm#FSM The DETECTION_BASE class defines the core functions to administer detected objects. The DETECTION_BASE class will detect objects within the battle zone for a list of Groups detecting targets following (a) detection method(s). Construct a new DETECTION_BASE instance using the DETECTION_BASE.New() method. By default, detection will return detected objects with all the detection sensors available.
+However, you can ask how the objects were found with specific detection methods.
+If you use one of the below methods, the detection will work with the detection method specified.
+You can specify to apply multiple detection methods. Use the following functions to report the objects it detected using the methods Visual, Optical, Radar, IRST, RWR, DLINK: DETECTIONBASE derived classes build a list called DetectedItems[], which is essentially a first later
+of grouping of detected units. Each DetectedItem within the DetectedItems[] list contains
+a SETUNIT object that contains the detected units that belong to that group. Derived classes will apply different methods to group the detected units.
+Examples are per area, per quadrant, per distance, per type.
+See further the derived DETECTION classes on which grouping methods are currently supported. Various methods exist how to retrieve the grouped items from a DETECTION_BASE derived class: Filter the detected units based on Unit.Category using the method DETECTION_BASE.FilterCategories(). Multiple Unit.Category entries can be given as a table and then these will be evaluated as an OR expression. Example to filter a single category (Unit.Category.AIRPLANE). Example to filter multiple categories (Unit.Category.AIRPLANE, Unit.Category.HELICOPTER). Note the {}. By default, DCS World will return any object that is in LOS and within "visual reach", or detectable through one of the electronic detection means.
+That being said, the DCS World detection algorithm can sometimes be unrealistic.
+Especially for a visual detection, DCS World is able to report within 1 second a detailed detection of a group of 20 units (including types of the units) that are 10 kilometers away, using only visual capabilities.
+Additionally, trees and other obstacles are not accounted during the DCS World detection. Therefore, an additional (optional) filtering has been built into the DETECTION_BASE class, that can be set for visual detected units.
+For electronic detection, this filtering is not applied, only for visually detected targets. The following additional filtering can be applied for visual filtering: I advise however, that, when you first use the DETECTION derived classes, that you don't use these filters.
+Only when you experience unrealistic behaviour in your missions, these filters could be applied. Upon a visual detection, the further away a detected object is, the less likely it is to be detected properly.
+Also, the speed of accurate detection plays a role. A distance probability factor between 0 and 1 can be given, that will model a linear extrapolated probability over 10 km distance. For example, if a probability factor of 0.6 (60%) is given, the extrapolated probabilities over 15 kilometers would like like:
+1 km: 96%, 2 km: 92%, 3 km: 88%, 4 km: 84%, 5 km: 80%, 6 km: 76%, 7 km: 72%, 8 km: 68%, 9 km: 64%, 10 km: 60%, 11 km: 56%, 12 km: 52%, 13 km: 48%, 14 km: 44%, 15 km: 40%. Note that based on this probability factor, not only the detection but also the type of the unit will be applied! Use the method Detection#DETECTION_BASE.SetDistanceProbability() to set the probability factor upon a 10 km distance. Upon a visual detection, the higher the unit is during the detecting process, the more likely the detected unit is to be detected properly.
+A detection at a 90% alpha angle is the most optimal, a detection at 10% is less and a detection at 0% is less likely to be correct. A probability factor between 0 and 1 can be given, that will model a progressive extrapolated probability if the target would be detected at a 0° angle. For example, if a alpha angle probability factor of 0.7 is given, the extrapolated probabilities of the different angles would look like:
+0°: 70%, 10°: 75,21%, 20°: 80,26%, 30°: 85%, 40°: 89,28%, 50°: 92,98%, 60°: 95,98%, 70°: 98,19%, 80°: 99,54%, 90°: 100% Use the method Detection#DETECTION_BASE.SetAlphaAngleProbability() to set the probability factor if 0°. Upon a visual detection, the more a detected unit is within a cloudy zone, the less likely the detected unit is to be detected successfully.
+The Cloudy Zones work with the ZONE_BASE derived classes. The mission designer can define within the mission
+zones that reflect cloudy areas where detected units may not be so easily visually detected. Use the method Detection#DETECTION_BASE.SetZoneProbability() to set for a defined number of zones, the probability factors. Note however, that the more zones are defined to be "cloudy" within a detection, the more performance it will take
+from the DETECTIONBASE to calculate the presence of the detected unit within each zone.
+Expecially for ZONEPOLYGON, try to limit the amount of nodes of the polygon! Typically, this kind of filter would be applied for very specific areas were a detection needs to be very realisting for
+AI not to detect so easily targets within a forrest or village rich area. DETECTION_BASE can accept or reject successful detections based on the location of the detected object,
+if it is located in range or located inside or outside of specific zones. A range can be set that will limit a successful detection for a unit.
+Use the method Detection#DETECTION_BASE.SetAcceptRange() to apply a range in meters till where detected units will be accepted. Specific ZONEBASE object(s) can be given as a parameter, which will only accept a detection if the unit is within the specified ZONEBASE object(s).
+Use the method Detection#DETECTION_BASE.SetAcceptZones() will accept detected units if they are within the specified zones. Specific ZONEBASE object(s) can be given as a parameter, which will reject detection if the unit is within the specified ZONEBASE object(s).
+Use the method Detection#DETECTION_BASE.SetRejectZones() will reject detected units if they are within the specified zones.
+An example of how to use the method is shown below. Various Events and State Transitions can be tailored using DETECTION_BASE. The DETECTION_BASE class defines the core functions to administer detected objects. The DETECTION_BASE class will detect objects within the battle zone for a list of Groups detecting targets following (a) detection method(s). Construct a new DETECTION_BASE instance using the DETECTION_BASE.New() method. By default, detection will return detected objects with all the detection sensors available.
-However, you can ask how the objects were found with specific detection methods.
-If you use one of the below methods, the detection will work with the detection method specified.
-You can specify to apply multiple detection methods. Use the following functions to report the objects it detected using the methods Visual, Optical, Radar, IRST, RWR, DLINK: DETECTIONBASE derived classes build a list called DetectedItems[], which is essentially a first later
-of grouping of detected units. Each DetectedItem within the DetectedItems[] list contains
-a SETUNIT object that contains the detected units that belong to that group. Derived classes will apply different methods to group the detected units.
-Examples are per area, per quadrant, per distance, per type.
-See further the derived DETECTION classes on which grouping methods are currently supported. Various methods exist how to retrieve the grouped items from a DETECTION_BASE derived class: By default, DCS World will return any object that is in LOS and within "visual reach", or detectable through one of the electronic detection means.
-That being said, the DCS World detection algorithm can sometimes be unrealistic.
-Especially for a visual detection, DCS World is able to report within 1 second a detailed detection of a group of 20 units (including types of the units) that are 10 kilometers away, using only visual capabilities.
-Additionally, trees and other obstacles are not accounted during the DCS World detection. Therefore, an additional (optional) filtering has been built into the DETECTION_BASE class, that can be set for visual detected units.
-For electronic detection, this filtering is not applied, only for visually detected targets. The following additional filtering can be applied for visual filtering: I advise however, that, when you first use the DETECTION derived classes, that you don't use these filters.
-Only when you experience unrealistic behaviour in your missions, these filters could be applied. Upon a visual detection, the further away a detected object is, the less likely it is to be detected properly.
-Also, the speed of accurate detection plays a role. A distance probability factor between 0 and 1 can be given, that will model a linear extrapolated probability over 10 km distance. For example, if a probability factor of 0.6 (60%) is given, the extrapolated probabilities over 15 kilometers would like like:
-1 km: 96%, 2 km: 92%, 3 km: 88%, 4 km: 84%, 5 km: 80%, 6 km: 76%, 7 km: 72%, 8 km: 68%, 9 km: 64%, 10 km: 60%, 11 km: 56%, 12 km: 52%, 13 km: 48%, 14 km: 44%, 15 km: 40%. Note that based on this probability factor, not only the detection but also the type of the unit will be applied! Use the method Detection#DETECTION_BASE.SetDistanceProbability() to set the probability factor upon a 10 km distance. Upon a visual detection, the higher the unit is during the detecting process, the more likely the detected unit is to be detected properly.
-A detection at a 90% alpha angle is the most optimal, a detection at 10% is less and a detection at 0% is less likely to be correct. A probability factor between 0 and 1 can be given, that will model a progressive extrapolated probability if the target would be detected at a 0° angle. For example, if a alpha angle probability factor of 0.7 is given, the extrapolated probabilities of the different angles would look like:
-0°: 70%, 10°: 75,21%, 20°: 80,26%, 30°: 85%, 40°: 89,28%, 50°: 92,98%, 60°: 95,98%, 70°: 98,19%, 80°: 99,54%, 90°: 100% Use the method Detection#DETECTION_BASE.SetAlphaAngleProbability() to set the probability factor if 0°. Upon a visual detection, the more a detected unit is within a cloudy zone, the less likely the detected unit is to be detected successfully.
-The Cloudy Zones work with the ZONE_BASE derived classes. The mission designer can define within the mission
-zones that reflect cloudy areas where detected units may not be so easily visually detected. Use the method Detection#DETECTION_BASE.SetZoneProbability() to set for a defined number of zones, the probability factors. Note however, that the more zones are defined to be "cloudy" within a detection, the more performance it will take
-from the DETECTIONBASE to calculate the presence of the detected unit within each zone.
-Expecially for ZONEPOLYGON, try to limit the amount of nodes of the polygon! Typically, this kind of filter would be applied for very specific areas were a detection needs to be very realisting for
-AI not to detect so easily targets within a forrest or village rich area. DETECTION_BASE can accept or reject successful detections based on the location of the detected object,
-if it is located in range or located inside or outside of specific zones. A range can be set that will limit a successful detection for a unit.
-Use the method Detection#DETECTION_BASE.SetAcceptRange() to apply a range in meters till where detected units will be accepted. Specific ZONEBASE object(s) can be given as a parameter, which will only accept a detection if the unit is within the specified ZONEBASE object(s).
-Use the method Detection#DETECTION_BASE.SetAcceptZones() will accept detected units if they are within the specified zones. Specific ZONEBASE object(s) can be given as a parameter, which will reject detection if the unit is within the specified ZONEBASE object(s).
-Use the method Detection#DETECTION_BASE.SetRejectZones() will reject detected units if they are within the specified zones.
-An example of how to use the method is shown below. Various Events and State Transitions can be tailored using DETECTION_BASE. Filter the detected units based on Unit.Category Multiple Unit.Category entries can be given as a table and then these will be evaluated as an OR expression. Example to filter a single category (Unit.Category.AIRPLANE). Example to filter multiple categories (Unit.Category.AIRPLANE, Unit.Category.HELICOPTER). Note the {}. #DETECTION_BASE:
+self
+
+Demo Missions
+
+DETECTION Demo Missions and Source Code
+
+DETECTION Demo Missions, only for Beta Testers
+
+ALL Demo Missions pack of the Latest Release
+
+
+
+YouTube Channel
+
+DETECTION YouTube Channel
+
+
Contributions:
@@ -130,7 +147,9 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
DETECTION_BASE
+
@@ -324,12 +343,6 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
- DETECTION_BASE.AlphaAngleProbability
-
-
-
DETECTION_BASE.ClassName
-
-
@@ -474,6 +487,23 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
+ DETECTION_BASE.DistanceProbability
+
+
+
DETECTION_BASE:FilterCategories(<, FilterCategories)
+
+
+The different values of Unit.Category can be:
+
+
+
@@ -1065,7 +1095,233 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
+ DETECTION_BASE constructor
+
+Initialization
+
+
+
+
+
+DETECTION_ derived classes group the detected units into a DetectedItems[] list
+
+
+
+
+Filter detected units based on category of the unit
+
+
+The different values of Unit.Category can be:
+
+
+
+
+DetectionObject:FilterCategories( Unit.Category.AIRPLANE )
+
+
+DetectionObject:FilterCategories( { Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } )
+Visual filters to fine-tune the probability of the detected objects
+
+
+
+
+Distance visual detection probability
+
+Alpha Angle visual detection probability
+
+Cloudy Zones detection probability
+
+Accept / Reject detected units
+
+Detection acceptance of within range limit
+
+
+
+
+ local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
+
+ -- Build a detect object.
+ local Detection = DETECTION_BASE:New( SetGroup )
+
+ -- This will accept detected units if the range is below 5000 meters.
+ Detection:SetAcceptRange( 5000 )
+
+ -- Start the Detection.
+ Detection:Start()
+Detection acceptance if within zone(s).
+
+
+
+ local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
+
+ -- Search fo the zones where units are to be accepted.
+ local ZoneAccept1 = ZONE:New( "AcceptZone1" )
+ local ZoneAccept2 = ZONE:New( "AcceptZone2" )
+
+ -- Build a detect object.
+ local Detection = DETECTION_BASE:New( SetGroup )
+
+ -- This will accept detected units by Detection when the unit is within ZoneAccept1 OR ZoneAccept2.
+ Detection:SetAcceptZones( { ZoneAccept1, ZoneAccept2 } )
+
+ -- Start the Detection.
+ Detection:Start()
+Detection rejectance if within zone(s).
+
+
+
+ local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
+
+ -- Search fo the zones where units are to be rejected.
+ local ZoneReject1 = ZONE:New( "RejectZone1" )
+ local ZoneReject2 = ZONE:New( "RejectZone2" )
+
+ -- Build a detect object.
+ local Detection = DETECTION_BASE:New( SetGroup )
+
+ -- This will reject detected units by Detection when the unit is within ZoneReject1 OR ZoneReject2.
+ Detection:SetRejectZones( { ZoneReject1, ZoneReject2 } )
+
+ -- Start the Detection.
+ Detection:Start()
+DETECTION_BASE is a Finite State Machine
+
+DETECTION_BASE States
+
+
+
+
+DETECTION_BASE Events
+
+
+
Type
-
-DETECTION_BASE1) DETECTION_BASE class, extends Fsm#FSM
-
-1.1) DETECTION_BASE constructor
-
-1.2) DETECTION_BASE initialization
-
-
-
-
-1.3) DETECTION_BASE derived classes group the detected units into a DetectedItems[] list
-
-
-
-
-1.4) Apply additional Filters to fine-tune the detected objects
-
-
-
-
-1.4.1 ) Distance visual detection probability
-
-1.4.2 ) Alpha Angle visual detection probability
-
-1.4.3 ) Cloudy Zones detection probability
-
-1.5 ) Accept / Reject detected units
-
-1.5.1 ) Detection acceptance of within range limit
-
-
-
-
- local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
-
- -- Build a detect object.
- local Detection = DETECTION_BASE:New( SetGroup )
-
- -- This will accept detected units if the range is below 5000 meters.
- Detection:SetAcceptRange( 5000 )
-
- -- Start the Detection.
- Detection:Start()
-1.5.2 ) Detection acceptance if within zone(s).
-
-
-
- local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
-
- -- Search fo the zones where units are to be accepted.
- local ZoneAccept1 = ZONE:New( "AcceptZone1" )
- local ZoneAccept2 = ZONE:New( "AcceptZone2" )
-
- -- Build a detect object.
- local Detection = DETECTION_BASE:New( SetGroup )
-
- -- This will accept detected units by Detection when the unit is within ZoneAccept1 OR ZoneAccept2.
- Detection:SetAcceptZones( { ZoneAccept1, ZoneAccept2 } )
-
- -- Start the Detection.
- Detection:Start()
-1.5.3 ) Detection rejectance if within zone(s).
-
-
-
- local SetGroup = SET_GROUP:New():FilterPrefixes( "FAC" ):FilterStart() -- Build a SetGroup of Forward Air Controllers.
-
- -- Search fo the zones where units are to be rejected.
- local ZoneReject1 = ZONE:New( "RejectZone1" )
- local ZoneReject2 = ZONE:New( "RejectZone2" )
-
- -- Build a detect object.
- local Detection = DETECTION_BASE:New( SetGroup )
-
- -- This will reject detected units by Detection when the unit is within ZoneReject1 OR ZoneReject2.
- Detection:SetRejectZones( { ZoneReject1, ZoneReject2 } )
-
- -- Start the Detection.
- Detection:Start()
-1.6) DETECTION_BASE is a Finite State Machine
-
-1.6.1) DETECTION_BASE States
-
-
-
-
-1.6.2) DETECTION_BASE Events
-
-
-
-
-
- Field(s)
+ Field(s)
-
-
@@ -2144,7 +2184,6 @@ self
+
+
+The different values of Unit.Category can be:
+
+
+
+
+DetectionObject:FilterCategories( Unit.Category.AIRPLANE )
+
+
+
+ DetectionObject:FilterCategories( { Unit.Category.AIRPLANE, Unit.Category.HELICOPTER } )
+Parameters
+
+
+ #list < :
+cs.DCSUnit#Unit> FilterCategories The Categories entries FilterCategories : Return value
+
+
@@ -4449,6 +4544,8 @@ self
Type
+ DETECTION_UNITS.DetectedItemType
+
diff --git a/docs/Documentation/Spawn.html b/docs/Documentation/Spawn.html
index 6193f9f69..5627c6528 100644
--- a/docs/Documentation/Spawn.html
+++ b/docs/Documentation/Spawn.html
@@ -809,6 +809,12 @@ and any spaces before and after the resulting name are removed.
listSPAWN:_TranslateRotate(SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle)
+
+
+
@@ -2110,9 +2116,6 @@ The group that was spawned. You can use this group for further actions.SPAWN.uncontrolled
+
+
Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.
-Overwrite unit names by default with group name.
+By default, no InitLimit
-