feat: adding basic multiplayer
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
extends Node
|
||||
|
||||
signal player_connected(id: int)
|
||||
signal player_disconnected(id: int)
|
||||
signal connection_failed
|
||||
signal connection_succeeded
|
||||
|
||||
const DEFAULT_PORT = 31415
|
||||
|
||||
var connected_players: Array[int] = []
|
||||
|
||||
func _ready() -> void:
|
||||
multiplayer.peer_connected.connect(_on_peer_connected)
|
||||
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
||||
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
||||
multiplayer.connection_failed.connect(_on_connection_failed)
|
||||
multiplayer.server_disconnected.connect(_on_server_disconnected)
|
||||
|
||||
func host_game(port: int = DEFAULT_PORT) -> Error:
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
var err = peer.create_server(port)
|
||||
if err == OK:
|
||||
multiplayer.multiplayer_peer = peer
|
||||
connected_players.clear()
|
||||
connected_players.append(1) # Host is 1
|
||||
print("Hosting on port %s" % port)
|
||||
return err
|
||||
|
||||
func join_game(ip: String, port: int = DEFAULT_PORT) -> Error:
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
var err = peer.create_client(ip, port)
|
||||
if err == OK:
|
||||
multiplayer.multiplayer_peer = peer
|
||||
print("Connecting to %s:%s" % [ip, port])
|
||||
return err
|
||||
|
||||
func disconnect_game() -> void:
|
||||
multiplayer.multiplayer_peer = null
|
||||
connected_players.clear()
|
||||
|
||||
func _on_peer_connected(id: int) -> void:
|
||||
print("Player connected: ", id)
|
||||
if not connected_players.has(id):
|
||||
connected_players.append(id)
|
||||
player_connected.emit(id)
|
||||
|
||||
func _on_peer_disconnected(id: int) -> void:
|
||||
print("Player disconnected: ", id)
|
||||
connected_players.erase(id)
|
||||
player_disconnected.emit(id)
|
||||
|
||||
func _on_connected_to_server() -> void:
|
||||
print("Successfully connected to server")
|
||||
connection_succeeded.emit()
|
||||
|
||||
func _on_connection_failed() -> void:
|
||||
print("Failed to connect to server")
|
||||
multiplayer.multiplayer_peer = null
|
||||
connection_failed.emit()
|
||||
|
||||
func _on_server_disconnected() -> void:
|
||||
print("Server disconnected")
|
||||
multiplayer.multiplayer_peer = null
|
||||
connected_players.clear()
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func rpc_load_level(scene_path: String) -> void:
|
||||
print("Loading level: ", scene_path)
|
||||
get_tree().change_scene_to_file(scene_path)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bcq67g48h8hka
|
||||
@@ -26,6 +26,7 @@ var default_bindings = {
|
||||
|
||||
var current_bindings = {}
|
||||
var show_debug_ui: bool = false
|
||||
var username: String = "Player"
|
||||
var mouse_sensitivity: float = 0.002
|
||||
var ads_sensitivity: float = 0.001
|
||||
|
||||
@@ -131,6 +132,7 @@ func _save_settings() -> void:
|
||||
var save_data = {
|
||||
"bindings": current_bindings,
|
||||
"show_debug_ui": show_debug_ui,
|
||||
"username": username,
|
||||
"mouse_sensitivity": mouse_sensitivity,
|
||||
"ads_sensitivity": ads_sensitivity,
|
||||
"display_mode": display_mode,
|
||||
@@ -165,12 +167,10 @@ func _load_settings() -> void:
|
||||
for action in loaded_bindings:
|
||||
if current_bindings.has(action):
|
||||
current_bindings[action] = loaded_bindings[action]
|
||||
if data.has("show_debug_ui"):
|
||||
show_debug_ui = data["show_debug_ui"]
|
||||
if data.has("mouse_sensitivity"):
|
||||
mouse_sensitivity = data["mouse_sensitivity"]
|
||||
if data.has("ads_sensitivity"):
|
||||
ads_sensitivity = data["ads_sensitivity"]
|
||||
if data.has("username"): username = data["username"]
|
||||
if data.has("show_debug_ui"): show_debug_ui = data["show_debug_ui"]
|
||||
if data.has("mouse_sensitivity"): mouse_sensitivity = data["mouse_sensitivity"]
|
||||
if data.has("ads_sensitivity"): ads_sensitivity = data["ads_sensitivity"]
|
||||
if data.has("display_mode"): display_mode = data["display_mode"]
|
||||
if data.has("resolution_index"): resolution_index = data["resolution_index"]
|
||||
if data.has("fps_cap"): fps_cap = data["fps_cap"]
|
||||
|
||||
Reference in New Issue
Block a user