summaryrefslogtreecommitdiff
path: root/Player.cs
blob: 8a5f5d4b3c9652152fe1da99dec9894a1f65ccd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using Godot;

public partial class Player : CharacterBody2D
{
    [Export] public float Speed { get; set; } = 300.0f;
    [Export] public PackedScene BulletScene { get; set; }
    
    // Create a reference for your Sprite
    private Sprite2D _sprite;

    public override void _Ready()
    {
        // Grab the Sprite2D node when the game starts
        _sprite = GetNode<Sprite2D>("Sprite2D");
    }

    public override void _PhysicsProcess(double delta)
    {
        Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
        Velocity = direction * Speed;
        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);
    }    
}