channel-switcher/games/crafting/crafting.gd
2025-05-17 14:21:38 +10:00

79 lines
2.1 KiB
GDScript

extends Node
signal game_win
signal game_lose
@export var keys : Array[String]
@export var time_limit : float = 25
@export_group("Node References")
@export var pixel_grid : GridContainer
@export var timer_progress : TextureProgressBar
var pixels : Array[Control]
var current_time : float = 25
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
create_pixels()
current_time = time_limit
pass # Replace with function body.
func create_pixels():
for i in range(25):
var newPixel = load("res://games/crafting/pixel.tscn").instantiate()
var randomKey = randi_range(0,keys.size()-1)
newPixel.key = keys[randomKey]
pixels.append(newPixel)
pixel_grid.add_child(newPixel)
func enter_letter(letter : String):
var found : bool = false
var options : Array[Control]
for pixel in pixels:
if (pixel.key == letter and !pixel.activated):
found = true
options.append(pixel)
if(found):
var randomPixel : int = randi_range(0, options.size()-1)
options[randomPixel].activate()
else:
for i in range(3):
var randomPixel : int = randi_range(0,pixels.size()-1)
pixels[randomPixel].deactivate()
if count_activated():
game_win.emit()
func count_activated() -> bool:
var count : int = 0
for pixel in pixels:
if pixel.activated:
count += 1
if count == 25:
return true
else:
return false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
current_time -= delta
timer_progress.value = current_time/time_limit
if current_time <= 0:
game_lose.emit()
#loser
if Input.is_action_just_pressed("crafting_e"):
enter_letter("E")
elif Input.is_action_just_pressed("crafting_q"):
enter_letter("Q")
elif Input.is_action_just_pressed("crafting_r"):
enter_letter("R")
elif Input.is_action_just_pressed("crafting_t"):
enter_letter("T")
elif Input.is_action_just_pressed("crafting_y"):
enter_letter("Y")
elif Input.is_action_just_pressed("crafting_u"):
enter_letter("U")
elif Input.is_action_just_pressed("crafting_f"):
enter_letter("F")
elif Input.is_action_just_pressed("crafting_m"):
enter_letter("M")