godot-shooter / commit
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"]