Arma 3 Scripting

Command in Object Manipulation

selectionVectorDirAndUp

Also available as Markdown and JSON, or read the original wiki page.

Description

Searches for selection in the object model's LOD level, and returns the Direction and Up vectors in model space.

Syntax

object selectionVectorDirAndUp [selectionName, LOD]

Parameters:

Returns: Array with [vectorDir, vectorUp] - vectors are in model space

Examples

Example 1

vehicle player selectionVectorDirAndUp ["drivewheel_axis", "FireGeometry"] params ["_axisVectorDir", "_axisVectorUp"];

Example 2

Get the player's barrel end (_p1 being muzzle end's ASL position):

onEachFrame {
    private _weapon = currentWeapon player;
    if (_weapon == "") exitWith {};

    // update weapon info upon weapon switch
    if (_weapon != player getVariable ["last_weapon", "?"]) then
    {
        private _cfg = configFile >> "CfgWeapons" >> _weapon;
        private _model = getText(_cfg >> "model");
        private _simpleObject = createSimpleObject [_model, [0,0,0], true];
        private _offset = _simpleObject selectionPosition [getText (_cfg >> "muzzlePos"), "memory"];
        _offset = _offset apply { [_x] };
        deleteVehicle _simpleObject;
        player setVariable ["offset", _offset];
        player setVariable ["last_weapon", _weapon];
        player setVariable ["proxy",
            [
                "proxy:\a3\characters_f\proxies\pistol.001",
                "proxy:\a3\characters_f\proxies\weapon.001",
                "proxy:\a3\characters_f\proxies\launcher.001",
                "proxy:\a3\characters_f\proxies\binoculars.001"
            ] select (([1, 4, 4096] find getNumber (_cfg >> "type")) + 1)
        ];
    };

    _offset = player getVariable ["offset", []];
    private _proxy = player getVariable ["proxy", ""];
    // using LOD resolution 1 (and lod index 0) - this is not always reliable
    // you should manually check allLODs and find the most suitable LOD (smallest res LOD usually has the best accuracy, but it might be slow too)
    player selectionVectorDirAndUp [_proxy, 1] params ["_vy", "_vz"];
    private _pos = selectionPosition [player, _proxy, 0];
    private _vx = _vy vectorCrossProduct _vz;

    private _mat = matrixTranspose [_vx, _vy, _vz];
    _pos = _pos vectorAdd flatten (_mat matrixMultiply _offset);

    private _p1 = player modelToWorldVisualWorld _pos;
    private _p2 = _p1 vectorAdd (player vectorModelToWorldVisual (_vx vectorMultiply -1000));
    drawLine3D [ASLToAGL _p1, ASLToAGL _p2, [1,0,0,1]];
};

See also

selectionPosition · selectionNames · allLODs