mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
73 lines
2.3 KiB
Lua
73 lines
2.3 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 ang0 = Angle(0, 0, 0)
|
|
SWEP.ClientFreeAimAng = Angle(ang0)
|
|
|
|
function SWEP:ShouldFreeAim()
|
|
if self:GetOwner():IsNPC() then return false end
|
|
if (ArcCW.ConVars["freeaim"]:GetInt() == 0 or self:GetBuff_Override("NeverFreeAim", self.NeverFreeAim)) and !self:GetBuff_Override("AlwaysFreeAim", self.AlwaysFreeAim) then return false end
|
|
return true
|
|
end
|
|
|
|
function SWEP:FreeAimMaxAngle()
|
|
local ang = self.FreeAimAngle and self:GetBuff("FreeAimAngle") or math.Clamp(self:GetBuff("HipDispersion") / 80, 3, 10)
|
|
return ang
|
|
end
|
|
|
|
function SWEP:ThinkFreeAim()
|
|
if self:ShouldFreeAim() then
|
|
local diff = self:GetOwner():EyeAngles() - self:GetLastAimAngle()
|
|
--diff = diff * 2
|
|
|
|
local freeaimang = Angle(self:GetFreeAimAngle())
|
|
|
|
local max = self:FreeAimMaxAngle()
|
|
|
|
local delta = math.min(self:GetSightDelta(),
|
|
self:CanShootWhileSprint() and 1 or (1 - self:GetSprintDelta()),
|
|
self:GetState() == ArcCW.STATE_CUSTOMIZE and 0 or 1)
|
|
|
|
max = max * delta
|
|
|
|
diff.p = math.NormalizeAngle(diff.p)
|
|
diff.y = math.NormalizeAngle(diff.y)
|
|
|
|
diff = diff * Lerp(delta, 1, 0.25)
|
|
|
|
freeaimang.p = math.Clamp(math.NormalizeAngle(freeaimang.p) + math.NormalizeAngle(diff.p), -max, max)
|
|
freeaimang.y = math.Clamp(math.NormalizeAngle(freeaimang.y) + math.NormalizeAngle(diff.y), -max, max)
|
|
|
|
local ang2d = math.atan2(freeaimang.p, freeaimang.y)
|
|
local mag2d = math.sqrt(math.pow(freeaimang.p, 2) + math.pow(freeaimang.y, 2))
|
|
|
|
mag2d = math.min(mag2d, max)
|
|
|
|
freeaimang.p = mag2d * math.sin(ang2d)
|
|
freeaimang.y = mag2d * math.cos(ang2d)
|
|
|
|
self:SetFreeAimAngle(freeaimang)
|
|
|
|
if CLIENT then
|
|
self.ClientFreeAimAng = freeaimang
|
|
end
|
|
end
|
|
|
|
self:SetLastAimAngle(self:GetOwner():EyeAngles())
|
|
end
|
|
|
|
function SWEP:GetFreeAimOffset()
|
|
if !self:ShouldFreeAim() then return ang0 end
|
|
if CLIENT then
|
|
return self.ClientFreeAimAng
|
|
else
|
|
return self:GetFreeAimAngle()
|
|
end
|
|
end |