Position: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(→‎PositionAGL: related commands)
(→‎PositionAGLS: setPosAGLS)
Line 63: Line 63:


:[[position]], [[visiblePosition]], [[getPos]], [[getPosVisual]]
:[[position]], [[visiblePosition]], [[getPos]], [[getPosVisual]]
===setPosAGLS===
<blockquote>
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.
<code>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:
<nowiki>[</nowiki>[[player]], [2437.18,5693.47,0]] [[call]] KK_fnc_setPosAGLS;
//---This will place player 2m above top deck of Cargo HQ on Stratis:
<nowiki>[</nowiki>[[player]], [2437.18,5693.47,2]] [[call]] KK_fnc_setPosAGLS;
//---This will place player 2m below top deck of Cargo HQ on Stratis:
<nowiki>[</nowiki>[[player]], [2437.18,5693.47,-2]] [[call]] KK_fnc_setPosAGLS;</code>
<br>
Alternatively, [[setVehiclePosition]] command can be used. It will put object onto nearest surface.
<code>//---This will place player inside Cargo HQ on Stratis:
[[player]] [[setVehiclePosition]] <nowiki>[</nowiki>[2437.18,5693.47,0], [], 0, "CAN_COLLIDE"]
//---This will place player on top deck of Cargo HQ on Stratis:
[[player]] [[setVehiclePosition]] <nowiki>[</nowiki>[2437.18,5693.47,100], [], 0, "CAN_COLLIDE"]</code>
</blockquote>


==PositionWorld==
==PositionWorld==

Revision as of 13:38, 22 August 2015

Introduction

Positions in Arma could be either 2D, in which case it is in format [x,y], where x is the coordinate on the SouthNorth axis and y is the coordinate on WestEast 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:
position.jpg

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:
getPosASLW, setPosASLW

PositionATL

z is measured from the terrain level which varies across the map.
Related commands:
getPosATL, setPosATL, getPosATLVisual, ASLToATL, ATLToASL

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:
z.jpg
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:
position, visiblePosition, getPos, getPosVisual

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.

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.
Related commands:
getPosWorld, setPosWorld, mapCenterOnCamera

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.