online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/chat/emojibutton.gd')
-rw-r--r--ui/chat/emojibutton.gd79
1 files changed, 79 insertions, 0 deletions
diff --git a/ui/chat/emojibutton.gd b/ui/chat/emojibutton.gd
new file mode 100644
index 0000000..b63e418
--- /dev/null
+++ b/ui/chat/emojibutton.gd
@@ -0,0 +1,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()