blob: c6e3351dcb3adfd300209fafce95fec4693e36fd (
plain)
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
|
extends Node
var local_player: Player
signal current_player_changed
var current_player_id: int:
set (value):
current_player_id = value
current_player = get_player(value)
current_player_changed.emit()
var current_player: Player
var player_order := [1]:
set (value):
player_order = value
set_player_order.rpc(value)
func _ready() -> void:
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
func host() -> void:
var peer := ENetMultiplayerPeer.new()
peer.create_server(1234)
multiplayer.multiplayer_peer = peer
add_player(multiplayer.get_unique_id())
local_player = get_player(multiplayer.get_unique_id())
current_player = local_player
current_player_id = multiplayer.get_unique_id()
func join() -> void:
var peer := ENetMultiplayerPeer.new()
peer.create_client("localhost", 1234)
multiplayer.multiplayer_peer = peer
add_player(multiplayer.get_unique_id())
local_player = get_player(multiplayer.get_unique_id())
func add_player(id: int) -> void:
var player: Player = load("res://player/player.tscn").instantiate()
player.id = id
%Players.add_child(player)
func get_player(id: int) -> Player:
return %Players.get_node(str(id))
func is_my_turn() -> bool:
return current_player == local_player
func set_current_player(id: int) -> void:
sync_current_player.rpc(id)
@rpc("any_peer", "call_local")
func sync_current_player(id: int) -> void:
current_player_id = id
@rpc("authority", "call_remote")
func set_player_order(value: Array) -> void:
player_order = value
func _on_peer_connected(id: int):
add_player(id)
if multiplayer.is_server():
sync_current_player.rpc_id(id, current_player_id)
player_order.append(id)
else:
get_player(id).set_initial_values()
func _on_peer_disconnected(id: int):
%Players.remove_child(%Players.get_node(str(id)))
|