using Godot; public partial class Player : CharacterBody2D { [Export] public EntityStats BaseStats { get; set; } [Export] public PackedScene BulletScene { get; set; } // Create a reference for your Sprite private Sprite2D _sprite; private StatsComponent _stats; public override void _Ready() { _stats = GetNode("StatsComponent"); _stats.Initialize(BaseStats); _sprite = GetNode("Sprite2D"); } public override void _PhysicsProcess(double delta) { Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down"); Velocity = direction * _stats.RuntimeStats.MoveSpeed; MoveAndSlide(); } public override void _Process(double delta) { // Get the mouse position Vector2 mousePos = GetGlobalMousePosition(); // If the mouse is to the left of the player, flip the sprite. // If it's to the right, keep it un-flipped. _sprite.FlipH = mousePos.X < GlobalPosition.X; if (Input.IsActionJustPressed("shoot")) { Shoot(); } } private void Shoot() { // Failsafe in case you forgot to assign the scene in the editor if (BulletScene == null) return; // Create an instance of the bullet Bullet bullet = (Bullet)BulletScene.Instantiate(); // Spawn it at the player's current position bullet.GlobalPosition = GlobalPosition; // Calculate the direction from the player to the mouse Vector2 mousePos = GetGlobalMousePosition(); bullet.Direction = GlobalPosition.DirectionTo(mousePos); // Rotate the bullet to face the direction it's traveling bullet.Rotation = bullet.Direction.Angle(); // Add the bullet to the current scene tree so it actually exists in the game GetTree().Root.AddChild(bullet); } }