Divergent/mods/Shader Driven Scopes/gamedata/scripts/fakelens.script

110 lines
3.1 KiB
Plaintext
Raw Permalink Normal View History

2024-03-17 20:18:03 -04:00
-- CrookR 9/3/2021
-- Support for 2D scope shader, helper script for easier interfacing with engine. Uses
-- engine mod to expose information about the current scope texture and camera movement.
local scopeState = 0
local lastSens = ui_options.get("control/general/mouse_sens")
local scopeBaseFactors = {}
function actor_on_weapon_zoom_out()
exec_console_cmd("scope_2dtexactive " .. 0)
exec_console_cmd("scope_radius " .. 0.0)
end
function actor_on_before_death(whoID,flags)
exec_console_cmd("mouse_sens " .. lastSens)
exec_console_cmd("scope_radius " .. 0.0)
exec_console_cmd("scope_2dtexactive " .. 0)
end
function dbugscope()
--return
local ply = db.actor
if not ( ply and ply:alive() ) then return end
local wpn = db.actor:active_item()
local cweapon = wpn:cast_Weapon()
local zf = cweapon:GetZoomFactor()
local sf = get_console():get_float("scope_factor")
printf("--" .. wpn:id() .. "--")
printf("scope: " .. scopeState .. " | sensitivity: " .. ui_options.get("control/general/mouse_sens"))
printf("factor: " .. tostring(zf / sf) .. " | base zoom: " .. tostring(scopeBaseFactors[wpn:id()]))
end
function updateScope(enabled)
local ply = db.actor
if not ( ply and ply:alive() ) then return end
local wpn = db.actor:active_item()
if(enabled) then
-- scoping in
lastSens = ui_options.get("control/general/mouse_sens")
if wpn then
-- get scope name
local scopeName = nil
if wpn:weapon_scope_status() == 2 then
if wpn:weapon_is_scope() then
local scope = utils_item.get_attached_scope(wpn)
scopeName = utils_item.get_param(scope, wpn:id(), "scope_texture", "string")
end
else
scopeName = utils_item.get_param(wpn:section(), wpn:id(), "scope_texture", "string")
end
-- get radius
if scopeName and scopeRadii.scopeRadii[scopeName] then
-- apply radius
exec_console_cmd("scope_radius " .. scopeRadii.scopeRadii[scopeName])
-- adjust zoom for factor compensation
local cweapon = wpn:cast_Weapon()
local zf = cweapon:GetZoomFactor()
local sf = get_console():get_float("scope_factor")
-- scale zoom factor and sensitivity to scope factor, to keep things consistent
if cweapon and zf and sf then
-- store unmodified value so we don't accidentally stack
if not scopeBaseFactors[wpn:id()] then
scopeBaseFactors[wpn:id()] = zf
end
-- apply factor and sensitivity
cweapon:SetZoomFactor(scopeBaseFactors[wpn:id()] / sf)
exec_console_cmd("mouse_sens " .. (lastSens * sf))
--dbugscope()
end
end
end
else
-- scoping out
exec_console_cmd("scope_radius " .. 0.0)
exec_console_cmd("mouse_sens " .. lastSens)
end
end
function actor_on_update()
if not (get_console():get_integer("scope_2dtexactive") == scopeState) then
scopeState = get_console():get_integer("scope_2dtexactive")
updateScope(scopeState > 0)
--dbugscope()
end
end
function on_game_start()
RegisterScriptCallback( "actor_on_weapon_zoom_out", actor_on_weapon_zoom_out )
RegisterScriptCallback( "actor_on_update", actor_on_update )
RegisterScriptCallback( "actor_on_before_death", actor_on_before_death )
end