Replace place list menu by dynamically created actions

This commit is contained in:
Nicolás Badano 2015-03-19 13:31:45 -03:00
parent acd3ca0d56
commit 386fee4694
4 changed files with 58 additions and 57 deletions

View File

@ -26,7 +26,8 @@ class CfgVehicles {
class ACE_Place {
displayName = $STR_ACE_Explosives_Place;
condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)});
statement = QUOTE([_player] call FUNC(openPlaceUI););
statement = "";
insertChildren = QUOTE([_player] call FUNC(addExplosiveActions););
exceptions[] = {"ACE_Interaction_isNotSwimming"};
showDisabled = 1;
icon = PATHTOF(UI\Place_Explosive_ca.paa);

View File

@ -19,6 +19,7 @@ ADDON = false;
PREP(addCellphoneIED);
PREP(addClacker);
PREP(addExplosiveActions);
PREP(addToSpeedDial);
PREP(canDefuse);
PREP(canDetonate);
@ -37,7 +38,6 @@ PREP(getPlacedExplosives);
PREP(getSpeedDialExplosive);
PREP(openDetonateUI);
PREP(openPlaceUI);
PREP(openTransmitterUI);
PREP(openTimerSetUI);
PREP(openTriggerSelectionUI);

View File

@ -0,0 +1,55 @@
/*
* Author: Garth 'L-H' de Wet and CAA-Picard
*
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Actions
*
* Public: No
*/
#include "script_component.hpp"
private ["_mags", "_item", "_index", "_actions"];
EXPLODE_1_PVT(_this,_unit);
_mags = magazines _unit;
_list = [];
_itemCount = [];
{
_item = ConfigFile >> "CfgMagazines" >> _x;
if (getNumber(_item >> "ACE_Placeable") == 1) then {
_index = _list find _item;
if (_index != -1) then {
_itemCount set [_index, (_itemCount select _index) + 1];
} else {
_list pushBack _item;
_itemCount pushBack 1;
};
};
} forEach _mags;
_children = [];
{
_action = [
[format ["Explosive_%1", _forEachIndex]],
format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex],
getText(_x >> "picture"),
"",
{(_this select 2) call FUNC(openTriggerSelectionUI)},
{true},
2,
[false,false,false,false],
{},
[configName _x]
] call EFUNC(interact_menu,createAction);
_action pushBack _unit;
_children pushBack _action
} foreach _list;
_children

View File

@ -1,55 +0,0 @@
/*
* Author: Garth 'L-H' de Wet
* Opens the UI for explosive placement selection
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* None
*
* Example:
* [player] call ACE_Explosives_fnc_openPlaceUI;
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit","_mags", "_item", "_index", "_actions"];
_unit = _this select 0;
call FUNC(place_Cancel);
_mags = magazines _unit;
_list = [];
_itemCount = [];
{
_item = ConfigFile >> "CfgMagazines" >> _x;
if (getNumber(_item >> "ACE_Placeable") == 1) then {
_index = _list find _item;
if (_index != -1) then {
_itemCount set [_index, (_itemCount select _index) + 1];
} else {
_list pushBack _item;
_itemCount pushBack 1;
};
};
} forEach _mags;
_actions = [localize "STR_ACE_Explosives_PlaceMenu", localize "STR_ACE_Explosives_Place"]
call EFUNC(interaction,prepareSelectMenu);
{
_actions = [
_actions,
format [getText(_x >> "displayName") + " (%1)", _itemCount select _foreachIndex],
getText(_x >> "picture"),
configName _x
] call EFUNC(interaction,AddSelectableItem);
} foreach _list;
[
_actions,
{
[_this] call FUNC(openTriggerSelectionUI);
},
{
call EFUNC(interaction,hideMenu);
}
] call EFUNC(interaction,openSelectMenu);