Newer
Older
DungeonShooting / DungeonShooting_Godot / src / test / TestNavigation2.cs
using Godot;

public partial class TestNavigation2 : Node2D
{
	private Node2D _navigation2D;


	private Sprite2D _enemy;
	private NavigationAgent2D _navigationAgent2D;

	public override void _Ready()
	{
		_navigation2D = GetNode<Node2D>("Node2D");
		_enemy = _navigation2D.GetNode<Sprite2D>("Enemy");
		_navigationAgent2D = _enemy.GetNode<NavigationAgent2D>("NavigationAgent2D");

		_navigationAgent2D.TargetPosition = GetGlobalMousePosition();

	}

	public override void _PhysicsProcess(double delta)
	{
		if (_navigationAgent2D.IsNavigationFinished())
		{
			return;
		}
		
		var pos = _navigationAgent2D.GetNextPathPosition();
		_enemy.GlobalPosition = _enemy.GlobalPosition.MoveToward(pos, 100 * (float)delta);

	}

	public override void _Process(double delta)
	{
		QueueRedraw();
	}

	public override void _Draw()
	{
		var points = _navigationAgent2D.GetCurrentNavigationPath();
		if (points != null && points.Length >= 2)
		{
			DrawPolyline(points, Colors.Red);
			//DrawMultiline(points, Colors.Red);
		}
	}

	private void _on_Timer_timeout()
	{
		var target = GetGlobalMousePosition();
		_navigationAgent2D.TargetPosition = target;
	}
}