From 651c582ce69ca504f10fee714edc7c0884e5c70d Mon Sep 17 00:00:00 2001 From: unfa Date: Mon, 14 Jun 2021 14:22:40 +0200 Subject: [PATCH] Basic movement sync. Replaced beer cans. --- Game/Assets/Characters/Player.gd | 8 ++++- Game/Assets/HUD/Chat.gd | 2 +- Game/Assets/Props/BeerCan.tscn | 5 ---- Game/GUI.tscn | 3 ++ Game/Main.gd | 51 ++++++++++++++++++++++++-------- Game/Main.tscn | 3 +- Game/{Level.tscn => Map.tscn} | 35 ++++++++++++++++++---- Game/project.godot | 5 ++++ 8 files changed, 87 insertions(+), 25 deletions(-) delete mode 100644 Game/Assets/Props/BeerCan.tscn rename Game/{Level.tscn => Map.tscn} (95%) diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index 501d7b4..b3e1214 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -82,6 +82,9 @@ var gravity_vec := Vector3.ZERO func _ready() -> void: #Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) view_zoom = 1.0 + + rpc_config(&"move_and_slide", MultiplayerAPI.RPC_MODE_REMOTESYNC) + rpc_config(&"set_global_transform", MultiplayerAPI.RPC_MODE_PUPPET) func aim(event) -> void: var mouse_motion = event as InputEventMouseMotion @@ -110,6 +113,8 @@ func _input(event) -> void: aim(event) func _physics_process(delta): + rpc_unreliable(&'set_global_transform', global_transform) + direction = Vector3.ZERO if is_on_floor() and ground_check.is_colliding(): @@ -145,7 +150,8 @@ func _physics_process(delta): linear_velocity = velocity + gravity_vec #slide = move_and_slide_with_snap(movement, snap, Vector3.UP) - move_and_slide() + rpc(&"move_and_slide") + #move_and_slide() if not is_on_floor() and not ground_check.is_colliding(): # while in mid-air collisions affect momentum velocity.x = linear_velocity.x diff --git a/Game/Assets/HUD/Chat.gd b/Game/Assets/HUD/Chat.gd index 49ff1d5..0ff8f0e 100644 --- a/Game/Assets/HUD/Chat.gd +++ b/Game/Assets/HUD/Chat.gd @@ -1,7 +1,7 @@ extends Control @onready var main = get_tree().get_root().get_node("Main") -@onready var player = main.player +@onready var player = main.local_player @onready var chat_history = $VBoxContainer/ChatHistory @onready var chat_typing = $VBoxContainer/Typing @onready var chat_editor = $VBoxContainer/Typing/Editor diff --git a/Game/Assets/Props/BeerCan.tscn b/Game/Assets/Props/BeerCan.tscn deleted file mode 100644 index bccb3a3..0000000 --- a/Game/Assets/Props/BeerCan.tscn +++ /dev/null @@ -1,5 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://Assets/Props/BeerCan.glb" type="PackedScene" id=1] - -[node name="BeerCan" instance=ExtResource( 1 )] diff --git a/Game/GUI.tscn b/Game/GUI.tscn index c3a55cb..cdb0ca6 100644 --- a/Game/GUI.tscn +++ b/Game/GUI.tscn @@ -8,6 +8,9 @@ anchor_right = 1.0 anchor_bottom = 1.0 script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} [node name="Menu" parent="." instance=ExtResource( 2 )] offset_left = 477.0 diff --git a/Game/Main.gd b/Game/Main.gd index d0b4d04..257b984 100644 --- a/Game/Main.gd +++ b/Game/Main.gd @@ -3,7 +3,7 @@ extends Node enum GameFocus {MENU, GAME, CHAT, AWAY} const NET_PORT = 12597 -const NET_SERVER = "liblast.unfa.xyz" +const NET_SERVER = "localhost"# "liblast.unfa.xyz" var peer = NetworkedMultiplayerENet.new() @@ -11,8 +11,8 @@ var player_scene = preload("res://Assets/Characters/Player.tscn") @onready var gui = $GUI @onready var hud = $HUD -@onready var player = $Level/Player @onready var chat = hud.get_node("Chat") +var local_player: Node = null var focus = GameFocus.MENU : set(new_focus): @@ -20,15 +20,19 @@ var focus = GameFocus.MENU : 0: Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) gui.show() - player.input_active = false + if local_player: + local_player.input_active = false 1: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) gui.hide() - player.input_active = true + if local_player: + local_player.input_active = true 2: - player.input_active = false + if local_player: + local_player.input_active = false 3: - player.input_active = true + if local_player: + local_player.input_active = true focus = new_focus @@ -38,29 +42,51 @@ func _input(_event) -> void: focus = GameFocus.MENU elif focus == GameFocus.MENU: focus = GameFocus.GAME + + +func create_player(id: int, is_local) -> void: + var new_player = player_scene.instance() + var spawnpoint = $Map/SpawnPoints.get_children()[randi() % len($Map/SpawnPoints.get_children())] + new_player.name = str(id) + new_player.global_transform = spawnpoint.global_transform + new_player.set_network_master(id) + $Players.add_child(new_player) + + if is_local: + local_player = $Players.get_node(str(id)) + local_player.get_node("Head/Camera").current = true + else: + $Players.get_node(str(id) + "/Head/Camera").current = false func _on_Host_pressed(): + $NetworkTesting/Host.disabled = true + $NetworkTesting/Connect.disabled = true + peer.create_server(NET_PORT, 16) get_tree().network_peer = peer + create_player(1, true) func _on_Connect_pressed(): + $NetworkTesting/Host.disabled = true + $NetworkTesting/Connect.disabled = true + peer.create_client(NET_SERVER, NET_PORT) get_tree().network_peer = peer + func _player_connected(id) -> void: print("player connected, id: ", id) - var new_player = player_scene.instance() - new_player.set_network_master(id) - var spawnpoint = $Map/SpawnPoints.get_children()[randi() % size($Map/SpawnPoints.get_children())] - new_player.name = id - new_player.global_transform = spawnpoint.global_transform - $Players.add_child(new_player) + create_player(id, false) + func _player_disconnected(id) -> void: print("player disconnected, id: ", id) + func _connected_ok() -> void: print("connected to server") + var id = get_tree().get_network_unique_id() + create_player(id, true) func _connected_fail() -> void: print("connection to server failed") @@ -68,6 +94,7 @@ func _connected_fail() -> void: func _server_disconnected() -> void: print("server disconnected") + func _ready() -> void: get_tree().connect("network_peer_connected", self._player_connected) get_tree().connect("network_peer_disconnected", self._player_disconnected) diff --git a/Game/Main.tscn b/Game/Main.tscn index 8aa0946..44b17cf 100644 --- a/Game/Main.tscn +++ b/Game/Main.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=2] -[ext_resource path="res://Level.tscn" type="PackedScene" id=1] +[ext_resource path="res://Map.tscn" type="PackedScene" id=1] [ext_resource path="res://GUI.tscn" type="PackedScene" id=2] [ext_resource path="res://Main.gd" type="Script" id=3] [ext_resource path="res://Assets/HUD/HUD.tscn" type="PackedScene" id=4] @@ -16,6 +16,7 @@ script = ExtResource( 3 ) script = null [node name="Map" parent="." instance=ExtResource( 1 )] +transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1 ) [node name="NetworkTesting" type="VBoxContainer" parent="."] anchor_bottom = 1.0 diff --git a/Game/Level.tscn b/Game/Map.tscn similarity index 95% rename from Game/Level.tscn rename to Game/Map.tscn index 2f96a88..16bcd82 100644 --- a/Game/Level.tscn +++ b/Game/Map.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=9 format=2] [ext_resource path="res://Assets/MapComponents/SpawnPoint.tscn" type="PackedScene" id=1] +[ext_resource path="res://Assets/Props/BeerCan.glb" type="PackedScene" id=3] [ext_resource path="res://Assets/Maps/DM1/DM1.glb" type="PackedScene" id=6] -[ext_resource path="res://Assets/Props/BeerCan.tscn" type="PackedScene" id=8] [sub_resource type="PhysicalSkyMaterial" id=1] @@ -15,6 +15,7 @@ sky = SubResource( 2 ) ambient_light_sky_contribution = 0.1 tonemap_mode = 2 tonemap_white = 2.0 +ssao_enabled = true ssao_radius = 8.0 ssao_intensity = 1.0 sdfgi_read_sky_light = true @@ -75,15 +76,12 @@ script = null [node name="ReflectionProbe" type="ReflectionProbe" parent="."] transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 13, 0 ) -visible = false extents = Vector3( 33, 13, 29 ) box_projection = true +interior = true enable_shadows = true script = null -[node name="BeerCan" parent="." instance=ExtResource( 8 )] -transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 22, 11, -3 ) - [node name="SpawnPoints" type="Node3D" parent="."] script = null __meta__ = { @@ -96,4 +94,31 @@ transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 17 ) [node name="SpawnPoint2" parent="SpawnPoints" instance=ExtResource( 1 )] transform = Transform3D( -1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 2, 17, -14 ) +[node name="SpawnPoint3" parent="SpawnPoints" instance=ExtResource( 1 )] +transform = Transform3D( 7.54979e-08, 0, 1, 0, 1, 0, -1, 0, 7.54979e-08, -15.6104, 4.1427, -0.166348 ) + +[node name="SpawnPoint4" parent="SpawnPoints" instance=ExtResource( 1 )] +transform = Transform3D( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 30.0169, 4.1427, -9.16634 ) + +[node name="SpawnPoint5" parent="SpawnPoints" instance=ExtResource( 1 )] +transform = Transform3D( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 30.0169, 4.1427, 8.83366 ) + +[node name="Camera" type="Camera3D" parent="."] +transform = Transform3D( -4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -19, 12.3983, -8.74228e-08 ) +current = true +fov = 60.0 +script = null + +[node name="BeerCan4" parent="." instance=ExtResource( 3 )] +transform = Transform3D( 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0, 1, 26.7206, 2.18397, -2 ) + +[node name="BeerCan5" parent="." instance=ExtResource( 3 )] +transform = Transform3D( 0.5, -0.612372, -0.612372, 0.866025, 0.353553, 0.353553, 1.49012e-08, -0.707107, 0.707107, 28, 9.8, 3 ) + +[node name="BeerCan6" parent="." instance=ExtResource( 3 )] +transform = Transform3D( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 30, 2.3, 2 ) + +[node name="BeerCan3" parent="." instance=ExtResource( 3 )] +transform = Transform3D( 1, 0, 0, 0, 1, 0, 0, 0, 1, 29.3, 2.6, 3.6 ) + [editable path="DM1"] diff --git a/Game/project.godot b/Game/project.godot index 4c08044..660a4d8 100644 --- a/Game/project.godot +++ b/Game/project.godot @@ -124,8 +124,13 @@ say_cancel={ [rendering] +anti_aliasing/screen_space_roughness_limiter/enabled=false global_illumination/sdfgi/probe_ray_count=2 global_illumination/sdfgi/frames_to_converge=0 global_illumination/sdfgi/frames_to_update_lights=4 +anti_aliasing/quality/msaa=1 +anti_aliasing/quality/screen_space_aa=1 anti_aliasing/quality/use_debanding=true +occlusion_culling/use_occlusion_culling=true +mesh_lod/lod_change/threshold_pixels=3.0 environment/defaults/default_environment="res://default_env.tres"