mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
- Add cursored self interaction menu (for using inside vehicles)
- Renamed the base menu "SelfActions" to "ACE_SelfActions" - Limit the amount of objects the player is shown interactions with. This are the 3 nearest objects which have active action points visible on screen. - Cull action points that are not visible, to far away, etc before checking if they are active.
This commit is contained in:
parent
2371bc1bb0
commit
85a77150c9
47
addons/interact_menu/CursorMenus.hpp
Normal file
47
addons/interact_menu/CursorMenus.hpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
class GVAR(cursorMenu) {
|
||||||
|
idd = 91919;
|
||||||
|
movingEnable = false;
|
||||||
|
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgCursorMenu)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),true)]);
|
||||||
|
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(cursorMenuOpened)),false)]);
|
||||||
|
objects[] = {};
|
||||||
|
/*class controlsBackground {
|
||||||
|
class Background {
|
||||||
|
idc = 91920;
|
||||||
|
moving = 0;
|
||||||
|
font = "TahomaB";
|
||||||
|
text = "";
|
||||||
|
sizeEx = 0;
|
||||||
|
lineSpacing = 0;
|
||||||
|
access = 0;
|
||||||
|
type = 0;
|
||||||
|
style = 0;
|
||||||
|
size = 1;
|
||||||
|
colorBackground[] = {0, 0, 0, 0.5};
|
||||||
|
colorText[] = {0, 0, 0, 0};
|
||||||
|
x = "safezoneX";
|
||||||
|
y = "safezoneY";
|
||||||
|
w = "safezoneW";
|
||||||
|
h = "safezoneH";
|
||||||
|
};
|
||||||
|
};*/
|
||||||
|
class controls {
|
||||||
|
class Canvas {
|
||||||
|
idc = 91921;
|
||||||
|
moving = 0;
|
||||||
|
font = "TahomaB";
|
||||||
|
text = "";
|
||||||
|
sizeEx = 0;
|
||||||
|
lineSpacing = 0;
|
||||||
|
access = 0;
|
||||||
|
type = 0;
|
||||||
|
style = 0;
|
||||||
|
size = 1;
|
||||||
|
colorBackground[] = {0, 0, 0, 0};
|
||||||
|
colorText[] = {0, 0, 0, 0};
|
||||||
|
x = "safezoneX";
|
||||||
|
y = "safezoneY";
|
||||||
|
w = "safezoneW";
|
||||||
|
h = "safezoneH";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -13,3 +13,5 @@ class CfgPatches {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
|
|
||||||
|
#include "CursorMenus.hpp"
|
||||||
|
@ -89,7 +89,7 @@ missionNamespace setVariable [_actionsVarName, [_actionsCfg, []] call _recurseFn
|
|||||||
1,
|
1,
|
||||||
[],
|
[],
|
||||||
uid,
|
uid,
|
||||||
["MainActions","TeamManagement","MyAction"]
|
["ACE_MainActions","TeamManagement","MyAction"]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
*/
|
*/
|
||||||
|
@ -81,9 +81,9 @@ _actions = [[
|
|||||||
{ true },
|
{ true },
|
||||||
{ true },
|
{ true },
|
||||||
10,
|
10,
|
||||||
[_actionsCfg, ["SelfActions"]] call _recurseFnc,
|
[_actionsCfg, ["ACE_SelfActions"]] call _recurseFnc,
|
||||||
GVAR(uidCounter),
|
GVAR(uidCounter),
|
||||||
["SelfActions"]
|
["ACE_SelfActions"]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
GVAR(uidCounter) = GVAR(uidCounter) + 1;
|
GVAR(uidCounter) = GVAR(uidCounter) + 1;
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
if(!GVAR(keyDown)) then {
|
if(!GVAR(keyDown)) then {
|
||||||
|
|
||||||
|
// Only interact with others if on foot
|
||||||
|
if (vehicle ACE_player != ACE_player) exitWith {};
|
||||||
|
|
||||||
GVAR(keyDown) = true;
|
GVAR(keyDown) = true;
|
||||||
GVAR(keyDownTime) = diag_tickTime;
|
GVAR(keyDownTime) = diag_tickTime;
|
||||||
};
|
};
|
||||||
|
@ -17,6 +17,22 @@ if(!GVAR(keyDownSelfAction)) then {
|
|||||||
GVAR(keyDown) = false;
|
GVAR(keyDown) = false;
|
||||||
GVAR(keyDownTime) = diag_tickTime;
|
GVAR(keyDownTime) = diag_tickTime;
|
||||||
|
|
||||||
GVAR(selfMenuOffset) = [sin getDir ACE_player, cos getDir ACE_player, 0] vectorMultiply 2;
|
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap;
|
||||||
|
|
||||||
|
if (GVAR(useCursorMenu)) then {
|
||||||
|
closeDialog 0;
|
||||||
|
createDialog QGVAR(cursorMenu);
|
||||||
|
// The dialog sets:
|
||||||
|
// uiNamespace getVariable QGVAR(dlgCursorMenu);
|
||||||
|
// uiNamespace getVariable QGVAR(cursorMenuOpened);
|
||||||
|
ctrlEnable [91921, true];
|
||||||
|
((finddisplay 91919) displayctrl 91921) ctrlAddEventHandler ["MouseMoving", {
|
||||||
|
GVAR(cursorPos) = [_this select 1, _this select 2, 0];
|
||||||
|
}];
|
||||||
|
setMousePosition [0.5, 0.5];
|
||||||
|
|
||||||
|
};
|
||||||
|
GVAR(selfMenuOffset) = (positionCameraToWorld [0, 0, 2]) vectorDiff (positionCameraToWorld [0, 0, 0]);
|
||||||
|
//systemChat format ["GVAR(selfMenuOffset) %1",GVAR(selfMenuOffset)];
|
||||||
};
|
};
|
||||||
true
|
true
|
||||||
|
@ -12,6 +12,10 @@
|
|||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then {
|
||||||
|
closeDialog 0;
|
||||||
|
};
|
||||||
|
|
||||||
GVAR(keyDownSelfAction) = false;
|
GVAR(keyDownSelfAction) = false;
|
||||||
if(GVAR(actionSelected)) then {
|
if(GVAR(actionSelected)) then {
|
||||||
this = GVAR(selectedTarget);
|
this = GVAR(selectedTarget);
|
||||||
|
@ -17,45 +17,59 @@ _foundTarget = false;
|
|||||||
_cursorPos1 = positionCameraToWorld [0, 0, 0];
|
_cursorPos1 = positionCameraToWorld [0, 0, 0];
|
||||||
_cursorPos2 = positionCameraToWorld [0, 0, 2];
|
_cursorPos2 = positionCameraToWorld [0, 0, 2];
|
||||||
|
|
||||||
|
GVAR(selfMenuScale) = (((worldToScreen (positionCameraToWorld [1,0,2])) select 0) -
|
||||||
|
((worldToScreen (positionCameraToWorld [0,0,2])) select 0)) / 0.6;
|
||||||
|
//systemChat format ["selfMenuScale: %1", GVAR(selfMenuScale)];
|
||||||
GVAR(currentOptions) = [];
|
GVAR(currentOptions) = [];
|
||||||
|
|
||||||
private ["_actionsVarName","_classActions","_objectActions","_target","_player","_actionItem","_active"];
|
private ["_actionsVarName","_classActions","_objectActions","_target","_player","_actionItem","_active"];
|
||||||
|
_player = ACE_player;
|
||||||
if (GVAR(keyDown)) then {
|
if (GVAR(keyDown)) then {
|
||||||
[] call FUNC(updateVecLineMap);
|
[] call FUNC(updateVecLineMap);
|
||||||
|
|
||||||
// Render all nearby interaction menus
|
// Render all nearby interaction menus
|
||||||
|
#define MAXINTERACTOBJECTS 3
|
||||||
|
private ["_numInteractObjects","_numInteractions"];
|
||||||
|
_numInteractObjects = 0;
|
||||||
|
|
||||||
_nearestObjects = nearestObjects [(getPos ACE_player), ["All"], 15];
|
_nearestObjects = nearestObjects [(getPos ACE_player), ["All"], 15];
|
||||||
{
|
{
|
||||||
_target = _x;
|
_target = _x;
|
||||||
_player = ACE_player;
|
|
||||||
|
|
||||||
// Iterate through object actions, find base level actions and render them if appropiate
|
_numInteractions = 0;
|
||||||
_actionsVarName = format [QGVAR(Act_%1), typeOf _target];
|
// Prevent interacting with yourself or your own vehicle
|
||||||
GVAR(objectActions) = _target getVariable [QGVAR(actions), []];
|
if (_target != ACE_player && {_target != vehicle ACE_player}) then {
|
||||||
{
|
|
||||||
_actionItem = _x;
|
|
||||||
// Only render them directly if they are base level actions
|
|
||||||
if (count (_actionItem select 8) == 1) then {
|
|
||||||
_active = [_target, ACE_player] call (_actionItem select 4);
|
|
||||||
|
|
||||||
if (_active) then {
|
// Iterate through object actions, find base level actions and render them if appropiate
|
||||||
[_target, _actionItem, 0, [180, 360]] call FUNC(renderMenu);
|
_actionsVarName = format [QGVAR(Act_%1), typeOf _target];
|
||||||
|
GVAR(objectActions) = _target getVariable [QGVAR(actions), []];
|
||||||
|
{
|
||||||
|
_actionItem = _x;
|
||||||
|
// Only render them directly if they are base level actions
|
||||||
|
if (count (_actionItem select 8) == 1) then {
|
||||||
|
// Try to render the menu
|
||||||
|
if ([_target, _actionItem, false, [180, 360]] call FUNC(renderMenu)) then {
|
||||||
|
_numInteractions = _numInteractions + 1;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
} forEach GVAR(objectActions);
|
||||||
|
|
||||||
|
// Iterate through base level class actions and render them if appropiate
|
||||||
|
_classActions = missionNamespace getVariable [_actionsVarName, []];
|
||||||
|
{
|
||||||
|
_actionItem = _x;
|
||||||
|
// Try to render the menu
|
||||||
|
if ([_target, _actionItem, false, [180, 360]] call FUNC(renderMenu)) then {
|
||||||
|
_numInteractions = _numInteractions + 1;
|
||||||
|
};
|
||||||
|
} forEach _classActions;
|
||||||
|
|
||||||
|
// Limit the amount of objects the player can interact with
|
||||||
|
if (_numInteractions > 0) then {
|
||||||
|
_numInteractObjects = _numInteractObjects + 1;
|
||||||
};
|
};
|
||||||
} forEach GVAR(objectActions);
|
};
|
||||||
|
if (_numInteractObjects >= MAXINTERACTOBJECTS) exitWith {};
|
||||||
// Iterate through base level class actions and render them if appropiate
|
|
||||||
_classActions = missionNamespace getVariable [_actionsVarName, []];
|
|
||||||
{
|
|
||||||
_actionItem = _x;
|
|
||||||
_active = [_target, ACE_player] call (_actionItem select 4);
|
|
||||||
|
|
||||||
if (_active) then {
|
|
||||||
[_target, _actionItem, 0, [180, 360]] call FUNC(renderMenu);
|
|
||||||
};
|
|
||||||
} forEach _classActions;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} forEach _nearestObjects;
|
} forEach _nearestObjects;
|
||||||
|
|
||||||
@ -66,11 +80,11 @@ if (GVAR(keyDown)) then {
|
|||||||
|
|
||||||
// Render only the self action menu
|
// Render only the self action menu
|
||||||
_target = vehicle ACE_player;
|
_target = vehicle ACE_player;
|
||||||
_player = ACE_player;
|
|
||||||
|
|
||||||
// Iterate through object actions, find base level actions and render them if appropiate
|
// Iterate through object actions, find base level actions and render them if appropiate
|
||||||
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
|
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
|
||||||
GVAR(objectActions) = _target getVariable [QGVAR(selfActions), []];
|
GVAR(objectActions) = _target getVariable [QGVAR(selfActions), []];
|
||||||
|
/*
|
||||||
{
|
{
|
||||||
_actionItem = _x;
|
_actionItem = _x;
|
||||||
// Only render them directly if they are base level actions
|
// Only render them directly if they are base level actions
|
||||||
@ -82,6 +96,7 @@ if (GVAR(keyDown)) then {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
} forEach GVAR(objectActions);
|
} forEach GVAR(objectActions);
|
||||||
|
*/
|
||||||
|
|
||||||
// Iterate through base level class actions and render them if appropiate
|
// Iterate through base level class actions and render them if appropiate
|
||||||
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
|
_actionsVarName = format [QGVAR(SelfAct_%1), typeOf _target];
|
||||||
@ -91,8 +106,9 @@ if (GVAR(keyDown)) then {
|
|||||||
_active = [_target, ACE_player] call (_actionItem select 4);
|
_active = [_target, ACE_player] call (_actionItem select 4);
|
||||||
|
|
||||||
if (_active) then {
|
if (_active) then {
|
||||||
_pos = (ACE_player modelToWorld (ACE_player selectionPosition "spine3")) vectorAdd GVAR(selfMenuOffset) vectorAdd [0,0,0.25];
|
//_pos = (ACE_player modelToWorld (ACE_player selectionPosition "spine3")) vectorAdd GVAR(selfMenuOffset) vectorAdd [0,0,0.25];
|
||||||
[ACE_player, _actionItem, 0, [180, 360], _pos] call FUNC(renderMenu);
|
_pos = _cursorPos1 vectorAdd GVAR(selfMenuOffset);
|
||||||
|
[_target, _actionItem, true, [180, 360], _pos] call FUNC(renderMenu);
|
||||||
};
|
};
|
||||||
} forEach _classActions;
|
} forEach _classActions;
|
||||||
};
|
};
|
||||||
@ -100,9 +116,13 @@ if (GVAR(keyDown)) then {
|
|||||||
|
|
||||||
|
|
||||||
if(GVAR(keyDown) || GVAR(keyDownSelfAction)) then {
|
if(GVAR(keyDown) || GVAR(keyDownSelfAction)) then {
|
||||||
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selected_ca.paa", [1,0,0,1], _cursorPos2, 1, 1, 0, "", 0.5, 0.025, "TahomaB"];
|
// Draw the red selector only when there's no cursor
|
||||||
|
if !(uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then {
|
||||||
|
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selected_ca.paa", [1,0,0,1], _cursorPos2, 1, 1, 0, "", 0.5, 0.025, "TahomaB"];
|
||||||
|
};
|
||||||
|
|
||||||
|
_cursorScreenPos = [worldToScreen _cursorPos2, GVAR(cursorPos)] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
|
||||||
|
|
||||||
_cursorScreenPos = worldToScreen _cursorPos2;
|
|
||||||
_closestDistance = 1000000;
|
_closestDistance = 1000000;
|
||||||
_closestSelection = -1;
|
_closestSelection = -1;
|
||||||
{
|
{
|
||||||
|
@ -31,13 +31,16 @@ _sPos = worldToScreen _pos;
|
|||||||
if(count _sPos > 0) then {
|
if(count _sPos > 0) then {
|
||||||
|
|
||||||
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
if(GVAR(iconCount) > (count GVAR(iconCtrls))-1) then {
|
||||||
GVAR(iconCtrls) pushBack ((findDisplay 46) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
_displayNum = [46,91919] select (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]);
|
||||||
|
//systemChat format ["Displaynum: %1", _displayNum];
|
||||||
|
GVAR(iconCtrls) pushBack ((findDisplay _displayNum) ctrlCreate ["RscStructuredText", 54021+GVAR(iconCount)]);
|
||||||
};
|
};
|
||||||
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
_ctrl = GVAR(iconCtrls) select GVAR(iconCount);
|
||||||
GVAR(iconCount) = GVAR(iconCount) + 1;
|
GVAR(iconCount) = GVAR(iconCount) + 1;
|
||||||
if(_icon == "") then {
|
if(_icon == "") then {
|
||||||
_icon = DEFAULT_ICON;
|
_icon = DEFAULT_ICON;
|
||||||
};
|
};
|
||||||
|
//systemChat format ["Ctrl: %1, %2,%3", _text,_sPos select 0, _sPos select 1];
|
||||||
_text = format ["<img image='%1' color='%2' align='center'/><br/><t color ='%3' size='0.75' align='center'>%4</t>", _icon, _color, _color, _text];
|
_text = format ["<img image='%1' color='%2' align='center'/><br/><t color ='%3' size='0.75' align='center'>%4</t>", _icon, _color, _color, _text];
|
||||||
_ctrl ctrlSetStructuredText (parseText _text);
|
_ctrl ctrlSetStructuredText (parseText _text);
|
||||||
_ctrl ctrlSetPosition [(_sPos select 0)-(0.2*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.4*SafeZoneW, 0.035*SafeZoneW];
|
_ctrl ctrlSetPosition [(_sPos select 0)-(0.2*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.4*SafeZoneW, 0.035*SafeZoneW];
|
||||||
|
@ -5,20 +5,20 @@
|
|||||||
* Argument:
|
* Argument:
|
||||||
* 0: Object <OBJECT>
|
* 0: Object <OBJECT>
|
||||||
* 1: Action data <ARRAY>
|
* 1: Action data <ARRAY>
|
||||||
* 2: ?
|
* 2: Was the condition already checked? <BOOL>
|
||||||
* 3: Angle range available for rendering <ARRAY>
|
* 3: Angle range available for rendering <ARRAY>
|
||||||
* 4: 3D position <ARRAY> (Optional)
|
* 4: 3D position <ARRAY> (Optional)
|
||||||
*
|
*
|
||||||
* Return value:
|
* Return value:
|
||||||
* None
|
* Was the menu rendered <BOOL>
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
private ["_distance", "_uid", "_pos", "_cursorScreenPos", "_path", "_menuDepth", "_opacity", "_currentRenderDepth", "_radialOffset", "_active", "_x", "_offset", "_newPos", "_forEachIndex"];
|
private ["_distance", "_uid", "_pos", "_cameraPos", "_path", "_menuDepth", "_opacity", "_currentRenderDepth", "_radialOffset", "_active", "_x", "_offset", "_newPos", "_forEachIndex"];
|
||||||
|
|
||||||
EXPLODE_4_PVT(_this,_object,_actionData,_dummy,_angles);
|
EXPLODE_4_PVT(_this,_object,_actionData,_wasConditionChecked,_angles);
|
||||||
EXPLODE_2_PVT(_angles,_centerAngle,_maxAngleSpan);
|
EXPLODE_2_PVT(_angles,_centerAngle,_maxAngleSpan);
|
||||||
|
|
||||||
_uid = _actionData select 7;
|
_uid = _actionData select 7;
|
||||||
@ -35,12 +35,20 @@ if((count _this) > 4) then {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
_cursorScreenPos = (positionCameraToWorld [0, 0, 0]);
|
// For non-self actions, exit if the action is too far away
|
||||||
// Exit if the action is too far away
|
_cameraPos = positionCameraToWorld [0, 0, 0];
|
||||||
if(_cursorScreenPos distance _pos >= _distance) exitWith {};
|
if (GVAR(keyDown) && {_cameraPos distance _pos >= _distance}) exitWith {false};
|
||||||
|
|
||||||
// Exit if the action is behind you
|
// Exit if the action is behind you
|
||||||
if(_cursorScreenPos select 2 < 0) exitWith {};
|
_sPos = worldToScreen _pos;
|
||||||
|
if(count _sPos == 0) exitWith {false};
|
||||||
|
|
||||||
|
// Exit if the action is off screen
|
||||||
|
if ((_sPos select 0) < safeZoneXAbs || (_sPos select 0) > safeZoneXAbs + safeZoneWAbs) exitWith {false};
|
||||||
|
if ((_sPos select 1) < safeZoneY || (_sPos select 1) > safeZoneY + safeZoneH) exitWith {false};
|
||||||
|
|
||||||
|
// If the condition was not checked, check it and exit if needed
|
||||||
|
if (!_wasConditionChecked && {!([_target, ACE_player] call (_actionItem select 4))}) exitWith {false};
|
||||||
|
|
||||||
_menuDepth = (count GVAR(menuDepthPath)) - 1;
|
_menuDepth = (count GVAR(menuDepthPath)) - 1;
|
||||||
|
|
||||||
@ -72,7 +80,7 @@ if(_menuDepth > 0 && !_menuInSelectedPath) then {
|
|||||||
GVAR(currentOptions) pushBack [_this, _pos, _path];
|
GVAR(currentOptions) pushBack [_this, _pos, _path];
|
||||||
|
|
||||||
// Exit without rendering children if it isn't
|
// Exit without rendering children if it isn't
|
||||||
if !(_menuInSelectedPath) exitWith {};
|
if !(_menuInSelectedPath) exitWith {true};
|
||||||
|
|
||||||
// Collect all active children actions
|
// Collect all active children actions
|
||||||
private "_activeChildren";
|
private "_activeChildren";
|
||||||
@ -126,12 +134,12 @@ _angle = _centerAngle - _angleSpan / 2;
|
|||||||
_player = ACE_player;
|
_player = ACE_player;
|
||||||
|
|
||||||
_offset = [GVAR(vecLineMap), _angle] call FUNC(rotateVectLine);
|
_offset = [GVAR(vecLineMap), _angle] call FUNC(rotateVectLine);
|
||||||
_mod = 0.15 max (0.15 * (_cursorScreenPos distance _pos));
|
_mod = (0.15 max (0.15 * (_cameraPos distance _pos))) / GVAR(selfMenuScale);
|
||||||
_newPos = _pos vectorAdd (_offset vectorMultiply _mod);
|
_newPos = _pos vectorAdd (_offset vectorMultiply _mod);
|
||||||
|
|
||||||
// drawLine3D [_pos, _newPos, [1,0,0,0.5]];
|
// drawLine3D [_pos, _newPos, [1,0,0,0.5]];
|
||||||
|
|
||||||
[_object, _x, _forEachIndex, [_angle, 140], _newPos] call FUNC(renderMenu);
|
[_object, _x, true, [_angle, 140], _newPos] call FUNC(renderMenu);
|
||||||
|
|
||||||
if (_angleSpan == 360) then {
|
if (_angleSpan == 360) then {
|
||||||
_angle = _angle + _angleSpan / (count _activeChildren);
|
_angle = _angle + _angleSpan / (count _activeChildren);
|
||||||
@ -139,3 +147,5 @@ _angle = _centerAngle - _angleSpan / 2;
|
|||||||
_angle = _angle + _angleSpan / (((count _activeChildren)-1) max 1);
|
_angle = _angle + _angleSpan / (((count _activeChildren)-1) max 1);
|
||||||
};
|
};
|
||||||
} forEach _activeChildren;
|
} forEach _activeChildren;
|
||||||
|
|
||||||
|
true
|
||||||
|
@ -32,7 +32,7 @@ class CfgVehicles {
|
|||||||
class ACE_Actions {
|
class ACE_Actions {
|
||||||
class ACE_MainActions {
|
class ACE_MainActions {
|
||||||
displayName = "$STR_ACE_Interaction_MainAction";
|
displayName = "$STR_ACE_Interaction_MainAction";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(true);
|
condition = QUOTE(true);
|
||||||
statement = "";
|
statement = "";
|
||||||
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
icon = "\a3\ui_f\data\IGUI\Cfg\Actions\eject_ca.paa";
|
||||||
@ -40,7 +40,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_TeamManagement {
|
class ACE_TeamManagement {
|
||||||
displayName = "$STR_ACE_Interaction_TeamManagement";
|
displayName = "$STR_ACE_Interaction_TeamManagement";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {GVAR(EnableTeamManagement)});
|
||||||
statement = "";
|
statement = "";
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -51,7 +51,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_JoinTeamRed {
|
class ACE_JoinTeamRed {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamRed";
|
displayName = "$STR_ACE_Interaction_JoinTeamRed";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'RED')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -62,7 +62,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamGreen {
|
class ACE_JoinTeamGreen {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
|
displayName = "$STR_ACE_Interaction_JoinTeamGreen";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'GREEN')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -73,7 +73,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamBlue {
|
class ACE_JoinTeamBlue {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
|
displayName = "$STR_ACE_Interaction_JoinTeamBlue";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'BLUE')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -84,7 +84,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_JoinTeamYellow {
|
class ACE_JoinTeamYellow {
|
||||||
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
|
displayName = "$STR_ACE_Interaction_JoinTeamYellow";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player});
|
||||||
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'YELLOW')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -96,7 +96,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_LeaveTeam {
|
class ACE_LeaveTeam {
|
||||||
displayName = "$STR_ACE_Interaction_LeaveTeam";
|
displayName = "$STR_ACE_Interaction_LeaveTeam";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
|
condition = QUOTE(alive _target && {!isPlayer _target} && {_target in units group _player} && {assignedTeam _player != 'MAIN'});
|
||||||
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
|
statement = QUOTE([ARR_2(_target,'MAIN')] call DFUNC(joinTeam));
|
||||||
showDisabled = 1;
|
showDisabled = 1;
|
||||||
@ -109,7 +109,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_JoinGroup {
|
class ACE_JoinGroup {
|
||||||
displayName = "$STR_ACE_Interaction_JoinGroup";
|
displayName = "$STR_ACE_Interaction_JoinGroup";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
|
condition = QUOTE(side group _player == side group _target && {group _player != group _target});
|
||||||
statement = QUOTE([_player] joinSilent group _target;);
|
statement = QUOTE([_player] joinSilent group _target;);
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -121,7 +121,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_GetDown {
|
class ACE_GetDown {
|
||||||
displayName = "$STR_ACE_Interaction_GetDown";
|
displayName = "$STR_ACE_Interaction_GetDown";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE([_target] call DFUNC(canInteractWith));
|
condition = QUOTE([_target] call DFUNC(canInteractWith));
|
||||||
statement = QUOTE([_target] call DFUNC(getDown));
|
statement = QUOTE([_target] call DFUNC(getDown));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -129,7 +129,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_SendAway {
|
class ACE_SendAway {
|
||||||
displayName = "$STR_ACE_Interaction_SendAway";
|
displayName = "$STR_ACE_Interaction_SendAway";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE([_target] call DFUNC(canInteractWith));
|
condition = QUOTE([_target] call DFUNC(canInteractWith));
|
||||||
statement = QUOTE([_target] call DFUNC(sendAway));
|
statement = QUOTE([_target] call DFUNC(sendAway));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
@ -137,7 +137,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_Pardon {
|
class ACE_Pardon {
|
||||||
displayName = "$STR_ACE_Interaction_Pardon";
|
displayName = "$STR_ACE_Interaction_Pardon";
|
||||||
distance = 4;
|
distance = 5;
|
||||||
condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target});
|
condition = QUOTE(rating _target < -2000 && {alive _target} && {side group _player == side group _target});
|
||||||
statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc));
|
statement = QUOTE([ARR_3(_target,'{_this addRating -rating _this}',_target)] call DEFUNC(common,execRemoteFnc));
|
||||||
showDisabled = 0;
|
showDisabled = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user