ACE3/TO_MERGE/agm/Movement/fatigue.sqf

56 lines
1.5 KiB
Plaintext

// by commy2
#define THRESHOLD_1 0.8
#define THRESHOLD_2 0.9
#define THRESHOLD_3 0.99
// init onEachFrame EH
AGM_UpdatePlayerFatigue_EHID = ["AGM_UpdatePlayerFatigue", "onEachFrame", {
_player = AGM_player;
// calc new fatigue
_fatigue = getFatigue _player;
_fatigueOld = _player getVariable ["AGM_Fatigue", getFatigue _player];
if (_fatigue > _fatigueOld) then {
_fatigue = _fatigueOld + (missionNamespace getVariable ["AGM_Fatigue_CoefFatigue", 1]) * (_fatigue - _fatigueOld) max 0 min 1;
} else {
_fatigue = _fatigueOld - (missionNamespace getVariable ["AGM_Fatigue_CoefRecover", 1]) * (_fatigueOld - _fatigue) max 0 min 1;
};
_player setFatigue _fatigue;
_player setVariable ["AGM_Fatigue", _fatigue];
["Fatigue", _player, {getFatigue _this}] call AGM_Debug_fnc_log;
}] call BIS_fnc_addStackedEventHandler;
// init script ehids
_handleRecoil = scriptNull;
_handleBlinking = scriptNull;
_handleHeartbeat = scriptNull;
_handleStumble = scriptNull;
// apply fatigue effects
while {true} do {
_fatigue = getFatigue AGM_player;
if (_fatigue > THRESHOLD_1) then {
if (scriptDone _handleHeartbeat) then {
_handleHeartbeat = call AGM_Movement_fnc_heartbeat;
};
if (_fatigue > THRESHOLD_2) then {
if (scriptDone _handleBlinking) then {
_handleBlinking = call AGM_Movement_fnc_blinking;
};
if (_fatigue > THRESHOLD_3) then {
if (scriptDone _handleStumble) then {
_handleStumble = call AGM_Movement_fnc_stumble;
};
};
};
};
sleep 0.5;
};