Hello to everyone. I spent only a couple of weeks using Godot.
I´m creating a little puzzle game. The game consists in a board scene (PuzzleManager), a block scene (Block), and a Main scene that for now,only contains the board.

Blocks scenes are instantiated by a function in PuzzleManager and added as his child. But the code in the ready function never executes
I´ll show you first the script attached to PuzzleManager (function create_board() is called in PuzzleManager _ready(). It works fine, create all the pieces correctly
#Blocks are created from a Dictionary, if the function reads "r" creates a block and #makes it red (block has a color property) and so on
var BoardDefault:Dictionary ={
"row0": ["r","e","e","b","p","e"],
"row1": ["e","e","e","e","o","e"],
"row2": ["e","e","e","g","e","e"],
"row3": ["e","e","e","g","e","e"],
"row4": ["e","e","o","p","e","e"],
"row5": ["r","e","e","e","e","b"],
}
var block_path = preload("res://Scenes/Block.tscn")
func create_board():
var dictionary_keys:Array = BoardDefault.keys()
# i = x j= y
for i in BoardDefault.size():
for j in range (GRID_CELLS_VERT):
var values_array:Array = BoardDefault.get(dictionary_keys[i])
var current_read_value:String = values_array[j]
var id = block_path.instance()
add_child(id)
id.position.x = (CELL_SIZE * j)
id.position.y = (CELL_SIZE*i)
# id.sprite.texture funciona porque el block tiene una referencia a su nodo hijo Sprite
match current_read_value:
"b":
var target_texture:Texture = load("res://Assets/Block64x64Blue.png")
id.color = "blue"
id.sprite.texture = target_texture
"e":
var target_texture:Texture = load("res://Assets/Block64x64GreySolid.png")
id.color = "empty"
id.sprite.texture = target_texture
"g":
var target_texture:Texture = load("res://Assets/Block64x64Green.png")
id.color = "green"
id.sprite.texture = target_texture
"o":
var target_texture:Texture = load("res://Assets/Block64x64Orange.png")
id.color = "orange"
id.sprite.texture = target_texture
"p":
var target_texture:Texture = load("res://Assets/Block64x64Purrple.png")
id.color = "purple"
id.sprite.texture = target_texture
"r":
var target_texture:Texture = load("res://Assets/Block64x64Red.png")
id.color = "red"
id.sprite.texture = target_texture
The problem is that the _ready() function of the blocks doesnt work, input functions does work and variables seem ok in Remote inspector
I´ll paste here the script attached to Block.tscn
extends Area2D
var color:String
onready var sprite:Sprite = $Sprite
func assign_group_by_color():
match color:
"blue","green","orange","purple","red":
add_to_group("ColorBlocks",false)
print("Es de color")
"empty":
add_to_group("EmptyTiles",false)
func _ready():
assign_group_by_color()
func _on_Block_input_event(viewport, event, shape_idx):
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and event.pressed == true:
print(color + str(position))
var my_group = get_groups()
print(my_group)
I can see that the _ready function is not working because blocks are not added to groups: When I try to print the group I only see an empty array
Thank you very much for reading this long newby question !!!