From 80370075415707a022fad5c7bab7b8a5379343f3 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Wed, 21 Oct 2020 17:12:55 -0500 Subject: [PATCH] Night Vision - Add scotopic effects to normal vision when dark --- addons/nightvision/XEH_PREP.hpp | 1 + addons/nightvision/XEH_postInit.sqf | 15 +++++- .../functions/fnc_scotopicEffects.sqf | 48 +++++++++++++++++++ addons/nightvision/initSettings.sqf | 8 ++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 addons/nightvision/functions/fnc_scotopicEffects.sqf diff --git a/addons/nightvision/XEH_PREP.hpp b/addons/nightvision/XEH_PREP.hpp index c212d22b18..75f9d4613d 100644 --- a/addons/nightvision/XEH_PREP.hpp +++ b/addons/nightvision/XEH_PREP.hpp @@ -9,4 +9,5 @@ PREP(onVisionModeChanged); PREP(pfeh); PREP(refreshGoggleType); PREP(scaleCtrl); +PREP(scotopicEffects); PREP(setupDisplayEffects); diff --git a/addons/nightvision/XEH_postInit.sqf b/addons/nightvision/XEH_postInit.sqf index 70023223fb..dd6e2922f3 100644 --- a/addons/nightvision/XEH_postInit.sqf +++ b/addons/nightvision/XEH_postInit.sqf @@ -24,7 +24,7 @@ GVAR(ppeffectBlur) = -1; GVAR(isUsingMagnification) = false; ["ace_settingsInitialized", { - TRACE_4("settingsInitialized",GVAR(disableNVGsWithSights),GVAR(fogScaling),GVAR(noiseScaling),GVAR(effectScaling)); + TRACE_5("settingsInitialized",GVAR(disableNVGsWithSights),GVAR(fogScaling),GVAR(noiseScaling),GVAR(effectScaling),GVAR(scotopicEffects)); ["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler; ["loadout", LINKFUNC(onLoadoutChanged), true] call CBA_fnc_addPlayerEventHandler; @@ -46,6 +46,19 @@ GVAR(isUsingMagnification) = false; [true] call FUNC(setupDisplayEffects); }; }]; + + if (GVAR(scotopicEffects)) then { + +GVAR(scoTestToggle) = true; +["test", "test", "test", { + GVAR(scoTestToggle) = !GVAR(scoTestToggle); +}, {false}, [0x21, [false, false, false]], false] call CBA_fnc_addKeybind; // F Key + + + GVAR(scotopicCC) = ppEffectCreate ["colorCorrections", 1502]; + GVAR(scotopicCC) ppEffectForceInNVG false; + [FUNC(scotopicEffects), [], 1] call CBA_fnc_waitAndExecute; + }; }] call CBA_fnc_addEventHandler; diff --git a/addons/nightvision/functions/fnc_scotopicEffects.sqf b/addons/nightvision/functions/fnc_scotopicEffects.sqf new file mode 100644 index 0000000000..df0baf3fa5 --- /dev/null +++ b/addons/nightvision/functions/fnc_scotopicEffects.sqf @@ -0,0 +1,48 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Adjusts color and luminosity when in dark conditions. + * Simulates rod and cones vision by decreasing color intensity when dark. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_nightvision_fnc_scotopicEffects + * + * Public: No + */ +private _unit = ACE_player; + +if (EGVAR(common,OldIsCamera) || {!alive _unit} || {currentVisionMode _unit != 0}) exitWith { + GVAR(scotopicCC) ppEffectEnable false; + [FUNC(scotopicEffects), [], 0.1] call CBA_fnc_waitAndExecute; +}; + +getLighting params ["", "_ambientLightBrightness"]; +(getLightingAt _unit) params ["", "", "", "_dynamiclightBrightness"]; + +private _light = _ambientLightBrightness + 5 * _dynamiclightBrightness; +if (_light > 30) exitWith { + GVAR(scotopicCC) ppEffectEnable false; + // if it's day, we can go to sleep for a long while (but won't be responsive to skipTime?) + [FUNC(scotopicEffects), [], [1, 120] select (_ambientLightBrightness > 100)] call CBA_fnc_waitAndExecute; +}; + +private _intensity = if (_light > 5) then { + linearConversion [5, 30, _light, 0.3, 0, true]; // Mesopic +} else { + linearConversion [0, 5, _light, 0.6, 0.3, true]; // Scotopic +}; + +systemChat format ["%1 - %2", _light, _intensity]; + +GVAR(scotopicCC) ppEffectEnable GVAR(scoTestToggle) && true; +// "players like the night blue" +GVAR(scotopicCC) ppEffectAdjust [1,1,0,[1,1,1,0],[_intensity*.95, _intensity*.95,_intensity*1.1, 1-_intensity], [0.15, 1.0, 1.50, 1]]; +GVAR(scotopicCC) ppEffectCommit 1; + +[FUNC(scotopicEffects), [], 1] call CBA_fnc_waitAndExecute; diff --git a/addons/nightvision/initSettings.sqf b/addons/nightvision/initSettings.sqf index 9ccf2cc7f9..6a82fcf595 100644 --- a/addons/nightvision/initSettings.sqf +++ b/addons/nightvision/initSettings.sqf @@ -84,3 +84,11 @@ true, // default value false // isGlobal ] call CBA_settings_fnc_init; + +[ + QGVAR(scotopicEffects), "CHECKBOX", + [LSTRING(scotopicEffects_DisplayName), LSTRING(scotopicEffects_description)], + localize LSTRING(Category), + false, // default value + true // isGlobal +] call CBA_settings_fnc_init;