mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Add group side zeus module
The module is placed on a unit in order to switch the side of that unit's group. A "simple" dialog is used to select the new side. The dialog code is a little ugly to say the least.
This commit is contained in:
parent
4cbded1811
commit
81d854c56a
@ -120,6 +120,11 @@ class CfgVehicles {
|
|||||||
displayName = "Global AI Skill";
|
displayName = "Global AI Skill";
|
||||||
curatorInfoType = QGVAR(RscGlobalSetSkill);
|
curatorInfoType = QGVAR(RscGlobalSetSkill);
|
||||||
};
|
};
|
||||||
|
class GVAR(moduleGroupSide): GVAR(moduleBase) {
|
||||||
|
curatorCanAttach = 1;
|
||||||
|
displayName = "Group Side";
|
||||||
|
curatorInfoType = QGVAR(RscGroupSide);
|
||||||
|
};
|
||||||
class GVAR(moduleSetMedic): GVAR(moduleBase) {
|
class GVAR(moduleSetMedic): GVAR(moduleBase) {
|
||||||
curatorCanAttach = 1;
|
curatorCanAttach = 1;
|
||||||
displayName = CSTRING(ModuleSetMedic_DisplayName);
|
displayName = CSTRING(ModuleSetMedic_DisplayName);
|
||||||
|
@ -9,6 +9,7 @@ PREP(moduleAddSpareTrack);
|
|||||||
PREP(moduleAddSpareWheel);
|
PREP(moduleAddSpareWheel);
|
||||||
PREP(moduleCaptive);
|
PREP(moduleCaptive);
|
||||||
PREP(moduleGlobalSetSkill);
|
PREP(moduleGlobalSetSkill);
|
||||||
|
PREP(moduleGroupSide);
|
||||||
PREP(moduleSetMedic);
|
PREP(moduleSetMedic);
|
||||||
PREP(moduleSetMedicalVehicle);
|
PREP(moduleSetMedicalVehicle);
|
||||||
PREP(moduleSetMedicalFacility);
|
PREP(moduleSetMedicalFacility);
|
||||||
@ -17,6 +18,7 @@ PREP(moduleTeleportPlayers);
|
|||||||
PREP(moduleUnconscious);
|
PREP(moduleUnconscious);
|
||||||
PREP(moduleZeusSettings);
|
PREP(moduleZeusSettings);
|
||||||
PREP(ui_globalSetSkill);
|
PREP(ui_globalSetSkill);
|
||||||
|
PREP(ui_groupSide);
|
||||||
PREP(ui_teleportPlayers);
|
PREP(ui_teleportPlayers);
|
||||||
PREP(ui_vehCargo);
|
PREP(ui_vehCargo);
|
||||||
PREP(zeusAttributes);
|
PREP(zeusAttributes);
|
||||||
|
@ -4,6 +4,7 @@ class CfgPatches {
|
|||||||
class ADDON {
|
class ADDON {
|
||||||
units[] = {
|
units[] = {
|
||||||
QGVAR(moduleGlobalSetSkill),
|
QGVAR(moduleGlobalSetSkill),
|
||||||
|
QGVAR(moduleGroupSide),
|
||||||
QGVAR(moduleTeleportPlayers)
|
QGVAR(moduleTeleportPlayers)
|
||||||
};
|
};
|
||||||
weapons[] = {};
|
weapons[] = {};
|
||||||
|
45
addons/zeus/functions/fnc_moduleGroupSide.sqf
Normal file
45
addons/zeus/functions/fnc_moduleGroupSide.sqf
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Author: SilentSpike
|
||||||
|
* Zeus module function to change side of a group on dialog confirmation
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit to target <OBJECT>
|
||||||
|
* 1: Chosen side <SIDE>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None <NIL>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [this, west] call ace_zeus_fnc_moduleGroupSide
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit","_newSide"];
|
||||||
|
private _side = side _unit;
|
||||||
|
|
||||||
|
// Nothing to do here
|
||||||
|
if (_side == _newSide) exitWith {};
|
||||||
|
|
||||||
|
private _oldGroup = group _unit;
|
||||||
|
private _newGroup = createGroup _newSide;
|
||||||
|
|
||||||
|
// Pretty hacky, will replace units return group with this new group if unconcious
|
||||||
|
if (GETVAR(_unit,ACE_isUnconscious,false) && {GETMVAR(EGVAR(medical,moveUnitsFromGroupOnUnconscious),false)}) then {
|
||||||
|
private _previousGroupsList = _unit getVariable [QEGVAR(common,previousGroupSwitchTo), []];
|
||||||
|
|
||||||
|
{
|
||||||
|
if ("ACE_isUnconscious" == (_x select 2)) exitWith {
|
||||||
|
_x set [0,_newGroup];
|
||||||
|
_x set [1,_newSide];
|
||||||
|
_previousGroupsList set [_forEachIndex, _x];
|
||||||
|
};
|
||||||
|
} forEach _previousGroupsList;
|
||||||
|
|
||||||
|
_unit setVariable [QEGVAR(common,previousGroupSwitchTo), _previousGroupsList, true];
|
||||||
|
} else {
|
||||||
|
(units _unit) joinSilent _newGroup;
|
||||||
|
deleteGroup _oldGroup;
|
||||||
|
};
|
107
addons/zeus/functions/fnc_ui_groupSide.sqf
Normal file
107
addons/zeus/functions/fnc_ui_groupSide.sqf
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#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 (_unit isKindOf "CAManBase"): {
|
||||||
|
[LSTRING(OnlyInfantry)] call _fnc_errorAndClose;
|
||||||
|
};
|
||||||
|
case (alive _unit): {
|
||||||
|
[LSTRING(OnlyAlive)] call _fnc_errorAndClose;
|
||||||
|
};
|
||||||
|
case (_side in [west,east,independent,civilian]): {
|
||||||
|
["Unit must belong to an appropriate side"] 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_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;
|
||||||
|
};
|
||||||
|
|
||||||
|
_ctrlButtonOK ctrlAddEventHandler ["buttonClick", _fnc_onConfirm];
|
@ -2,9 +2,11 @@ class RscControlsGroup;
|
|||||||
class RscControlsGroupNoScrollbars;
|
class RscControlsGroupNoScrollbars;
|
||||||
class RscText;
|
class RscText;
|
||||||
class RscListbox;
|
class RscListbox;
|
||||||
|
class RscCombo;
|
||||||
class RscEdit;
|
class RscEdit;
|
||||||
class RscXSliderH;
|
class RscXSliderH;
|
||||||
class RscCheckBox;
|
class RscCheckBox;
|
||||||
|
class RscActivePicture;
|
||||||
|
|
||||||
class RscDisplayAttributes {
|
class RscDisplayAttributes {
|
||||||
class Controls {
|
class Controls {
|
||||||
@ -113,6 +115,83 @@ class GVAR(RscGlobalSetSkill): RscDisplayAttributes {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GVAR(RscGroupSide): RscDisplayAttributes {
|
||||||
|
onLoad = QUOTE([ARR_3('onLoad', _this, QUOTE(QGVAR(RscGroupSide)))] call FUNC(zeusAttributes));
|
||||||
|
onUnload = QUOTE([ARR_3('onUnload', _this, QUOTE(QGVAR(RscGroupSide)))] call FUNC(zeusAttributes));
|
||||||
|
class Controls: Controls {
|
||||||
|
class Background: Background {};
|
||||||
|
class Title: Title {};
|
||||||
|
class Content: Content {
|
||||||
|
class Controls {
|
||||||
|
class GroupSide: RscControlsGroupNoScrollbars {
|
||||||
|
onSetFocus = QUOTE(_this call FUNC(ui_groupSide));
|
||||||
|
idc = 26422;
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
w = W_PART(26);
|
||||||
|
h = H_PART(2.5);
|
||||||
|
class controls {
|
||||||
|
class Title: RscText {
|
||||||
|
idc = 31002;
|
||||||
|
text = "$STR_disp_arcunit_side";
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
w = W_PART(10);
|
||||||
|
h = H_PART(2.5);
|
||||||
|
colorBackground[] = {0,0,0,0.5};
|
||||||
|
};
|
||||||
|
class Background: RscText {
|
||||||
|
idc = 31000;
|
||||||
|
x = W_PART(10);
|
||||||
|
y = 0;
|
||||||
|
w = W_PART(16);
|
||||||
|
h = H_PART(2.5);
|
||||||
|
colorBackground[] = {1,1,1,0.1};
|
||||||
|
};
|
||||||
|
class BLUFOR: RscActivePicture {
|
||||||
|
idc = 31200;
|
||||||
|
text = "\a3\Ui_f\data\Map\Markers\NATO\b_unknown.paa";
|
||||||
|
x = W_PART(12.5);
|
||||||
|
y = H_PART(0.25);
|
||||||
|
w = W_PART(2);
|
||||||
|
h = H_PART(2);
|
||||||
|
tooltip = "$STR_WEST";
|
||||||
|
};
|
||||||
|
class OPFOR: BLUFOR {
|
||||||
|
idc = 31201;
|
||||||
|
text = "\a3\Ui_f\data\Map\Markers\NATO\o_unknown.paa";
|
||||||
|
x = W_PART(15.5);
|
||||||
|
y = H_PART(0.25);
|
||||||
|
w = W_PART(2);
|
||||||
|
h = H_PART(2);
|
||||||
|
tooltip = "$STR_EAST";
|
||||||
|
};
|
||||||
|
class Independent: BLUFOR {
|
||||||
|
idc = 31202;
|
||||||
|
text = "\a3\Ui_f\data\Map\Markers\NATO\n_unknown.paa";
|
||||||
|
x = W_PART(18.5);
|
||||||
|
y = H_PART(0.25);
|
||||||
|
w = W_PART(2);
|
||||||
|
h = H_PART(2);
|
||||||
|
tooltip = "$STR_guerrila";
|
||||||
|
};
|
||||||
|
class Civilian: BLUFOR {
|
||||||
|
idc = 31203;
|
||||||
|
text = "\a3\Ui_f\data\Map\Markers\NATO\n_unknown.paa";
|
||||||
|
x = W_PART(21.5);
|
||||||
|
y = H_PART(0.25);
|
||||||
|
w = W_PART(2);
|
||||||
|
h = H_PART(2);
|
||||||
|
tooltip = "$STR_Civilian";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class ButtonOK: ButtonOK {};
|
||||||
|
class ButtonCancel: ButtonCancel {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
class GVAR(RscTeleportPlayers): RscDisplayAttributes {
|
class GVAR(RscTeleportPlayers): RscDisplayAttributes {
|
||||||
onLoad = QUOTE([ARR_3('onLoad', _this, QUOTE(QGVAR(RscTeleportPlayers)))] call FUNC(zeusAttributes));
|
onLoad = QUOTE([ARR_3('onLoad', _this, QUOTE(QGVAR(RscTeleportPlayers)))] call FUNC(zeusAttributes));
|
||||||
@ -130,7 +209,7 @@ class GVAR(RscTeleportPlayers): RscDisplayAttributes {
|
|||||||
w = W_PART(26);
|
w = W_PART(26);
|
||||||
h = H_PART(8.5);
|
h = H_PART(8.5);
|
||||||
class controls {
|
class controls {
|
||||||
class Title1: RscText {
|
class Title: RscText {
|
||||||
idc = -1;
|
idc = -1;
|
||||||
text = "Teleport Player";
|
text = "Teleport Player";
|
||||||
toolTip = "Teleport selected player to module position";
|
toolTip = "Teleport selected player to module position";
|
||||||
@ -140,21 +219,21 @@ class GVAR(RscTeleportPlayers): RscDisplayAttributes {
|
|||||||
h = H_PART(1);
|
h = H_PART(1);
|
||||||
colorBackground[] = {0,0,0,0.5};
|
colorBackground[] = {0,0,0,0.5};
|
||||||
};
|
};
|
||||||
class Value1: RscListbox {
|
class Unit: RscListbox {
|
||||||
idc = 16189;
|
idc = 16189;
|
||||||
x = 0;
|
x = 0;
|
||||||
y = H_PART(1.1);
|
y = H_PART(1.1);
|
||||||
w = W_PART(26);
|
w = W_PART(26);
|
||||||
h = H_PART(5.9);
|
h = H_PART(5.9);
|
||||||
};
|
};
|
||||||
class Title2: Title1 {
|
class Label: Title {
|
||||||
idc = -1;
|
idc = -1;
|
||||||
text = "Teleport Group";
|
text = "Teleport Group";
|
||||||
toolTip = "Teleports all units in group";
|
toolTip = "Teleports all units in group";
|
||||||
y = H_PART(7.1);
|
y = H_PART(7.1);
|
||||||
w = W_PART(10);
|
w = W_PART(10);
|
||||||
};
|
};
|
||||||
class Value2: RscCheckBox {
|
class UseGroup: RscCheckBox {
|
||||||
idc = 16188;
|
idc = 16188;
|
||||||
x = W_PART(10.1);
|
x = W_PART(10.1);
|
||||||
y = H_PART(7.1);
|
y = H_PART(7.1);
|
||||||
|
Loading…
Reference in New Issue
Block a user