summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-10-03 16:43:37 +0200
committernokoe <nokoe@mailbox.org>2024-10-03 16:43:37 +0200
commit43390237a6dacaeff59826c1f6951afa13ab2d7f (patch)
treeab3dd6022596edbee3f5706b657311e22b6f3fd2 /client
parent0c789a627e1f0357c2e14523782a253c80c50560 (diff)
downloadhurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar
hurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar.bz2
hurrycurry-43390237a6dacaeff59826c1f6951afa13ab2d7f.tar.zst
chat messages show user color; align vertically; fixes #207
Diffstat (limited to 'client')
-rw-r--r--client/game.gd27
-rw-r--r--client/menu/communicate/chat/chat_message.gd9
-rw-r--r--client/menu/communicate/chat/chat_message.tscn19
-rw-r--r--client/menu/communicate/chat/chat_open.gd10
-rw-r--r--client/menu/communicate/chat/chat_preview.gd17
-rw-r--r--client/player/character/character.gd4
-rw-r--r--client/player/player.gd6
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)