Godot Version
Godot 4.5.1
Question
The leave game button does not work on the host, but it only works on the joined client. And when the host (lets call this one window 2) “leaves” and joins a new host (call this oen window 1), window 2 does not sync with window 1’s player position.
Video
Code
extends Node
@export var player_scn: PackedScene
@export var main_game: PackedScene
var peer = null
var yourPlayer_name = null
var pause_menu_opened = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
multiplayer.peer_disconnected.connect(del_player)
$CanvasLayer/Host.pressed.connect(func():
_create_game()
$CanvasLayer.hide()
)
$CanvasLayer/Join.pressed.connect(func():
_join_game()
$CanvasLayer.hide()
)
$Quit/QuitButton.pressed.connect(func():
if multiplayer.is_server():
multiplayer.multiplayer_peer.close()
#multiplayer.multiplayer_peer.disconnect_peer(1) #int(yourPlayer_name)
multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
#get_node("MainGame").queue_free()
#for n in $Players.get_children():
#n.queue_free()
else:
multiplayer.multiplayer_peer.close()
multiplayer.multiplayer_peer.disconnect_peer(1)
multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
#multiplayer.multiplayer_peer.disconnect_peer(int(yourPlayer_name))
$Quit.hide()
pause_menu_opened = false
$CanvasLayer.show()
)
func _input(event) -> void:
if event.is_action_pressed("pauseMenuToggle"):
#if multiplayer.is_connected() == false: return
if pause_menu_opened == false:
$Quit.show()
elif pause_menu_opened == true:
$Quit.hide()
pause_menu_opened = !pause_menu_opened
func _create_game():
peer = ENetMultiplayerPeer.new()
var randomized_port = randi_range(135, 7500)
peer.create_server(randomized_port)
print(randomized_port)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(add_player)
add_player()
var newMap = main_game.instantiate()
add_child(newMap)
func _join_game():
peer = ENetMultiplayerPeer.new()
peer.create_client("localhost", int($CanvasLayer/LineEdit.text))
multiplayer.multiplayer_peer = peer
#multiplayer.peer_connected.connect(add_player)
#add_player()
func add_player(id = 1):
var player = player_scn.instantiate()
player.name = str(id)
$Players.call_deferred("add_child", player)
yourPlayer_name = str(player.name)
print(yourPlayer_name, str(player.name))
func leave_game(id):
multiplayer.peer_disconnected.connect(del_player)
del_player(id)
func del_player(id):
rpc("_del_player", id)
@rpc("any_peer", "call_local")
func _del_player(id):
$Players.get_node(str(id)).queue_free()