fuzzyworld

godot-shooter / commit

Enemies are targeted out of the process band, by a dedicated timer in the world scene.

62151b90dd1775ae108a8a5434bf8b32968d252a · Pavel Safronov · 2023-11-29 13:14:57 -0800 · parents c77d8480a45d

Enemies are targeted out of the process band, by a dedicated timer in the world scene.
 scenes/World.gd   | 31 ++++++++++++++++++-------------
 scenes/World.tscn |  7 +++++++
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/scenes/World.gd b/scenes/World.gd
index 0316b31..3ccf6fe 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -8,6 +8,7 @@ const Weapons = preload("res://weapons/Weapons.gd")
 const PowerUp = preload("res://items/PowerUp.tscn")
 const Settings = preload("res://utils/Settings.gd")
 onready var player: Player = $Player
+onready var update_timer = $UpdateTimer
 
 var generators = [
 	ConstantItemGenerator.new("create_enemy", self, "enemies", 4),
@@ -143,19 +144,6 @@ func _process(_delta: float) -> void:
 	
 	$Destination.visible = player.is_destination_set
 	$Destination.global_position = player.destination
-	
-	var enemies = get_tree().get_nodes_in_group("enemies")
-	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
-	for e in filteredEnemies:
-		var enemy: Enemy = e
-		enemy.turn_towards($Player.position)
-		var diff = enemy.global_position - player.global_position
-		var dist = diff.length()
-		var is_too_far = dist > item_replacement_distance
-		if is_too_far:
-			var new_pos = get_new_environment_position(1 + randf())
-			Utils.log("moving distant enemy from", enemy.position, "to", new_pos)
-			enemy.teleport(new_pos)
 
 	player.clear_radar()
 	
@@ -165,6 +153,8 @@ func _process(_delta: float) -> void:
 		player.update_radar(get_tree().get_nodes_in_group("bombs"), Color.purple)
 
 	player.update_radar(get_tree().get_nodes_in_group("gold"), Color.gold)
+	var enemies = get_tree().get_nodes_in_group("enemies")
+	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
 	player.update_radar(filteredEnemies, Color.red)
 
 func _on_Destination_body_entered(body: Node) -> void:
@@ -225,3 +215,18 @@ func _on_Player_destination_set() -> void:
 	$Destination.visible = player.is_destination_set
 	$Destination.global_position = player.destination
 	pass
+
+
+func _on_UpdateTimer_timeout() -> void:
+	var enemies = get_tree().get_nodes_in_group("enemies")
+	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
+	for e in filteredEnemies:
+		var enemy: Enemy = e
+		enemy.set_target($Player.position)
+		var diff = enemy.global_position - player.global_position
+		var dist = diff.length()
+		var is_too_far = dist > item_replacement_distance
+		if is_too_far:
+			var new_pos = get_new_environment_position(1 + randf())
+			Utils.log("moving distant enemy from", enemy.position, "to", new_pos)
+			enemy.teleport(new_pos)
diff --git a/scenes/World.tscn b/scenes/World.tscn
index 57d9204..dcd0cf3 100644
--- a/scenes/World.tscn
+++ b/scenes/World.tscn
@@ -72,7 +72,14 @@ end_cap_mode = 2
 round_precision = 13
 antialiased = true
 
+[node name="UpdateTimer" type="Timer" parent="."]
+wait_time = 0.1
+autostart = true
+
+[node name="NavigationPolygonInstance" type="NavigationPolygonInstance" parent="."]
+
 [connection signal="body_entered" from="Destination" to="." method="_on_Destination_body_entered"]
 [connection signal="debug" from="Player" to="." method="_on_Player_debug"]
 [connection signal="destination_set" from="Player" to="." method="_on_Player_destination_set"]
 [connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"]
+[connection signal="timeout" from="UpdateTimer" to="." method="_on_UpdateTimer_timeout"]