#include "script_component.hpp" /* * Author: commy2, Malbryn * Drop a dragged object. * * Arguments: * 0: Unit that drags the other object * 1: Dragged object to drop * * Return Value: * None * * Example: * [player, cursorTarget] call ace_dragging_fnc_dropObject; * * Public: No */ params ["_unit", "_target"]; TRACE_2("params",_unit,_target); // remove drop action [QGVAR(releaseActionID), "keydown"] call CBA_fnc_removeKeyHandler; // stop blocking if !(GVAR(dragAndFire)) then { [_unit, "DefaultAction", _unit getVariable [QGVAR(blockFire), -1]] call EFUNC(common,removeActionEventHandler); }; private _inBuilding = [_unit] call FUNC(isObjectOnObject); if !(_unit getVariable ["ACE_isUnconscious", false]) then { // play release animation [_unit, "released"] call EFUNC(common,doGesture); }; // prevent collision damage [QEGVAR(common,fixCollision), _unit] call CBA_fnc_localEvent; [QEGVAR(common,fixCollision), _target, _target] call CBA_fnc_targetEvent; // release object detach _target; if (_target isKindOf "CAManBase") then { if (_target getVariable ["ACE_isUnconscious", false]) then { [_target, "unconscious", 2, true] call EFUNC(common,doAnimation); } else { [_target, "", 2, true] call EFUNC(common,doAnimation); //@todo "AinjPpneMrunSnonWnonDb_release" seems to fall back to unconsciousness anim. }; }; _unit removeWeapon "ACE_FakePrimaryWeapon"; [_unit, "blockThrow", "ACE_dragging", false] call EFUNC(common,statusEffect_set); // prevent object from flipping inside buildings if (_inBuilding) then { _target setPosASL (getPosASL _target vectorAdd [0, 0, 0.05]); TRACE_2("setPos",getPosASL _unit,getPosASL _target); }; // hide mouse hint [] call EFUNC(interaction,hideMouseHint); _unit setVariable [QGVAR(isDragging), false, true]; _unit setVariable [QGVAR(draggedObject), objNull, true]; // make object accessible for other units [objNull, _target, true] call EFUNC(common,claim); if !(_target isKindOf "CAManBase") then { [QEGVAR(common,fixPosition), _target, _target] call CBA_fnc_targetEvent; [QEGVAR(common,fixFloating), _target, _target] call CBA_fnc_targetEvent; }; if (_unit getVariable ["ACE_isUnconscious", false]) then { [_unit, "unconscious", 2, true] call EFUNC(common,doAnimation); }; // recreate UAV crew if (_target getVariable [QGVAR(isUAV), false]) then { createVehicleCrew _target; }; // fixes not being able to move when in combat pace [_unit, "forceWalk", "ACE_dragging", false] call EFUNC(common,statusEffect_set); // reset mass private _mass = _target getVariable [QGVAR(originalMass), 0]; if (_mass != 0) then { [QEGVAR(common,setMass), [_target, _mass]] call CBA_fnc_globalEvent; // force global sync };