sasalka/Code/Player/Dedugan.cs
2025-05-27 00:59:12 +03:00

88 lines
2.8 KiB
C#

using System;
using Sandbox;
using Sandbox.Citizen;
using ShrimpleCharacterController;
public sealed partial class Dedugan : Component
{
[RequireComponent] public ShrimpleCharacterController.ShrimpleCharacterController Controller { get; set; }
[RequireComponent] public CitizenAnimationHelper AnimationHelper { get; set; }
public SkinnedModelRenderer Renderer { get; set; }
public GameObject Camera { get; set; }
[Property] public GameObject CameraPivot { get; set; }
[Property][Range(1f, 200f, 1f)] public float CamOffsetX { get; set; }
[Property][Range(50f, 1200f, 10f)] public float WalkSpeed { get; set; } = 100f;
[Property][Range(100f, 1500f, 20f)] public float RunSpeed { get; set; } = 300f;
[Property][Range(25f, 1100f, 5f)] public float DuckSpeed { get; set; } = 50f;
[Property][Range(200f, 1500f, 20f)] public float JumpStrength { get; set; } = 350f;
[Property][Range(10f, 500f, 10f)] public float InteractDistance { get; set; } = 350f;
[Sync] public Angles NetworkedEyeAngles { get; set; }
public Angles EyeAngles { get; set; }
[Sync] private float IsDucking { get; set; } = 0f;
private RagdollController RagdollController { get; set; }
public Vector3 OverrideGravity { get; set; } = Vector3.Zero;
private Vector3 _directionToAxis = Vector3.Up;
private Vector3 _up = Vector3.Up;
private Vector3 _forward = Vector3.Forward;
private Vector3 _right = Vector3.Right;
private Vector3 _wishDirection;
protected override void OnStart()
{
RagdollController = Components.Get<RagdollController>();
Renderer = Components.Get<SkinnedModelRenderer>(FindMode.EverythingInSelfAndDescendants);
if (!Network.IsOwner) return;
var cameraComponent = Scene.Camera;
Camera = cameraComponent.GameObject;
Camera.SetParent(GameObject);
cameraComponent.ZFar = 32768f;
cameraComponent.FieldOfView = 100f;
}
protected override void OnUpdate()
{
if (Network.IsOwner)
{
EyeAngles += Input.AnalogLook;
EyeAngles = EyeAngles.WithPitch(MathX.Clamp(EyeAngles.pitch, -89f, 89f));
var targetRotation = Rotation.LookAt(Rotation.FromYaw(EyeAngles.yaw).Forward, -_directionToAxis);
var currentForward = Renderer.LocalRotation.Forward;
float angleDiff = currentForward.Angle(targetRotation.Forward);
if (angleDiff > 15f && Controller.Velocity.Length > 10f)
{
NetworkedEyeAngles = EyeAngles;
Renderer.LocalRotation = Rotation.Slerp(Renderer.LocalRotation, Rotation.FromYaw(EyeAngles.yaw), Time.Delta * 3f);
}
RotateCamera();
UpdateLookAt();
// UpdatePressed();
}
else
{
EyeAngles = NetworkedEyeAngles;
Renderer.LocalRotation = Rotation.Slerp(Renderer.LocalRotation, Rotation.FromYaw(EyeAngles.yaw), Time.Delta * 5f);
}
}
protected override void OnFixedUpdate()
{
UpdateMovement();
}
protected override void DrawGizmos()
{
DrawDebugGizmos();
}
}