nearestObjects: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "|= Game name" to "|Game name=")
Line 7: Line 7:
____________________________________________________________________________________________
____________________________________________________________________________________________


| Returns a list of nearest objects of the given types to the given position or object, within the specified distance. If more than one object is found they will be ordered by proximity, the closest one will be first in the array. Alternatively, you can use [[nearObjects]] command, which doesn't sort results. <br><br>
| Returns a list of nearest objects of the given types to the given position or object, within the specified distance. If more than one object is found they will be ordered by proximity, the closest one will be first in the array. Alternatively, you can use [[nearObjects]] command, which doesn't sort results.
<br><br>
A list of ClassName types (e.g <tt>Tank</tt>) can be found in [[:Category:CfgVehicles|CfgVehicles]].
<br><br>
{{Important | This command only finds objects that are '''[[entities]]'''. If you are looking for non-entity objects, see [[nearObjects]], [[nearestObject]].}} |DESCRIPTION=
____________________________________________________________________________________________


''position'' can use the format:
| [[nearestObjects]] [position, types, radius, 2Dmode] |Syntax=


<nowiki>[[</nowiki>x,y,z], ["ClassName",...], radius]
|p1= [position, types, radius, 2Dmode]: [[Array]] |PARAMETER1=


or
|p2= position:  [[Object]]  or [[Array]] in format [[PositionAGL]] or [[Position2D]] - where to find objects, center position. |PARAMETER2=


[object, ["ClassName",...], radius]
|p3= types: [[Array]] - list of class name of the objects to search for. Use an empty array {{Inline code|[]}} to search for all classes. |PARAMETER3=


|p4= radius: [[Number]] - range from center position to search for objects. |PARAMETER4=


To use it without any ClassName filter:
|p5= {{GVI|arma3|1.65}} 2Dmode (Optional, default [[false]]): [[Boolean]] - [[true]] for 2D distance, [[false]] for 3D distance {{since|arma3|1.65.138818|y}} |PARAMETER5=


[object or position, [], radius].
| [[Array]] - array of objects |RETURNVALUE=
 
 
A list of ClassName types (Tanks eg) can be found in [[CfgVehicles]]<br><br>
 
Since Arma 3 v1.65.138818 it is possible to switch search and sorting mode between 2D and 3D<br><br>
 
{{Important | This command finds only objects that are <u>entities</u>. If you are looking for non-entity objects, use [[nearObjects]], [[nearestObject]]}}
|DESCRIPTION=
____________________________________________________________________________________________
____________________________________________________________________________________________
 
|x1= <code>[[nearestObjects]] [<nowiki/>[[player]], ["Car", "Tank"], 200];</code> |EXAMPLE1=


|'''nearestObjects''' [position, types, radius, 2Dmode]
|x2= <code>[[nearestObjects]] [<nowiki/>[[player]], ["house"], 200];</code> |EXAMPLE2=


|p1= [position, types, radius, 2Dmode]: [[Array]] |PARAMETER1=
|x3= <code>[[nearestObjects]] [<nowiki/>[2716,2949,0], ["Car", "Truck"], 100];</code> |EXAMPLE3=
|p2= position:  [[Object]]  or [[Array]] in format [[PositionAGL]] or [[Position2D]] - where to find objects, center position. |PARAMETER2=
|p3= types: [[Array]] - list of class name of the objects to search for. |PARAMETER3=
|p4= radius: [[Number]] - range from center position to search for objects. |PARAMETER4=
|p5= 2Dmode (Optional): [[Boolean]] - The object search and sorting mode: [[true]] - 2D, [[false]] - 3D. Default: [[false]] - 3D (''Available since Arma 3 v1.65.138818'') |PARAMETER5=


| [[Array]] - array of objects |RETURNVALUE=
|x4= Return every object in 50 metres radius around player:<code>[[nearestObjects]] [<nowiki/>[[player]], [], 50]</code> |EXAMPLE4=
____________________________________________________________________________________________
 
|x1= <code>[[nearestObjects]] <nowiki>[</nowiki>[[player]], ["Car","Tank"], 200];</code> |EXAMPLE1=
|x2= <code>[[nearestObjects]] <nowiki>[</nowiki>[[player]], ["house"], 200];</code> |EXAMPLE2=
|x3= <code>[[nearestObjects]] <nowiki>[</nowiki>[2716,2949,0], ["Car","Truck"], 100];</code> |EXAMPLE2=
|x4= Return every object in 50 metres radius around player:<code>[[nearestObjects]] <nowiki>[</nowiki>[[player]], [], 50]</code> |EXAMPLE4=
____________________________________________________________________________________________
____________________________________________________________________________________________


| [[nearestTerrainObjects]], [[findNearestEnemy]], [[nearestBuilding]], [[nearestObject]], [[nearObjects]], [[nearestLocation]], [[nearEntities]], [[nearTargets]], [[nearSupplies]], [[nearestLocationWithDubbing]], [[nearObjectsReady]], [[nearRoads]] |SEEALSO=
| [[nearestTerrainObjects]], [[findNearestEnemy]], [[nearestBuilding]], [[nearestObject]], [[nearObjects]], [[nearestLocation]], [[nearEntities]], [[nearTargets]], [[nearSupplies]], [[nearestLocationWithDubbing]], [[nearObjectsReady]], [[nearRoads]] |SEEALSO=
}}
}}


Line 57: Line 46:


<dd class="notedate">Posted on unknown
<dd class="notedate">Posted on unknown
<dt class="note">'''[[User:Vigilante|Vigilante]]'''
<dt class="note">[[User:Vigilante|Vigilante]]
<dd class="note">
<dd class="note">
To get a list with alive targets for various situations use this construct:
To get a list with alive targets for various situations use this construct:
<code>_nearestTargets = [[nearestObjects]] [_submunScanPos, ["VBS2_TANK","TANK"], _scanArea];
<code>_nearestTargets = [[nearestObjects]] [_submunScanPos, ["VBS2_TANK","TANK"], _scanArea];
_validNearestTargets = [];
_validNearestTargets = [];
{[[if]] ([[alive]] _x) [[then]] {_validNearestTargets [[set]] [([[count]] _validNearestTargets),_x];};} [[forEach]] _nearestTargets;
{ [[if]] ([[alive]] _x ) [[then]] { _validNearestTargets [[set]] [([[count]] _validNearestTargets), _x]; }; } [[forEach]] _nearestTargets;</code>
</code>
results in _validNearestTargets being filled with targets == alive .. (you could use other conditions there, of course!)
results in _validNearestTargets being filled with targets == alive .. (you could use other conditions there, of course!)
-- Vigilante
<br>


<dd class="notedate">Posted on 10. Aug. 2010
<dd class="notedate">Posted on 10. Aug. 2010
Line 75: Line 60:
<code>_objects = [[nearestObjects]] [_position, [], _radius];</code>
<code>_objects = [[nearestObjects]] [_position, [], _radius];</code>
Passing the array ["All"] is not the same and will only return objects that have some sort of class.
Passing the array ["All"] is not the same and will only return objects that have some sort of class.
<br>


<dd class="notedate">Posted on 11.09.2013
<dd class="notedate">Posted on 11.09.2013
Line 82: Line 65:
<dd class="note">If you want to detect nearby grenades for the position of a unit, for example, using 'nearestObjects' won't work. You have to use
<dd class="note">If you want to detect nearby grenades for the position of a unit, for example, using 'nearestObjects' won't work. You have to use
'nearObjects' instead.
'nearObjects' instead.
<code>[[count]] ([[nearestObjects]] [_unit, ["GrenadeHand"], 30]) // WON'T WORK</code>
<code>[[count]] ([[nearestObjects]] [_unit, ["GrenadeHand"], 30]) {{cc|WON'T WORK}}</code>
Won't ever return anything but 0.
Won't ever return anything but 0.
<code>[[count]] (_unit [[nearObjects]] ["GrenadeHand", 30]) // WORKS!</code>
<code>[[count]] (_unit [[nearObjects]] ["GrenadeHand", 30]) {{cc|WORKS!}}</code>
Will work.
Will work.


Line 90: Line 73:
<dt class="note">[[User:AgentRev01|AgentRev]]
<dt class="note">[[User:AgentRev01|AgentRev]]
<dd class="note">The distance from which an object is determined to be inside the radius is calculated from its model center (object modelToWorld [0,0,0]), and not the position returned by getPos/ATL/ASL. If an object is used as the origin from which to scan, distance is calculated from its model center as well.
<dd class="note">The distance from which an object is determined to be inside the radius is calculated from its model center (object modelToWorld [0,0,0]), and not the position returned by getPos/ATL/ASL. If an object is used as the origin from which to scan, distance is calculated from its model center as well.
<br>


<!-- Note Section END -->
<!-- Note Section END -->
Line 97: Line 79:
<h3 style="display:none">Bottom Section</h3>
<h3 style="display:none">Bottom Section</h3>


[[Category:Scripting Commands|NEARESTOBJECTS]]
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA|NEARESTOBJECTS]]
[[Category:Scripting Commands ArmA|{{uc:{{PAGENAME}}}}]]
[[Category:Command_Group:_Object_Information|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Command_Group:_Object_Information|{{uc:{{PAGENAME}}}}]]


<!-- CONTINUE Notes -->
<!-- CONTINUE Notes -->
Line 110: Line 92:
<dd class="note">
<dd class="note">
Return all trees in 100m radius around player:
Return all trees in 100m radius around player:
<code>trees <nowiki>=</nowiki> [];  
<code>[[private]] _trees {{=}} [];  
{
{
     [[if]] ([[str]] _x [[find]] ": t_" > -1) [[then]] {
     [[if]] ([[str]] _x [[find]] ": t_" > -1) [[then]] {
         trees [[pushBack]] _x;
         _trees [[pushBack]] _x;
     };
     };
} [[forEach]] [[nearestObjects]] <nowiki>[</nowiki>[[player]], [], 100];</code>  
} [[forEach]] [[nearestObjects]] [<nowiki/>[[player]], [], 100];</code>  
</dd>
</dd>
</dl>
<!-- DISCONTINUE Notes -->


<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on August 27, 2015 - 16:45 (UTC)</dd>
<dd class="notedate">Posted on August 27, 2015 - 16:45 (UTC)</dd>
<dt class="note">[[User:Tankbuster|Tankbuster]]</dt>
<dt class="note">[[User:Tankbuster|Tankbuster]]</dt>
Line 127: Line 105:
If you use "Man" as the class to look for, it will only find dismounted men. IE, men in vehicles will NOT be found.
If you use "Man" as the class to look for, it will only find dismounted men. IE, men in vehicles will NOT be found.
</dd>
</dd>
</dl>
<!-- DISCONTINUE Notes -->


<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on January 8, 2016 - 12:14 (UTC)</dd>
<dd class="notedate">Posted on January 8, 2016 - 12:14 (UTC)</dd>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
Line 137: Line 111:
The first call to this command can take significantly longer then consecutive calls. But even after the objects in given radius were cached, the sorting this command performs could be quite expensive. For example to sort ~7000 object it might take up to 100ms. For performance reasons you can use [[nearObjects]] instead, which is basically the same command but without added sorting.
The first call to this command can take significantly longer then consecutive calls. But even after the objects in given radius were cached, the sorting this command performs could be quite expensive. For example to sort ~7000 object it might take up to 100ms. For performance reasons you can use [[nearObjects]] instead, which is basically the same command but without added sorting.
</dd>
</dd>
</dl>
<!-- DISCONTINUE Notes -->


<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on March 2, 2016 - 23:09 (UTC)</dd>
<dd class="notedate">Posted on March 2, 2016 - 23:09 (UTC)</dd>
<dt class="note">[[User:Ceeeb|Ceeeb]]</dt>
<dt class="note">[[User:Ceeeb|Ceeeb]]</dt>
Line 147: Line 117:
In Arma 3, nearestObjects is partially broken and is unable to return nearby placed explosive charges or mines when searching by classnames. Use [[nearObjects]], [[nearestObject]] or [[allMines]] instead.<br>
In Arma 3, nearestObjects is partially broken and is unable to return nearby placed explosive charges or mines when searching by classnames. Use [[nearObjects]], [[nearestObject]] or [[allMines]] instead.<br>
Example of non-functional code:
Example of non-functional code:
<code>//always returns nothing, even if there are objects that should be returned
<code>{{cc|always returns nothing, even if there are objects that should be returned}}
nearestObjects [position player, ["APERSMine_Range_Ammo", "SatchelCharge_Remote_Ammo"], 10]</code>
nearestObjects [position player, ["APERSMine_Range_Ammo", "SatchelCharge_Remote_Ammo"], 10]</code>
</dd>
</dd>
</dl>
<!-- DISCONTINUE Notes -->


<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on October 31, 2016 - 00:32 (UTC)</dd>
<dd class="notedate">Posted on October 31, 2016 - 00:32 (UTC)</dd>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>
<dt class="note">[[User:Killzone Kid|Killzone Kid]]</dt>

Revision as of 22:55, 19 December 2019

-wrong parameter ("Arma") defined!-1.00
Hover & click on the images for description

Description

Description:
Returns a list of nearest objects of the given types to the given position or object, within the specified distance. If more than one object is found they will be ordered by proximity, the closest one will be first in the array. Alternatively, you can use nearObjects command, which doesn't sort results.

A list of ClassName types (e.g Tank) can be found in CfgVehicles.

This command only finds objects that are entities. If you are looking for non-entity objects, see nearObjects, nearestObject.
Groups:
Uncategorised

Syntax

Syntax:
nearestObjects [position, types, radius, 2Dmode]
Parameters:
[position, types, radius, 2Dmode]: Array
position: Object or Array in format PositionAGL or Position2D - where to find objects, center position.
types: Array - list of class name of the objects to search for. Use an empty array [] to search for all classes.
radius: Number - range from center position to search for objects.
Arma 3 logo black.png1.65 2Dmode (Optional, default false): Boolean - true for 2D distance, false for 3D distance Template:since
Return Value:
Array - array of objects

Examples

Example 1:
nearestObjects [player, ["Car", "Tank"], 200];
Example 2:
nearestObjects [player, ["house"], 200];
Example 3:
nearestObjects [[2716,2949,0], ["Car", "Truck"], 100];
Example 4:
Return every object in 50 metres radius around player:nearestObjects [player, [], 50]

Additional Information

See also:
nearestTerrainObjectsfindNearestEnemynearestBuildingnearestObjectnearObjectsnearestLocationnearEntitiesnearTargetsnearSuppliesnearestLocationWithDubbingnearObjectsReadynearRoads

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note

Notes

Posted on unknown
Vigilante
To get a list with alive targets for various situations use this construct: _nearestTargets = nearestObjects [_submunScanPos, ["VBS2_TANK","TANK"], _scanArea]; _validNearestTargets = []; { if (alive _x ) then { _validNearestTargets set [(count _validNearestTargets), _x]; }; } forEach _nearestTargets; results in _validNearestTargets being filled with targets == alive .. (you could use other conditions there, of course!)
Posted on 10. Aug. 2010
Rübe
Passing an empty array to define the types will also return objects with no class at all (such as trees, bushes, stones, ...). Example: _objects = nearestObjects [_position, [], _radius]; Passing the array ["All"] is not the same and will only return objects that have some sort of class.
Posted on 11.09.2013
Katulobotomia
If you want to detect nearby grenades for the position of a unit, for example, using 'nearestObjects' won't work. You have to use 'nearObjects' instead. count (nearestObjects [_unit, ["GrenadeHand"], 30]) // WON'T WORK Won't ever return anything but 0. count (_unit nearObjects ["GrenadeHand", 30]) // WORKS! Will work.
Posted on March 22, 2014
AgentRev
The distance from which an object is determined to be inside the radius is calculated from its model center (object modelToWorld [0,0,0]), and not the position returned by getPos/ATL/ASL. If an object is used as the origin from which to scan, distance is calculated from its model center as well.

Bottom Section

Posted on October 26, 2014 - 15:15 (UTC)
Killzone Kid
Return all trees in 100m radius around player: private _trees = []; { if (str _x find ": t_" > -1) then { _trees pushBack _x; }; } forEach nearestObjects [player, [], 100];
Posted on August 27, 2015 - 16:45 (UTC)
Tankbuster
If you use "Man" as the class to look for, it will only find dismounted men. IE, men in vehicles will NOT be found.
Posted on January 8, 2016 - 12:14 (UTC)
Killzone Kid
The first call to this command can take significantly longer then consecutive calls. But even after the objects in given radius were cached, the sorting this command performs could be quite expensive. For example to sort ~7000 object it might take up to 100ms. For performance reasons you can use nearObjects instead, which is basically the same command but without added sorting.
Posted on March 2, 2016 - 23:09 (UTC)
Ceeeb
In Arma 3, nearestObjects is partially broken and is unable to return nearby placed explosive charges or mines when searching by classnames. Use nearObjects, nearestObject or allMines instead.
Example of non-functional code: // always returns nothing, even if there are objects that should be returned nearestObjects [position player, ["APERSMine_Range_Ammo", "SatchelCharge_Remote_Ammo"], 10]
Posted on October 31, 2016 - 00:32 (UTC)
Killzone Kid
Since Arma 3 v1.65.138818 the default sorting is done according to 3D distance not distance2D as before. This is an attempt to correct some very old bug in implementation.