online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/chat/emojibutton.gd')
| -rw-r--r-- | ui/chat/emojibutton.gd | 79 |
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() |