Position: Difference between revisions
Killzone Kid (talk | contribs) m (→PositionWorld) |
Killzone Kid (talk | contribs) m (→setPosAGLS) |
||
Line 65: | Line 65: | ||
===setPosAGLS=== | ===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. | 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. | ||
<blockquote> | |||
<code>KK_fnc_setPosAGLS = { | <code>KK_fnc_setPosAGLS = { | ||
[[params]] ["_obj", "_pos", "_offset"]; | [[params]] ["_obj", "_pos", "_offset"]; | ||
Line 85: | Line 84: | ||
//---This will place player 2m below top deck of Cargo HQ on Stratis: | //---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> | <nowiki>[</nowiki>[[player]], [2437.18,5693.47,-2]] [[call]] KK_fnc_setPosAGLS;</code> | ||
< | </blockquote> | ||
Alternatively, [[setVehiclePosition]] command can be used. It will put object onto nearest surface. | Alternatively, [[setVehiclePosition]] command can be used. It will put object onto nearest surface. | ||
<blockquote> | |||
<code>//---This will place player inside Cargo HQ on Stratis: | <code>//---This will place player inside Cargo HQ on Stratis: | ||
[[player]] [[setVehiclePosition]] <nowiki>[</nowiki>[2437.18,5693.47,0], [], 0, "CAN_COLLIDE"]; | [[player]] [[setVehiclePosition]] <nowiki>[</nowiki>[2437.18,5693.47,0], [], 0, "CAN_COLLIDE"]; |
Revision as of 14:05, 14 February 2016
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.