mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
87 lines
2.7 KiB
Plaintext
87 lines
2.7 KiB
Plaintext
|
#include "..\script_component.hpp"
|
||
|
/*
|
||
|
* Author: Garth 'L-H' de Wet, Ruthberg, commy2, Smith
|
||
|
* Starts the deploy process for unloading an object.
|
||
|
*
|
||
|
* Arguments:
|
||
|
* 0: Unit deploying <OBJECT>
|
||
|
*
|
||
|
* Return Value:
|
||
|
* None
|
||
|
*
|
||
|
* Example:
|
||
|
* player call ace_cargo_fnc_startDeploy
|
||
|
*
|
||
|
* Public: No
|
||
|
*/
|
||
|
|
||
|
// Deny creating preview item as it will destroy player vehicle instantly by collision
|
||
|
if (GVAR(interactionParadrop)) exitWith {};
|
||
|
|
||
|
params ["_unit"];
|
||
|
|
||
|
// Don't allow deploying if already deploying
|
||
|
if (_unit getVariable [QGVAR(isDeploying), false]) exitWith {};
|
||
|
|
||
|
// This can be an object or a classname string
|
||
|
private _item = call FUNC(getSelectedItem);
|
||
|
|
||
|
if (isNil "_item") exitWith {};
|
||
|
|
||
|
// Close opened cargo menu
|
||
|
closeDialog 0;
|
||
|
|
||
|
GVAR(selectedItem) = _item;
|
||
|
|
||
|
private _classname = _item;
|
||
|
|
||
|
if (_classname isEqualType objNull) then {
|
||
|
_classname = typeOf _classname;
|
||
|
};
|
||
|
|
||
|
// Prevent the placing unit from running
|
||
|
[_unit, "forceWalk", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
|
||
|
[_unit, "blockThrow", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
|
||
|
|
||
|
// Create a local preview object
|
||
|
private _itemPreviewObject = createVehicleLocal [_classname, [0, 0, 0], [], 0, "CAN_COLLIDE"];
|
||
|
|
||
|
GVAR(itemPreviewObject) = _itemPreviewObject;
|
||
|
|
||
|
// Prevent collisions with object
|
||
|
_itemPreviewObject disableCollisionWith _unit;
|
||
|
_itemPreviewObject enableSimulation false;
|
||
|
_itemPreviewObject setMass 1e-12;
|
||
|
|
||
|
// Detect radius of zone where collision can damage the player
|
||
|
private _itemPreviewObjectRadius = 1 max ((boundingBoxReal [_itemPreviewObject, "FireGeometry"]) select 2);
|
||
|
|
||
|
// Add height offset of model
|
||
|
private _offset = ((_itemPreviewObject modelToWorldVisual [0, 0, 0]) select 2) - ((_unit modelToWorldVisual [0, 0, 0]) select 2) + 1;
|
||
|
|
||
|
// Attach object
|
||
|
_itemPreviewObject attachTo [_unit, [0, 1.5 * _itemPreviewObjectRadius, _offset]];
|
||
|
|
||
|
// PFH that runs while the deployment is in progress
|
||
|
GVAR(deployPFH) = [{
|
||
|
(_this select 0) params ["_unit", "_vehicle", "_item", "_itemPreviewObject"];
|
||
|
|
||
|
if !(
|
||
|
!isNull _itemPreviewObject &&
|
||
|
{[_item, _vehicle, _unit, false, true] call FUNC(canUnloadItem)} // don't check for a suitable unloading position when deploying
|
||
|
) exitWith {
|
||
|
_unit call FUNC(deployCancel);
|
||
|
};
|
||
|
}, 0.5, [_unit, GVAR(interactionVehicle), _item, _itemPreviewObject]] call CBA_fnc_addPerFrameHandler;
|
||
|
|
||
|
// Add mouse button action and hint
|
||
|
[LLSTRING(unloadObject), localize "STR_DISP_CANCEL", LLSTRING(scrollAction)] call EFUNC(interaction,showMouseHint);
|
||
|
|
||
|
_unit setVariable [QGVAR(deploy), [
|
||
|
_unit, "DefaultAction",
|
||
|
{GVAR(deployPFH) != -1},
|
||
|
{[_this select 0] call FUNC(deployConfirm)}
|
||
|
] call EFUNC(common,addActionEventHandler)];
|
||
|
|
||
|
_unit setVariable [QGVAR(isDeploying), true, true];
|