diff options
author | nokoe <nokoe@mailbox.org> | 2024-10-03 16:43:37 +0200 |
---|---|---|
committer | nokoe <nokoe@mailbox.org> | 2024-10-03 16:43:37 +0200 |
commit | 43390237a6dacaeff59826c1f6951afa13ab2d7f (patch) | |
tree | ab3dd6022596edbee3f5706b657311e22b6f3fd2 | |
parent | 0c789a627e1f0357c2e14523782a253c80c50560 (diff) | |
download | hurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar hurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar.bz2 hurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar.zst |
chat messages show user color; align vertically; fixes #207
-rw-r--r-- | client/game.gd | 27 | ||||
-rw-r--r-- | client/menu/communicate/chat/chat_message.gd | 9 | ||||
-rw-r--r-- | client/menu/communicate/chat/chat_message.tscn | 19 | ||||
-rw-r--r-- | client/menu/communicate/chat/chat_open.gd | 10 | ||||
-rw-r--r-- | client/menu/communicate/chat/chat_preview.gd | 17 | ||||
-rw-r--r-- | client/player/character/character.gd | 4 | ||||
-rw-r--r-- | client/player/player.gd | 6 |
7 files changed, 58 insertions, 34 deletions
diff --git a/client/game.gd b/client/game.gd index d87a091c..da09ae9a 100644 --- a/client/game.gd +++ b/client/game.gd @@ -22,9 +22,17 @@ signal update_players(players: Dictionary) signal data_updated() signal in_lobby_updated(in_lobby: bool) signal join_state_updated(state: JoinState) -signal text_message(player, text: String, timeout_initial: float, timeout_remaining: float) +signal text_message(message: TextMessage) signal update_tutorial_running(running: bool) +class TextMessage: + var username: String + var color: Color + var text: String + var timeout_initial: float + var timeout_remaining + + enum SpectatingMode { CENTER, FREE, @@ -45,7 +53,7 @@ var tile_collide: Array = [] var tile_interact: Array = [] var maps: Array = [] var bot_algos: Array -var text_message_history: Array[Array] = [] +var text_message_history: Array[TextMessage] = [] var join_state: JoinState = JoinState.SPECTATING @@ -226,12 +234,19 @@ func handle_packet(p): update_tutorial_running.emit(tutorial_running) mp.send_chat(player_id, "/start-tutorial %s" % item_name) elif "text" in p.message: + var data = TextMessage.new() + data.timeout_initial = timeout_initial + data.timeout_remaining = timeout_remaining if pinned: push_error("Pinned text messages are currently not supported") - players[p.player].text_message(p.message.text, timeout_initial, timeout_remaining) - var username: String = players[p.player].username - text_message.emit(username, p.message.text, timeout_initial, timeout_remaining) - text_message_history.append([username, p.message.text]) + var player: Player = players[p.player] + data.color = Character.COLORS[player.character.ParsedStyle.new(player.character_idx).color] + data.username = players[p.player].username + data.text = p.message.text + + player.text_message(data) + text_message.emit(data) + text_message_history.append(data) else: push_error("neither text, item nor effect provided") else: diff --git a/client/menu/communicate/chat/chat_message.gd b/client/menu/communicate/chat/chat_message.gd index 1cc57102..c6e64a7c 100644 --- a/client/menu/communicate/chat/chat_message.gd +++ b/client/menu/communicate/chat/chat_message.gd @@ -13,16 +13,17 @@ # 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 HBoxContainer +extends VBoxContainer class_name ChatMessage @onready var fade_away_timer: Timer = $FadeAway @onready var sender_label: Label = $Sender -@onready var message_label: Label = $Message +@onready var message_label: Label = $MarginContainer/Message -func set_message(username: String, message: String, fade_away: bool = false, fade_time: float = 5.): - sender_label.text = username +func set_message(username: String, message: String, username_color: Color, fade_away: bool = false, fade_time: float = 5.): + sender_label.text = "<%s>" % username message_label.text = message + sender_label.add_theme_color_override("font_color", username_color) if fade_away: fade_away_timer.start(fade_time) diff --git a/client/menu/communicate/chat/chat_message.tscn b/client/menu/communicate/chat/chat_message.tscn index a095c42e..06a9311e 100644 --- a/client/menu/communicate/chat/chat_message.tscn +++ b/client/menu/communicate/chat/chat_message.tscn @@ -6,9 +6,9 @@ [sub_resource type="FontVariation" id="FontVariation_jfhbh"] variation_embolden = 1.3 -[node name="ChatMessage" type="HBoxContainer"] +[node name="ChatMessage" type="VBoxContainer"] offset_right = 72.0 -offset_bottom = 165.0 +offset_bottom = 192.0 theme = ExtResource("1_rx6vg") script = ExtResource("1_ey0qp") @@ -17,14 +17,21 @@ layout_mode = 2 theme_override_fonts/font = SubResource("FontVariation_jfhbh") text = "<Name>" -[node name="Message" type="Label" parent="."] +[node name="FadeAway" type="Timer" parent="."] +one_shot = true + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 5 + +[node name="Message" type="Label" parent="MarginContainer"] layout_mode = 2 size_flags_horizontal = 3 text = "Message" vertical_alignment = 1 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/communicate/chat/chat_open.gd b/client/menu/communicate/chat/chat_open.gd index c7060e7d..af691f39 100644 --- a/client/menu/communicate/chat/chat_open.gd +++ b/client/menu/communicate/chat/chat_open.gd @@ -27,11 +27,11 @@ const CHAT_MESSAGE_SCENE = preload("res://menu/communicate/chat/chat_message.tsc func _ready() -> void: super() for i in game.text_message_history: - add_message(i[0], i[1]) + add_message(i) game.text_message.connect( - func message(username: String, text: String, _timeout_initial: float, _timeout_remaining: float): - add_message(username, text) + func message(m: Game.TextMessage): + add_message(m) ) func _input(event: InputEvent) -> void: @@ -41,8 +41,8 @@ func _input(event: InputEvent) -> void: exit() super(event) -func add_message(username: String, message: String): +func add_message(message: Game.TextMessage): var chat_message: ChatMessage = CHAT_MESSAGE_SCENE.instantiate() messages_container.add_child(chat_message) - chat_message.set_message("<%s>" % username, message) + chat_message.set_message(message.username, message.text, message.color) scroll_container.call_deferred("scroll_to_bottom") diff --git a/client/menu/communicate/chat/chat_preview.gd b/client/menu/communicate/chat/chat_preview.gd index 14713f7e..798fbdd1 100644 --- a/client/menu/communicate/chat/chat_preview.gd +++ b/client/menu/communicate/chat/chat_preview.gd @@ -22,12 +22,13 @@ const CHAT_MESSAGE_SCENE = preload("res://menu/communicate/chat/chat_message.tsc @onready var messages_container: VBoxContainer = $MarginContainer/ScrollContainer/PanelContainer/Messages func _ready(): - game.text_message.connect( - func message(username: String, text: String, _timeout_initial: float, timeout_remaining: float): - add_message(username, text, timeout_remaining) + game.text_message.connect(func(message: Game.TextMessage): + var chat_message: ChatMessage = CHAT_MESSAGE_SCENE.instantiate() + messages_container.add_child(chat_message) + chat_message.set_message( + message.username, + message.text, + message.color, + true, + message.timeout_remaining) ) - -func add_message(username: String, message: String, time: float): - 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/player/character/character.gd b/client/player/character/character.gd index cd41e7ff..82e5c849 100644 --- a/client/player/character/character.gd +++ b/client/player/character/character.gd @@ -44,7 +44,7 @@ var current_animation := "idle" const NUM_COLORS = 5; const NUM_HAIRS = 3; @onready var hairstyles := [$Main/HeadDefault/Hair, $Main/HeadDefault/Hair2, $Main/HeadDefault/Hair3] -var colors = [ +const COLORS: Array[Color] = [ Color(0.204, 0.361, 0.624), Color(0.568, 0.256, 0.602), Color(0.575, 0.341, 0.117), @@ -111,7 +111,7 @@ func set_style(id: int): head_default.visible = not p.robot for h in hairstyles: h.hide() hairstyles[p.hair].show() - $Main.get_active_material(0).albedo_color = Color(0.349, 0.349, 0.349) if p.robot else colors[p.color] + $Main.get_active_material(0).albedo_color = Color(0.349, 0.349, 0.349) if p.robot else COLORS[p.color] func play_animation(name_: String): current_animation = name_ diff --git a/client/player/player.gd b/client/player/player.gd index 2c8cabf3..1ca7a37f 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -157,9 +157,9 @@ func item_message(item_name: String, timeout_initial: float, timeout_remaining: clear_timer.start(timeout_remaining) current_item_message = item_name -func text_message(m: String, _timeout_initial: float, timeout_remaining: float): - chat_bubble.set_text(m) - clear_timer.start(timeout_remaining) +func text_message(message: Game.TextMessage): + chat_bubble.set_text(message.text) + clear_timer.start(message.timeout_remaining) func effect_message(effect_name: String): effect.set_effect(effect_name) |