All pastes #410690 Raw Edit

Something

public text v1 · immutable
#410690 ·published 2007-03-26 16:22 UTC
rendered paste body
function Copy( Ent )

	local Ents, Constraints = GetAllConstrainedEntitiesAndConstraints( Ent )
	
	local EntTables = {}
	for k, v in pairs(Ents) do
		EntTables[ k ] = CopyEntTable( v )
	end
	
	local ConstraintTables = {}
	for k, v in pairs(Constraints) do
		table.insert( ConstraintTables, v )
	end
	
	return EntTables, ConstraintTables

end


function GetAllConstrainedEntitiesAndConstraints( ent, EntTable, ConstraintTable )

	if ( !ent:IsValid() ) then return EntTable, ConstraintTable end

	local EntTable = EntTable or {}
	local ConstraintTable = ConstraintTable or {}

	EntTable[ ent:EntIndex() ] = ent

	if ( !constraint.HasConstraints( ent ) ) then return EntTable, ConstraintTable end
	
	local ConTable = constraint.GetTable( ent )
	
	for key, constraint in pairs( ConTable ) do

		local index = constraint.Constraint
		
		if ( !ConstraintTable[ index ] ) then

			// Add constraint to the constraints table
			ConstraintTable[ index ] = constraint

			// Run the Function for any ents attached to this constraint
			for key, ConstrainedEnt in pairs( constraint.Entity ) do

				EntTable, ConstraintTable = GetAllConstrainedEntitiesAndConstraints( ConstrainedEnt.Entity, EntTable, ConstraintTable )

			end

		end
	end

	return EntTable, ConstraintTable
	
end