User Tools

Site Tools


4rpl:commands:getunits

This is an old revision of the document!


Index

:!: Available in version 1.3 and later.

GetUnits

GetUnits(<-unitType <-startPos <-range <-isSquare <-is3D <-requireLOS <-enemyState <-builtState <-imperviousState) ->units

Description

Returns list of units in range of a given position. The returned list is sorted so that the first item in the list is the closest.
Note: The only difference between this API and GetUnitsInRange is this API takes a 'unitType' parameter. By specifying a unitType, less units are searched over resulting in potentially higher performance.

  • unitType: a string indicating the unit type1) to return. If empty string (“”), then all units are searched.
  • startPos: a V3 (vector3) indicating the point to search outwards from.
  • range: a floating point number that is the maximum distance from startPos.
  • isSquare: a boolean. It means to check in a square rather than a circle around startPos. For 3D checks, the vertical displacement is also checked (so the range is effectivly a cube rather than a sphere).
  • is3D: a boolean. It determines if a true 3d distance is used for range, or if only the X and Z components (2D) distance calculation is used.
  • requireLOS: a boolean indicating if terrain line of sight is required.
  • enemyState: an int (either 0,1,2). 0 = ignore enemy status. 1 = Only find units that are enemies. 2 = Only find units that are not enemies.
  • builtState: an int (either 0,1,2). 0 = ignore built state. 1 = Only find units that are built. 2 = Only find units that are not built.
  • imperviousState: an int (either 0,1,2). 0 = ignore impervious state. 1 = Only find units that are not impervious. 2 = Only find units that are impervious. Things like ore deposits are impervious.

Examples

"" ->unitType
10 ->cellX
15 ->cellZ
20 ->range
false ->isSquare
true ->is3D
true ->requireLOS
2 ->enemyState
1 ->builtState
1 ->imperviousState
GetTerrain(<-cellX <-cellZ) 1 + ->terrain
 
GetUnits(<-unitType V3(<-cellX <-terrain <-cellZ) <-range <-isSquare <-is3D <-requireLOS <-enemyState <-builtState <-imperviousState) ->units

Usage Notes

GetUnits takes a unit type and from that it will internally find all units of that type. It then enumerates those units and checks if they are in range and if they match the state filters. So GetUnits can be used to find any unit (air, map, or neither). GetUnitsInRange doesn't take a unit type. It just searches in a range around the specified coordinates. It only finds units that leave a footprint on the map. So it won't work for flying units (or land based units that are moving).

See Also

1)
Unit Type can also be the UID of a CMOD
4rpl/commands/getunits.1631556945.txt.gz · Last modified: 2021/09/13 14:15 by Karsten75