Fighter.cs
1 using Godot; 2 using Game.Util; 3 4 namespace Game.Nodes; 5 6 public partial class Fighter : CharacterBody3D 7 { 8 private static Vector3 MaxVelocity = new(5.0f, 5.0f, 5.0f); 9 10 [Export] 11 public float DashSpeed { get; set; } = 15.0f; 12 [Export] 13 public float Speed { get; set; } = 5.0f; 14 [Export] 15 public float FrictionModifier { get; set; } = 2.0f; 16 17 public bool Active { get; set; } 18 public int Life { get; set; } = 1000; 19 public bool MirrorInputs { get; set; } 20 public Fighter Opponent { get; set; } 21 22 public override void _PhysicsProcess(double delta) 23 { 24 var felta = (float)delta; 25 var velocity = Velocity; 26 27 LookAt(Opponent.GlobalPosition); 28 29 velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed * FrictionModifier * felta); 30 velocity.Z = Mathf.MoveToward(Velocity.Z, 0, Speed * FrictionModifier * felta); 31 32 if (!IsOnFloor()) 33 velocity += GetGravity() * felta; 34 35 Velocity = velocity.Clamp(-MaxVelocity, MaxVelocity); 36 MoveAndSlide(); 37 } 38 39 public override void _Ready() {} 40 41 public void HandleFightInput(FightInput fightInput) 42 { 43 var vector = fightInput switch 44 { 45 FightInput.MoveBackward => Vector3.Back, 46 FightInput.MoveDashBackward => Vector3.Back, 47 FightInput.MoveLeft => Vector3.Left, 48 FightInput.MoveRight => Vector3.Right, 49 _ => Vector3.Forward, 50 }; 51 52 var speed = fightInput switch 53 { 54 FightInput.MoveDashBackward => Speed * 2, 55 FightInput.MoveDashForward => Speed * 2, 56 _ => Speed, 57 }; 58 59 if(fightInput != FightInput.Neutral) 60 Velocity = (GlobalBasis * vector).Normalized() * speed; 61 } 62 }