create gem grid
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dmwkyeq2l7u04"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bvtr6yhlyuv4v" path="res://scenes/game/game.gd" id="1_uwrxv"]
|
||||
[ext_resource type="Script" uid="uid://b16jnk7w22mb" path="res://scenes/game/game.gd" id="1_uwrxv"]
|
||||
[ext_resource type="PackedScene" uid="uid://b4kv7g7kllwgb" path="res://scenes/match3/match3.tscn" id="2_yqjtg"]
|
||||
|
||||
[node name="Game" type="Node"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=15 format=3 uid="uid://gbe1jarrwqsi"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://buak21ajgvevl" path="res://scenes/main/PressAnyKeyScreen.gd" id="1_0a4p2"]
|
||||
[ext_resource type="Script" uid="uid://cxw2fjj5onja3" path="res://scenes/main/PressAnyKeyScreen.gd" id="1_0a4p2"]
|
||||
[ext_resource type="Texture2D" uid="uid://bcr4bokw87m5n" path="res://assets/sprites/characters/skeleton/Skeleton Idle.png" id="2_rjjcb"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_l6pue"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://ci2gk11211n0d"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cwlop1ettlqhg" path="res://scenes/main/Main.gd" id="1_0wfyh"]
|
||||
[ext_resource type="Script" uid="uid://b0uwk2jlm6g08" path="res://scenes/main/Main.gd" id="1_0wfyh"]
|
||||
[ext_resource type="PackedScene" uid="uid://gbe1jarrwqsi" path="res://scenes/main/PressAnyKeyScreen.tscn" id="1_o5qli"]
|
||||
[ext_resource type="Texture2D" uid="uid://c8y6tlvcgh2gn" path="res://assets/textures/backgrounds/beanstalk-dark.webp" id="2_sugp2"]
|
||||
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b4kv7g7kllwgb"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b4kv7g7kllwgb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bvyiwvpepqfdu" path="res://scenes/match3/match3.gd" id="1_mvfdp"]
|
||||
[ext_resource type="Texture2D" uid="uid://ccprr0qrj3lgm" path="res://assets/sprites/gems/rg_19.png" id="2_0fhn8"]
|
||||
|
||||
[node name="Match3" type="Node2D"]
|
||||
script = ExtResource("1_mvfdp")
|
||||
|
||||
[node name="GridContainer" type="Node2D" parent="."]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(584, 317)
|
||||
texture = ExtResource("2_0fhn8")
|
||||
|
||||
@@ -5,21 +5,32 @@ var grid_position: Vector2i
|
||||
|
||||
@onready var sprite: Sprite2D = $Sprite2D
|
||||
|
||||
# Target size for each tile to fit in the 64x64 grid cells
|
||||
const TILE_SIZE = 48 # Slightly smaller than 64 to leave some padding
|
||||
# Target size for each tile to fit in the 54x54 grid cells
|
||||
const TILE_SIZE = 48 # Slightly smaller than 54 to leave some padding
|
||||
|
||||
var tile_textures = [
|
||||
preload("res://assets/sprites/gems/bg_19.png"),
|
||||
preload("res://assets/sprites/gems/dg_19.png"),
|
||||
preload("res://assets/sprites/gems/gg_19.png"),
|
||||
preload("res://assets/sprites/gems/mg_19.png"),
|
||||
# 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 < tile_textures.size():
|
||||
sprite.texture = tile_textures[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:
|
||||
@@ -28,6 +39,55 @@ func _scale_sprite_to_fit() -> void:
|
||||
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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://m8lf3eh3al5j"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ctu58xq7btp1n" path="res://scenes/ui/MainMenu.gd" id="1_b00nv"]
|
||||
[ext_resource type="Script" uid="uid://b2c35v0f6rymd" path="res://scenes/ui/MainMenu.gd" id="1_b00nv"]
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://57obmcwyos2g"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c8mlvlerv4y03" path="res://scenes/ui/SettingsMenu.gd" id="1_oqkcn"]
|
||||
[ext_resource type="Script" uid="uid://bv56qwni68qo" path="res://scenes/ui/SettingsMenu.gd" id="1_oqkcn"]
|
||||
|
||||
[node name="SettingsMenu" type="Control" groups=["localizable"]]
|
||||
layout_mode = 3
|
||||
|
||||
Reference in New Issue
Block a user