namespace Sandbox; public sealed partial class PlayerController : Component { /// /// Create a ragdoll gameobject version of our render body. /// public GameObject CreateRagdoll( string name = "Ragdoll" ) { var go = new GameObject( true, name ); go.Tags.Add( "ragdoll" ); go.WorldTransform = WorldTransform; var originalBody = Renderer.Components.Get(); if ( !originalBody.IsValid() ) return go; var mainBody = go.Components.Create(); mainBody.CopyFrom( originalBody ); mainBody.UseAnimGraph = false; // copy the clothes foreach ( var clothing in originalBody.GameObject.Children.SelectMany( x => x.Components.GetAll() ) ) { if ( !clothing.IsValid() ) continue; var newClothing = new GameObject( true, clothing.GameObject.Name ); newClothing.Parent = go; var item = newClothing.Components.Create(); item.CopyFrom( clothing ); item.BoneMergeTarget = mainBody; } var physics = go.Components.Create(); physics.Model = mainBody.Model; physics.Renderer = mainBody; physics.CopyBonesFrom( originalBody, true ); return go; } }