How to add a simple delay?

Godot Version

4.2.1

Question

How would i make it so there is a 1 second delay inbetween my enemy moving?

extends CharacterBody2D

@onready var player = get_node("/root/Main/Player")
@onready var player_position = player.global_rotation
@onready var move_timer = %Move_timer
@onready var delay_timer = %Delay_timer

func _physics_process(delta):
	var angle_to_player = (player.global_position - global_position).angle()
	rotation_degrees = rad_to_deg(angle_to_player)
	
	move_and_slide()
	

func _on_move_timer_timeout():
	var direction = randi_range(1, 2)
	if direction == 1:
		velocity.x += 1000
	else:
		velocity.x -= 1000
	#I WANT TO ADD SOME DELAY HERE
	velocity.x = 0


I tried playing around with the timers and searching for something like a “wait” function but apperantly there isnt such a thing in godot and whatever i tried i have no idea how to make it work.

a = Millisecs() + 1000

if a < Millisecs () then velocity.x = 0 end

( not gdscript syntax )

what??

1 Like

await get_tree().create_timer(time_you_want_to_wait).timeout

2 Likes

you can add another timer

extends CharacterBody2D

@onready var player = get_node("/root/Main/Player")
@onready var player_position = player.global_rotation
@onready var move_timer = %Move_timer
@onready var delay_timer = %Delay_timer

func _physics_process(delta):
	var angle_to_player = (player.global_position - global_position).angle()
	rotation_degrees = rad_to_deg(angle_to_player)
	
	move_and_slide()
	

func _on_move_timer_timeout():
	var direction = randi_range(1, 2)
	if direction == 1:
		velocity.x += 1000
	else:
		velocity.x -= 1000
	stop_timer.start()

func _on_stop_timer_timeout():
	velocity.x = 0
1 Like