aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/menu/main_menu.tscn2
-rw-r--r--client/multiplayer.gd8
-rw-r--r--client/player/chat_bubble.gd22
-rw-r--r--client/player/chat_bubble.tscn15
-rw-r--r--client/player/controllable_player.gd15
-rw-r--r--client/project.godot6
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]