/*
 * Author: commy2 and CAA-Picard
 *
 * Calculate the distance to the first intersection of a line
 *
 * Argument:
 * 0: Pos ASL of origin (Array)
 * 1: Direction (Array)
 * 2: Max distance to search (Number)
 *
 * Return value:
 * Distance to intersection (+- 0.1 m)
 */
#include "script_component.hpp"

EXPLODE_3_PVT(_this,_posASL,_direction,_maxDistance);

private ["_distance", "_interval", "_line", "_intersections"];

_distance = _maxDistance;
_interval = _distance;
_line = [_posASL, []];

while {
    _interval > 0.1
} do {
    _interval = _interval / 2;

    _line set [1, _posASL vectorAdd (_direction vectorMultiply _distance)];

    _intersections = {
        _x isKindOf "Static" || {_x isKindOf "AllVehicles"}
    } count (lineIntersectsWith _line);

    _distance = _distance + ([1, -1] select (_intersections > 0 || {terrainIntersectASL _line})) * _interval;

    if (_distance > _maxDistance) exitWith {_distance = 999};
};

_distance