-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMultiplayer.gd
101 lines (72 loc) · 2.6 KB
/
Multiplayer.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
extends Node
const DEFAULT_PORT = 31416
const MAX_PEERS = 10
var players = {}
var player_name
func _ready():
get_tree().connect("network_peer_connected", self, "_player_connected")
get_tree().connect("network_peer_disconnected", self, "_player_disconnected")
get_tree().connect("connected_to_server", self, "_connected_ok")
get_tree().connect("connection_failed", self, "_connected_fail")
get_tree().connect("server_disconnected", self, "_server_disconnect")
func start_server():
player_name = 'Server'
var host = NetworkedMultiplayerENet.new()
var err = host.create_server(DEFAULT_PORT, MAX_PEERS)
if (err!=OK):
join_server()
return
get_tree().set_network_peer(host)
spawn_player(1)
func join_server():
player_name = 'Client'
var host = NetworkedMultiplayerENet.new()
host.create_client('127.0.0.1', DEFAULT_PORT)
get_tree().set_network_peer(host)
func _player_connected(id):
pass
func _player_disconnected(id):
unregister_player(id)
rpc("unregister_player", id)
func _connected_ok():
rpc_id(1, "user_ready", get_tree().get_network_unique_id(), player_name)
remote func user_ready(id, player_name):
if get_tree().is_network_server():
rpc_id(id, "register_in_game")
remote func register_in_game():
rpc("register_new_player", get_tree().get_network_unique_id(), player_name)
register_new_player(get_tree().get_network_unique_id(), player_name)
func _server_disconnected():
quit_game()
remote func register_new_player(id, name):
if get_tree().is_network_server():
rpc_id(id, "register_new_player", 1, player_name)
for peer_id in players:
rpc_id(id, "register_new_player", peer_id, players[peer_id])
players[id] = name
spawn_player(id)
remote func register_player(id, name):
if get_tree().is_network_server():
rpc_id(id, "register_player", 1, player_name)
for peer_id in players:
rpc_id(id, "register_player", peer_id, players[peer_id])
rpc_id(peer_id, "register_player", id, name)
players[id] = name
remote func unregister_player(id):
get_node("/root/" + str(id)).queue_free()
players.erase(id)
func quit_game():
get_tree().set_network_peer(null)
players.clear()
func spawn_player(id):
var player_scene = load("res://controller.tscn")
var level = load("res://Level.tscn").instance()
get_node("/root/Main/Game").add_child(level)
var player = player_scene.instance()
player.set_name(str(id))
if id == get_tree().get_network_unique_id():
player.set_network_master(id)
player.player_id = id
player.control = true
#get_parent().add_child(player)
get_node("/root/Main/Players/Controllers").add_child(player)