using CodingLand.Scripts.Logic; using Godot; namespace CodingLand.Scripts; public partial class Player : CharacterBody2D { private int _currentPlayerId = 1; [Export] public float MaxSpeed = 400f; [Export] public float Acceleration = 500f; [Export] public float Deceleration = 500f; [Export] public float RotationSpeed = 5f; [Export] public Camera2D PlayerCamera; [Export] public PlayerInput PlayerInput; [Export] public Timer PlayerDashCountdown; [Export] public float PlayerDashAcceleration = 2f; [Export] public int PlayerId { get => _currentPlayerId; set { _currentPlayerId = value; PlayerInput.SetMultiplayerAuthority(value); } } public void SetPlayerId(int id) { PlayerId = id; PlayerInput.SetMultiplayerAuthority(id); } public override void _Ready() { if (PlayerId == Multiplayer.GetUniqueId()) PlayerCamera.Enabled = true; } public override void _PhysicsProcess(double delta) { var input = PlayerInput.MovementDirection; if (input != Vector2.Zero) { input = input.Normalized(); Velocity = Velocity.MoveToward(input * MaxSpeed, Acceleration * (float)delta); var finalRotation = input.Angle() + Mathf.Pi / 2; Rotation = Mathf.LerpAngle(Rotation, finalRotation, RotationSpeed * (float)delta); } else { Velocity = Velocity.MoveToward(Vector2.Zero, Deceleration * (float)delta); } if (PlayerInput.IsDashing && PlayerDashCountdown.IsStopped()) { PlayerInput.IsDashing = false; Velocity *= PlayerDashAcceleration; PlayerDashCountdown.Start(); } Position += Velocity * (float)delta; MoveAndSlide(); } }