-- @ Version: SCREEN SPACE SHADERS - UPDATE 15
-- @ Description: Shadow Cascades script
-- @ Author: https://www.moddb.com/members/ascii1457
-- @ Mod: https://www.moddb.com/mods/stalker-anomaly/addons/screen-space-shaders

-- Shadow Cascades
local ssfx_shw_cas_size_1 = 0
local ssfx_shw_cas_size_2 = 0
local ssfx_shw_cas_size_3 = 0

-- Grass shadows settings
local ssfx_shw_cas_grass_quality = 0
local ssfx_shw_cas_grass_distance = 0
local ssfx_shw_cas_grass_nondir_max_distance = 0

function apply_shadow_cascades_settings()

	get_console():execute("ssfx_shadow_cascades (" .. ssfx_shw_cas_size_1 .. "," .. ssfx_shw_cas_size_2 .. "," .. ssfx_shw_cas_size_3 .. ")")
	
	get_console():execute("ssfx_grass_shadows (" .. ssfx_shw_cas_grass_quality .. "," .. ssfx_shw_cas_grass_distance .. "," .. ssfx_shw_cas_grass_nondir_max_distance .. ",0)")

end

function on_option_change()
	
	-- Get settings
	ssfx_shw_cas_size_1 = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "size_1", ssfx_shadow_cascades_settings)
	ssfx_shw_cas_size_2 = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "size_2", ssfx_shadow_cascades_settings)
	ssfx_shw_cas_size_3 = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "size_3", ssfx_shadow_cascades_settings)

	ssfx_shw_cas_grass_quality = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "grass_shw_quality", ssfx_shadow_cascades_settings)
	ssfx_shw_cas_grass_distance = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "grass_shw_distance", ssfx_shadow_cascades_settings) / 100
	ssfx_shw_cas_grass_nondir_max_distance = ssfx_001_mcm.ssfx_get_setting("shw_cascades", "grass_shw_nondir_maxdistance", ssfx_shadow_cascades_settings)

	-- Clamp Distance 0 ~ 1
	if (ssfx_shw_cas_grass_distance < 0) then
		ssfx_shw_cas_grass_distance = 0
	elseif (ssfx_shw_cas_grass_distance > 1) then
		ssfx_shw_cas_grass_distance = 1
	end

	-- Limit cascades sizes to avoid rendering glitches
	if (ssfx_shw_cas_size_1 < 10) then 
		ssfx_shw_cas_size_1 = 10
	elseif (ssfx_shw_cas_size_1 > 30) then 
		ssfx_shw_cas_size_1 = 30
	end

	if (ssfx_shw_cas_size_2 < 40) then 
		ssfx_shw_cas_size_2 = 40
	elseif (ssfx_shw_cas_size_2 > 110) then 
		ssfx_shw_cas_size_2 = 110
	end

	if (ssfx_shw_cas_size_3 < 120) then 
		ssfx_shw_cas_size_3 = 120
	elseif (ssfx_shw_cas_size_3 > 300) then 
		ssfx_shw_cas_size_3 = 300
	end

	-- Apply settings
	apply_shadow_cascades_settings()

end

function on_game_start()

	-- General Functions
	RegisterScriptCallback("on_option_change", on_option_change)
	
	-- Read and apply settigns
	on_option_change()
end