Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | maurestor |
Hello I have this problem since yesterday, I wanted to generate a list of achievements in the parent scene and update it when loading a reusable scene, inside a for loop
The data is loaded through an autoload(Singleton?) And the data is sent through a signal, obviously I’m doing something wrong but I don’t understand what it is or what I’m missing.
lol , I would like to see a list but it doesn’t.
Achievement.gd
onready var lista = $Lienzito/AspectRatioContainer/Vertical_list
const logro = preload("res://scenes/Logro.tscn") # Achievement
func _ready():
# Loop from achievement
for idx in Config.achievements:
yield(get_tree(), "idle_frame")
var logro_extra = logro.instance() # Instance achievement
#print( Config.achievements[idx]['title'] )
# add variables from achievement (singleton) expect instance one to one instance ?
var title = Config.achievements[idx]["title"]
var image = Config.achievements[idx]["img"]
var desc = Config.achievements[idx]["desc"]
# emit_signal to node logro(achievement)
Config.emit_signal('set_logro', image, title, desc)
lista.add_child(logro_extra) # add child to Vertical_list
Config.achievement other file from GodotAutoloadSystem
var achievements : Dictionary = {
0: {
'title':"Tutorial",
"desc": "Pasaste el nivel tutorial, donde aprendiste como jugar el juego.",
"img": "res://assets/achievements/logro1.png"
},
1:{
"title":"x5",
"desc": "Completaste los primero 5 niveles.",
"img": "res://assets/achievements/logro5.png"
},
2:{
"title":"25 vidas",
"desc": "Wow!!! Terminaste los primeros 25 niveles de un solo golpe!",
"img": "res://assets/achievements/logro_oculto.png"
}
Node to instane
extends Control
func _ready():
Config.connect("set_logro", self, "_on_set_logro")
func _on_set_logro(img, title, desc):
$Icono.texture = load(img)
$Titulo_logro.bbcode_text = title
$Desc_logro.bbcode_text = desc
thanks in advance
logro_extra
seems to be the scene you are dynamically creating and is being used to hold acheivement information that should be displayed in a list. It seems your creating and adding the logro_extra
scenes to a list, but I don’t see where logro_extra
is being given any acheivement data. Are you trying to populate logro_extra
member data with the call to Config.emit_signal('set_logro', image, title, desc)
? If so, I don’t think logro_extra
will have anything done to it since it hasn’t been added to the scene tree yet.
godot_dev_ | 2022-07-22 18:52
Wow xD, yes, I made the list dynamically and corrected what I was missing, filled in the values of ‘each’ (lol) instance of “logro_extra” as you inferred before and discarded the code that is too much in the signal and in the node, because it is no longer necessary, it turned out to be something much simpler than I thought, I did more than what has to be done, in the end I finished with this.
extends Node2D
onready var lista = $Lienzito/AspectRatioContainer/Vertical_list
const logro = preload("res://scenes/Logro.tscn") # Achievement
func _ready():
## Show achievement list, Muestra la lista de logros
for idx in Config.achievements:
var logro_extra = logro.instance() # Instance achievement
logro_extra.get_node("Icono").texture = load(Config.achievements[idx]["img"])
logro_extra.get_node("Titulo_logro").bbcode_text = Config.achievements[idx]["title"]
logro_extra.get_node("Desc_logro").bbcode_text = Config.achievements[idx]["desc"]
lista.add_child(logro_extra) # add child to Vertical_list
Config.achievement file from GodotAutoloadSystem
var achievements : Dictionary = {
0: {
'title':"Tutorial",
"desc": "Pasaste el nivel tutorial, donde aprendiste como jugar el juego.",
"img": "res://assets/achievements/logro1.png"
},
1:{
"title":"x5",
"desc": "Completaste los primero 5 niveles.",
"img": "res://assets/achievements/logro5.png"
},
2:{
"title":"25 vidas",
"desc": "Wow!!! Terminaste los primeros 25 niveles de un solo golpe!",
"img": "res://assets/achievements/logro_oculto.png"
},
3: {
"title":"Gran perdedor x5",
"desc": "Completa 5 niveles pasandote del limite de puntos recuperando tu puntuacion con los botones circulares.",
"img": "res://assets/achievements/logro_oculto.png"
},
4: {
"title":"Grandioso perdedor x15",
"desc": "Completa 15 niveles pasandote del limite de puntos recuperando tu puntuacion con los botones circulares.",
"img": "res://assets/achievements/logro_oculto.png"
},
5: {
"title":"Perfecto perdedor x25",
"desc": "Completa 25 niveles pasandote del limite de puntos recuperando tu puntuacion con los botones circulares.",
"img": "res://assets/achievements/logro_oculto.png"
},
}
node to instance… nothing.
Result:
Thanks a lot. xD
maurestor | 2022-07-22 22:51