diff options
-rw-r--r-- | client/menu/main_menu.tscn | 2 | ||||
-rw-r--r-- | client/multiplayer.gd | 8 | ||||
-rw-r--r-- | client/player/chat_bubble.gd | 22 | ||||
-rw-r--r-- | client/player/chat_bubble.tscn | 15 | ||||
-rw-r--r-- | client/player/controllable_player.gd | 15 | ||||
-rw-r--r-- | client/project.godot | 6 |
6 files changed, 65 insertions, 3 deletions
diff --git a/client/menu/main_menu.tscn b/client/menu/main_menu.tscn index 03f9cf46..36f417f4 100644 --- a/client/menu/main_menu.tscn +++ b/client/menu/main_menu.tscn @@ -2,7 +2,7 @@ [ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_nlcpo"] [ext_resource type="Script" path="res://menu/main_menu.gd" id="2_qot2j"] -[ext_resource type="Material" path="res://menu/theme/dark_blur_material.tres" id="3_k58q5"] +[ext_resource type="Material" uid="uid://beea1pc5nt67r" path="res://menu/theme/dark_blur_material.tres" id="3_k58q5"] [ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://menu/theme/font-sansita-swashed.woff2" id="4_mfs30"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ukani"] diff --git a/client/multiplayer.gd b/client/multiplayer.gd index db891562..0d9697e8 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -191,6 +191,14 @@ func send_interact(pos: Vector2i, edge: bool): "edge": edge }) +func send_chat(message: String): + send_packet({ + "type": "communicate", + "message": { + "text": message + } + }) + func send_packet(packet): var json = JSON.stringify(packet) socket.send_text(json) diff --git a/client/player/chat_bubble.gd b/client/player/chat_bubble.gd index 6b09b69b..1329e198 100644 --- a/client/player/chat_bubble.gd +++ b/client/player/chat_bubble.gd @@ -1,7 +1,12 @@ class_name ChatBubble extends MeshInstance3D +signal submit_message + @onready var label: Label = $SubViewport/ChatMessage/Label +@onready var input: LineEdit = $LineEdit + +var editing := false func set_text(t: String): visible = true @@ -10,3 +15,20 @@ 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 adb68bc1..8d765156 100644 --- a/client/player/chat_bubble.tscn +++ b/client/player/chat_bubble.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://cgi6vcfrnqp0i"] +[gd_scene load_steps=7 format=3 uid="uid://cgi6vcfrnqp0i"] [ext_resource type="Script" path="res://player/chat_bubble.gd" id="1_4v1cx"] [ext_resource type="PackedScene" uid="uid://5rcfoyuiwuya" path="res://player/chat_message.tscn" id="2_lyyq0"] @@ -17,6 +17,8 @@ shading_mode = 0 albedo_texture = SubResource("ViewportTexture_mko8a") billboard_mode = 1 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_byl28"] + [node name="ChatBubble" type="MeshInstance3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0) visible = false @@ -25,7 +27,18 @@ surface_material_override/0 = SubResource("StandardMaterial3D_5iy0t") script = ExtResource("1_4v1cx") [node name="SubViewport" type="SubViewport" parent="."] +disable_3d = true transparent_bg = true size = Vector2i(512, 128) [node name="ChatMessage" parent="SubViewport" instance=ExtResource("2_lyyq0")] + +[node name="LineEdit" type="LineEdit" parent="."] +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"] diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 32fa3135..7b88debf 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -26,7 +26,8 @@ const BOOST_RESTORE = 0.5 var facing = Vector2(1, 0) var velocity_ = Vector2(0, 0) var stamina = 0 -var boosting = false +var boosting := false +var chat_open := false var target: Vector2i = Vector2i(0, 0) @@ -40,6 +41,15 @@ func _ready(): game.mp.send_position(position_, rotation_) ) super() + bubble.submit_message.connect(submit_message) + +func _input(event): + if Input.is_action_just_pressed("chat"): + if chat_open: + bubble.stop_edit() + else: + bubble.edit() + chat_open = !chat_open func _process(delta): var input = Input.get_vector("left", "right", "forward", "backwards") @@ -109,6 +119,9 @@ func update_position(new_position: Vector2, _new_rotation: float): if (new_position - position_).length() > 3.: position_ = new_position +func submit_message(text: String): + game.mp.send_chat(text) + func interact(): var tile_idx = str(target) var data = game.tile_by_pos.get(tile_idx) diff --git a/client/project.godot b/client/project.godot index ec7780f3..2d8bcbfd 100644 --- a/client/project.godot +++ b/client/project.godot @@ -118,6 +118,12 @@ zoom_out={ , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null) ] } +chat={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":true,"script":null) +] +} [internationalization] |