mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
73
lua/weapons/arccw_base/sh_freeaim.lua
Normal file
73
lua/weapons/arccw_base/sh_freeaim.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user