Leaving works, some more stuff around waiting for peering to finish
setting up?
This commit is contained in:
parent
5e7735a815
commit
41e7769249
|
@ -176,7 +176,7 @@ size_flags_vertical = 3
|
||||||
clear_button_enabled = true
|
clear_button_enabled = true
|
||||||
placeholder_text = "Compose a chat message here, press Enter to send"
|
placeholder_text = "Compose a chat message here, press Enter to send"
|
||||||
|
|
||||||
[node name="Button" type="Button" parent="v/body/v/h"]
|
[node name="send" type="Button" parent="v/body/v/h"]
|
||||||
margin_left = 678.0
|
margin_left = 678.0
|
||||||
margin_right = 786.0
|
margin_right = 786.0
|
||||||
margin_bottom = 31.0
|
margin_bottom = 31.0
|
||||||
|
@ -188,4 +188,4 @@ text = "Send Message"
|
||||||
[connection signal="pressed" from="v/head/start" to="." method="_on_start_pressed"]
|
[connection signal="pressed" from="v/head/start" to="." method="_on_start_pressed"]
|
||||||
[connection signal="toggled" from="v/head/ready_up" to="." method="_on_ready_up_toggled"]
|
[connection signal="toggled" from="v/head/ready_up" to="." method="_on_ready_up_toggled"]
|
||||||
[connection signal="text_entered" from="v/body/v/h/chat" to="." method="_on_TextEdit_text_entered"]
|
[connection signal="text_entered" from="v/body/v/h/chat" to="." method="_on_TextEdit_text_entered"]
|
||||||
[connection signal="pressed" from="v/body/v/h/Button" to="." method="_on_Button_pressed"]
|
[connection signal="pressed" from="v/body/v/h/send" to="." method="_on_Button_pressed"]
|
||||||
|
|
|
@ -156,7 +156,7 @@ func _process_message(data: Dictionary):
|
||||||
emit_signal("peer_data", [data] if data.has("id") else data["data"])
|
emit_signal("peer_data", [data] if data.has("id") else data["data"])
|
||||||
"peer_left":
|
"peer_left":
|
||||||
print("Peer Left: %s" % data)
|
print("Peer Left: %s" % data)
|
||||||
emit_signal("peer_left", data)
|
emit_signal("peer_left", data["data"])
|
||||||
|
|
||||||
"candidate":
|
"candidate":
|
||||||
print("Candidate received - Data: %s" % JSON.print(data))
|
print("Candidate received - Data: %s" % JSON.print(data))
|
||||||
|
|
|
@ -4,6 +4,11 @@ extends Node
|
||||||
This module sets up WebRTC peer connections.
|
This module sets up WebRTC peer connections.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
signal peer_connected(id)
|
||||||
|
signal peer_disconnected(id)
|
||||||
|
signal connection_succeeded()
|
||||||
|
signal signaller_disconnected()
|
||||||
|
|
||||||
onready var webrtc = WebRTCMultiplayer.new()
|
onready var webrtc = WebRTCMultiplayer.new()
|
||||||
|
|
||||||
var signaller_client = null
|
var signaller_client = null
|
||||||
|
@ -15,17 +20,39 @@ func _init(_ice_servers, _signaller_client):
|
||||||
print("Initializing WebRTCNegotiator with ICE servers: %s" % ice_servers)
|
print("Initializing WebRTCNegotiator with ICE servers: %s" % ice_servers)
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
signaller_client.connect("disconnected", self, "_signaller_disconnected")
|
||||||
|
|
||||||
signaller_client.connect("offer_received", self, "_offer_received")
|
signaller_client.connect("offer_received", self, "_offer_received")
|
||||||
signaller_client.connect("answer_received", self, "_answer_received")
|
signaller_client.connect("answer_received", self, "_answer_received")
|
||||||
signaller_client.connect("candidate_received", self, "_candidate_received")
|
signaller_client.connect("candidate_received", self, "_candidate_received")
|
||||||
# signaller_client.connect("websocket_disconnected", self, "disconnected")
|
|
||||||
|
|
||||||
signaller_client.connect("peer_init", self, "_peer_id_set")
|
signaller_client.connect("peer_init", self, "_peer_id_set")
|
||||||
signaller_client.connect("peer_data", self, "_peer_data")
|
signaller_client.connect("peer_data", self, "_peer_data")
|
||||||
# webrtc.connect("peer_disconnected", self, "peer_disconnected")
|
|
||||||
|
webrtc.connect("connection_succeeded", self, "_connection_succeeded")
|
||||||
|
webrtc.connect("peer_connected", self, "_peer_connected")
|
||||||
|
webrtc.connect("peer_disconnected", self, "_peer_disconnected")
|
||||||
|
|
||||||
# connect("lobby_sealed", self, "lobby_sealed")
|
# connect("lobby_sealed", self, "lobby_sealed")
|
||||||
|
|
||||||
add_child(self.signaller_client)
|
add_child(self.signaller_client)
|
||||||
|
|
||||||
|
func _peer_connected(peer_id):
|
||||||
|
print("FULLY CONNECTED PEER: %s" % peer_id)
|
||||||
|
emit_signal("peer_connected", peer_id)
|
||||||
|
|
||||||
|
func _peer_disconnected(peer_id):
|
||||||
|
print("FULLY CONNECTED PEER DISCONNECTING: %s" % peer_id)
|
||||||
|
emit_signal("peer_disconnected")
|
||||||
|
|
||||||
|
func _connection_succeeded():
|
||||||
|
print("FULLY CONNECTED")
|
||||||
|
emit_signal("connection_succeeded")
|
||||||
|
|
||||||
|
func _signaller_disconnected():
|
||||||
|
print("SIGNALLER DISCONNECTED")
|
||||||
|
emit_signal("signaller_disconnected")
|
||||||
|
|
||||||
func close():
|
func close():
|
||||||
webrtc.close()
|
webrtc.close()
|
||||||
signaller_client.close()
|
signaller_client.close()
|
||||||
|
|
|
@ -6,6 +6,7 @@ onready var ready_tex: Texture = load("res://assets/img/check.png")
|
||||||
onready var not_ready_tex: Texture = load("res://assets/img/cross.png")
|
onready var not_ready_tex: Texture = load("res://assets/img/cross.png")
|
||||||
|
|
||||||
export(String) var id = "Some UUID"
|
export(String) var id = "Some UUID"
|
||||||
|
export(String) var peerId = "Some UUID"
|
||||||
export(String) var display_name = "Lobby" setget set_display_name
|
export(String) var display_name = "Lobby" setget set_display_name
|
||||||
export(bool) var ready = false setget set_ready
|
export(bool) var ready = false setget set_ready
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ func _update():
|
||||||
$TextureRect.texture = ready_tex if ready else not_ready_tex
|
$TextureRect.texture = ready_tex if ready else not_ready_tex
|
||||||
$TextureRect.hint_tooltip = "Ready" if ready else "Not Ready"
|
$TextureRect.hint_tooltip = "Ready" if ready else "Not Ready"
|
||||||
|
|
||||||
const keys = ["id", "display_name", "ready"]
|
const keys = ["id", "display_name", "ready", "peerId"]
|
||||||
func set_with_dict(dict):
|
func set_with_dict(dict):
|
||||||
if dict.has("name"): self.display_name = dict["name"]
|
if dict.has("name"): self.display_name = dict["name"]
|
||||||
for k in keys:
|
for k in keys:
|
||||||
|
|
|
@ -5,6 +5,7 @@ onready var lobby_name = $v/head/lobby_info
|
||||||
onready var peers_list_label = $v/body/peers/label
|
onready var peers_list_label = $v/body/peers/label
|
||||||
onready var chat = $v/body/v/messages
|
onready var chat = $v/body/v/messages
|
||||||
onready var chat_edit = $v/body/v/h/chat
|
onready var chat_edit = $v/body/v/h/chat
|
||||||
|
onready var send_button = $v/body/v/h/send
|
||||||
onready var auto_scroll_chk = $v/body/v/chat_head/auto_scroll
|
onready var auto_scroll_chk = $v/body/v/chat_head/auto_scroll
|
||||||
onready var max_players = $v/head/max_players
|
onready var max_players = $v/head/max_players
|
||||||
onready var ready_up = $v/head/ready_up
|
onready var ready_up = $v/head/ready_up
|
||||||
|
@ -13,6 +14,7 @@ onready var start = $v/head/start
|
||||||
|
|
||||||
onready var peer = preload("res://objects/peer.tscn")
|
onready var peer = preload("res://objects/peer.tscn")
|
||||||
onready var peers = {}
|
onready var peers = {}
|
||||||
|
onready var peers_id_mappings = {}
|
||||||
onready var is_host = false
|
onready var is_host = false
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -22,6 +24,7 @@ func _ready():
|
||||||
Global.signaller_client.connect("lobby_data", self, "_lobby_data")
|
Global.signaller_client.connect("lobby_data", self, "_lobby_data")
|
||||||
|
|
||||||
Global.signaller_client.connect("disconnected", self, "_signaller_disconnected")
|
Global.signaller_client.connect("disconnected", self, "_signaller_disconnected")
|
||||||
|
Global.negotiator.connect("connection_succeeded", self, "_connection_succeeded")
|
||||||
|
|
||||||
# lobby_name.text = "%s" % Global.signaller_client.lobby_name
|
# lobby_name.text = "%s" % Global.signaller_client.lobby_name
|
||||||
|
|
||||||
|
@ -30,14 +33,24 @@ func _ready():
|
||||||
|
|
||||||
# hide/show controls depending on whether or not we're the host
|
# hide/show controls depending on whether or not we're the host
|
||||||
is_host = Global.signaller_client.is_host()
|
is_host = Global.signaller_client.is_host()
|
||||||
if is_host: ready_up.queue_free()
|
if is_host:
|
||||||
|
ready_up.queue_free()
|
||||||
else:
|
else:
|
||||||
lobby_name.editable = false
|
lobby_name.editable = false
|
||||||
max_players.editable = false
|
max_players.editable = false
|
||||||
start.queue_free()
|
start.queue_free()
|
||||||
lock.queue_free()
|
lock.queue_free()
|
||||||
|
|
||||||
|
# until we fully connect
|
||||||
|
ready_up.disabled = true
|
||||||
|
chat_edit.disabled = true
|
||||||
|
send_button.disabled = true
|
||||||
print("Setting up lobby... %s %s" % [Global.signaller_client.peer_id, is_host])
|
print("Setting up lobby... %s %s" % [Global.signaller_client.peer_id, is_host])
|
||||||
|
|
||||||
|
func _connection_succeeded():
|
||||||
|
ready_up.disabled = false
|
||||||
|
send_button.disabled = false
|
||||||
|
|
||||||
func _lobby_update(l):
|
func _lobby_update(l):
|
||||||
for u in l:
|
for u in l:
|
||||||
if !is_host:
|
if !is_host:
|
||||||
|
@ -56,9 +69,11 @@ func _peer_data(peers):
|
||||||
func _add_peer(id, peer_data):
|
func _add_peer(id, peer_data):
|
||||||
call_deferred("update_player_count")
|
call_deferred("update_player_count")
|
||||||
var new_peer = peer.instance()
|
var new_peer = peer.instance()
|
||||||
|
if peer_data.peerId == 1: peer_data.ready = true
|
||||||
new_peer.set_with_dict(peer_data)
|
new_peer.set_with_dict(peer_data)
|
||||||
peers_grid.add_child(new_peer)
|
peers_grid.add_child(new_peer)
|
||||||
peers[id] = new_peer
|
peers[id] = new_peer
|
||||||
|
peers_id_mappings[int(peer_data.peerId)] = id
|
||||||
add_chat("> %s joined the lobby" % new_peer.display_name)
|
add_chat("> %s joined the lobby" % new_peer.display_name)
|
||||||
|
|
||||||
func _update_peer(id, peer_data):
|
func _update_peer(id, peer_data):
|
||||||
|
@ -67,15 +82,24 @@ func _update_peer(id, peer_data):
|
||||||
add_chat("! %s is %s" % [peers[id].display_name, update_text])
|
add_chat("! %s is %s" % [peers[id].display_name, update_text])
|
||||||
peers[id].set_with_dict(peer_data)
|
peers[id].set_with_dict(peer_data)
|
||||||
|
|
||||||
func _peer_left(ids: Array):
|
func _peer_left(leavers):
|
||||||
call_deferred("update_player_count")
|
call_deferred("update_player_count")
|
||||||
for data in ids:
|
for data in leavers:
|
||||||
var id = data["id"]
|
var id = data.id
|
||||||
if peers.has(id):
|
if peers.has(id):
|
||||||
|
var peer_id = peers[id].peerId
|
||||||
call_deferred("add_chat", "< %s left the lobby" % peers[id].display_name)
|
call_deferred("add_chat", "< %s left the lobby" % peers[id].display_name)
|
||||||
peers[id].queue_free()
|
peers[id].queue_free()
|
||||||
peers.erase(id)
|
peers.erase(id)
|
||||||
|
peers_id_mappings.erase(peer_id)
|
||||||
|
|
||||||
|
func peer_by_peer_id(peer_id):
|
||||||
|
if peers_id_mappings.has(peer_id):
|
||||||
|
var p = peers_id_mappings[peer_id]
|
||||||
|
if peers.has(p):
|
||||||
|
return peers[p]
|
||||||
|
return null
|
||||||
|
|
||||||
remotesync func add_chat(message):
|
remotesync func add_chat(message):
|
||||||
if auto_scroll_chk.pressed: call_deferred("scroll_chat_to_bottom")
|
if auto_scroll_chk.pressed: call_deferred("scroll_chat_to_bottom")
|
||||||
else:
|
else:
|
||||||
|
@ -104,7 +128,6 @@ func update_can_start():
|
||||||
if !peer.ready:
|
if !peer.ready:
|
||||||
can_start = false
|
can_start = false
|
||||||
break
|
break
|
||||||
print(can_start)
|
|
||||||
if can_start: add_chat("! All players ready - game may now be started")
|
if can_start: add_chat("! All players ready - game may now be started")
|
||||||
start.disabled = !can_start
|
start.disabled = !can_start
|
||||||
|
|
||||||
|
@ -114,11 +137,19 @@ func _on_start_pressed():
|
||||||
remotesync func start_game():
|
remotesync func start_game():
|
||||||
Global.goto_game()
|
Global.goto_game()
|
||||||
|
|
||||||
|
remotesync func set_ready(ready):
|
||||||
|
var from = get_tree().get_rpc_sender_id()
|
||||||
|
print(from)
|
||||||
|
peer_by_peer_id(from).ready = ready
|
||||||
|
|
||||||
|
func _on_TextEdit_text_entered(_new_text):
|
||||||
|
if !send_button.disabled:
|
||||||
|
send_chat_message()
|
||||||
|
|
||||||
func _lobby_left(_id): Global.lobby_browser()
|
func _lobby_left(_id): Global.lobby_browser()
|
||||||
func _on_leave_button_pressed(): Global.lobby_browser()
|
func _on_leave_button_pressed(): Global.lobby_browser()
|
||||||
func _on_TextEdit_text_entered(_new_text): send_chat_message()
|
|
||||||
func update_player_count(): peers_list_label.text = "Players: %d" % peers.size()
|
func update_player_count(): peers_list_label.text = "Players: %d" % peers.size()
|
||||||
func _on_Button_pressed(): send_chat_message()
|
func _on_Button_pressed(): send_chat_message()
|
||||||
func _on_ready_up_toggled(button_pressed: bool): Global.signaller_client.set_ready(button_pressed)
|
func _on_ready_up_toggled(button_pressed: bool): rpc("set_ready", button_pressed)
|
||||||
func _on_lobby_info_text_changed(new_text: String): Global.signaller_client.set_lobby_name(new_text)
|
func _on_lobby_info_text_changed(new_text: String): Global.signaller_client.set_lobby_name(new_text)
|
||||||
func _signaller_disconnected(): Global.main_menu()
|
func _signaller_disconnected(): Global.main_menu()
|
||||||
|
|
Loading…
Reference in a new issue