JackIt/scripts/client.gd

101 lines
2.8 KiB
GDScript

extends Control
@export var multiplayer_port: int = 2481
@export var reconnection_delay: float = 5
var server_ip: String = "127.0.0.1"
var error_code: Error = OK
var connecting: bool = false
var connected: bool = false
var reconnection_timer: float = 0
var session_id: int = -1
var searching_for_player: bool = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
server_ip = get_server_ip()
get_parent().multiplayer.connected_to_server.connect(on_connected_ok)
get_parent().multiplayer.connection_failed.connect(on_connection_failed)
get_parent().multiplayer.server_disconnected.connect(on_server_disconnected)
reconnect()
$"../Players".connect("player_joined", on_player_joined)
func _process(delta: float) -> void:
if !connected and !connecting:
reconnection_timer += delta
if reconnection_timer >= reconnection_delay:
reconnection_timer = 0
reconnect()
if searching_for_player:
for player in $"../Players".get_children():
if player.session_id == session_id:
searching_for_player = false
$PromptManager.player = player
func reconnect() -> void:
var peer: MultiplayerPeer = WebSocketMultiplayerPeer.new()
var server_address: String = "ws://%s:%d" % [server_ip, multiplayer_port]
$ServerIPLabel.text = "Address:" + server_address
$Label2.text = "Connecting..."
connecting = true
error_code = peer.create_client(server_address)
if error_code:
$Label2.text = "Failed to connect! Error code %d" %error_code
return
get_parent().multiplayer.multiplayer_peer = peer
func on_connected_ok() -> void:
session_id = get_session_id()
$Label2.text = "Connected OK! Session ID: %d" % session_id
connected = true
connecting = false
join_game(session_id)
func on_connection_failed() -> void:
$Label2.text = "Connection failed D:"
connected = false
connecting = false
func on_server_disconnected() -> void:
$Label2.text = "Server disconnected!"
connected = false
connecting = false
func get_server_ip() -> String:
if OS.has_feature('web'):
return JavaScriptBridge.eval("window.location.hostname")
return "127.0.0.1"
func get_session_id() -> int:
if session_id != -1:
return session_id
var session_file: FileAccess = FileAccess.open("user://session-id", FileAccess.READ)
#if session_file != null:
#var contents: String = session_file.get_as_text()
#var id: int
#if !contents.is_empty() and contents.is_valid_int():
#id = contents.to_int()
#return id
var id: int = randi()
session_file = FileAccess.open("user://session-id", FileAccess.WRITE)
session_file.store_string("%d" % id )
return id
func join_game(session_id: int):
searching_for_player = true
var player : Player = $"../Players".find_player_by_session_id(session_id)
#player.claim_authority(session_id)
func on_player_joined(player: Player):
pass