fuzzyworld

godot-shooter / commit

Slight enemy behavior changes.

50d0dc8b04cabad04bc4449166e772310a910f93 · Pavel Safronov · 2023-12-21 14:12:48 -0800 · parents da8acfdb9436

Slight enemy behavior changes.
Enemy now explodes when it gets close enough to the target.
 actors/Enemy.gd   | 19 +++++++++++--------
 actors/Enemy.tscn |  8 ++++----
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/actors/Enemy.gd b/actors/Enemy.gd
index 2403822..b0bbf25 100644
--- a/actors/Enemy.gd
+++ b/actors/Enemy.gd
@@ -3,6 +3,7 @@ class_name Enemy
 
 onready var damage_points = $DamagePoints
 onready var navigation_agent: NavigationAgent2D = $NavigationAgent2D
+onready var ship_collision_shape: CollisionPolygon2D = $ShipCollisionShape
 const Utils = preload("res://utils/Utils.gd")
 const Explosion = preload("res://effects/Explosion.tscn")
 const Smoke = preload("res://effects/Smoke.tscn")
@@ -10,16 +11,17 @@ const Damage = preload("res://effects/Damage.tscn")
 const Constants = preload("res://utils/Constants.gd")
 const Weapons = preload("res://weapons/Weapons.gd")
 
+export var is_invincible = false
 export var move_speed = Constants.SPEED * 1.05
 export var turn_rate = 0.03
 export var health = -1
 export var max_health = 100
 export var is_targeted = false
-export var is_invincible = false
 export var target: Vector2
 export var follow_target = false
 signal enemy_killed(position)
 
+var player
 var weapon: Weapon
 var velocity = Vector2.ZERO
 var dead = false
@@ -32,7 +34,10 @@ func _ready() -> void:
 	var _err = navigation_agent.connect("path_changed", self, "path_changed")
 	_err = navigation_agent.connect("velocity_computed", self, "velocity_computed")
 	_err = navigation_agent.connect("target_reached", self, "target_reached")
-	
+	var players = get_tree().get_nodes_in_group("player")
+	self.player = players[0]
+	ship_collision_shape.connect()
+
 	$AnimationPlayer.play("fade_in")
 	if health < 0 or health > max_health:
 		health = max_health
@@ -51,8 +56,7 @@ func velocity_computed(new_vel: Vector2) -> void:
 	pass
 
 func target_reached() -> void:
-	var players = get_tree().get_nodes_in_group("player")
-	var player = players[0]
+	Utils.log("enemy", self, "reached player", player, "at", self.position)
 	player.hurt(25)
 	var explosion = Explosion.instance()
 	explosion.transform = transform
@@ -76,9 +80,10 @@ func _process(_delta: float) -> void:
 	$Graphics/Alive/Sprite/Target.global_rotation = 0
 	$Graphics/Alive/Sprite/Trails.add_position(global_position)
 	
-	var players = get_tree().get_nodes_in_group("player")
-	var player = players[0]
 	var dist_to_player = global_position.distance_to(player.global_position)
+#	Utils.log("dist to player", dist_to_player)
+	if dist_to_player < 25:
+		target_reached()
 	
 	var should_shoot = dist_to_player < weapon.shooting_range
 	if should_shoot:
@@ -173,8 +178,6 @@ func remove_thyself():
 	queue_free()
 
 func _on_Area2D_body_entered(body: Node) -> void:
-	var players = get_tree().get_nodes_in_group("player")
-	var player = players[0]
 	var is_player = body == player
 	if is_player:
 		player.hurt(2)
diff --git a/actors/Enemy.tscn b/actors/Enemy.tscn
index affedab..972d51c 100644
--- a/actors/Enemy.tscn
+++ b/actors/Enemy.tscn
@@ -143,10 +143,10 @@ polygon = PoolVector2Array( 0, -23, -7, 5, -12, 9, -19, 9, -23, 14, -23, 19, -19
 [node name="DamageObjects" type="Node2D" parent="."]
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
-path_desired_distance = 35.0
-target_desired_distance = 35.0
+path_desired_distance = 10.0
 navigation_layers = 3
 avoidance_enabled = true
-radius = 35.0
-neighbor_dist = 100.0
+radius = 40.0
+max_neighbors = 20
+time_horizon = 30.0
 max_speed = 50.0