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
extends TextureButton

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

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

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


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


func _ready():
	material.set_shader_param("scale", scale_normal)
	set_process(false)


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


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


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)

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


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][0])
	popup.hide()