ACE3/addons/zeus/functions/fnc_ui_searchArea.sqf
SilentSpike b3192adbb7 Add support for a zeus module position attribute
Allows zeus to select a position for the module task to be carried out at - as a bonus it works alongside the radius attribute and will draw a circle preview if a radius is present.

Unfortunately control types 100 & 101 don't play nicely with controls groups and so I've commented out the position attribute from the displays that would currently use it. Otherwise it is all seemingly working fine, just that the position of the control is all wrong and it doesn't stay within the bounds of the controls group.

I opened an issue tracker ticket for the problem here: https://feedback.bistudio.com/T116708
2016-05-21 17:29:53 +01:00

83 lines
2.1 KiB
Plaintext

/*
* Author: SilentSpike
* Initalises the `search area` zeus module display
*
* Arguments:
* 0: dummy controls group <CONTROL>
*
* Return Value:
* None <NIL>
*
* Public: No
*/
#include "script_component.hpp"
disableSerialization;
//Generic Init:
params ["_control"];
private _display = ctrlParent _control;
private _logic = GETMVAR(BIS_fnc_initCuratorAttributes_target,objnull);
_control ctrlRemoveAllEventHandlers "setFocus";
//Validate the module target:
private _unit = effectiveCommander (attachedTo _logic);
scopeName "Main";
private _fnc_errorAndClose = {
params ["_msg"];
_display closeDisplay 0;
deleteVehicle _logic;
[_msg] call EFUNC(common,displayTextStructured);
breakOut "Main";
};
switch (false) do {
case !(isNull _unit): {
[LSTRING(NothingSelected)] call _fnc_errorAndClose;
};
case (_unit isKindOf "CAManBase"): {
[LSTRING(OnlyInfantry)] call _fnc_errorAndClose;
};
case (alive _unit): {
[LSTRING(OnlyAlive)] call _fnc_errorAndClose;
};
};
private _fnc_onUnload = {
private _logic = GETMVAR(BIS_fnc_initCuratorAttributes_target,objnull);
if (isNull _logic) exitWith {};
if (_this select 1 == 2) then {
deleteVehicle _logic;
};
};
private _fnc_onConfirm = {
params [["_ctrlButtonOK", controlNull, [controlNull]]];
private _display = ctrlparent _ctrlButtonOK;
if (isNull _display) exitWith {};
private _logic = GETMVAR(BIS_fnc_initCuratorAttributes_target,objnull);
if (isNull _logic) exitWith {};
private _unit = effectiveCommander (attachedTo _logic);
private _radius = GETVAR(_display,GVAR(radius),50);
private _position = GETVAR(_display,GVAR(position),getPos _logic);
private _marker = QGVAR(ModuleSearchArea) + str(_unit);
createMarker [_marker, _position];
_marker setMarkerAlpha 0;
_marker setMarkerShape "ELLIPSE";
_marker setMarkerSize [_radius,_radius];
[QGVAR(moduleSearchArea), _unit, [_unit,_marker]] call EFUNC(common,targetEvent);
deleteVehicle _logic;
};
_display displayAddEventHandler ["unload", _fnc_onUnload];
_control ctrlAddEventHandler ["buttonClick", _fnc_onConfirm];