a log of changed

This commit is contained in:
2024-02-14 22:18:05 +03:00
parent 46353fc8f6
commit 92ee1513cc
3 changed files with 75 additions and 21 deletions

View File

@@ -1,7 +1,9 @@
[gd_scene load_steps=4 format=3 uid="uid://b2jhgtduapovl"]
[gd_scene load_steps=5 format=3 uid="uid://b2jhgtduapovl"]
[ext_resource type="Script" path="res://scripts/Player.gd" id="1_o6o4b"]
[sub_resource type="CylinderMesh" id="CylinderMesh_hyaut"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yyp7b"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_jqfxo"]
@@ -17,6 +19,11 @@ script = ExtResource("1_o6o4b")
[node name="Camera" type="Camera3D" parent="CharacterBody3D/Head"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.675496, 0)
[node name="MeshInstance3D" type="MeshInstance3D" parent="CharacterBody3D/Head/Camera"]
transform = Transform3D(0.368235, 0, 0, 0, -4.37934e-08, -0.354994, 0, 1.00188, -1.55173e-08, 0, -0.131527, -0.57695)
mesh = SubResource("CylinderMesh_hyaut")
skeleton = NodePath("../..")
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"]
shape = SubResource("CapsuleShape3D_yyp7b")

View File

@@ -1,17 +1,24 @@
extends Node
#
# синглтоны добавляют ноды относительно себя, нужно явно указывать расположение ноды для добавления
#
#var player_script := load("res://scripts/Player.gd")
var player_script := preload("res://scripts/Player.gd")
var server_map
var player_model = preload("res://models/player.tscn")
var peer = ENetMultiplayerPeer.new()
var settings
var clients = {}
var last_client_id = 1
func _ready():
if "--server" in OS.get_cmdline_args():
await get_tree().create_timer(0.01).timeout #костыль пиздец но мне похую как-то
get_tree().change_scene_to_file("res://scenes/test_map.tscn")
await get_tree().create_timer(0.05).timeout #костыль
server_map = get_tree().root.get_node("test_map")
StartServer()
#######################################SERVER####################################
@@ -46,22 +53,28 @@ func send_everyone_except(client_id, args):
func _Peer_Connected(client_id):
print("User " + str(client_id) + " has conected")
var puppet = player_model.instantiate()
var internal_id = clients.size() + 2
var internal_id = last_client_id + 1
last_client_id += 1
var CB3D = puppet.find_child("CharacterBody3D")
CB3D.set_is_playable(false)
CB3D.set_internal_id(internal_id)
CB3D.set_player_name("player" + str(internal_id))
clients[str(client_id)] = player_script.new().properties.duplicate()
clients[str(client_id)]["internal_id"] = internal_id
add_child(puppet)
server_map.add_child(puppet)
send_everyone_except(client_id, ["spawn_puppet", internal_id])
func _Peer_Disconnected(client_id):
clients.erase(str(client_id))
print("User " + str(client_id) + " has disconnected")
var client = clients[str(client_id)]
var internal_id = client["internal_id"]
rpc("despawn_puppet", internal_id)
var puppet = server_map.get_node("player" + str(internal_id))
server_map.remove_child(puppet)
clients.erase(str(client_id))
@rpc ("any_peer", "reliable", "call_remote")
func get_character_properties(client_id):
@@ -76,10 +89,7 @@ func move_client(client_id, position):
var client = clients[str(client_id)]
var internal_id = client["internal_id"]
client["position"] = position
send_everyone_except(client_id, [get_node("player" + str(internal_id)).find_child("CharacterBody3D").move_puppet, position, internal_id])
#send_everyone_except(client_id, [get_node("player" + str(internal_id)).find_child("CharacterBody3D").move_puppet, position, internal_id])
#send_everyone_except(client_id, ["move_puppet", position, internal_id])
#send_everyone_except(client_id, [player_script.move_puppet, position, internal_id])
send_everyone_except(client_id, [server_map.get_node("player" + str(internal_id)).find_child("CharacterBody3D").move_puppet, position, internal_id])
@rpc ("any_peer", "call_remote", "reliable")
func get_client_list(client_id):
@@ -89,12 +99,24 @@ func get_client_list(client_id):
@rpc ("any_peer", "call_remote", "reliable")
func get_server_settings(client_id):
print("Sending game settings")
var client = clients[str(client_id)]
var internal_id = client["internal_id"]
get_node("player" + str(internal_id)).find_child("CharacterBody3D").set_game_settings.rpc_id(int(client_id), settings["game"])
server_map.get_node("player" + str(internal_id)).find_child("CharacterBody3D").set_game_settings.rpc_id(int(client_id), settings["game"])
@rpc ("any_peer", "call_remote", "unreliable")
func rotate_camera_client(client_id, head_y, camera_x):
var client = clients[str(client_id)]
var internal_id = client["internal_id"]
client["rotation"] = {"x": camera_x, "y": head_y}
send_everyone_except(client_id, [server_map.get_node("player" + str(internal_id)).find_child("CharacterBody3D").rotate_camera_puppet, client["rotation"] , internal_id])
##########################################CLIENT#######################
var player
var menu = preload("res://scenes/menu.tscn")
var test_map = preload("res://scenes/test_map.tscn")
var current_map_instance
@rpc ("reliable", "call_remote")
func set_character_properties(p):
@@ -110,7 +132,12 @@ func spawn_puppet(internal_id):
puppet.name = "player" + str(internal_id)
add_child(puppet)
current_map_instance.add_child(puppet)
@rpc("authority", "reliable", "call_remote")
func despawn_puppet(internal_id):
var puppet = current_map_instance.get_node("player" + str(internal_id))
current_map_instance.remove_child(puppet)
func ConnectToServer(ip, port):
peer.create_client(ip, port)
@@ -125,25 +152,36 @@ func ConnectToServer(ip, port):
func _Connection_Failed():
print("Failed to connect to server")
peer = ENetMultiplayerPeer.new()
multiplayer.multiplayer_peer = null
peer = ENetMultiplayerPeer.new()
multiplayer.multiplayer_peer = peer
func _Connection_Succseeded():
print("Succsessfully connected to the server")
rpc_id(1, "get_character_properties", multiplayer.get_unique_id())
rpc_id(1, "get_client_list", multiplayer.get_unique_id())
get_tree().change_scene_to_file("res://scenes/test_map.tscn")
await get_tree().create_timer(0.2).timeout # костыль
rpc_id(1, "get_server_settings", multiplayer.get_unique_id())
await get_tree().create_timer(1).timeout # костыль
current_map_instance = get_tree().root.get_node("test_map")
print(str(current_map_instance))
#await get_tree().create_timer(0.2).timeout # костыль
rpc_id(1, "get_client_list", multiplayer.get_unique_id())
var player_node = player_model.instantiate()
player_node.find_child("CharacterBody3D").set_is_playable(true)
player_node.find_child("CharacterBody3D").set_internal_id(player["internal_id"])
player_node.find_child("CharacterBody3D").set_player_name("player" + str(player["internal_id"]))
add_child(player_node)
current_map_instance.add_child(player_node)
await get_tree().create_timer(0.05).timeout # костыль
rpc_id(1, "get_server_settings", multiplayer.get_unique_id())
func _Server_Disconnected():
print("Server has disconnected")
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
get_tree().change_scene_to_file("res://scenes/menu.tscn")
multiplayer.multiplayer_peer = null
peer = ENetMultiplayerPeer.new()
multiplayer.multiplayer_peer = peer

View File

@@ -60,10 +60,13 @@ func _unhandled_input(event):
head.rotate_y(-event.relative.x * SENSETIVITY)
camera.rotate_x(-event.relative.y * SENSETIVITY)
camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-50), deg_to_rad(60))
Networking.rotate_camera_client.rpc_id(1, multiplayer.get_unique_id(), head.rotation.y, camera.rotation.x)
func _physics_process(delta):
if (!properties["is_playable"]): return
if (game_settings == null): return
if (multiplayer.multiplayer_peer == null):
properties["is_playable"] = false
if not is_on_floor():
velocity.y -= 4 * gravity * delta
@@ -81,8 +84,8 @@ func _physics_process(delta):
velocity.x = direction.x * speed
velocity.z = direction.z * speed
else:
velocity.x = lerp(velocity.x, direction.x * speed, delta * 8)
velocity.z = lerp(velocity.z, direction.z * speed, delta * 8)
velocity.x = lerp(velocity.x, direction.x * speed, delta * 4)
velocity.z = lerp(velocity.z, direction.z * speed, delta * 4)
else:
velocity.x = lerp(velocity.x, direction.x * speed, delta)
velocity.z = lerp(velocity.z, direction.z * speed, delta)
@@ -105,3 +108,9 @@ func set_game_settings(s):
walk = game_settings["moving"]["walk"]
run = game_settings["moving"]["run"]
jump = game_settings["moving"]["jump"]
@rpc("authority", "call_remote", "unreliable")
func rotate_camera_puppet(rot, i_id):
if (i_id == properties["internal_id"]):
head.rotation.y = rot.y
camera.rotation.x = rot.x