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

67 lines
1.5 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 = "flex"
PART.Icon = 'icon16/emoticon_smile.png'
PART.Group = 'entity'
BUILDER:StartStorableVars()
BUILDER:GetSet("Flex", "", {
enums = function(part)
local tbl = {}
for _, v in pairs(pac.GetFlexMap(part:GetOwner())) do
tbl[v.name] = v.name
end
return tbl
end
})
BUILDER:GetSet("Weight", 0)
BUILDER:GetSet("Additive", false)
BUILDER:GetSet("RootOwner", false, { hide_in_editor = true })
BUILDER:EndStorableVars()
function PART:SetRootOwner(b)
self:SetRootOwnerDeprecated(b)
end
function PART:GetNiceName()
return self:GetFlex() ~= "" and self:GetFlex() or "no flex"
end
function PART:GetFlexID()
local ent = self:GetOwner()
if not ent:IsValid() or not ent.GetFlexNum or ent:GetFlexNum() == 0 then return end
local flex_map = pac.GetFlexMap(ent)
local flex = flex_map[self.Flex:lower()]
return flex and flex.i, ent
end
function PART:OnBuildBonePositions()
local id, ent = self:GetFlexID()
if not id then return end
local weight = self.Weight
if self.Additive then
weight = weight + ent:GetFlexWeight(id)
end
ent:SetFlexWeight(id, weight)
ent.pac_touching_flexes = ent.pac_touching_flexes or {}
ent.pac_touching_flexes[id] = pac.RealTime + 0.1
end
BUILDER:Register()