diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/game.gd | 4 | ||||
-rw-r--r-- | client/menu/chat/chat_message.gd | 29 | ||||
-rw-r--r-- | client/menu/chat/chat_message.tscn | 35 | ||||
-rw-r--r-- | client/menu/chat/chat_open.gd | 47 | ||||
-rw-r--r-- | client/menu/chat/chat_open.tscn | 50 | ||||
-rw-r--r-- | client/menu/chat/chat_preview.gd | 33 | ||||
-rw-r--r-- | client/menu/chat/chat_preview.tscn | 39 | ||||
-rw-r--r-- | client/menu/game.gd | 4 | ||||
-rw-r--r-- | client/menu/game.tscn | 6 | ||||
-rw-r--r-- | client/menu/lobby.tscn | 2 | ||||
-rw-r--r-- | client/menu/theme/style/item_bubble_progress_style.tres (renamed from client/menu/theme/item_bubble_progress_style.tres) | 0 | ||||
-rw-r--r-- | client/menu/theme/style/lobby_panel_override.tres (renamed from client/menu/theme/lobby_panel_override.tres) | 0 | ||||
-rw-r--r-- | client/menu/theme/style/panel_style.tres | 8 | ||||
-rw-r--r-- | client/menu/theme/theme.tres | 11 | ||||
-rw-r--r-- | client/player/chat_bubble.gd | 19 | ||||
-rw-r--r-- | client/player/chat_bubble.tscn | 4 | ||||
-rw-r--r-- | client/player/chat_message.tscn | 4 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 15 | ||||
-rw-r--r-- | client/player/item_bubble.gd | 2 | ||||
-rw-r--r-- | client/player/item_bubble.tscn | 2 |
20 files changed, 263 insertions, 51 deletions
diff --git a/client/game.gd b/client/game.gd index 5d14cdc8..10e3fa0c 100644 --- a/client/game.gd +++ b/client/game.gd @@ -21,6 +21,7 @@ extends Node3D signal update_players(players: Dictionary) signal data_updated() signal in_lobby_updated(in_lobby: bool) +signal text_message(player: int, text: String, timeout_initial: float, timeout_remaining: float) signal joined() signal left() @@ -38,6 +39,7 @@ var tile_collide: Array = [] var tile_interact: Array = [] var maps: Array = [] var bot_algos: Array +var text_message_history: Array[Array] = [] var in_lobby := false var is_replay := false @@ -217,6 +219,8 @@ func _ready(): mp.text_message.connect(func(player: int, text: String, timeout_initial: float, timeout_remaining: float): var p: Player = players[player] p.text_message(text, timeout_initial, timeout_remaining) + text_message.emit(player, text, timeout_initial, timeout_remaining) + text_message_history.append([player, text]) ) mp.item_message.connect(func(player: int, item: int, timeout_initial: float, timeout_remaining: float): diff --git a/client/menu/chat/chat_message.gd b/client/menu/chat/chat_message.gd new file mode 100644 index 00000000..99a4a520 --- /dev/null +++ b/client/menu/chat/chat_message.gd @@ -0,0 +1,29 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 tpart +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends PanelContainer +class_name ChatMessage + +@onready var fade_away_timer = $FadeAway + +func set_message(username: String, message: String, fade_away: bool = false, fade_time: float = 5.): + $VBox/Sender.text = username + $VBox/Message.text = message + + if fade_away: + fade_away_timer.start(fade_time) + +func _on_fade_away_timeout() -> void: + queue_free() diff --git a/client/menu/chat/chat_message.tscn b/client/menu/chat/chat_message.tscn new file mode 100644 index 00000000..84ccb402 --- /dev/null +++ b/client/menu/chat/chat_message.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=5 format=3 uid="uid://bpc2qgsvcafhe"] + +[ext_resource type="Script" path="res://menu/chat/chat_message.gd" id="1_ey0qp"] +[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_rx6vg"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ocjra"] + +[sub_resource type="FontVariation" id="FontVariation_jfhbh"] +variation_embolden = 1.3 + +[node name="ChatMessage" type="PanelContainer"] +offset_right = 72.0 +offset_bottom = 165.0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_ocjra") +script = ExtResource("1_ey0qp") + +[node name="VBox" type="HBoxContainer" parent="."] +layout_mode = 2 +theme = ExtResource("1_rx6vg") + +[node name="Sender" type="Label" parent="VBox"] +layout_mode = 2 +theme_override_fonts/font = SubResource("FontVariation_jfhbh") +text = "<Name>" + +[node name="Message" type="Label" parent="VBox"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Message" +autowrap_mode = 3 + +[node name="FadeAway" type="Timer" parent="."] +one_shot = true + +[connection signal="timeout" from="FadeAway" to="." method="_on_fade_away_timeout"] diff --git a/client/menu/chat/chat_open.gd b/client/menu/chat/chat_open.gd new file mode 100644 index 00000000..f5b93adf --- /dev/null +++ b/client/menu/chat/chat_open.gd @@ -0,0 +1,47 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 tpart +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends Menu +class_name ChatOpen + +const CHAT_MESSAGE_SCENE = preload("res://menu/chat/chat_message.tscn") + +@onready var messages_container: VBoxContainer = $PanelContainer/MarginContainer/VBoxContainer/ScrollContainerCustom/Messages +@onready var line: LineEdit = $PanelContainer/MarginContainer/VBoxContainer/LineEdit +@onready var game_menu: GameMenu = get_parent() +@onready var game: Game = game_menu.game + +func _ready() -> void: + super() + for i in game.text_message_history: + add_message(i[0], i[1]) + + game.text_message.connect( + func message(player: int, text: String, _timeout_initial: float, _timeout_remaining: float): + add_message(player, text) + ) + +func _input(event: InputEvent) -> void: + if Input.is_action_just_pressed("chat"): + if line.text != "": + game.mp.send_chat(game.player_id, line.text) + exit() + super(event) + +func add_message(player: int, message: String): + var username: String = game.players[player].username + var chat_message: ChatMessage = CHAT_MESSAGE_SCENE.instantiate() + messages_container.add_child(chat_message) + chat_message.set_message("<%s>" % username, message) diff --git a/client/menu/chat/chat_open.tscn b/client/menu/chat/chat_open.tscn new file mode 100644 index 00000000..edd9f679 --- /dev/null +++ b/client/menu/chat/chat_open.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=5 format=3 uid="uid://dbd6k56l4p0ls"] + +[ext_resource type="Script" path="res://menu/chat/chat_open.gd" id="1_dsl4a"] +[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="1_isqmk"] +[ext_resource type="Script" path="res://menu/blur_setup.gd" id="2_urbd2"] +[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="3_v7xmg"] + +[node name="ChatOpen" type="Control"] +layout_mode = 3 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 296.0 +grow_vertical = 2 +script = ExtResource("1_dsl4a") +support_anim = false + +[node name="PanelContainer" type="PanelContainer" parent="."] +material = ExtResource("1_isqmk") +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 296.0 +grow_vertical = 2 +theme = ExtResource("3_v7xmg") +script = ExtResource("2_urbd2") + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] +layout_mode = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/separation = 0 + +[node name="ScrollContainerCustom" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +material = ExtResource("1_isqmk") +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("2_urbd2") + +[node name="Messages" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainerCustom"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +placeholder_text = "Write message" diff --git a/client/menu/chat/chat_preview.gd b/client/menu/chat/chat_preview.gd new file mode 100644 index 00000000..189ca89b --- /dev/null +++ b/client/menu/chat/chat_preview.gd @@ -0,0 +1,33 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 tpart +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +extends Control + +const CHAT_MESSAGE_SCENE = preload("res://menu/chat/chat_message.tscn") + +@onready var game: Game = $"../Game" +@onready var messages_container: VBoxContainer = $MarginContainer/ScrollContainer/PanelContainer/Messages + +func _ready(): + game.text_message.connect( + func message(player: int, text: String, timeout_initial: float, timeout_remaining: float): + add_message(player, text, timeout_remaining) + ) + +func add_message(player: int, message: String, time: float): + var username: String = game.players[player].username + var chat_message: ChatMessage = CHAT_MESSAGE_SCENE.instantiate() + messages_container.add_child(chat_message) + chat_message.set_message("<%s>" % username, message, true, time) diff --git a/client/menu/chat/chat_preview.tscn b/client/menu/chat/chat_preview.tscn new file mode 100644 index 00000000..a50b138a --- /dev/null +++ b/client/menu/chat/chat_preview.tscn @@ -0,0 +1,39 @@ +[gd_scene load_steps=5 format=3 uid="uid://xcxbmynn8mhi"] + +[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_x8ock"] +[ext_resource type="Script" path="res://menu/chat/chat_preview.gd" id="2_72x70"] +[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="4_jo1xn"] +[ext_resource type="Script" path="res://menu/blur_setup.gd" id="5_1l77s"] + +[node name="ChatPreview" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme = ExtResource("1_x8ock") +script = ExtResource("2_72x70") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +anchor_bottom = 1.0 +offset_right = 296.0 +grow_vertical = 2 + +[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="PanelContainer" type="PanelContainer" parent="MarginContainer/ScrollContainer"] +material = ExtResource("4_jo1xn") +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +mouse_filter = 2 +script = ExtResource("5_1l77s") + +[node name="Messages" type="VBoxContainer" parent="MarginContainer/ScrollContainer/PanelContainer"] +layout_mode = 2 +mouse_filter = 2 diff --git a/client/menu/game.gd b/client/menu/game.gd index 6eb87b16..1d961d3c 100644 --- a/client/menu/game.gd +++ b/client/menu/game.gd @@ -30,6 +30,10 @@ func _ready(): func _input(_event): if Input.is_action_just_pressed("ui_menu"): open_ingame_menu() + + if Input.is_action_just_pressed("chat"): + Sound.play_click() + submenu("res://menu/chat/chat_open.tscn") func _menu_cover(state): game.camera.disable_input_menu = state diff --git a/client/menu/game.tscn b/client/menu/game.tscn index 1c19ccf7..cf596f77 100644 --- a/client/menu/game.tscn +++ b/client/menu/game.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=6 format=3 uid="uid://bbjwoxs71fnsk"] +[gd_scene load_steps=7 format=3 uid="uid://bbjwoxs71fnsk"] [ext_resource type="Script" path="res://menu/game.gd" id="1_cdpsh"] [ext_resource type="PackedScene" uid="uid://c6krh36hoqfg8" path="res://game.tscn" id="2_uojcy"] [ext_resource type="PackedScene" uid="uid://bpikve6wlsjfl" path="res://menu/overlay.tscn" id="3_i0ytb"] [ext_resource type="PackedScene" uid="uid://bc50la65ntifb" path="res://menu/lobby.tscn" id="3_udxby"] [ext_resource type="PackedScene" uid="uid://b21nrnkygiyjt" path="res://menu/popup_message.tscn" id="5_n1wy0"] +[ext_resource type="PackedScene" uid="uid://xcxbmynn8mhi" path="res://menu/chat/chat_preview.tscn" id="6_dh5lr"] [node name="GameMenu" type="Control"] layout_mode = 3 @@ -36,3 +37,6 @@ mouse_filter = 2 [node name="PopupMessage" parent="." instance=ExtResource("5_n1wy0")] layout_mode = 1 + +[node name="ChatPreview" parent="." instance=ExtResource("6_dh5lr")] +layout_mode = 1 diff --git a/client/menu/lobby.tscn b/client/menu/lobby.tscn index cde4c0b4..05b6507c 100644 --- a/client/menu/lobby.tscn +++ b/client/menu/lobby.tscn @@ -2,7 +2,7 @@ [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_u18ke"] [ext_resource type="Script" path="res://menu/lobby.gd" id="2_7657i"] -[ext_resource type="StyleBox" uid="uid://de80aw86emnql" path="res://menu/theme/lobby_panel_override.tres" id="3_6iqoe"] +[ext_resource type="StyleBox" uid="uid://de80aw86emnql" path="res://menu/theme/style/lobby_panel_override.tres" id="3_6iqoe"] [ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_esmbx"] [ext_resource type="Texture2D" uid="uid://35rd5gamtyqm" path="res://menu/arrow.svg" id="3_jxleg"] [ext_resource type="Texture2D" uid="uid://j75dbytlbju" path="res://menu/arrow_pressed.svg" id="4_eapmn"] diff --git a/client/menu/theme/item_bubble_progress_style.tres b/client/menu/theme/style/item_bubble_progress_style.tres index 69543f24..69543f24 100644 --- a/client/menu/theme/item_bubble_progress_style.tres +++ b/client/menu/theme/style/item_bubble_progress_style.tres diff --git a/client/menu/theme/lobby_panel_override.tres b/client/menu/theme/style/lobby_panel_override.tres index 04fd16b0..04fd16b0 100644 --- a/client/menu/theme/lobby_panel_override.tres +++ b/client/menu/theme/style/lobby_panel_override.tres diff --git a/client/menu/theme/style/panel_style.tres b/client/menu/theme/style/panel_style.tres new file mode 100644 index 00000000..d1f27667 --- /dev/null +++ b/client/menu/theme/style/panel_style.tres @@ -0,0 +1,8 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://bcd4xcvtv7tws"] + +[resource] +bg_color = Color(0, 0, 0, 0.6) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 diff --git a/client/menu/theme/theme.tres b/client/menu/theme/theme.tres index defb9890..fff223c0 100644 --- a/client/menu/theme/theme.tres +++ b/client/menu/theme/theme.tres @@ -5,6 +5,7 @@ [ext_resource type="StyleBox" uid="uid://pi5uhe0lrgka" path="res://menu/theme/style/normal_style.tres" id="2_8fwoi"] [ext_resource type="StyleBox" uid="uid://dua4jqje3704w" path="res://menu/theme/style/hover_style.tres" id="2_ye28t"] [ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="3_8u6ww"] +[ext_resource type="StyleBox" uid="uid://bcd4xcvtv7tws" path="res://menu/theme/style/panel_style.tres" id="4_42dlp"] [sub_resource type="StyleBoxLine" id="StyleBoxLine_emtvk"] content_margin_top = 5.0 @@ -25,13 +26,6 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sjrhv"] -bg_color = Color(0, 0, 0, 0.6) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 - [sub_resource type="FontVariation" id="FontVariation_ff4nr"] base_font = ExtResource("3_8u6ww") variation_embolden = 0.7 @@ -65,7 +59,8 @@ MarginContainer/constants/margin_bottom = 32 MarginContainer/constants/margin_left = 32 MarginContainer/constants/margin_right = 32 MarginContainer/constants/margin_top = 32 -Panel/styles/panel = SubResource("StyleBoxFlat_sjrhv") +Panel/styles/panel = ExtResource("4_42dlp") +PanelContainer/styles/panel = ExtResource("4_42dlp") RichTextLabel/fonts/bold_font = SubResource("FontVariation_ff4nr") RichTextLabel/fonts/bold_italics_font = SubResource("FontVariation_lyo8w") RichTextLabel/fonts/italics_font = SubResource("FontVariation_lyo8w") diff --git a/client/player/chat_bubble.gd b/client/player/chat_bubble.gd index 8d6799bd..d71ce5b7 100644 --- a/client/player/chat_bubble.gd +++ b/client/player/chat_bubble.gd @@ -17,8 +17,6 @@ class_name ChatBubble extends MeshInstance3D -signal submit_message - @onready var label: Label = $SubViewport/ChatMessage/Label @onready var input: LineEdit = $LineEdit @@ -31,20 +29,3 @@ func set_text(t: String): func remove_text(): visible = false label.text = "" - -func edit(): - visible = true - label.text = "" - editing = true - input.grab_focus() - -func stop_edit(): - visible = false - editing = false - input.release_focus() - if input.text != "": - submit_message.emit(input.text) - input.text = "" - -func _on_line_edit_text_changed(new_text): - label.text = new_text diff --git a/client/player/chat_bubble.tscn b/client/player/chat_bubble.tscn index 0fb6330f..6124d8b2 100644 --- a/client/player/chat_bubble.tscn +++ b/client/player/chat_bubble.tscn @@ -37,8 +37,6 @@ size = Vector2i(512, 128) modulate = Color(1, 1, 1, 0) offset_right = 67.0625 offset_bottom = 31.0 -theme_override_styles/normal = SubResource("StyleBoxEmpty_byl28") theme_override_styles/focus = SubResource("StyleBoxEmpty_byl28") theme_override_styles/read_only = SubResource("StyleBoxEmpty_byl28") - -[connection signal="text_changed" from="LineEdit" to="." method="_on_line_edit_text_changed"] +theme_override_styles/normal = SubResource("StyleBoxEmpty_byl28") diff --git a/client/player/chat_message.tscn b/client/player/chat_message.tscn index 816c9c4f..594e9ec1 100644 --- a/client/player/chat_message.tscn +++ b/client/player/chat_message.tscn @@ -14,19 +14,19 @@ base_font = ExtResource("1_3ximm") variation_embolden = 1.0 [node name="ChatMessage" type="Panel"] +auto_translate_mode = 2 offset_right = 512.0 offset_bottom = 128.0 -auto_translate = false theme_override_styles/panel = SubResource("StyleBoxFlat_dpele") [node name="Label" type="Label" parent="."] +auto_translate_mode = 2 layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = SubResource("FontVariation_ecurp") theme_override_font_sizes/font_size = 40 diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index ab43b70b..c5180264 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -47,18 +47,6 @@ func _ready(): ) add_child(onscreen_controls) super() - chat_bubble.submit_message.connect(submit_message) - -func _input(_event): - if Input.is_action_just_pressed("chat"): - if chat_open and not game.menu.covered: - chat_bubble.stop_edit() - chat_open = false - enable_input = true - elif is_input_enabled(): - chat_bubble.edit() - chat_open = true - enable_input = false const MAX_DT = 1. / 50. func _process(delta): @@ -148,9 +136,6 @@ func aabb_point_distance(mi: Vector2, ma: Vector2, p: Vector2) -> float: func update_position(_new_position: Vector2, _new_rotation: float, _new_boosting: bool): pass -func submit_message(text: String): - game.mp.send_chat(game.player_id, text) - func progress(p: float, warn: bool): super(p, warn) Input.start_joy_vibration(0, 0.5, 0.1, 0.15) diff --git a/client/player/item_bubble.gd b/client/player/item_bubble.gd index 32e353e8..ac71c27e 100644 --- a/client/player/item_bubble.gd +++ b/client/player/item_bubble.gd @@ -22,7 +22,7 @@ extends MeshInstance3D var item: Item var timeout_remaining := 0. var timeout_initial := 0. -var progress_style = preload("res://menu/theme/item_bubble_progress_style.tres") +var progress_style = preload("res://menu/theme/style/item_bubble_progress_style.tres") func _init(): progress_style = progress_style.duplicate() diff --git a/client/player/item_bubble.tscn b/client/player/item_bubble.tscn index 8189cfc0..f3456908 100644 --- a/client/player/item_bubble.tscn +++ b/client/player/item_bubble.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=9 format=3 uid="uid://cj777mi5nok6c"] [ext_resource type="Script" path="res://player/item_bubble.gd" id="1_84g24"] -[ext_resource type="StyleBox" uid="uid://brw8uogdgx2gf" path="res://menu/theme/item_bubble_progress_style.tres" id="2_5qt7f"] +[ext_resource type="StyleBox" uid="uid://brw8uogdgx2gf" path="res://menu/theme/style/item_bubble_progress_style.tres" id="2_5qt7f"] [sub_resource type="QuadMesh" id="QuadMesh_tlsxo"] |