70a10826d2
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.
32 lines
1.1 KiB
Lua
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
|
|
})
|