Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cargo - paradrop fixes #8203

Merged
merged 10 commits into from
May 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions addons/cargo/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@

[[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured);

if (_unloaded) then {
// Invoke listenable event
["ace_cargoUnloaded", [_item, _vehicle]] call CBA_fnc_globalEvent;
};

// TOOO maybe drag/carry the unloaded item?
}] call CBA_fnc_addEventHandler;
Expand Down
47 changes: 23 additions & 24 deletions addons/cargo/functions/fnc_paradropItem.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -38,75 +38,74 @@ TRACE_1("",_distBehind);
private _posBehindVehicleAGL = _vehicle modelToWorld [0, _distBehind, -2];


private _itemObject = if (_item isEqualType objNull) then {
detach _item;
private _object = _item;
if (_item isEqualType objNull) then {
LupusTheCanine marked this conversation as resolved.
Show resolved Hide resolved
detach _object;
// hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly
// do both on server to ensure they are executed in the correct order
[QGVAR(serverUnload), [_item, _posBehindVehicleAGL]] call CBA_fnc_serverEvent;
_item
[QGVAR(serverUnload), [_object, _posBehindVehicleAGL]] call CBA_fnc_serverEvent;
} else {
private _newItem = createVehicle [_item, _posBehindVehicleAGL, [], 0, "NONE"];
_newItem setPosASL (AGLtoASL _posBehindVehicleAGL);
_newItem
_object = createVehicle [_item, _posBehindVehicleAGL, [], 0, "NONE"];
_object setPosASL (AGLtoASL _posBehindVehicleAGL);
};

_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply -5));
_object setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply -5));

// open parachute and ir light effect
[{
params ["_item"];
params ["_object"];

if (isNull _item || {getPos _item select 2 < 1}) exitWith {};
if (isNull _object || {getPos _object select 2 < 1}) exitWith {};

private _parachute = createVehicle ["B_Parachute_02_F", [0,0,0], [], 0, "CAN_COLLIDE"];

// cannot use setPos on parachutes without them closing down
_parachute attachTo [_item, [0,0,0]];
_parachute attachTo [_object, [0,0,0]];
detach _parachute;

private _velocity = velocity _item;
private _velocity = velocity _object;

_item attachTo [_parachute, [0,0,1]];
_object attachTo [_parachute, [0,0,1]];
_parachute setVelocity _velocity;

if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then {
if ((GVAR(disableParadropEffectsClasstypes) findIf {_object isKindOf _x}) == -1) then {
private _light = "Chemlight_yellow" createVehicle [0,0,0];
_light attachTo [_item, [0,0,0]];
_light attachTo [_object, [0,0,0]];
};

}, [_itemObject], 0.7] call CBA_fnc_waitAndExecute;
}, [_object], 0.7] call CBA_fnc_waitAndExecute;

// smoke effect when crate landed
[{
(_this select 0) params ["_item"];
(_this select 0) params ["_object"];

if (isNull _item) exitWith {
if (isNull _object) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
};

if (getPos _item select 2 < 1) then {
if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then {
if (getPos _object select 2 < 1) then {
if ((GVAR(disableParadropEffectsClasstypes) findIf {_object isKindOf _x}) == -1) then {
private _smoke = "SmokeshellYellow" createVehicle [0,0,0];
_smoke attachTo [_item, [0,0,0]];
_smoke attachTo [_object, [0,0,0]];
};

[_this select 1] call CBA_fnc_removePerFrameHandler;
};

LupusTheCanine marked this conversation as resolved.
Show resolved Hide resolved
}, 1, [_itemObject]] call CBA_fnc_addPerFrameHandler;
}, 1, [_object]] call CBA_fnc_addPerFrameHandler;

if (_showHint) then {
[
[
LSTRING(UnloadedItem),
getText (configOf _itemObject >> "displayName"),
getText (configOf _object >> "displayName"),
getText (configOf _vehicle >> "displayName")
],
3
] call EFUNC(common,displayTextStructured);
};

// Invoke listenable event
["ace_cargoUnloaded", [_item, _vehicle, "paradrop"]] call CBA_fnc_globalEvent;
["ace_cargoUnloaded", [_object, _vehicle, "paradrop"]] call CBA_fnc_globalEvent;

true
14 changes: 8 additions & 6 deletions addons/cargo/functions/fnc_unloadItem.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,16 @@ private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
private _itemSize = [_item] call FUNC(getSizeItem);
_vehicle setVariable [QGVAR(space), (_space + _itemSize), true];

if (_item isEqualType objNull) then {
detach _item;
private _object = _item;
if (_object isEqualType objNull) then {
detach _object;
// hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly
// do both on server to ensure they are executed in the correct order
[QGVAR(serverUnload), [_item, _emptyPosAGL]] call CBA_fnc_serverEvent;
[QGVAR(serverUnload), [_object, _emptyPosAGL]] call CBA_fnc_serverEvent;
} else {
LupusTheCanine marked this conversation as resolved.
Show resolved Hide resolved
private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, "NONE"];
_newItem setPosASL (AGLtoASL _emptyPosAGL);
_object = createVehicle [_item, _emptyPosAGL, [], 0, "NONE"];
_object setPosASL (AGLtoASL _emptyPosAGL);
};

// Invoke listenable event
["ace_cargoUnloaded", [_object, _vehicle, "unload"]] call CBA_fnc_globalEvent;
true