make grid shuffle, grid sizy, gem color types

This commit is contained in:
2025-09-24 01:39:18 +04:00
parent de68edb1b0
commit 122b5cb55f
12 changed files with 565 additions and 48 deletions

View File

@@ -1,6 +1,6 @@
extends Node2D
@export var tile_type: int = 0
@export var tile_type: int = 0 : set = _set_tile_type
var grid_position: Vector2i
@onready var sprite: Sprite2D = $Sprite2D
@@ -20,20 +20,29 @@ var all_gem_textures = [
preload("res://assets/sprites/gems/sg_19.png"), # 7 - Silver gem
]
# Static variable to store the current gem pool for all tiles
static var current_gem_pool = [0, 1, 2, 3, 4] # Start with first 5 gems
# Currently active gem types (indices into all_gem_textures)
var active_gem_types = [0, 1, 2, 3, 4] # Start with first 5 gems
var active_gem_types = [] # Will be set from current_gem_pool
func _set_tile_type(value: int) -> void:
tile_type = value
print("Debug: _set_tile_type called with value ", value, ", active_gem_types.size() = ", active_gem_types.size())
# Fixed: Add sprite null check to prevent crashes during initialization
if not sprite:
return
if value >= 0 and value < active_gem_types.size():
var texture_index = active_gem_types[value]
sprite.texture = all_gem_textures[texture_index]
print("Debug: Set texture_index ", texture_index, " for tile_type ", value)
_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:
# Fixed: Add additional null checks
if sprite and 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
@@ -41,31 +50,41 @@ func _scale_sprite_to_fit() -> void:
# 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)
# Update static gem pool for new tiles
current_gem_pool = gem_indices.duplicate()
# Update all existing tile instances to use new gem pool
var scene_tree = Engine.get_main_loop() as SceneTree
if scene_tree:
var tiles = scene_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
# Generate a new random tile type within valid range
tile_type = randi() % active_gem_types.size()
_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()
var scene_tree = Engine.get_main_loop() as SceneTree
if scene_tree:
var tiles = scene_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)
var scene_tree = Engine.get_main_loop() as SceneTree
if scene_tree:
var tiles = scene_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():
@@ -73,10 +92,12 @@ func _add_gem_type(gem_index: int) -> void:
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)
var scene_tree = Engine.get_main_loop() as SceneTree
if scene_tree:
var tiles = scene_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)
@@ -90,4 +111,6 @@ func _remove_gem_type(gem_index: int) -> void:
# 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
# Initialize with current static gem pool
active_gem_types = current_gem_pool.duplicate()
_set_tile_type(tile_type)