nodecore-cd2025/mods/nc_player_setup/step_zoomfocus.lua
Aaron Suen 70a10826d2 Simplify progressive zoom controls
Just hold the zoom button for a couple of seconds
(gives the player a chance to take screenshots with
the fixed zoom level) and then progressive zoom will
kick in automatically as long as zoom and no other
input control is held down.

This also prevents problems with the sneak/aux
causing unwanted movement while zooming.
2023-11-05 12:40:32 -05:00

32 lines
1.1 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local nodecore
= nodecore
-- LUALOCALS > ---------------------------------------------------------
local zoom_base = 60 * nodecore.rate_adjustment("zoom", "base")
local zoom_ratio = 1 - 1 / (4 * nodecore.rate_adjustment("zoom", "ratio"))
local zoom_time = 2 * nodecore.rate_adjustment("zoom", "time")
nodecore.register_playerstep({
label = "zoom focus",
action = function(_, data)
local ctl = data.control
local focusing = ctl.zoom and (not ctl.sneak) and (not ctl.aux1)
and (not ctl.jump) and (not ctl.up) and (not ctl.down)
and (not ctl.left) and (not ctl.right)
local zoom = zoom_base
if focusing and data.zoomfocus then
local zoomqty = nodecore.gametime - data.zoomfocus - 2
if zoomqty < 0 then zoomqty = 0 end
zoom = zoom_base - zoom_base * zoom_ratio * (1 - 1 /
(zoomqty / zoom_time + 1))
else
data.zoomfocus = nodecore.gametime
end
local oldzoom = data.properties.zoom_fov or 0
if oldzoom > (zoom * 1.02) or oldzoom < zoom then
data.properties.zoom_fov = zoom
end
end
})