From 0e595ca2ba30f58e3e7c3ce6408e1c2444ed3279 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 Jan 2017 20:24:38 +0100 Subject: [PATCH 1/3] make use of new mission eh for CBA player eh --- addons/events/fnc_addPlayerEventHandler.sqf | 46 ++++++++++++++----- .../events/fnc_removePlayerEventHandler.sqf | 6 ++- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/addons/events/fnc_addPlayerEventHandler.sqf b/addons/events/fnc_addPlayerEventHandler.sqf index 51bb69786..99231976e 100644 --- a/addons/events/fnc_addPlayerEventHandler.sqf +++ b/addons/events/fnc_addPlayerEventHandler.sqf @@ -108,10 +108,6 @@ if (_id != -1) then { GVAR(playerEHInfo) pushBack addMissionEventHandler ["EachFrame", { private _player = call CBA_fnc_currentUnit; - if !(_player isEqualTo GVAR(oldUnit)) then { - [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; - GVAR(oldUnit) = _player; - }; private _data = currentWeapon _player; if !(_data isEqualTo GVAR(oldWeapon)) then { @@ -140,12 +136,6 @@ if (_id != -1) then { }; }; - _data = vehicle _player; - if !(_data isEqualTo GVAR(oldVehicle)) then { - GVAR(oldVehicle) = _data; - [QGVAR(vehicleEvent), [_player, _data]] call CBA_fnc_localEvent; - }; - _data = _player call CBA_fnc_turretPath; if !(_data isEqualTo GVAR(oldTurret)) then { GVAR(oldTurret) = _data; @@ -163,13 +153,47 @@ if (_id != -1) then { GVAR(oldCameraView) = _data; [QGVAR(cameraViewEvent), [_player, _data]] call CBA_fnc_localEvent; }; + }]; + + GVAR(playerEHInfo) pushBack addMissionEventHandler ["PlayerViewChanged", { + private _player = call CBA_fnc_currentUnit; + + if !(_player isEqualTo GVAR(oldUnit)) then { + [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; + GVAR(oldUnit) = _player; + }; + }]; + + GVAR(playerEHInfo) pushBack addMissionEventHandler ["Map", { + private _data = visibleMap; + + if !(_data isEqualTo GVAR(oldVisibleMap)) then { + GVAR(oldVisibleMap) = _data; + [QGVAR(visibleMapEvent), [call CBA_fnc_currentUnit, _data]] call CBA_fnc_localEvent; + }; + }]; + + // emulate change to first value from default + { + private _player = call CBA_fnc_currentUnit; + + if !(_player isEqualTo GVAR(oldUnit)) then { + [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; + GVAR(oldUnit) = _player; + }; + + private _data = vehicle _player; + if !(_data isEqualTo GVAR(oldVehicle)) then { + GVAR(oldVehicle) = _data; + [QGVAR(vehicleEvent), [_player, _data]] call CBA_fnc_localEvent; + }; _data = visibleMap; if !(_data isEqualTo GVAR(oldVisibleMap)) then { GVAR(oldVisibleMap) = _data; [QGVAR(visibleMapEvent), [_player, _data]] call CBA_fnc_localEvent; }; - }]; + } call CBA_fnc_execNextFrame; }; GVAR(playerEHInfo) pushBack [_type, _id]; diff --git a/addons/events/fnc_removePlayerEventHandler.sqf b/addons/events/fnc_removePlayerEventHandler.sqf index 2fe679bf7..428b4a519 100644 --- a/addons/events/fnc_removePlayerEventHandler.sqf +++ b/addons/events/fnc_removePlayerEventHandler.sqf @@ -57,8 +57,10 @@ default {nil}; if (!isNil QGVAR(playerEHInfo)) then { GVAR(playerEHInfo) deleteAt (GVAR(playerEHInfo) find [_type, _id]); - if (count GVAR(playerEHInfo) == 1) then { - removeMissionEventHandler ["EachFrame", GVAR(playerEHInfo) select 0]; + if (count GVAR(playerEHInfo) == 3) then { + removeMissionEventHandler ["EachFrame", GVAR(playerEHInfo) select 0]; + removeMissionEventHandler ["PlayerViewChanged", GVAR(playerEHInfo) select 1]; + removeMissionEventHandler ["Map", GVAR(playerEHInfo) select 2]; GVAR(playerEHInfo) = nil; }; }; From 4b102d213e59fa3b459c02f9fcaebe63ab229b64 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 Jan 2017 21:18:47 +0100 Subject: [PATCH 2/3] make use of new mission eh for CBA player eh --- addons/events/fnc_addPlayerEventHandler.sqf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/events/fnc_addPlayerEventHandler.sqf b/addons/events/fnc_addPlayerEventHandler.sqf index 99231976e..efa8cb2a9 100644 --- a/addons/events/fnc_addPlayerEventHandler.sqf +++ b/addons/events/fnc_addPlayerEventHandler.sqf @@ -162,10 +162,16 @@ if (_id != -1) then { [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; GVAR(oldUnit) = _player; }; + + private _data = vehicle _player; + if !(_data isEqualTo GVAR(oldVehicle)) then { + GVAR(oldVehicle) = _data; + [QGVAR(vehicleEvent), [_player, _data]] call CBA_fnc_localEvent; + }; }]; GVAR(playerEHInfo) pushBack addMissionEventHandler ["Map", { - private _data = visibleMap; + params ["_data"]; //visibleMap is updated one frame later if !(_data isEqualTo GVAR(oldVisibleMap)) then { GVAR(oldVisibleMap) = _data; From 519a5ec025916cbb266352f658376ca843ec8a15 Mon Sep 17 00:00:00 2001 From: commy2 Date: Tue, 10 Jan 2017 23:00:49 +0100 Subject: [PATCH 3/3] don't delay first execution until after postInit --- addons/events/fnc_addPlayerEventHandler.sqf | 41 +++++++++++---------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/addons/events/fnc_addPlayerEventHandler.sqf b/addons/events/fnc_addPlayerEventHandler.sqf index efa8cb2a9..f4eb0997d 100644 --- a/addons/events/fnc_addPlayerEventHandler.sqf +++ b/addons/events/fnc_addPlayerEventHandler.sqf @@ -179,27 +179,30 @@ if (_id != -1) then { }; }]; - // emulate change to first value from default - { - private _player = call CBA_fnc_currentUnit; - - if !(_player isEqualTo GVAR(oldUnit)) then { - [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; - GVAR(oldUnit) = _player; - }; + // emulate change to first value from default one frame later + // using spawn-dc to not having to wait for postInit to complete + 0 spawn { + { + private _player = call CBA_fnc_currentUnit; + + if !(_player isEqualTo GVAR(oldUnit)) then { + [QGVAR(unitEvent), [_player, GVAR(oldUnit)]] call CBA_fnc_localEvent; + GVAR(oldUnit) = _player; + }; - private _data = vehicle _player; - if !(_data isEqualTo GVAR(oldVehicle)) then { - GVAR(oldVehicle) = _data; - [QGVAR(vehicleEvent), [_player, _data]] call CBA_fnc_localEvent; - }; + private _data = vehicle _player; + if !(_data isEqualTo GVAR(oldVehicle)) then { + GVAR(oldVehicle) = _data; + [QGVAR(vehicleEvent), [_player, _data]] call CBA_fnc_localEvent; + }; - _data = visibleMap; - if !(_data isEqualTo GVAR(oldVisibleMap)) then { - GVAR(oldVisibleMap) = _data; - [QGVAR(visibleMapEvent), [_player, _data]] call CBA_fnc_localEvent; - }; - } call CBA_fnc_execNextFrame; + _data = visibleMap; + if !(_data isEqualTo GVAR(oldVisibleMap)) then { + GVAR(oldVisibleMap) = _data; + [QGVAR(visibleMapEvent), [_player, _data]] call CBA_fnc_localEvent; + }; + } call CBA_fnc_directCall; + }; }; GVAR(playerEHInfo) pushBack [_type, _id];