diff --git a/client/Global.gd b/client/Global.gd index ddfa215..9526724 100644 --- a/client/Global.gd +++ b/client/Global.gd @@ -4,6 +4,7 @@ var camera: Camera3D var player: Player var players: PlayerManager var account_id: String +var auth_token: String var interacting_with_ui: bool -var instance_id := OS.get_process_id() % 4 -var username := "user%d" % instance_id +var instance_id: int +var username: String diff --git a/client/Game.gd b/client/Main.gd similarity index 52% rename from client/Game.gd rename to client/Main.gd index 7a3a8bf..55ec50c 100644 --- a/client/Game.gd +++ b/client/Main.gd @@ -1,16 +1,26 @@ extends Node func _ready(): - # Capture mouse - #Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + Global.instance_id = OS.get_process_id() % 4 + Global.username = "user%d" % Global.instance_id - # Mute audio - var master_sound = AudioServer.get_bus_index("Master") - AudioServer.set_bus_mute(master_sound, true) + %Login.success.connect(on_login) + %Login.send_login() + + mute_audio() func _input(event): if event.is_action_pressed("toggle_fullscreen"): toggle_fullscreen() + get_viewport().set_input_as_handled() + +func mute_audio(): + var master_sound = AudioServer.get_bus_index("Master") + AudioServer.set_bus_mute(master_sound, true) + +func on_login(): + DisplayServer.window_set_title("%s - %s" % [Global.username, Global.account_id]) + DisplayServer.window_set_position(Vector2((Global.instance_id % 2) * 960, (Global.instance_id / 2 % 2) * 540)) func toggle_fullscreen(): var mode = DisplayServer.window_get_mode() @@ -19,6 +29,4 @@ func toggle_fullscreen(): DisplayServer.WINDOW_MODE_FULLSCREEN: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) _: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - - return + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) \ No newline at end of file diff --git a/client/world/Main.tscn b/client/Main.tscn similarity index 77% rename from client/world/Main.tscn rename to client/Main.tscn index 39d35e4..1b33551 100644 --- a/client/world/Main.tscn +++ b/client/Main.tscn @@ -1,24 +1,24 @@ [gd_scene load_steps=24 format=3 uid="uid://b40y7iuskv1ar"] -[ext_resource type="Script" path="res://Game.gd" id="1_uxop2"] -[ext_resource type="Script" path="res://network/Client.gd" id="2_00qe8"] -[ext_resource type="Script" path="res://network/Ping.gd" id="3_fd082"] -[ext_resource type="Script" path="res://network/Login.gd" id="4_0illd"] -[ext_resource type="Script" path="res://network/PlayerAdd.gd" id="5_sd8xh"] -[ext_resource type="PackedScene" uid="uid://2lcnu3dy54lx" path="res://player/Player.tscn" id="6_jxdko"] -[ext_resource type="Script" path="res://network/PlayerMove.gd" id="7_6xfox"] -[ext_resource type="Script" path="res://network/PlayerRemove.gd" id="7_ubce6"] -[ext_resource type="Script" path="res://world/Sun.gd" id="8_leyo3"] -[ext_resource type="Script" path="res://network/PlayerJump.gd" id="8_p6kmr"] -[ext_resource type="Environment" uid="uid://dixa0yso2s1u3" path="res://world/Environment.tres" id="9_4u3r5"] -[ext_resource type="CameraAttributesPractical" uid="uid://b835orxyqq6w5" path="res://camera/CameraAttributes.tres" id="10_4uslp"] -[ext_resource type="Script" path="res://network/Chat.gd" id="10_27gvi"] -[ext_resource type="PackedScene" uid="uid://hnn0n1xc2qt7" path="res://world/Tree.blend" id="12_x8kho"] -[ext_resource type="PackedScene" uid="uid://cb2t7bvvf3gwh" path="res://enemy/slime/Slime.tscn" id="13_hdbbd"] -[ext_resource type="PackedScene" uid="uid://dagn5bf7ou3sd" path="res://ui/UI.tscn" id="14_ofk4r"] -[ext_resource type="Script" path="res://camera/Camera.gd" id="15_ym3qc"] -[ext_resource type="Script" path="res://world/PlayerManager.gd" id="16_sjldq"] -[ext_resource type="Material" uid="uid://ddy5gkw0k16dq" path="res://shader/OutlineMaterial.tres" id="16_srvfy"] +[ext_resource type="Script" path="res://Main.gd" id="1_cw3ws"] +[ext_resource type="Script" path="res://network/Client.gd" id="2_8hxcx"] +[ext_resource type="Script" path="res://network/Ping.gd" id="3_d6qf1"] +[ext_resource type="Script" path="res://network/Login.gd" id="4_fsx7a"] +[ext_resource type="Script" path="res://network/PlayerAdd.gd" id="5_376ik"] +[ext_resource type="PackedScene" uid="uid://2lcnu3dy54lx" path="res://player/Player.tscn" id="6_cdj8w"] +[ext_resource type="Script" path="res://network/PlayerRemove.gd" id="7_2r42o"] +[ext_resource type="Script" path="res://network/PlayerMove.gd" id="8_ke1yy"] +[ext_resource type="Script" path="res://network/PlayerJump.gd" id="9_o8sk8"] +[ext_resource type="Script" path="res://network/Chat.gd" id="10_y3len"] +[ext_resource type="Script" path="res://world/Sun.gd" id="11_4jb08"] +[ext_resource type="Environment" uid="uid://dixa0yso2s1u3" path="res://world/Environment.tres" id="12_cscto"] +[ext_resource type="CameraAttributesPractical" uid="uid://b835orxyqq6w5" path="res://camera/CameraAttributes.tres" id="13_pvug4"] +[ext_resource type="PackedScene" uid="uid://hnn0n1xc2qt7" path="res://world/Tree.blend" id="14_7jtdl"] +[ext_resource type="PackedScene" uid="uid://cb2t7bvvf3gwh" path="res://enemy/slime/Slime.tscn" id="15_hgl78"] +[ext_resource type="Script" path="res://world/PlayerManager.gd" id="16_dp6bj"] +[ext_resource type="PackedScene" uid="uid://dagn5bf7ou3sd" path="res://ui/UI.tscn" id="17_43qhq"] +[ext_resource type="Script" path="res://camera/Camera.gd" id="18_wogcj"] +[ext_resource type="Material" uid="uid://ddy5gkw0k16dq" path="res://shader/OutlineMaterial.tres" id="19_d2i56"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lp0k7"] albedo_color = Color(0, 0, 0, 1) @@ -31,20 +31,20 @@ size = Vector3(100, 1, 100) size = Vector3(100, 1, 100) [sub_resource type="QuadMesh" id="QuadMesh_7yiqd"] -material = ExtResource("16_srvfy") +material = ExtResource("19_d2i56") flip_faces = true size = Vector2(2, 2) [node name="Main" type="Node"] -script = ExtResource("1_uxop2") +script = ExtResource("1_cw3ws") [node name="Client" type="Node" parent="."] unique_name_in_owner = true -script = ExtResource("2_00qe8") +script = ExtResource("2_8hxcx") [node name="Ping" type="Node" parent="Client"] unique_name_in_owner = true -script = ExtResource("3_fd082") +script = ExtResource("3_d6qf1") packet_type = 1 [node name="Timer" type="Timer" parent="Client/Ping"] @@ -52,7 +52,7 @@ autostart = true [node name="Login" type="Node" parent="Client"] unique_name_in_owner = true -script = ExtResource("4_0illd") +script = ExtResource("4_fsx7a") packet_type = 2 [node name="Timer" type="Timer" parent="Client/Login"] @@ -61,26 +61,26 @@ autostart = true [node name="PlayerAdd" type="Node" parent="Client"] unique_name_in_owner = true -script = ExtResource("5_sd8xh") -player_scene = ExtResource("6_jxdko") +script = ExtResource("5_376ik") +player_scene = ExtResource("6_cdj8w") packet_type = 10 [node name="PlayerRemove" type="Node" parent="Client"] -script = ExtResource("7_ubce6") +script = ExtResource("7_2r42o") packet_type = 11 [node name="PlayerMove" type="Node" parent="Client"] -script = ExtResource("7_6xfox") +script = ExtResource("8_ke1yy") delay = null packet_type = 12 [node name="PlayerJump" type="Node" parent="Client"] -script = ExtResource("8_p6kmr") +script = ExtResource("9_o8sk8") packet_type = 13 [node name="Chat" type="Node" parent="Client"] unique_name_in_owner = true -script = ExtResource("10_27gvi") +script = ExtResource("10_y3len") packet_type = 20 [node name="Statistics" type="Timer" parent="Client"] @@ -92,29 +92,29 @@ autostart = true transform = Transform3D(0.984808, 0.122788, -0.122788, 0, 0.707107, 0.707107, 0.173648, -0.696364, 0.696364, 0, 10, 0) shadow_enabled = true directional_shadow_mode = 0 -script = ExtResource("8_leyo3") +script = ExtResource("11_4jb08") [node name="Environment" type="WorldEnvironment" parent="World"] -environment = ExtResource("9_4u3r5") -camera_attributes = ExtResource("10_4uslp") +environment = ExtResource("12_cscto") +camera_attributes = ExtResource("13_pvug4") [node name="Trees" type="Node3D" parent="World"] -[node name="Tree" parent="World/Trees" instance=ExtResource("12_x8kho")] +[node name="Tree" parent="World/Trees" instance=ExtResource("14_7jtdl")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.11323, 0, -7.57074) -[node name="Tree2" parent="World/Trees" instance=ExtResource("12_x8kho")] +[node name="Tree2" parent="World/Trees" instance=ExtResource("14_7jtdl")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.11323, 0, 7.80548) [node name="Enemies" type="Node3D" parent="World"] -[node name="Slime" parent="World/Enemies" instance=ExtResource("13_hdbbd")] +[node name="Slime" parent="World/Enemies" instance=ExtResource("15_hgl78")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.53558, 1.28057, -3.79687) -[node name="Slime2" parent="World/Enemies" instance=ExtResource("13_hdbbd")] +[node name="Slime2" parent="World/Enemies" instance=ExtResource("15_hgl78")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.00829, 1.28057, -1.95247) -[node name="Slime3" parent="World/Enemies" instance=ExtResource("13_hdbbd")] +[node name="Slime3" parent="World/Enemies" instance=ExtResource("15_hgl78")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.53558, 1.28057, -0.306177) [node name="Floor" type="MeshInstance3D" parent="World"] @@ -128,9 +128,9 @@ shape = SubResource("BoxShape3D_yg2lt") [node name="Players" type="Node3D" parent="."] unique_name_in_owner = true -script = ExtResource("16_sjldq") +script = ExtResource("16_dp6bj") -[node name="UI" parent="." instance=ExtResource("14_ofk4r")] +[node name="UI" parent="." instance=ExtResource("17_43qhq")] [node name="Viewport" type="SubViewportContainer" parent="."] texture_filter = 1 @@ -155,7 +155,7 @@ current = true fov = 90.0 size = 10.0 far = 100.0 -script = ExtResource("15_ym3qc") +script = ExtResource("18_wogcj") center = NodePath("..") follow_speed = 5.0 diff --git a/client/network/Login.gd b/client/network/Login.gd index 80d30ab..14002e2 100644 --- a/client/network/Login.gd +++ b/client/network/Login.gd @@ -1,29 +1,26 @@ extends PacketHandler -var auth_token: String - -func _ready(): - DisplayServer.window_set_title(Global.username) - send_login() +signal success +signal failure func handle_packet(data: PackedByteArray, _peer: PacketPeer): var buffer := StreamPeerBuffer.new() buffer.data_array = data - + var error := buffer.get_8() if error != 0: print("[%s] Login failed." % Global.username) + failure.emit() return Global.account_id = buffer.get_string() - auth_token = buffer.get_string() + Global.auth_token = buffer.get_string() print("[%s] Login succeeded." % Global.username) print("[%s] ID: %s" % [Global.username, Global.account_id]) - print("[%s] Auth token: %s" % [Global.username, auth_token]) + print("[%s] Auth token: %s" % [Global.username, Global.auth_token]) - DisplayServer.window_set_title("%s - %s" % [Global.username, Global.account_id]) - DisplayServer.window_set_position(Vector2((Global.instance_id % 2) * 960, (Global.instance_id / 2 % 2) * 540)) + success.emit() func send_login(): if is_logged_in(): @@ -37,4 +34,4 @@ func send_login(): print("[%s] Connecting..." % Global.username) func is_logged_in() -> bool: - return auth_token != "" \ No newline at end of file + return Global.auth_token != "" \ No newline at end of file diff --git a/client/network/Ping.gd b/client/network/Ping.gd index d1ebc80..39a7f79 100644 --- a/client/network/Ping.gd +++ b/client/network/Ping.gd @@ -21,10 +21,7 @@ func send_ping(): buffer.put_8(count) %Client.send(buffer.data_array) history[count] = get_time() - count += 1 - - if count >= HISTORY_SIZE: - count = 0 + count = (count + 1) % HISTORY_SIZE func get_time() -> float: return Time.get_unix_time_from_system() diff --git a/client/project.godot b/client/project.godot index 036909a..0e7a160 100644 --- a/client/project.godot +++ b/client/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Client" -run/main_scene="res://world/Main.tscn" +run/main_scene="res://Main.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://ui/icon.svg" diff --git a/client/ui/chat/ChatInput.gd b/client/ui/chat/ChatInput.gd index edac899..d875cf0 100644 --- a/client/ui/chat/ChatInput.gd +++ b/client/ui/chat/ChatInput.gd @@ -8,6 +8,7 @@ func _unhandled_input(event): if event.is_action_pressed("open_chat"): call_deferred("grab_focus") + get_viewport().set_input_as_handled() func _on_focus_entered(): Global.interacting_with_ui = true