Interaction - Rename group self-interact (#8346)

* Group renaming self interact

* UI base

* Custom UI solution (looks terrible)

* Improve GUI, optimise functions

* Add exitWith return value to fnc_renameGroup

* tabs to spaces

* Small tweaks

* newlines

pre-empting newline gestapo

* input prompt caps

* Implement suggestions

* Remove already inherited value

* Per-side group name handling

* Add same group case sensitive changes.

* Suggestions

- Use ace_common_fnc_displayTextStructured
- Formatting
- Phrasing of strings

* replace spawn with CBA_fnc_execNextFrame

* Update addons/interaction/initSettings.sqf

Co-authored-by: PabstMirror <pabstmirror@gmail.com>

Co-authored-by: PabstMirror <pabstmirror@gmail.com>
This commit is contained in:
Seb 2021-10-12 18:53:35 +01:00 committed by GitHub
parent 3d9315529d
commit 88e774c30d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 195 additions and 0 deletions

View File

@ -303,6 +303,13 @@ class CfgVehicles {
showDisabled = 1; showDisabled = 1;
icon = QPATHTOF(UI\team\team_management_ca.paa); icon = QPATHTOF(UI\team\team_management_ca.paa);
}; };
class ACE_RenameGroup {
displayName = CSTRING(RenameGroup);
condition = QUOTE(_player call FUNC(canRenameGroup));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"};
statement = QUOTE(_player call FUNC(renameGroupUI));
showDisabled =1;
};
}; };
class ACE_Equipment { class ACE_Equipment {

View File

@ -32,6 +32,9 @@ PREP(canPardon);
PREP(pardon); PREP(pardon);
PREP(canPullOutBody); PREP(canPullOutBody);
PREP(pullOutBody); PREP(pullOutBody);
PREP(canRenameGroup);
PREP(renameGroupUI);
PREP(renameGroup);
// Weapon Attachments // Weapon Attachments
PREP(getWeaponAttachmentsActions); PREP(getWeaponAttachmentsActions);

View File

@ -19,3 +19,4 @@ class CfgPatches {
#include "RscTitles.hpp" #include "RscTitles.hpp"
#include "ACE_Settings.hpp" #include "ACE_Settings.hpp"
#include "ACE_ZeusActions.hpp" #include "ACE_ZeusActions.hpp"
#include "groupRename_GUI.hpp"

View File

@ -0,0 +1,20 @@
#include "script_component.hpp"
/*
* Author: Seb
* Checks if the unit is allowed to rename its group.
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Is this unit allowed to rename its group? <BOOL>
*
* Example:
* player call ace_interaction_fnc_canRenameGroup
*
* Public: No
*/
params [["_unit", objNull, [objNull]]];
GVAR(enableGroupRenaming) && {_unit == leader _unit}

View File

@ -0,0 +1,39 @@
#include "script_component.hpp"
/*
* Author: Seb
* Renames a group to a given string (groupID), whilst checking that it is not an invalid name.
*
* Arguments:
* 0: The group to be renamed <GROUP>
* 1: The new name of the group <STRING>
*
* Return Value:
* Whether the group was succesfully renamed <BOOL>
*
* Example:
* [group player, "leet squad"] call ace_interaction_fnc_renameGroup
*
* Public: No
*/
params [
["_group", grpNull, [grpNull]],
["_newName", "", [""]]
];
if (_newName isEqualTo (groupID _group)) exitWith {true};
private _lowerName = toLower _newName; // Case insensitive name search
private _nameAlreadyTaken = allGroups findIf {
side _x isEqualTo side _group
&& {_lowerName isEqualTo toLower (groupID _x)}
&& {_group != _x}
} != -1;
if (_nameAlreadyTaken) then {
[LLSTRING(RenameGroupAlreadyExists)] call EFUNC(common,displayTextStructured);
} else {
_group setGroupIdGlobal [_newName];
};
!_nameAlreadyTaken

View File

@ -0,0 +1,36 @@
#include "script_component.hpp"
/*
* Author: Seb
* Shows a UI to allow a unit to change its group ID.
*
* Arguments:
* 0: The unit renaming their group <OBJECT>
*
* Return Value:
* None
*
* Example:
* player call ace_interaction_fnc_renameGroupUI
*
* Public: No
*/
// delay a frame so we don't overlap with interaction-menu as it closes
[{
params [["_unit", objNull, [objNull]]];
private _display = findDisplay 46 createDisplay QGVAR(groupNameDisplay);
private _textCtrl = _display displayCtrl 451;
_textCtrl ctrlSetText (groupID group _unit);
_display setVariable [QGVAR(renamedGroup), group _unit];
_display displayAddEventHandler ["Unload", {
params ["_display", "_exitCode"];
if !(_exitCode isEqualTo 1) exitWith {};
private _group = _display getVariable QGVAR(renamedGroup);
private _textCtrl = _display displayCtrl 451;
private _newName = ctrlText _textCtrl;
[_group, _newName] call FUNC(renameGroup);
}];
}, _this] call CBA_fnc_execNextFrame;

View File

@ -0,0 +1,66 @@
#define FONT_H (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)
#define FONT_W (FONT_H / pixelH * pixelW)
#define GAP_W (pixelW * 2)
#define GAP_H (pixelH * 2)
#define ELEMENT_HEIGHT FONT_H + FONT_W
#define TOTAL_W FONT_W * 25
#define TOTAL_H FONT_H * 3 + GAP_H
class ctrlStatic;
class ctrlButton;
class ctrlEdit;
class ctrlStaticTitle;
class GVAR(groupNameDisplay) {
idd = -1;
enableSimulation = 1;
class ControlsBackground {
class Title: ctrlStaticTitle {
x = QUOTE(safeZoneX + (safeZoneW / 2) - TOTAL_W/2);
y = QUOTE(safeZoneY + (safeZoneH / 2) - (FONT_H * 1.2) - GAP_H);
w = QUOTE(TOTAL_W);
h = QUOTE(FONT_H * 1.2);
sizeEx = QUOTE(FONT_H * 1.2);
text = CSTRING(renameGroupInput);
};
class Background: ctrlStatic {
colorBackground[] = {0, 0, 0, 0.8};
x = QUOTE(safeZoneX + (safeZoneW / 2) - TOTAL_W/2);
y = QUOTE(safeZoneY + (safeZoneH / 2));
w = QUOTE(TOTAL_W);
h = QUOTE(ELEMENT_HEIGHT);
};
};
class controls {
class Input: ctrlEdit {
idc = 451;
x = QUOTE(safeZoneX + (safeZoneW / 2) - TOTAL_W/2 + FONT_W/2);
y = QUOTE(safeZoneY + (safeZoneH / 2) + FONT_W/2);
w = QUOTE(TOTAL_W - FONT_W);
h = QUOTE(ELEMENT_HEIGHT - FONT_W);
sizeEx = QUOTE(FONT_H);
};
class OkButton: ctrlButton {
idc = 1;
x = QUOTE(safeZoneX + (safeZoneW / 2) + TOTAL_W/2 - FONT_W * 15);
y = QUOTE(safeZoneY + (safeZoneH / 2) + ELEMENT_HEIGHT + GAP_H);
w = QUOTE(FONT_W * 15);
h = QUOTE(ELEMENT_HEIGHT - FONT_W);
sizeEx = QUOTE(FONT_H);
text = CSTRING(RenameGroup);
};
class CancelButton: ctrlButton {
idc = 2;
x = QUOTE(safeZoneX + (safeZoneW / 2) - TOTAL_W/2);
y = QUOTE(safeZoneY + (safeZoneH / 2) + ELEMENT_HEIGHT + GAP_H);
w = QUOTE(FONT_W * 6);
h = QUOTE(ELEMENT_HEIGHT - FONT_W);
sizeEx = QUOTE(FONT_H);
text = CSTRING(CancelSelection);
};
};
};

View File

@ -29,3 +29,11 @@
format ["ACE %1", LLSTRING(DisplayName)], format ["ACE %1", LLSTRING(DisplayName)],
true true
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
[
QGVAR(enableGroupRenaming), "CHECKBOX",
[LSTRING(EnableRenameGroup_DisplayName), LSTRING(EnableRenameGroup_Description)],
format ["ACE %1", LLSTRING(DisplayName)],
true,
true
] call CBA_fnc_addSetting;

View File

@ -323,6 +323,15 @@
<Chinese>成為隊長</Chinese> <Chinese>成為隊長</Chinese>
<Turkish>Lider ol</Turkish> <Turkish>Lider ol</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Interaction_RenameGroup">
<English>Rename Group</English>
</Key>
<Key ID="STR_ACE_Interaction_RenameGroupAlreadyExists">
<English>This group name is already in use.</English>
</Key>
<Key ID="STR_ACE_Interaction_RenameGroupInput">
<English>NEW GROUP NAME:</English>
</Key>
<Key ID="STR_ACE_Interaction_Dance"> <Key ID="STR_ACE_Interaction_Dance">
<English>DANCE!</English> <English>DANCE!</English>
<German>TANZEN!</German> <German>TANZEN!</German>
@ -1227,5 +1236,11 @@
<French>Cette option permet de fixer/retirer des accessoires d'arme à partir du menu d'interaction personnel.</French> <French>Cette option permet de fixer/retirer des accessoires d'arme à partir du menu d'interaction personnel.</French>
<Polish>Włącza akcje przyczepienia/odczepienia dodatków dla obecnej broni</Polish> <Polish>Włącza akcje przyczepienia/odczepienia dodatków dla obecnej broni</Polish>
</Key> </Key>
<Key ID="STR_ACE_Interaction_enableRenameGroup_DisplayName">
<English>Allow group rename</English>
</Key>
<Key ID="STR_ACE_Interaction_enableRenameGroup_Description">
<English>Allows a group leader to rename their group if the name is not already taken.</English>
</Key>
</Package> </Package>
</Project> </Project>