added basic multiplayer
This commit is contained in:
parent
811129ac02
commit
791837457c
@ -2,10 +2,10 @@ extends Node
|
||||
var players = {}
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
#func _ready():
|
||||
#pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
#func _process(delta):
|
||||
#pass
|
||||
|
||||
@ -2,17 +2,10 @@
|
||||
|
||||
[ext_resource type="Script" path="res://MultiplayerController.gd" id="1_i2fn6"]
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
[node name="Control" type="CanvasLayer"]
|
||||
script = ExtResource("1_i2fn6")
|
||||
|
||||
[node name="Host" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_right = 8.0
|
||||
offset_bottom = 8.0
|
||||
text = "Host
|
||||
@ -33,23 +26,14 @@ offset_bottom = 126.0
|
||||
text = "Start"
|
||||
|
||||
[node name="Nickname" type="TextEdit" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 26.0
|
||||
offset_top = 138.0
|
||||
offset_right = 378.0
|
||||
offset_bottom = 170.0
|
||||
placeholder_text = "nickname"
|
||||
|
||||
[node name="Apply" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 390.0
|
||||
offset_top = 139.0
|
||||
offset_right = 456.0
|
||||
offset_bottom = 170.0
|
||||
text = "Apply"
|
||||
[node name="Map" type="Node" parent="."]
|
||||
|
||||
[connection signal="button_down" from="Host" to="." method="_on_host_button_down"]
|
||||
[connection signal="button_down" from="Join" to="." method="_on_join_button_down"]
|
||||
[connection signal="button_down" from="Start" to="." method="_on_start_button_down"]
|
||||
[connection signal="text_changed" from="Nickname" to="." method="_on_nickname_text_changed"]
|
||||
[connection signal="button_down" from="Apply" to="." method="_on_apply_button_down"]
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
extends Control
|
||||
extends CanvasLayer
|
||||
|
||||
@export var address = "127.0.0.1"
|
||||
@export var port = 8910
|
||||
|
||||
var peer
|
||||
var nick = "NO_NICKNAME"
|
||||
#var nick = "NO_NICKNAME"
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
@ -12,71 +14,88 @@ func _ready():
|
||||
multiplayer.connection_failed.connect(connection_failed)
|
||||
pass # Replace with function body.
|
||||
|
||||
### Server and Client
|
||||
func peer_connected(id):
|
||||
print("Peer connected: " + str(id))
|
||||
if multiplayer.is_server():
|
||||
for p in GameManager.players:
|
||||
SendPlayerInformation(p["name"], p["id"]).rpc_id(id)
|
||||
print("Peer connected: ", id)
|
||||
|
||||
### Server and Client
|
||||
func peer_disconnected(id):
|
||||
print("Peer disconnected: " + str(id))
|
||||
print("Peer disconnected: ", id)
|
||||
GameManager.players.erase(id)
|
||||
if id == 1:
|
||||
print("Server Disconnected !!!!!")
|
||||
var tree = get_children()
|
||||
print("Children: ", tree)
|
||||
for child in $Map.get_children():
|
||||
child.queue_free()
|
||||
self.show()
|
||||
var players = get_tree().get_nodes_in_group("Player")
|
||||
for i in players:
|
||||
if i.name == str(id):
|
||||
i.queue_free()
|
||||
break
|
||||
|
||||
### Client
|
||||
func connected_to_server():
|
||||
print("Connected to server :)")
|
||||
SendPlayerInformation(nick, multiplayer.get_unique_id())
|
||||
SendPlayerInformation.rpc_id(1, $Nickname.text, multiplayer.get_unique_id())
|
||||
#SendPlayerInformation(nick, multiplayer.get_unique_id())
|
||||
|
||||
### Client
|
||||
func connection_failed():
|
||||
print("Disconnected from server :(")
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
@rpc("any_peer")
|
||||
func SendPlayerInformation(name, id):
|
||||
print("got info on " + str(id))
|
||||
func SendPlayerInformation(nickname, id):
|
||||
var me = multiplayer.get_unique_id()
|
||||
var sender_id = multiplayer.get_remote_sender_id()
|
||||
#TODO: clients to only accept data from server
|
||||
print(" from " + str(sender_id))
|
||||
print(me, ": got info on ", id, " from ", sender_id)
|
||||
if !GameManager.players.has(id):
|
||||
GameManager.players[id] ={
|
||||
"name" : name,
|
||||
"name" : nickname,
|
||||
"id" : id,
|
||||
"score": 0
|
||||
}
|
||||
if multiplayer.is_server():
|
||||
for i in GameManager.Players:
|
||||
SendPlayerInformation.rpc(GameManager.Players[i].name, i)
|
||||
print(me, ": Is Server!")
|
||||
for i in GameManager.players:
|
||||
print(me, ": Sending(?) player ", i)
|
||||
SendPlayerInformation.rpc(GameManager.players[i].name, i)
|
||||
|
||||
@rpc("any_peer","call_local")
|
||||
func StartGame():
|
||||
var me = multiplayer.get_unique_id()
|
||||
print(me, ": Starting Game\n", me, ": Players: ", GameManager.players)
|
||||
var scene = load("res://test_map.tscn").instantiate()
|
||||
get_tree().root.add_child(scene)
|
||||
#get_tree().root.add_child(scene)
|
||||
$Map.add_child(scene)
|
||||
self.hide()
|
||||
|
||||
func _on_host_button_down():
|
||||
|
||||
func hostGame():
|
||||
peer = ENetMultiplayerPeer.new()
|
||||
var err = peer.create_server(port, 32)
|
||||
if err != OK:
|
||||
print("Error Starting Server :(")
|
||||
var error = peer.create_server(port, 2)
|
||||
if error != OK:
|
||||
print("cannot host: " + error)
|
||||
return
|
||||
peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
|
||||
|
||||
multiplayer.set_multiplayer_peer(peer)
|
||||
print("Waiting for players...")
|
||||
print("Waiting For Players!")
|
||||
|
||||
|
||||
|
||||
func _on_host_button_down():
|
||||
hostGame()
|
||||
SendPlayerInformation($Nickname.text, multiplayer.get_unique_id())
|
||||
#SendPlayerInformation(nick, multiplayer.get_unique_id())
|
||||
|
||||
func _on_join_button_down():
|
||||
peer = ENetMultiplayerPeer.new()
|
||||
peer.create_client(address, port)
|
||||
peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
|
||||
multiplayer.set_multiplayer_peer(peer)
|
||||
|
||||
|
||||
func _on_start_button_down():
|
||||
StartGame.rpc()
|
||||
|
||||
|
||||
func _on_apply_button_down():
|
||||
get_node("Apply").disabled = true
|
||||
nick = $Nickname.text
|
||||
if peer.is_connected():
|
||||
SendPlayerInformation(nick, multiplayer.get_unique_id())
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _on_nickname_text_changed():
|
||||
if $Apply.disabled && $Nickname.text != nick:
|
||||
$Apply.disabled = false
|
||||
|
||||
33
SceneManager.gd
Normal file
33
SceneManager.gd
Normal file
@ -0,0 +1,33 @@
|
||||
extends Node3D
|
||||
|
||||
@export var PlayerScene : PackedScene
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
var me = multiplayer.get_unique_id()
|
||||
var spawn_points = get_tree().get_nodes_in_group("PlayerSpawnPoint")
|
||||
var sp_len = len(spawn_points)
|
||||
var p_len = len(GameManager.players)
|
||||
if !(sp_len > 0):
|
||||
print("Warning: sp_len =", sp_len)
|
||||
#assert(false)
|
||||
if sp_len < p_len:
|
||||
print("Warning: More players (", p_len, ") than spawn points")
|
||||
print("Players:")
|
||||
for p in GameManager.players:
|
||||
print(" ", p)
|
||||
#var player_scn = PlayerScene.instantiate()
|
||||
|
||||
var index = 0
|
||||
for i in GameManager.players:
|
||||
var currentPlayer = PlayerScene.instantiate()
|
||||
currentPlayer.name = str(GameManager.players[i].id)
|
||||
add_child(currentPlayer)
|
||||
print(me, " Spawning:")
|
||||
#TODO fix this dumb shit
|
||||
for spawn in get_tree().get_nodes_in_group("PlayerSpawnPoint"):
|
||||
if spawn.name == str(index):
|
||||
print(" ", spawn)
|
||||
currentPlayer.global_position = spawn.global_position
|
||||
break
|
||||
index += 1
|
||||
12
player.gd
Executable file → Normal file
12
player.gd
Executable file → Normal file
@ -5,6 +5,7 @@ var speed = 4.0 # movement speed
|
||||
var jump_speed = 6.0 # determines jump height
|
||||
var mouse_sensitivity = 0.002 # turning speed
|
||||
var moving = false
|
||||
var player_id
|
||||
|
||||
|
||||
func get_input():
|
||||
@ -14,9 +15,16 @@ func get_input():
|
||||
velocity.z = movement_dir.z * speed
|
||||
|
||||
func _ready():
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
player_id = str(name).to_int()
|
||||
$MultiplayerSynchronizer.set_multiplayer_authority(player_id)
|
||||
if player_id == multiplayer.get_unique_id():
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
var camera = Camera3D.new()
|
||||
$SpringArm3D.add_child(camera)
|
||||
|
||||
func _physics_process(delta):
|
||||
if player_id != multiplayer.get_unique_id():
|
||||
return
|
||||
velocity.y += -gravity * delta
|
||||
get_input()
|
||||
if abs(velocity.x) + abs(velocity.z) > 0 && !moving:
|
||||
@ -29,6 +37,8 @@ func _physics_process(delta):
|
||||
|
||||
#mouse input stuff
|
||||
func _unhandled_input(event):
|
||||
if player_id != multiplayer.get_unique_id():
|
||||
return
|
||||
if event is InputEventMouseMotion:
|
||||
rotate_y(-event.relative.x * mouse_sensitivity)
|
||||
get_node("SpringArm3D").rotate_x(-event.relative.y * mouse_sensitivity)
|
||||
|
||||
17
player.tscn
17
player.tscn
File diff suppressed because one or more lines are too long
@ -1,5 +1,6 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://de1fwo7k3egnc"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://de1fwo7k3egnc"]
|
||||
|
||||
[ext_resource type="Script" path="res://SceneManager.gd" id="1_450es"]
|
||||
[ext_resource type="PackedScene" uid="uid://c6mlkdq42nja5" path="res://player.tscn" id="1_y3rq4"]
|
||||
[ext_resource type="PackedScene" uid="uid://ba3ccygq71j1s" path="res://reloadinggun.tscn" id="2_lrg1g"]
|
||||
|
||||
@ -20,13 +21,12 @@ points = PackedVector3Array(-0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5
|
||||
|
||||
[node name="TestMap" type="Node3D"]
|
||||
transform = Transform3D(0.69, 0, 0, 0, 0.69, 0, 0, 0, 0.69, 0, 0, 0)
|
||||
script = ExtResource("1_450es")
|
||||
PlayerScene = ExtResource("1_y3rq4")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.844814, 0.53506, 0, -0.53506, 0.844814, 6.39415, 8.89804, 4.37005)
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("1_y3rq4")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.59781, 0)
|
||||
|
||||
[node name="floor" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
|
||||
@ -71,3 +71,17 @@ shape = SubResource("ConvexPolygonShape3D_j0sot")
|
||||
|
||||
[node name="reloadinggun" parent="." instance=ExtResource("2_lrg1g")]
|
||||
transform = Transform3D(0.305, 0, 0, 0, 0.305, 0, 0, 0, 0.305, -2.3898, 0.926755, -6.80532)
|
||||
|
||||
[node name="SpawnLocations" type="Node3D" parent="."]
|
||||
|
||||
[node name="0" type="Node3D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1897, 0)
|
||||
|
||||
[node name="1" type="Node3D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1897, 1.88767)
|
||||
|
||||
[node name="2" type="Node3D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.70596, 1.1897, 1.88767)
|
||||
|
||||
[node name="3" type="Node3D" parent="SpawnLocations" groups=["PlayerSpawnPoint"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.70596, 1.1897, 3.80737)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user