mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Cargo - Add alternative unloading item from vehicle cargo (#8827)
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: LinkIsGrim <salluci.lovi@gmail.com> Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com>
This commit is contained in:
86
addons/cargo/functions/fnc_startDeploy.sqf
Normal file
86
addons/cargo/functions/fnc_startDeploy.sqf
Normal file
@ -0,0 +1,86 @@
|
||||
#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];
|
Reference in New Issue
Block a user