swb_player/PlayerBase.Ragdoll.cs
using SWB.Shared;
namespace SWB.Player;
public partial class PlayerBase
{
[Property] public ModelPhysics RagdollPhysics { get; set; }
public bool IsRagdolled => RagdollPhysics.Enabled;
[Rpc.Host]
public virtual void Ragdoll(Vector3 force, Vector3 forceOrigin)
{
if (!IsValid) return;
Tags.Add(TagsHelper.DeadPlayer);
ToggleColliders(false);
RagdollPhysics.Enabled = true;
foreach (var body in RagdollPhysics.Bodies)
{
//ody.ApplyImpulseAt(forceOrigin, force);
}
}
public virtual void ToggleColliders( bool enable )
{
var colliders = Body.Components.GetAll<Collider>( FindMode.EverythingInSelfAndParent );
foreach ( var collider in colliders )
{
collider.Enabled = enable;
}
}
[Rpc.Broadcast]
public virtual void Unragdoll()
{
if ( !IsValid || RagdollPhysics is null ) return;
Tags.Remove( TagsHelper.DeadPlayer );
RagdollPhysics.Enabled = false;
ToggleColliders( true );
}
}