diff --git a/addons/nightvision/XEH_PREP.hpp b/addons/nightvision/XEH_PREP.hpp index 988cfaa623e..abc60b9cc74 100644 --- a/addons/nightvision/XEH_PREP.hpp +++ b/addons/nightvision/XEH_PREP.hpp @@ -9,5 +9,6 @@ PREP(onVisionModeChanged); PREP(pfeh); PREP(refreshGoggleType); PREP(scaleCtrl); +PREP(scotopicEffects); PREP(setupDisplayEffects); PREP(statTextStatement_NVGeneration); diff --git a/addons/nightvision/XEH_postInit.sqf b/addons/nightvision/XEH_postInit.sqf index 9bfee4d166c..721512c845d 100644 --- a/addons/nightvision/XEH_postInit.sqf +++ b/addons/nightvision/XEH_postInit.sqf @@ -21,10 +21,12 @@ GVAR(ppeffectRadialBlur) = -1; GVAR(ppeffectColorCorrect) = -1; GVAR(ppeffectBlur) = -1; +GVAR(scotopicCC) = -1; + GVAR(isUsingMagnification) = false; ["CBA_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,7 +48,23 @@ GVAR(isUsingMagnification) = false; [false] call FUNC(setupDisplayEffects); [true] call FUNC(setupDisplayEffects); }; + if (GVAR(scotopicCC) > -1) then { + ppEffectDestroy GVAR(scotopicCC); + GVAR(scotopicCC) = ppEffectCreate ["colorCorrections", 1502]; + GVAR(scotopicCC) ppEffectForceInNVG false; + }; }]; + + 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; + [0] call FUNC(scotopicEffects); // self-loops + }; }] 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 00000000000..69553643106 --- /dev/null +++ b/addons/nightvision/functions/fnc_scotopicEffects.sqf @@ -0,0 +1,54 @@ +#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: + * 0: Last Intensity + * + * Return Value: + * None + * + * Example: + * [0] call ace_nightvision_fnc_scotopicEffects + * + * Public: No + */ +#define TIME_INTERVAL 0.333 +private _unit = ACE_player; + +if (EGVAR(common,OldIsCamera) || {!alive _unit} || {currentVisionMode _unit != 0}) exitWith { + GVAR(scotopicCC) ppEffectEnable false; + [FUNC(scotopicEffects), [0], 0.1] call CBA_fnc_waitAndExecute; +}; + +(getLightingAt _unit) params ["", "_ambientLight", "", "_dynamiclight"]; +private _light = _ambientLight + 2 * _dynamiclight; + +#ifdef DEBUG_MODE_FULL +systemChat format ["[%1, %2] = %3", [_ambientLight,1,1] call CBA_fnc_formatNumber, [_dynamiclight,1,1] call CBA_fnc_formatNumber, _light]; +#endif + +if ((_light > 50) && {(param [0, 0]) == 0}) exitWith { // make sure we've faded out before disabling + GVAR(scotopicCC) ppEffectEnable false; + // if it's day, we can go to sleep for a long while (won't be responsive to scripted-skipTime) + [FUNC(scotopicEffects), [0], [TIME_INTERVAL, 60] select (_ambientLight > 100)] call CBA_fnc_waitAndExecute; +}; + +private _intensity = if (_light > 5) then { + linearConversion [5, 50, _light, 0.3, 0, true]; // Mesopic +} else { + linearConversion [0, 6, _light, 0.6, 0.3, true]; // Scotopic +}; + +#ifdef DEBUG_MODE_FULL +systemChat format ["@%1", _intensity]; +#endif + +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 TIME_INTERVAL; + +[FUNC(scotopicEffects), [_intensity], TIME_INTERVAL] call CBA_fnc_waitAndExecute; diff --git a/addons/nightvision/initSettings.sqf b/addons/nightvision/initSettings.sqf index afcc7250c90..c6caeb2a222 100644 --- a/addons/nightvision/initSettings.sqf +++ b/addons/nightvision/initSettings.sqf @@ -82,3 +82,11 @@ true, // default value false // isGlobal ] call CBA_fnc_addSetting; + +[ + QGVAR(scotopicEffects), "CHECKBOX", + [LSTRING(scotopicEffects_DisplayName), LSTRING(scotopicEffects_description)], + localize LSTRING(Category), + false, // default value + true // isGlobal +] call CBA_fnc_addSetting; diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index c7d9e6e9135..c3aa5ab7727 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -538,5 +538,11 @@ Gen %1 Gen %1 + + Scotopic Effects + + + Adjusts color and luminosity when in dark conditions. Simulates rod and cones vision by decreasing color intensity when dark. +