Files
VnUtest/garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_anim.lua
2026-03-31 10:27:04 +03:00

89 lines
1.9 KiB
Lua

function SWEP:PlayAnimation(seq, mult, lock, doidle)
mult = mult or 1
lock = lock or false
local anim = self:TranslateSequence(seq)
doidle = doidle or false
local reverse = false
if mult < 0 then
reverse = true
mult = -mult
end
local vm = self:GetVM()
if !IsValid(vm) then return end
if isstring(anim) then
seq = vm:LookupSequence(anim)
end
if seq == -1 then return end
self.CurrentAnimation = anim
self.CurrentSeqeunce = seq
local time = vm:SequenceDuration(seq)
time = time * mult
vm:SendViewModelMatchingSequence(seq)
if reverse then
vm:SetCycle(1)
vm:SetPlaybackRate(-1 / mult)
else
vm:SetCycle(0)
vm:SetPlaybackRate(1 / mult)
end
if lock then
self:SetAnimLockTime(CurTime() + time)
-- self:SetNextSecondaryFire(CurTime() + time)
else
self:SetAnimLockTime(0)
-- self:SetNextSecondaryFire(0)
end
if doidle and !self.NoIdle then
self:SetNextIdle(CurTime() + time)
else
self:SetNextIdle(math.huge)
end
self:SetLastProceduralFireTime(0)
return time
end
function SWEP:IdleAtEndOfAnimation()
local vm = self:GetVM()
local cyc = vm:GetCycle()
local duration = vm:SequenceDuration()
local rate = vm:GetPlaybackRate()
local time = (1 - cyc) * (duration / rate)
self:SetNextIdle(CurTime() + time)
end
function SWEP:Idle()
if self:GetPrimedGrenade() then return end
if self:GetBlindFire() then
if self:Clip1() == 0 then
self:PlayAnimation("blind_dryfire", 0, false, false)
else
self:PlayAnimation("blind_idle")
end
else
if self:Clip1() == 0 then
self:PlayAnimation("dryfire", 0, false, false)
else
self:PlayAnimation("idle")
end
end
self:SetReady(true)
end