summaryrefslogtreecommitdiff
path: root/scripts/leaderboard.gd
blob: fc2dc4e2706e94064f28dd004494b06c415a33d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
extends Control

var viewing : bool
var animation_length = 0.5

func _ready():
	if get_parent().name == "Menu":
		viewing = true
		$Control/ButtHBox/RestartButton.visible = false
		$Control/Label.visible = false
		$Control/LineEdit.visible = false
		$Control/Button.visible = false
	else:
		$Control/ButtHBox.visible = false
		$Control/LineEdit.grab_focus()
		if !global_variables.player_name.is_empty():
			$Control/LineEdit.text = global_variables.player_name
			$Control/LineEdit.select_all()
		$Control/Label.text = "Your score:\n" + str(global_variables.score)
	refresh_menu()

func _on_LineEdit_text_entered(new_text):
	if !new_text.is_empty():
		$Control/LineEdit.release_focus()
		$Control/LineEdit.focus_mode = FOCUS_NONE
		$Control/LineEdit.editable = false
		$Control/Button.visible = false
		$Control/ButtHBox.visible = true
		global_variables.player_name = new_text
		var placement = get_placement()
		update_leaderboard(placement)
		leaderboard_transition_animation(placement)

func get_placement():
	for i in range(global_variables.leaderboard.size()):
		if global_variables.score >= global_variables.leaderboard[i][1]:
			return i

func update_leaderboard(placement):
	for x in range(global_variables.leaderboard.size() - 2, placement - 1, -1):
		global_variables.leaderboard[x+1][0] = global_variables.leaderboard[x][0] 
		global_variables.leaderboard[x+1][1] = global_variables.leaderboard[x][1]
	global_variables.leaderboard[placement][0] = global_variables.player_name
	global_variables.leaderboard[placement][1] = global_variables.score

func leaderboard_transition_animation(placement):
	for x in range(global_variables.leaderboard.size(), placement, -1):
		for y in ["NamePanel", "ScorePanel"]:
			var panel = "GridContainer/" + y + str(x)
			var overlay = ColorRect.new()
			overlay.set_size(get_node(panel).size * $GridContainer.scale)
			overlay.set_position(get_node(panel).global_position)
			overlay.color = Color(1, 1, 1, 0)
			add_child(overlay)
			var tween = create_tween()
			tween.tween_property(get_node(overlay.get_path()), "color", Color(1, 1, 1, 1), animation_length)
			tween.tween_property(get_node(overlay.get_path()), "color", Color(1, 1, 1, 0), animation_length)
	await get_tree().create_timer(animation_length).timeout
	refresh_menu()

func refresh_menu():
	for i in range(10):
		var label_name = "GridContainer/NamePanel" + str(i + 1) + "/Name"
		var label_score = "GridContainer/ScorePanel" + str(i + 1) + "/Score"
		get_node(label_name).text = global_variables.leaderboard[i][0]
		get_node(label_score).text = str(global_variables.leaderboard[i][1])

func _on_QuitButton_pressed():
	if viewing:
		queue_free()
	else:
		get_tree().change_scene_to_file("res://scenes/mainmenu.tscn")
		get_tree().paused = false
		global_variables.reset_variables()

func _on_RestartButton_pressed():
	get_tree().reload_current_scene()
	get_tree().paused = false
	global_variables.reset_variables()

func _on_Button_pressed():
	_on_LineEdit_text_entered($Control/LineEdit.text)