How to wait until other script is ready?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By rico345100

I have two scripts, first is AsteroidSpawner script that literally spawns object named Asteroid, and second is HUD that control all UI related stuffs.

There are some labels in UI, so I used onready to get those nodes:

extends CanvasLayer

class_name HUD

onready var asteroids_label = $Control/RightContainer/AsteroidCountLabel

func set_asteroids_label(value: float):
	asteroids_label.text = "Asteroids: " + str(value)
	pass

However, when I try to access HUD script, with set_asteroid_label, it gives me null error:

var spawned_asteroids: Array = []
onready var hud: HUD = get_tree().get_root().find_node("HUD", true, false)

func _ready():
	spawn_asteroids()

func spawn_asteroids():
    ... spawn asteroid ...

    spawned_asteroids.push_back(asteroid_instance)

    hud.set_asteroids_label(spawned_asteroids.size()) # UPDATE HUD

Invalid set index ‘text’ (on base: ‘Nil’) with value of type ‘String’

I guess that HUD is not ready, but AsteroidSpawner script try to accessing it, wasn’t it? Then how should I wait until HUD is loaded?

:bust_in_silhouette: Reply From: LoneDespair

yield(ObjectReference, “ready”)
print(“Dinosaurs: 0_0”)

Awesome. Works good!

rico345100 | 2019-11-09 15:53