Files
wnsrc/lua/includes/gmsave/constraints.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

100 lines
2.0 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 function GetPhysicsObjectNum( ent, object )
for k = 0, ent:GetPhysicsObjectCount() - 1 do
local obj = ent:GetPhysicsObjectNum( k )
if ( obj == object ) then return k end
end
return 0
end
function gmsave.ConstraintSave( ent )
local t = {}
t.EntOne, t.EntTwo = ent:GetConstrainedEntities()
local PhysA, PhysB = ent:GetConstrainedPhysObjects()
t.BoneOne = GetPhysicsObjectNum( t.EntOne, PhysA )
t.BoneTwo = GetPhysicsObjectNum( t.EntTwo, PhysB )
t.EntOne = gmsave.EntityEncode( t.EntOne )
t.EntTwo = gmsave.EntityEncode( t.EntTwo )
return t
end
--
-- Creates a save table from a table of entities
--
function gmsave.ConstraintSaveList( ents )
local SavedConstraints = {}
for k, v in pairs( ents ) do
if ( !IsValid( v ) ) then continue end
if ( !v:IsConstraint() ) then continue end
SavedConstraints[ k ] = gmsave.ConstraintSave( v )
end
return SavedConstraints
end
--
-- Creates a single entity from a table
--
function gmsave.ConstraintLoad( t, ent, ents )
local EntOne = gmsave.EntityDecode( t.EntOne, ents )
local EntTwo = gmsave.EntityDecode( t.EntTwo, ents )
local PhysOne = EntOne:GetPhysicsObjectNum( t.BoneOne )
local PhysTwo = EntTwo:GetPhysicsObjectNum( t.BoneTwo )
ent:SetPhysConstraintObjects( PhysOne, PhysTwo )
ent:SetParent( ent.LoadData.m_pParent )
ent:Spawn()
ent:Activate()
gmsave.ApplyValuesToEntity( ent, ent.LoadData, ent.LoadData.lua_variables, ents )
ent.LoadData = nil
end
--
-- Restores multiple entitys from a table
--
function gmsave.ConstraintsLoadFromTable( tab, ents )
if ( !tab ) then return end
for k, v in pairs( tab ) do
local ent = ents[ k ]
if ( !IsValid( ent ) ) then continue end
gmsave.ConstraintLoad( v, ent, ents )
end
end