Files
wnsrc/gamemodes/helix/plugins/act/cl_hooks.lua
lifestorm c6d9b6f580 Upload
2024-08-05 18:40:29 +03:00

124 lines
3.1 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
local PLUGIN = PLUGIN
PLUGIN.cameraWheelOffset = 1
PLUGIN.cameraWheelDelta = PLUGIN.cameraWheelOffset
PLUGIN.cameraInOutOffset = 0
PLUGIN.cameraInOutDelta = PLUGIN.cameraInOutOffset
local function GetHeadBone(client)
local head
for i = 1, client:GetBoneCount() do
if (string.find(client:GetBoneName(i):lower(), "head")) then
head = i
break
end
end
return head
end
function PLUGIN:PlayerBindPress(client, bind, bPressed)
if (!client:GetNetVar("actEnterAngle")) then
return
end
if (bind:find("+jump") and bPressed) then
ix.command.Send("ExitAct")
PLUGIN.cameraInOutOffset = ix.option.Get("thirdpersonEnabled") and 1 or 0
return true
end
end
function PLUGIN:InputMouseApply(cmd)
if !LocalPlayer():GetNetVar("actEnterAngle") then
return
end
local mouseWheel = cmd:GetMouseWheel()
if mouseWheel != 0 then
self.cameraWheelOffset = math.Clamp(self.cameraWheelOffset + (-mouseWheel * 0.5), 1.0, 1.5)
end
end
local traceMin = Vector(-4, -4, -4)
local traceMax = Vector(4, 4, 4)
function PLUGIN:CalcView(client, origin)
if !client:GetNetVar("actEnterAngle") then
return
end
local frameTime = FrameTime()
self.cameraWheelDelta = math.Approach(self.cameraWheelDelta, self.cameraWheelOffset, frameTime * 6)
self.cameraInOutDelta = math.Approach(self.cameraInOutDelta, self.cameraInOutOffset, frameTime * 4)
local view = {}
view.drawviewer = self.cameraInOutDelta >= 0.225 * (self.cameraWheelOffset * 0.1)
local head = GetHeadBone(client)
local headOffset = Vector(0, 0, 64)
if head then
headOffset = client:GetBonePosition(head)
end
local currentAngle = client.camAng or angle_zero
local tracePosition = {}
tracePosition.start = headOffset + client:GetNetVar("actEnterAngle"):Forward() * 10
tracePosition.endpos = tracePosition.start - currentAngle:Forward() * (70 * self.cameraInOutDelta) * self.cameraWheelDelta
tracePosition.filter = client
tracePosition.ignoreworld = false
tracePosition.mins = traceMin
tracePosition.maxs = traceMax
view.origin = util.TraceHull(tracePosition).HitPos
view.angles = currentAngle + client:GetViewPunchAngles()
local aimOrigin = view.origin
local traceAngle = {}
traceAngle.start = aimOrigin
traceAngle.endpos = aimOrigin + currentAngle:Forward() * 65535
traceAngle.filter = client
traceAngle.ignoreworld = (client:GetMoveType() == MOVETYPE_NOCLIP)
client:SetEyeAngles((util.TraceLine(traceAngle).HitPos - client:GetShootPos()):Angle())
return view
end
net.Receive("ixActEnter", function()
if ix.option.Get("thirdpersonEnabled") then
PLUGIN.cameraInOutOffset = 1
PLUGIN.cameraInOutDelta = PLUGIN.cameraInOutOffset
end
PLUGIN.cameraInOutOffset = 1
end)
net.Receive("ixActLeave", function()
PLUGIN.cameraWheelOffset = 1
PLUGIN.cameraWheelDelta = PLUGIN.cameraWheelOffset
PLUGIN.cameraInOutOffset = 0
PLUGIN.cameraInOutDelta = PLUGIN.cameraInOutOffset
end)