Remove debug, added scripted add/remove actions.

This commit is contained in:
Nou 2015-01-18 20:08:34 -08:00
parent 6a04408a74
commit 84f404ae84
6 changed files with 120 additions and 12 deletions

View File

@ -12,6 +12,8 @@ PREP(rotateVectLine);
PREP(keyDown); PREP(keyDown);
PREP(keyUp); PREP(keyUp);
PREP(compileMenu); PREP(compileMenu);
PREP(addAction);
PREP(removeAction);
GVAR(toRender) = []; GVAR(toRender) = [];
@ -46,4 +48,6 @@ GVAR(iconCount) = 0;
GVAR(objectActionsHash) = HASH_CREATE; GVAR(objectActionsHash) = HASH_CREATE;
GVAR(uidCounter) = 0;
ADDON = true; ADDON = true;

View File

@ -0,0 +1,51 @@
/*
* Author: commy2
*
* Add an ACE action to an object. Note: This function is NOT global.
*
* Argument:
* 0: Object the action should be assigned to (Object)
* 1: Name of the action shown in the menu (String)
* 2: Icon (String)
* 3: Position (Position or Selection Name)
* 4: Statement (Code)
* 5: Condition (Code)
* 6: Distance (Number)
*
* Return value:
* The entry array, which can be used to remove the entry, or add children entries.
*/
#include "script_component.hpp"
private ["_object", "_displayName", "_icon", "_position", "_statement", "_condition", "_distance", "_actions", "_entry"];
_object = _this select 0;
_displayName = _this select 1;
_icon = _this select 2;
_position = _this select 3;
_statement = _this select 4;
_condition = _this select 5;
_distance = _this select 6;
_actions = [];
if(IS_OBJECT(_object)) then {
_actions = _object getVariable [QUOTE(GVAR(actionData)), []];
} else {
if(IS_ARRAY(_object)) then {
_actions = _object select 6;
};
};
_entry = [
_displayName,
_icon,
_position,
_statement,
_condition,
_distance,
[],
GVAR(uidCounter)
];
GVAR(uidCounter) = GVAR(uidCounter) + 1;
_actions pushBack _entry;
_entry;

View File

@ -1,6 +1,6 @@
//fnc_compileMenu.sqf //fnc_compileMenu.sqf
#include "script_component.hpp"; #include "script_component.hpp";
diag_log text format["COMPILE ACTIONS: %1", _this]; // diag_log text format["COMPILE ACTIONS: %1", _this];
_object = _this select 0; _object = _this select 0;
_objectType = typeOf _object; _objectType = typeOf _object;
@ -55,7 +55,7 @@ _recurseFnc = {
_enableInside = getNumber (_entryCfg >> "enableInside"); _enableInside = getNumber (_entryCfg >> "enableInside");
_condition = compile _condition; _condition = compile _condition;
diag_log text format["_condition: %1", _condition]; // diag_log text format["_condition: %1", _condition];
_children = []; _children = [];
if(isArray (_entryCfg >> "subMenu")) then { if(isArray (_entryCfg >> "subMenu")) then {
_subMenuDef = getArray (_entryCfg >> "subMenu"); _subMenuDef = getArray (_entryCfg >> "subMenu");
@ -70,9 +70,10 @@ _recurseFnc = {
_statement, _statement,
_condition, _condition,
_distance, _distance,
_children _children,
GVAR(uidCounter)
]; ];
GVAR(uidCounter) = GVAR(uidCounter) + 1;
_actions pushBack _entry; _actions pushBack _entry;
}; };
}; };
@ -88,8 +89,10 @@ _actions = [[
{ true }, { true },
{ true }, { true },
5, 5,
_actions _actions,
]]; GVAR(uidCounter)
]
];
GVAR(uidCounter) = GVAR(uidCounter) + 1;
_object setVariable [QUOTE(GVAR(actionData)), _actions]; _object setVariable [QUOTE(GVAR(actionData)), _actions];

View File

@ -18,7 +18,7 @@ if(!GVAR(keyDown)) then {
_target = _actionObject; _target = _actionObject;
_player = ACE_player; _player = ACE_player;
_active = [_target, ACE_player] call (_actionItem select 4); _active = [_target, ACE_player] call (_actionItem select 4);
player sideChat format["_active: %1 %2", _actionItem select 0, _active]; // player sideChat format["_active: %1 %2", _actionItem select 0, _active];
if(_active) then { if(_active) then {
_renderItem = +_actionItem; _renderItem = +_actionItem;
_renderItem set[4, true]; _renderItem set[4, true];

View File

@ -0,0 +1,51 @@
/*
* Author: commy2
*
* Add an ACE action to an object. Note: This function is global.
*
* Argument:
* 0: Object the action should be assigned to (Object)
* 1: Entry to remove (Array or Number)
*
* Return value:
* ID of the action (used to remove it later).
*/
#include "script_component.hpp"
_object = _this select 0;
_entry = _this select 1;
if(!IS_OBJECT(_object)) exitWith {false};
_actions = _object getVariable [QUOTE(GVAR(actionData)), []];
if(IS_ARRAY(_entry)) then {
_entry = _entry select 7;
};
_found = false;
_searchFnc = {
private ["_actions", "_entry"];
_actions = _this select 0;
_entry = _this select 1;
{
if((_x select 7) == _entry) then {
_actions set[_forEachIndex, "aceactiondelete"];
_actions = _actions - ["aceactiondelete"];
_found = true;
} else {
if(!_found && {count (_x select 6) > 0}) then {
_childActions = [(_x select 6), _entry] call _searchFnc;
_x set[6, _childActions];
};
};
} forEach _actions;
_actions;
};
_actions = [_actions, _entry] call _searchFnc;
_object setVariable [QUOTE(GVAR(actionData)), _actions];
_found;

View File

@ -37,14 +37,13 @@ if(_cursorScreenPos distance _pos <= _distance) then {
_currentRenderDepth = GVAR(renderDepth); _currentRenderDepth = GVAR(renderDepth);
GVAR(renderDepth) = GVAR(renderDepth) + 1; GVAR(renderDepth) = GVAR(renderDepth) + 1;
if(_index == (GVAR(menuDepthPath) select (GVAR(renderDepth)-1))) then { if(_index == (GVAR(menuDepthPath) select (GVAR(renderDepth)-1))) then {
_radialOffset = 0; _radialOffset = 0;
{ {
// if(_index != (GVAR(menuDepthPath) select (GVAR(renderDepth)))) then { // if(_index != (GVAR(menuDepthPath) select (GVAR(renderDepth)))) then {
this = _object; this = _object;
_target = _object; _target = _object;
_player = ACE_player; _player = ACE_player;
_active = [_object, ACE_player] call (_x select 4); _active = [_object, ACE_player] call (_x select 4);
diag_log text format["_active: %1: %2", (_x select 0), _active];
if(_active) then { if(_active) then {
_offset = [GVAR(vecLineMap), (270*(GVAR(renderDepth)%2))-(_radialOffset*45)] call FUNC(rotateVectLine); _offset = [GVAR(vecLineMap), (270*(GVAR(renderDepth)%2))-(_radialOffset*45)] call FUNC(rotateVectLine);
_newPos = [ _newPos = [
@ -57,7 +56,7 @@ if(_cursorScreenPos distance _pos <= _distance) then {
_radialOffset = _radialOffset + 1; _radialOffset = _radialOffset + 1;
}; };
// }; // };
} forEach (_actionData select 6); } forEach (_actionData select 6);
}; };
GVAR(renderDepth) = GVAR(renderDepth) - 1; GVAR(renderDepth) = GVAR(renderDepth) - 1;
}; };