forge/arma/client/addons/org/functions/fnc_handleUIEvents.sqf
2026-03-07 15:23:01 -06:00

199 lines
6.8 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: IDSolutions
* Handles the UI events.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* call forge_client_org_fnc_handleUIEvents;
*
* Public: No
*/
params ["_control", "_isConfirmDialog", "_message"];
private _alert = fromJSON _message;
private _event = _alert get "event";
private _data = _alert get "data";
// private _display = displayChild findDisplay 46;
private _fnc_execBridge = {
params ["_control", "_fnName", "_payload"];
private _json = toJSON _payload;
_control ctrlWebBrowserAction ["ExecJS", format ["OrgUIBridge.%1(%2)", _fnName, _json]];
};
private _fnc_buildPortalPayload = {
private _orgData = GVAR(OrgClass) get "org";
private _name = _orgData getOrDefault ["name", "Unknown Organization"];
private _id = _orgData getOrDefault ["id", ""];
private _ownerUid = _orgData getOrDefault ["owner", ""];
private _funds = _orgData getOrDefault ["funds", 0];
private _reputation = _orgData getOrDefault ["reputation", 0];
private _assetsRaw = _orgData getOrDefault ["assets", createHashMap];
private _membersRaw = _orgData getOrDefault ["members", createHashMap];
private _fleetRaw = _orgData getOrDefault ["fleet", createHashMap];
private _headquarters = _orgData getOrDefault ["headquarters", "ArmA Verse"];
private _type = _orgData getOrDefault ["type", "Organization"];
private _status = _orgData getOrDefault ["status", "Operational"];
private _isDefaultOrg = (_orgData getOrDefault ["default", false])
|| {toLower _id isEqualTo "default"}
|| {toLower _ownerUid isEqualTo "server"};
private _playerName = name player;
private _playerUid = getPlayerUID player;
private _playerVar = vehicleVarName player;
private _sessionRole = "Member";
private _sessionIsCeo = _isDefaultOrg && {_playerVar isEqualTo "ceo"};
private _ownerName = ["", "Server"] select (toLower _ownerUid isEqualTo "server");
private _membersList = [];
{
private _memberData = _y;
private _memberName = _memberData getOrDefault ["name", "Unknown"];
private _memberUid = _memberData getOrDefault ["uid", ""];
if (_memberUid isEqualTo _ownerUid && {_ownerName isEqualTo ""}) then {
_ownerName = _memberName;
};
if (_memberUid isEqualTo _playerUid) then {
_sessionRole = "Member";
};
_membersList pushBack (createHashMapFromArray [
["name", _memberName]
]);
} forEach _membersRaw;
if (_ownerName isEqualTo "" && {_ownerUid isEqualTo _playerUid}) then {
_ownerName = _playerName;
};
if (_ownerName isEqualTo "" && {_ownerUid isNotEqualTo ""}) then {
_ownerName = "Unknown Owner";
};
if (_ownerUid isEqualTo _playerUid) then {
_sessionRole = "Leader";
};
private _assetsList = [];
{
private _assetData = _y;
_assetsList pushBack (createHashMapFromArray [
["name", _assetData getOrDefault ["name", "Unknown Asset"]],
["type", _assetData getOrDefault ["type", "items"]],
["quantity", str (_assetData getOrDefault ["quantity", 0])]
]);
} forEach _assetsRaw;
private _fleetList = [];
{
private _vehicleData = _y;
_fleetList pushBack (createHashMapFromArray [
["name", _vehicleData getOrDefault ["name", "Unknown Vehicle"]],
["type", _vehicleData getOrDefault ["type", "other"]],
["status", _vehicleData getOrDefault ["status", "Unknown"]],
["damage", _vehicleData getOrDefault ["damage", "0%"]]
]);
} forEach _fleetRaw;
private _roadmap = [
createHashMapFromArray [
["name", "Contracts Board"],
["status", "Planned"],
["detail", "Track payouts, assignments, and claim approvals."]
],
createHashMapFromArray [
["name", "Diplomacy"],
["status", "Future Review"],
["detail", "Possible future module pending a full design and scope review."]
],
createHashMapFromArray [
["name", "Logistics Queue"],
["status", "Future Review"],
["detail", "Possible future module pending a full design and scope review."]
],
createHashMapFromArray [
["name", "Permissions"],
["status", "Future Review"],
["detail", "Possible future module pending a full design and scope review."]
]
];
createHashMapFromArray [
["session", createHashMapFromArray [
["actorName", _playerName],
["actorUid", _playerUid],
["role", _sessionRole],
["ceo", _sessionIsCeo]
]],
["portalData", createHashMapFromArray [
["org", createHashMapFromArray [
["name", _name],
["tag", _id],
["type", _type],
["status", _status],
["headquarters", _headquarters],
["owner", _ownerName],
["ownerUid", _ownerUid],
["isDefault", _isDefaultOrg]
]],
["funds", _funds],
["reputation", _reputation],
["members", _membersList],
["fleet", _fleetList],
["assets", _assetsList],
["activity", []],
["roadmap", _roadmap]
]]
]
};
diag_log format ["[FORGE:Client:Org] Handling UI event: %1 with data: %2", _event, _data];
switch (_event) do {
case "org::close": { closeDialog 1; };
case "org::login::request": {
private _email = toLower (_data getOrDefault ["email", ""]);
private _password = _data getOrDefault ["password", ""];
private _orgData = GVAR(OrgClass) get "org";
private _orgId = _orgData getOrDefault ["id", ""];
private _orgName = _orgData getOrDefault ["name", ""];
if (_email isEqualTo "" || {_password isEqualTo ""}) exitWith {
[_control, "receiveLoginFailure", createHashMapFromArray [
["message", "Enter both email and password."]
]] call _fnc_execBridge;
};
if (_orgId isEqualTo "" && {_orgName isEqualTo ""}) exitWith {
[_control, "receiveLoginFailure", createHashMapFromArray [
["message", "No organization data is available for this player."]
]] call _fnc_execBridge;
};
[_control, "receiveLoginSuccess", call _fnc_buildPortalPayload] call _fnc_execBridge;
};
case "org::ready": {
[_control, "receive", createHashMapFromArray [
["event", "org::ready"],
["data", createHashMapFromArray [
["loaded", true]
]]
]] call _fnc_execBridge;
};
default { hint format ["Unhandled UI event: %1", _event]; };
};
true;