ACE3/addons/zeus/functions/fnc_ui_groupSide.sqf
SilentSpike 600b71817f Update zeus module logic deletion behaviour
The teleport players module is reusable, while the global AI skill and group side modules should be deleted appropriately once the display is closed.
2016-05-18 16:30:14 +01:00

137 lines
3.6 KiB
Plaintext

/*
* Author: SilentSpike
* Initalises the `group side` zeus module display
*
* Arguments:
* 0: groupSide controls group <CONTROL>
*
* Return Value:
* NONE <NIL>
*
* Example:
* onSetFocus = "_this call ace_zeus_fnc_ui_groupSide"
*
* Public: No
*/
#include "script_component.hpp"
#define IDCs [31201,31200,31202,31203]
disableSerialization;
params ["_control"];
//Generic Init:
private _display = ctrlparent _control;
private _ctrlButtonOK = _display displayctrl 1; //IDC_OK
private _logic = GETMVAR(BIS_fnc_initCuratorAttributes_target,objnull);
TRACE_1("logicObject",_logic);
_control ctrlRemoveAllEventHandlers "setFocus";
//Validate the module target:
private _unit = effectiveCommander (attachedTo _logic);
private _side = side _unit;
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;
};
case (_side in [west,east,independent,civilian]): {
[LSTRING(OnlySpecificSide)] call _fnc_errorAndClose;
};
};
//Specific on-load stuff:
private _idcActive = 31200 + ([west,east,independent,civilian] find _side);
SETVAR(_display,oldSide,_idcActive - 31200);
SETVAR(_display,newSide,_idcActive - 31200);
private _fnc_onSelection = {
params [["_activeCtrl", controlNull, [controlNull]]];
private _display = ctrlParent _activeCtrl;
if (isNull _display) exitWith {};
// Update the button scales and colours on selection
{
private _ctrl = _display displayCtrl _x;
private _color = _ctrl getVariable "color";
private _scale = 1;
if (ctrlIDC _activeCtrl == _x) then {
_color set [3,1];
_scale = 1.2
} else {
_color set [3,0.5];
};
_ctrl ctrlSetTextColor _color;
[_ctrl,_scale,0.1] call BIS_fnc_ctrlSetScale;
} forEach IDCs;
// Store selected button index for confirmation
SETVAR(_display,newSide,(ctrlIDC _activeCtrl) - 31200);
};
// Initalize buttons with colour and scale
{
private _ctrl = _display displayCtrl _x;
private _color = [_forEachIndex] call BIS_fnc_sideColor;
_ctrl setVariable ["color", _color];
_ctrl ctrlSetActiveColor _color;
_color set [3,0.5];
if (ctrlIDC _ctrl == _idcActive) then {
[_ctrl,1.2,0] call BIS_fnc_ctrlSetScale;
_color set [3,1];
};
_ctrl ctrlSetTextColor _color;
_ctrl ctrlAddEventHandler ["buttonclick", _fnc_onSelection];
} forEach IDCs;
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 _side = [west,east,independent,civilian] select (GETVAR(_display,newSide,GETVAR(_display,oldSide,0)));
[_unit, _side] call FUNC(moduleGroupSide);
deleteVehicle _logic;
};
_display displayAddEventHandler ["unload", _fnc_onUnload];
_ctrlButtonOK ctrlAddEventHandler ["buttonClick", _fnc_onConfirm];