From 7a90d8134fefc12216d7a0ca9856353d78cda8a3 Mon Sep 17 00:00:00 2001 From: nknguyenhc <87511888+nknguyenhc@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:26:17 +0800 Subject: [PATCH] Add enemy pathfinding --- src/enemy/enemy.gd | 24 ++++++++++++++++++++++++ src/enemy/enemy.tscn | 17 ++++++++++++++--- src/map/map.tscn | 9 ++++++++- 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/enemy/enemy.gd diff --git a/src/enemy/enemy.gd b/src/enemy/enemy.gd new file mode 100644 index 0000000..ff041bc --- /dev/null +++ b/src/enemy/enemy.gd @@ -0,0 +1,24 @@ +extends CharacterBody2D + +const SPEED = 100 + +@onready var player: CharacterBody2D = get_parent().get_node("Player") +@onready var navigator: NavigationAgent2D = $NavigationAgent2D + + +func _ready(): + find_path() + + +func _physics_process(delta): + var direction = to_local(navigator.get_next_path_position()).normalized() + velocity = direction * SPEED + move_and_slide() + + +func find_path(): + navigator.target_position = player.position + + +func _on_navigation_timer_timeout(): + find_path() diff --git a/src/enemy/enemy.tscn b/src/enemy/enemy.tscn index c0be5a5..441d284 100644 --- a/src/enemy/enemy.tscn +++ b/src/enemy/enemy.tscn @@ -1,18 +1,29 @@ -[gd_scene load_steps=3 format=3 uid="uid://d1t70mghq4jqo"] +[gd_scene load_steps=4 format=3 uid="uid://d1t70mghq4jqo"] [ext_resource type="Texture2D" uid="uid://b6iglbqclfol6" path="res://icon.svg" id="1_1qbt2"] +[ext_resource type="Script" path="res://enemy/enemy.gd" id="1_axdwg"] -[sub_resource type="RectangleShape2D" id="RectangleShape2D_qol47"] +[sub_resource type="CircleShape2D" id="CircleShape2D_gftau"] [node name="Enemy" type="CharacterBody2D"] collision_layer = 4 collision_mask = 3 motion_mode = 1 wall_min_slide_angle = 0.0 +script = ExtResource("1_axdwg") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource("RectangleShape2D_qol47") +shape = SubResource("CircleShape2D_gftau") [node name="Sprite2D" type="Sprite2D" parent="."] scale = Vector2(0.15625, 0.15625) texture = ExtResource("1_1qbt2") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] +debug_enabled = true + +[node name="NavigationTimer" type="Timer" parent="."] +wait_time = 0.1 +autostart = true + +[connection signal="timeout" from="NavigationTimer" to="." method="_on_navigation_timer_timeout"] diff --git a/src/map/map.tscn b/src/map/map.tscn index dfd2947..f62776d 100644 --- a/src/map/map.tscn +++ b/src/map/map.tscn @@ -1,9 +1,14 @@ -[gd_scene load_steps=8 format=3 uid="uid://y4brqgeqv22u"] +[gd_scene load_steps=9 format=3 uid="uid://y4brqgeqv22u"] [ext_resource type="Texture2D" uid="uid://0p8c7ft70lv5" path="res://assets/SproutLands/Tilesets/Grass.png" id="1_53lk6"] [ext_resource type="Texture2D" uid="uid://c5c0gkp3n78xa" path="res://assets/SproutLands/Tilesets/Hills.png" id="2_c7h1q"] [ext_resource type="Texture2D" uid="uid://b8pa0fb7oeqby" path="res://assets/SproutLands/Objects/Basic_Grass_Biom_things.png" id="3_cdhlv"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_wpv7e"] +vertices = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)]) + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8q6ug"] texture = ExtResource("1_53lk6") 0:0/0 = 0 @@ -174,6 +179,7 @@ texture = ExtResource("1_53lk6") 3:5/0 = 0 3:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) 3:5/0/physics_layer_0/angular_velocity = 0.0 +3:5/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_wpv7e") 4:5/0 = 0 4:5/0/physics_layer_0/linear_velocity = Vector2(0, 0) 4:5/0/physics_layer_0/angular_velocity = 0.0 @@ -610,6 +616,7 @@ texture = ExtResource("3_cdhlv") [sub_resource type="TileSet" id="TileSet_fggcw"] physics_layer_0/collision_layer = 2 physics_layer_0/collision_mask = 0 +navigation_layer_0/layers = 1 sources/0 = SubResource("TileSetAtlasSource_8q6ug") sources/1 = SubResource("TileSetAtlasSource_ucsp2") sources/2 = SubResource("TileSetAtlasSource_0iofd")