Untitled

 avatar
unknown
plain_text
a month ago
3.1 kB
3
Indexable
params ["_units", "_numberOfSteps", "_lineSpread"];

fn_pointAtAzimuthAndDistance = {
    params [
        "_startPos", 
        "_distance", 
        "_azimuth"
    ];

    if(_azimuth > 360) then {
        _azimuth = _azimuth - 360;
    };

    // Convert azimuth to radians
    

    _xPos = _startPos select 0;
    _yPos = _startPos select 1;
    _zPos = _startPos select 2;

    _sinAzimuth = sin _azimuth;
    _cosAzimuth = cos _azimuth;
    
    // Calculate the new position
    _newPos = [
        _xPos + (_sinAzimuth * _distance),  
        _ypos + (_cosAzimuth * _distance),
        _zPos
    ];
    
    _newPos;
};


if(count _units == 0) exitWith{systemChat "No Units Selected"};

_createMarkerTest = {
    params ["_markerPos"];
    systemChat format["_markerPos: %1", _markerPos];
};


_point1 = TL_artyPoint1;
_point2 = TL_artyPoint2;

systemChat format["units: %1, _numberOfSteps: %2, _lineSpread: %3", _units, _numberOfSteps, _lineSpread];
systemChat format["point1: %1, point2: %2", _point1, _point2];

_numberOfUnits = count _units;
_distanceBetweenPoints = _point1 distance _point2;
_azimuthBetweenTwoPoints = _point1 getDir _point2;
_stepDistance = _distanceBetweenPoints / parseNumber (_numberOfSteps);
_lineSpreadDistance = parseNumber (_lineSpread) / _numberOfUnits;


systemChat format["_distanceBetweenPoints: %1, _azimuthBetweenTwoPoints:%2", _distanceBetweenPoints, _azimuthBetweenTwoPoints];

// systemChat format["linearDistance: %1, _numberOfSteps: %2, _azimuth: %3", _distanceBetweenPoints, _numberOfSteps, _azimuthBetweenTwoPoints];

_firePlan = [];
for "_i" from 0 to ((parseNumber (_numberOfSteps)) - 1) do {
    _lineBasePoint = [_point1, (_stepDistance * _i), _azimuthBetweenTwoPoints] call fn_pointAtAzimuthAndDistance;
    _leftPoint = [_lineBasePoint, (parseNumber(_lineSpread) / 2), (_azimuthBetweenTwoPoints - 90)] call fn_pointAtAzimuthAndDistance;

    _orthogonalPoints = [];
    for "_j" from 0 to (_numberOfUnits - 1) do {
        _offset = (_j * _lineSpreadDistance);
        _rightAzimuth = (_azimuthBetweenTwoPoints + 90);
        _newPoint = [_leftPoint, _offset, _rightAzimuth] call fn_pointAtAzimuthAndDistance;
        systemChat format["_thisPoint: %1", _newPoint];
        _orthogonalPoints set [_j, _newPoint];
        _firePlan set [_i, _orthogonalPoints];
    };


};

systemChat format ["_firePlan: %1", _firePlan];



for "_wave" from 0 to ((count _firePlan) - 1) do {
    _rowPoints = _firePlan select _wave;

    for "_unitIndex" from 0 to ((count _units) - 1) do {
        _impactPoint = _rowPoints select _unitIndex;
        _actualUnit = _units select _unitIndex;
        _actualUnit setVehicleAmmo 1;

        _ammo = getArtilleryAmmo [_actualUnit];
		_firstMagazine = _ammo select 0;

        if (_impactPoint inRangeOfArtillery [[_actualUnit], _firstMagazine]) then {
            _actualUnit commandArtilleryFire [_impactPoint, _firstMagazine, 1];    
        };
    };

    sleep 3;
}
Editor is loading...
Leave a Comment