a log of changed
This commit is contained in:
@@ -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")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user