mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-18 14:13:46 +03:00
Upload
This commit is contained in:
125
lua/pac3/core/client/parts/gesture.lua
Normal file
125
lua/pac3/core/client/parts/gesture.lua
Normal file
@@ -0,0 +1,125 @@
|
||||
--[[
|
||||
| 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()
|
||||
Reference in New Issue
Block a user