kakozuzo/Code/RagdollController.cs

48 lines
1.1 KiB
C#
Raw Normal View History

2024-10-30 13:15:49 +03:00
using Sandbox.Utils;
public sealed class RagdollController : Component
{
[Group("Setup"), Order(-100), Property] public ModelPhysics bodyPhysics { get; set; }
[Group("Setup"), Order(-100), Property] public SkinnedModelRenderer bodyRenderer { get; set; }
[Group("Config"), Order(0), Property] public bool isLocked { get; set; }
2024-10-30 13:33:29 +03:00
[Sync]
2024-10-30 19:01:58 +03:00
public new bool Enabled
2024-10-30 13:15:49 +03:00
{
2024-10-30 13:33:29 +03:00
get => bodyPhysics.Enabled;
2024-10-30 14:10:44 +03:00
private set
2024-10-30 13:33:29 +03:00
{
bodyPhysics.Enabled = value;
bodyPhysics.MotionEnabled = value;
bodyRenderer.UseAnimGraph = !value;
2024-10-30 14:10:44 +03:00
if ( !value )
{
GameObject.WorldPosition = bodyRenderer.WorldPosition;
bodyRenderer.GameObject.LocalPosition = Vector3.Zero;
}
2024-10-30 13:15:49 +03:00
}
}
protected override void OnUpdate()
{
if ( Network.IsOwner )
{
2024-10-30 13:33:29 +03:00
if (Input.Pressed( "Ragdoll" ))
2024-10-30 13:15:49 +03:00
{
2024-10-30 13:33:29 +03:00
Enabled = !Enabled;
2024-10-30 13:15:49 +03:00
}
}
2024-10-30 14:10:44 +03:00
var bodyLock = new PhysicsLock();
bodyLock.Pitch = isLocked;
bodyLock.Yaw = isLocked;
bodyLock.Roll = isLocked;
bodyLock.X = isLocked;
bodyLock.Y = isLocked;
bodyLock.Z = isLocked;
2024-10-30 13:15:49 +03:00
2024-10-30 14:10:44 +03:00
bodyPhysics.Locking = bodyLock;
bodyPhysics.MotionEnabled = !isLocked;
2024-10-30 13:15:49 +03:00
}
}