extends Control

signal dice_selected (dice_value)

const dice = preload("res://UI/Dice.tscn")

var selected : bool = false
var selected_dice = null

var current_dice = []


func _physics_process(delta):
	
	# no keyboard input if not selected  
	if not selected:
		selected_dice = null
		return
	
	# skip turn if the list is empty
	if len(current_dice) == 0:
		selected = false
		return
	
	# if selected dice is null, add a value
	if not selected_dice:
		selected_dice = 0
	
	# TODO: maybe support actual dicrectional selection
	# move the selection forward or backward the list depending on input
	if (Input.is_action_just_pressed("ui_up") or 
		Input.is_action_just_pressed("ui_left")):
			
			current_dice[selected_dice].selected = false
			
			selected_dice += 1
			if selected_dice >= len(current_dice):
				selected_dice = 0
	
	if (Input.is_action_just_pressed("ui_down") or
		Input.is_action_just_pressed("ui_right")):
			
			current_dice[selected_dice].selected = false
			
			selected_dice -= 1
			if selected_dice < 0:
				selected_dice = len(current_dice) -1
	
	# enable the selected shader
	current_dice[selected_dice].selected = true
	
	#if the enter key is pressed, remove the selected dice and emit the signal
	if Input.is_action_just_pressed("ui_accept"):
		emit_signal("dice_selected", current_dice[selected_dice].dice_value)
		
		current_dice[selected_dice].queue_free()
		current_dice.remove(selected_dice)
		selected_dice = null
		selected = false


func roll_dice(specific_value : int = 0):
	# make a new dice instance and add it to the grid container
	var new_dice = dice.instance()
	$Margin/AutoGrid.add_child(new_dice)
	
	# if a specifc dice choosen, make new dice that type
	if specific_value in [1, 2, 3, 4, 5, 6]:
		new_dice.dice_value = specific_value
	
	# add the current dice to the list of dice
	current_dice.append(new_dice)