diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 5c2ad1e592..881d77e156 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -312,6 +312,15 @@ if (hasInterface) then { }, 0, []] call cba_fnc_addPerFrameHandler; }; +// Time handling +ACE_time = diag_tickTime; +ACE_realTime = diag_tickTime; +ACE_virtualTime = diag_tickTime; +ACE_gameTime = time; + +PREP(timePFH); +[FUNC(timePFH), 0, []] call cba_fnc_addPerFrameHandler; + // Init toHex [0] call FUNC(toHex); diff --git a/addons/common/functions/fnc_timePFH.sqf b/addons/common/functions/fnc_timePFH.sqf new file mode 100644 index 0000000000..7f1c815bac --- /dev/null +++ b/addons/common/functions/fnc_timePFH.sqf @@ -0,0 +1,26 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_lastTime", "_lastRealTime", "_lastVirtualTime", "_lastGameTime", "_delta"]; + +_lastTime = ACE_time; +_lastRealTime = ACE_realTime; +_lastVirtualTime = ACE_virtualTime; +_lastGameTime = ACE_gameTime; +_lastPausedTime = ACE_pausedTime; +_lastVirtualPausedTime = ACE_virtualPausedTime; + +ACE_gameTime = time; +ACE_realTime = diag_tickTime; + +_delta = ACE_realTime - _lastRealTime; +if(time <= _lastGameTime) then { + // Game is paused or not running + ACE_pausedTime = ACE_pausedTime + _delta; + ACE_virtualPausedTime = ACE_pausedTime + (_delta * accTime); +} else { + // Time is updating + ACE_virtualTime = _lastVirtualTime + (_delta * accTime); + ACE_time = ACE_realTime + _delta; +}; +