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;
}
}