Skip to content

Commit

Permalink
Common - Add addPlayerEH for adding EHs to ace_player (acemod#10056)
Browse files Browse the repository at this point in the history
* Common - Add `addPlayerEH` for adding EHs to ace_player

* Update fnc_addPlayerEH.sqf

* convert ui to use new func
  • Loading branch information
PabstMirror authored and blake8090 committed Aug 18, 2024
1 parent 560d4dd commit 8f67914
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 34 deletions.
1 change: 1 addition & 0 deletions addons/common/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ PREP(_handleRequestAllSyncedEvents);
PREP(addActionEventHandler);
PREP(addActionMenuEventHandler);
PREP(addMapMarkerCreatedEventHandler);
PREP(addPlayerEH);

PREP(removeActionEventHandler);
PREP(removeActionMenuEventHandler);
Expand Down
61 changes: 61 additions & 0 deletions addons/common/functions/fnc_addPlayerEH.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "..\script_component.hpp"
/*
* Author: PabstMirror
* Adds event handler just to ACE_player
*
* Arguments:
* 0: Key <STRING>
* 1: Event Type <STRING>
* 2: Event Code <CODE>
* 3: Ignore Virtual Units (spectators, virtual zeus, uav RC) <BOOL> (default: false)
*
* Return Value:
* None
*
* Example:
* ["example", "FiredNear", {systemChat str _this}] call ace_common_fnc_addPlayerEH
*
* Public: Yes
*/
params [["_key", "", [""]], ["_type", "", [""]], ["_code", {}, [{}]], ["_ignoreVirtual", false, [false]]];
TRACE_3("addPlayerEH",_key,_type,_ignoreVirtual);

if (isNil QGVAR(playerEventsHash)) then { // first-run init
GVAR(playerEventsHash) = createHashMap;
["unit", {
params ["_newPlayer", "_oldPlayer"];
// uav check only applies to direct controlling UAVs from zeus, no effect on normal UAV operation
private _isVirutal = (unitIsUAV _newPlayer) || {getNumber (configOf _newPlayer >> "isPlayableLogic") == 1};

TRACE_4("",_newPlayer,_oldPlayer,_isVirutal,count GVAR(playerEventsHash));
{
_y params ["_type", "_code", "_ignoreVirtual"];

private _oldEH = _oldPlayer getVariable [_x, -1];
if (_oldEH != -1) then {
_oldPlayer removeEventHandler [_type, _oldEH];
_oldPlayer setVariable [_x, nil];
};

_oldEH = _newPlayer getVariable [_x, -1];
if (_oldEH != -1) then { continue }; // if respawned then var and EH already exists
if (_ignoreVirtual && _isVirutal) then { continue };

private _newEH = _newPlayer addEventHandler [_type, _code];
_newPlayer setVariable [_x, _newEH];
} forEach GVAR(playerEventsHash);
}, false] call CBA_fnc_addPlayerEventHandler;
};


_key = format [QGVAR(playerEvents_%1), toLower _key];
if (_key in GVAR(playerEventsHash)) exitWith { ERROR_1("bad key %1",_this); };

GVAR(playerEventsHash) set [_key, [_type, _code, _ignoreVirtual]];

if (isNull ACE_player) exitWith {};
if (_ignoreVirtual && {(unitIsUAV ACE_player) || {getNumber (configOf ACE_player >> "isPlayableLogic") == 1}}) exitWith {};

// Add event now
private _newEH = ACE_player addEventHandler [_type, _code];
ACE_player setVariable [_key, _newEH];
1 change: 0 additions & 1 deletion addons/ui/XEH_PREP.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
PREP(compileConfigUI);
PREP(handlePlayerChanged);
PREP(handleSpeedIndicator);
PREP(moduleInit);
PREP(onAnimChanged);
Expand Down
2 changes: 1 addition & 1 deletion addons/ui/XEH_clientInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@ GVAR(elementsSet) = call CBA_fnc_createNamespace;
}] call CBA_fnc_addEventHandler;
}] call CBA_fnc_addEventHandler;

["unit", LINKFUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler;
[QUOTE(ADDON), "AnimChanged", LINKFUNC(onAnimChanged)] call EFUNC(common,addPlayerEH);
32 changes: 0 additions & 32 deletions addons/ui/functions/fnc_handlePlayerChanged.sqf

This file was deleted.

0 comments on commit 8f67914

Please sign in to comment.