Files
wnsrc/lua/pac3/core/client/parts/gesture.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

125 lines
2.7 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 BUILDER, PART = pac.PartTemplate("base")
PART.ClassName = "gesture"
PART.ThinkTime = 0
PART.Group = 'entity'
PART.Icon = 'icon16/thumb_up.png'
BUILDER:StartStorableVars()
BUILDER:GetSet("Loop", false)
BUILDER:GetSet("GestureName", "", {editor_panel = "sequence"})
BUILDER:GetSet("SlotName", "attackreload", {enums = function(part) return part.ValidGestureSlots end})
BUILDER:GetSet("SlotWeight", 1)
BUILDER:EndStorableVars()
PART.ValidGestureSlots = {
attackreload = GESTURE_SLOT_ATTACK_AND_RELOAD,
grenade = GESTURE_SLOT_GRENADE,
jump = GESTURE_SLOT_JUMP,
swim = GESTURE_SLOT_SWIM,
flinch = GESTURE_SLOT_FLINCH,
vcd = GESTURE_SLOT_VCD,
custom = GESTURE_SLOT_CUSTOM
}
function PART:GetSequenceList()
local ent = self:GetOwner()
if ent:IsValid() then
return ent:GetSequenceList()
end
return {"none"}
end
function PART:GetSlotID()
return self.ValidGestureSlots[self.SlotName] or GESTURE_SLOT_CUSTOM
end
function PART:SetLoop(bool)
self.Loop = bool
if not self:IsHidden() then
self:OnShow()
end
end
function PART:SetGestureName(name)
self.GestureName = name
local list = name:Split(";")
for k,v in next,list do
if v:Trim() == "" then list[k] = nil end
end
self.random_gestlist = list
if not self:IsHidden() then
self:OnShow()
end
end
function PART:SetSlotName(name)
local ent = self:GetOwner()
if ent:IsValid() and ent:IsPlayer() then -- to stop gestures getting stuck
for _, v in next,self.ValidGestureSlots do
ent:AnimResetGestureSlot(v)
end
end
self.SlotName = name
if not self:IsHidden() then
self:OnShow()
end
end
function PART:SetSlotWeight(num)
local ent = self:GetOwner()
if ent:IsValid() and ent:IsPlayer() then
ent:AnimSetGestureWeight(self:GetSlotID(), num)
end
self.SlotWeight = num
end
function PART:OnShow()
local ent = self:GetOwner()
if ent:IsValid() and ent:IsPlayer() then -- function is for players only :(
local gesture = self.random_gestlist and table.Random(self.random_gestlist) or self.GestureName
local slot = self:GetSlotID()
ent:AnimResetGestureSlot(slot)
local act = ent:GetSequenceActivity(ent:LookupSequence(gesture))
if act ~= 1 then
ent:AnimRestartGesture(slot, act, not self.Loop)
end
ent:AnimSetGestureWeight(slot, self.SlotWeight or 1)
end
end
function PART:OnHide()
local ent = self:GetOwner()
if ent:IsValid() and ent:IsPlayer() and self.Loop then
ent:AnimResetGestureSlot(self:GetSlotID())
end
end
PART.OnRemove = PART.OnHide
BUILDER:Register()