mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-02 11:28:19 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
45 lines
1.2 KiB
C#
45 lines
1.2 KiB
C#
namespace Sandbox;
|
|
|
|
public sealed partial class PlayerController : Component
|
|
{
|
|
/// <summary>
|
|
/// Create a ragdoll gameobject version of our render body.
|
|
/// </summary>
|
|
public GameObject CreateRagdoll( string name = "Ragdoll" )
|
|
{
|
|
var go = new GameObject( true, name );
|
|
go.Tags.Add( "ragdoll" );
|
|
go.WorldTransform = WorldTransform;
|
|
|
|
var originalBody = Renderer.Components.Get<SkinnedModelRenderer>();
|
|
|
|
if ( !originalBody.IsValid() )
|
|
return go;
|
|
|
|
var mainBody = go.Components.Create<SkinnedModelRenderer>();
|
|
mainBody.CopyFrom( originalBody );
|
|
mainBody.UseAnimGraph = false;
|
|
|
|
// copy the clothes
|
|
foreach ( var clothing in originalBody.GameObject.Children.SelectMany( x => x.Components.GetAll<SkinnedModelRenderer>() ) )
|
|
{
|
|
if ( !clothing.IsValid() ) continue;
|
|
|
|
var newClothing = new GameObject( true, clothing.GameObject.Name );
|
|
newClothing.Parent = go;
|
|
|
|
var item = newClothing.Components.Create<SkinnedModelRenderer>();
|
|
item.CopyFrom( clothing );
|
|
item.BoneMergeTarget = mainBody;
|
|
}
|
|
|
|
var physics = go.Components.Create<ModelPhysics>();
|
|
physics.Model = mainBody.Model;
|
|
physics.Renderer = mainBody;
|
|
physics.CopyBonesFrom( originalBody, true );
|
|
|
|
|
|
return go;
|
|
}
|
|
}
|