Position
Introduction
Positions in Arma could be either 2D, in which case it is in format [x,y], where x is the coordinate on the South – North axis and y is the coordinate on West – East axis, or 3D, in which case it is in format [x,y,z], where z is the height. The height relative to exactly what differs depending on the format of 3D position used.
Formats
- There are a number of formats available in the game:
- ASL – Presumably “At/Above Sea Level”
- ATL – Presumably “At/Above Terrain Level”
- ASLW – Presumably “At/Above Sea Level inc. Waves”
- AGL – Presumably “At/Above Generic/Ground Level”
- AGLS – Presumably “At/Above Generic/Ground Level inc. Surfaces”
- World – Raw world coordinate system
- Relative – Position relative to an object
- Config – Position used in configs
- The following diagram illustrates some of the most used formats:
PositionASL
- z is measured from the sea level which is constant across the map.
- Related commands:
- getPosASL, setPosASL, getPosASLVisual, visiblePositionASL, ASLToATL, ATLToASL, AGLToASL, ASLToAGL, eyePos, aimPos, getTerrainHeightASL, lineIntersects, lineIntersectsWith, lineIntersectsObjs, lineIntersectsSurfaces, terrainIntersectASL, playSound3D, setDefaultCamera
PositionASLW
- z is measured from the surface of the sea that could be higher or lower than sea level due to waves.
- Related commands:
PositionATL
- z is measured from the terrain level which varies across the map.
- Related commands:
PositionAGL
- z is the same as in PositionASLW when over sea and is the same as in PositionATL when over land. Most commands either take or return PositionAGL.
- Related commands:
- modelToWorld, worldToModel, modelToWorldVisual, worldToModelVisual, positionCameraToWorld, intersect, terrainIntersect, isOnRoad, drawIcon3D, drawLine3D, distance, moveTo, doMove, move, setDestination, buildingPos, screenToWorld, worldToScreen, AGLToASL, ASLToAGL
PositionAGLS
- Over land, z is measured as height over terrain level minus the height of surface over terrain level underneath. If such surface exists and is counted in, the resulting z becomes 0. The following diagram illustrates how z is obtained for a soldier standing on a rock:
- Over sea it gets even more complicated as instead of PositionATL, PositionASLW is used minus the offset for the surface height, presumably over waves too, as z seems static. As there is currently no way to obtain H of the surface, it becomes impossible to convert given PositionAGLS into other formats, unlike with other position formats.
- Related commands:
setPosAGLS
- The function below will place passed object onto walkable surface, if there is one, otherwise on the ground. If only x and y of the position are supplied, the object will be placed on surface, if z is supplied, it will be treated as offset from the surface level.
KK_fnc_setPosAGLS = { params ["_obj", "_pos", "_offset"]; _offset = _pos select 2; if (isNil "_offset") then {_offset = 0}; _pos set [2, worldSize]; _obj setPosASL _pos; _pos set [2, vectorMagnitude (_pos vectorDiff getPosVisual _obj) + _offset]; _obj setPosASL _pos; }; //---This will place player exactly on top deck of Cargo HQ on Stratis: [player, [2437.18,5693.47,0]] call KK_fnc_setPosAGLS; //---This will place player 2m above top deck of Cargo HQ on Stratis: [player, [2437.18,5693.47,2]] call KK_fnc_setPosAGLS; //---This will place player 2m below top deck of Cargo HQ on Stratis: [player, [2437.18,5693.47,-2]] call KK_fnc_setPosAGLS;
- Alternatively, setVehiclePosition command can be used. It will put object onto nearest surface.
//---This will place player inside Cargo HQ on Stratis: player setVehiclePosition [[2437.18,5693.47,0], [], 0, "CAN_COLLIDE"]; //---This will place player on top deck of Cargo HQ on Stratis: player setVehiclePosition [[2437.18,5693.47,100], [], 0, "CAN_COLLIDE"];
PositionWorld
- Similar to PositionASL, however z is measured from the sea level to the the model centre [0,0,0] of an object, rather than transformed boundingCenter or land contact vertices.
_identical = getPosWorld _obj isEqualTo AGLtoASL (_obj modelToWorld [0,0,0]); //should be true
- Related commands:
PositionRelative
- Relative position is normally an [x,y,z] offset from the model centre.
- Related commands:
- positionCameraToWorld, selectionPosition, attachTo, modelToWorld, worldToModel, modelToWorldVisual, worldToModelVisual, camPrepareRelPos, camSetRelPos
PositionConfig
- The format used in configs, such as mission.sqm, is [x,z,y], where z and y are swapped around. One other command that uses this format is positionCameraToWorld. z in configs is measured from the sea level.