online multiplayer chess game (note server currently down)
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
83
84
85
86
87
88
89
90
extends Button

export(float) var scale_normal := 0.8
export(float) var scale_hover := 1.0
var cur_scale := scale_normal

export(float) var saturation_normal := 0.0
export(float) var saturation_hover := 1.0
var cur_saturation := saturation_normal

export(float) var weight := 0.35

export(Vector2) var offset = Vector2.ZERO

var emojis := {}

var focused := false

signal emoji_selected(emoji)

onready var emojimenu: GridMenu = $Popup/EmojiMenu
onready var popup: PopupPanel = $Popup
var font: DynamicFont = load("res://ui/chat/emoji_button_font.tres")
onready var font_size = font.size


func change_icon():
	if emojis:
		text = emojis.values()[randi() % len(emojis)]


func _ready():
	scale()
	set_process(false)


func _setup(_emojis: Dictionary):
	emojis = _emojis
	change_icon()
	for key in emojis.keys():
		emojimenu.add_text_item(emojis[key], arr2tooltip(key), Vector2(40, 40))


func arr2tooltip(arr) -> String:
	if typeof(arr) == TYPE_ARRAY:
		var string = ""
		for i in arr:
			string += i + " "
		return string
	return arr


func _focused(q: bool):
	focused = q
	if q:
		change_icon()
		set_process(true)


func _process(_delta: float) -> void:
	if focused:
		cur_scale = lerp(cur_scale, scale_hover, weight)
		cur_saturation = lerp(cur_saturation, saturation_hover, weight)
	else:
		cur_scale = lerp(cur_scale, scale_normal, weight)
		cur_saturation = lerp(cur_saturation, saturation_normal, weight)
		if is_equal_approx(cur_scale, scale_normal):
			set_process(false)

	scale()
	material.set_shader_param("saturation", cur_saturation)


func scale():
	font.size = cur_scale * font_size


func _pressed() -> void:
	popup.popup()
	emojimenu.open()
	yield(get_tree(), "idle_frame")
	popup.rect_global_position = rect_global_position + offset


func _on_EmojiMenu_pressed(index: int):
	emit_signal(
		"emoji_selected",
		emojis.keys()[index] if typeof(emojis.keys()[index]) == TYPE_STRING else emojis.keys()[index][0]
	)
	popup.hide()