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

Weapon Select - Use selectThrowable command #9488

Merged
merged 6 commits into from
Oct 15, 2024
Merged
Changes from 5 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
34 changes: 5 additions & 29 deletions addons/weaponselect/functions/fnc_selectNextGrenade.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,10 @@ if (_currentGrenade isEqualTo []) then {

_currentGrenade = _currentGrenade select 0;

// get available magazines for that unit
private _magazines = magazines _unit;
private _grenadeType = [GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type;

private _grenades = [];

{
if (_x in _magazines) then {
_grenades pushBack _x;
};
} forEach ([GVAR(GrenadesAll), GVAR(GrenadesFrag), GVAR(GrenadesNonFrag)] select _type);
// This is faster than checking magazines
private _grenades = (throwables _unit) apply {_x select 0} select {_x in _grenadeType};

// abort if no grenades are available
if (_grenades isEqualTo []) exitWith {false};
Expand All @@ -52,24 +46,6 @@ if (_nextGrenadeIndex >= count _grenades) then {

private _nextGrenade = _grenades select _nextGrenadeIndex;

// abort if the same grenade would be selected
if (_currentGrenade == _nextGrenade) exitWith {false};

// current best method to select a grenade: remove all grenades except the one you want to select, then add them back
private _uniformGrenades = uniformItems _unit select {_x in GVAR(GrenadesAll) && {_x != _nextGrenade}};
private _vestGrenades = vestItems _unit select {_x in GVAR(GrenadesAll) && {_x != _nextGrenade}};
private _backpackGrenades = backpackItems _unit select {_x in GVAR(GrenadesAll) && {_x != _nextGrenade}};

// remove all grenades except those we are switching to --> this breaks the selector
{_unit removeItemFromUniform _x} forEach _uniformGrenades;
{_unit removeItemFromVest _x} forEach _vestGrenades;
{_unit removeItemFromBackpack _x} forEach _backpackGrenades;

// readd grenades
{_unit addItemToUniform _x} forEach _uniformGrenades;
{_unit addItemToVest _x} forEach _vestGrenades;
{_unit addItemToBackpack _x} forEach _backpackGrenades;

[_nextGrenade, {_x == _nextGrenade} count _magazines] call FUNC(displayGrenadeTypeAndNumber);
[_nextGrenade, {_x == _nextGrenade} count (magazines _unit)] call FUNC(displayGrenadeTypeAndNumber);
johnb432 marked this conversation as resolved.
Show resolved Hide resolved

true
_unit selectThrowable _nextGrenade // return