29 lines
1011 B
Lua
29 lines
1011 B
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.sneak 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
|
|
zoom = zoom_base - zoom_base * zoom_ratio * (1 - 1 /
|
|
((nodecore.gametime - data.zoomfocus) / 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
|
|
})
|