mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
100 lines
2.0 KiB
Lua
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
|