extends Node2D @export var tile_type: int = 0 var grid_position: Vector2i @onready var sprite: Sprite2D = $Sprite2D # Target size for each tile to fit in the 54x54 grid cells const TILE_SIZE = 48 # Slightly smaller than 54 to leave some padding # All available gem textures var all_gem_textures = [ preload("res://assets/sprites/gems/bg_19.png"), # 0 - Blue gem preload("res://assets/sprites/gems/dg_19.png"), # 1 - Dark gem preload("res://assets/sprites/gems/gg_19.png"), # 2 - Green gem preload("res://assets/sprites/gems/mg_19.png"), # 3 - Magenta gem preload("res://assets/sprites/gems/rg_19.png"), # 4 - Red gem preload("res://assets/sprites/gems/yg_19.png"), # 5 - Yellow gem preload("res://assets/sprites/gems/pg_19.png"), # 6 - Purple gem preload("res://assets/sprites/gems/sg_19.png"), # 7 - Silver gem ] # Currently active gem types (indices into all_gem_textures) var active_gem_types = [0, 1, 2, 3, 4] # Start with first 5 gems func _set_tile_type(value: int) -> void: tile_type = value if value >= 0 and value < active_gem_types.size(): var texture_index = active_gem_types[value] sprite.texture = all_gem_textures[texture_index] _scale_sprite_to_fit() else: push_error("Invalid tile type: " + str(value) + ". Available types: 0-" + str(active_gem_types.size() - 1)) func _scale_sprite_to_fit() -> void: if sprite.texture: var texture_size = sprite.texture.get_size() var max_dimension = max(texture_size.x, texture_size.y) var scale_factor = TILE_SIZE / max_dimension sprite.scale = Vector2(scale_factor, scale_factor) # Gem pool management functions static func set_active_gem_pool(gem_indices: Array) -> void: # Update all tile instances to use new gem pool var tiles = get_tree().get_nodes_in_group("tiles") for tile in tiles: if tile.has_method("_update_active_gems"): tile._update_active_gems(gem_indices) func _update_active_gems(gem_indices: Array) -> void: active_gem_types = gem_indices.duplicate() # Re-validate current tile type if tile_type >= active_gem_types.size(): tile_type = 0 # Reset to first available type _set_tile_type(tile_type) static func get_active_gem_count() -> int: # Get from any tile instance or default var tiles = get_tree().get_nodes_in_group("tiles") if tiles.size() > 0: return tiles[0].active_gem_types.size() return 5 # Default static func add_gem_to_pool(gem_index: int) -> void: var tiles = get_tree().get_nodes_in_group("tiles") for tile in tiles: if tile.has_method("_add_gem_type"): tile._add_gem_type(gem_index) func _add_gem_type(gem_index: int) -> void: if gem_index >= 0 and gem_index < all_gem_textures.size(): if not active_gem_types.has(gem_index): active_gem_types.append(gem_index) static func remove_gem_from_pool(gem_index: int) -> void: var tiles = get_tree().get_nodes_in_group("tiles") for tile in tiles: if tile.has_method("_remove_gem_type"): tile._remove_gem_type(gem_index) func _remove_gem_type(gem_index: int) -> void: var type_index = active_gem_types.find(gem_index) if type_index != -1 and active_gem_types.size() > 2: # Keep at least 2 gem types active_gem_types.erase(gem_index) # Update tiles that were using removed type if tile_type >= active_gem_types.size(): tile_type = 0 _set_tile_type(tile_type) # Called when the node enters the scene tree for the first time. func _ready() -> void: add_to_group("tiles") # Add to group for gem pool management _set_tile_type(tile_type)