// by commy2
#include "script_component.hpp"

private ["_vehicle", "_turret", "_weapons"];

_vehicle = _this select 0;

_turret = [_vehicle] call EFUNC(common,getTurretCommander);

_weapons = _vehicle weaponsTurret _turret;

if (
    count _weapons > 1
    || {count _weapons > 0 && {!(_weapons select 0 in ["SmokeLauncher", "BWA3_SmokeLauncher"])}}  // @todo somebody might use custom smoke launcher weapons aswell, maybe ...
) then {
    //This doesn't work reliably for vehilces with additional weapons for the commander. Select smoke launcher instead.

    private "_index";

    // avoid infinite loop
    if !("SmokeLauncher" in _weapons) exitWith {};

    _index = 0;
    while {
        _vehicle currentWeaponTurret _turret != "SmokeLauncher"
    } do {
        [commander _vehicle, _vehicle, _index] call FUNC(selectWeaponVehicle);
        _index = _index + 1;
    };

} else {
    // fire away!

    private "_logic";

    _logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"];
    _logic action ["useWeapon", _vehicle, commander _vehicle, 0];
    deleteVehicle _logic;
};