Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
MultiplayerAPIExtension
Eredita: MultiplayerAPI < RefCounted < Object
Classe di base utilizzata per estendere la MultiplayerAPI.
Descrizione
Questa classe può essere utilizzata per estendere o sostituire l'implementazione predefinita della MultiplayerAPI tramite script o estensioni.
L'esempio seguente estende l'implementazione predefinita (SceneMultiplayer) registrando ogni RPC eseguita e ogni oggetto configurato per la replica.
extends MultiplayerAPIExtension
class_name LogMultiplayer
# Vogliamo estendere il SceneMultiplayer predefinito.
var base_multiplayer = SceneMultiplayer.new()
func _init():
# Oltrepassa i segnali di base (copiati in var per evitare riferimenti ciclici)
var cts = connected_to_server
var cf = connection_failed
var sd = server_disconnected
var pc = peer_connected
var pd = peer_disconnected
base_multiplayer.connected_to_server.connect(func(): cts.emit())
base_multiplayer.connection_failed.connect(func(): cf.emit())
base_multiplayer.server_disconnected.connect(func(): sd.emit())
base_multiplayer.peer_connected.connect(func(id): pc.emit(id))
base_multiplayer.peer_disconnected.connect(func(id): pd.emit(id))
func _poll():
return base_multiplayer.poll()
# Registra l'RPC in corso e inoltrala al multiplayer predefinito.
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
print("Ricevuta RPC per %d: %s::%s(%s)" % [peer, object, method, args])
return base_multiplayer.rpc(peer, object, method, args)
# Registra l'aggiunta di una configurazione. Ad esempio percorso radice (nullptr, NodePath), replicazione (Node, Spawner|Synchronizer), personalizzato.
func _object_configuration_add(object, config: Variant) -> Error:
if config is MultiplayerSynchronizer:
print("Aggiunta configurazione di sincronizzazione per %s. Sincronizzatore: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Aggiunta nodo %s alla lista di generazioni. Generatore: %s" % [object, config])
return base_multiplayer.object_configuration_add(object, config)
# Log configuration remove. E.g. root path (nullptr, NodePath), replication (Node, Spawner|Synchronizer), custom.
func _object_configuration_remove(object, config: Variant) -> Error:
if config is MultiplayerSynchronizer:
print("Rimozione configurazione di sincronizzazione per %s. Sincronizzatore: %s" % [object, config])
elif config is MultiplayerSpawner:
print("Rimozione nodo %s dalla lista di generazioni. Generatore: %s" % [object, config])
return base_multiplayer.object_configuration_remove(object, config)
# Questi possono essere facoltativi, ma nel nostro caso vogliamo estendere SceneMultiplayer, quindi inoltra tutto.
func _set_multiplayer_peer(p_peer: MultiplayerPeer):
base_multiplayer.multiplayer_peer = p_peer
func _get_multiplayer_peer() -> MultiplayerPeer:
return base_multiplayer.multiplayer_peer
func _get_unique_id() -> int:
return base_multiplayer.get_unique_id()
func _get_remote_sender_id() -> int:
return base_multiplayer.get_remote_sender_id()
func _get_peer_ids() -> PackedInt32Array:
return base_multiplayer.get_peers()
Successivamente, nella tua scena principale o in un autoload, chiama SceneTree.set_multiplayer() per iniziare a usare la MultiplayerAPI personalizzata:
# autoload.gd
func _enter_tree():
# Imposta il multiplayer personalizzato come quello principale in SceneTree.
get_tree().set_multiplayer(LogMultiplayer.new())
In alternativa, le estensioni native possono utilizzare il metodo MultiplayerAPI.set_default_interface() durante l'inizializzazione per configurarsi come implementazione predefinita.
Metodi
_get_multiplayer_peer() virtual |
|
_get_peer_ids() virtual const |
|
_get_remote_sender_id() virtual const |
|
_get_unique_id() virtual const |
|
_object_configuration_add(object: Object, configuration: Variant) virtual |
|
_object_configuration_remove(object: Object, configuration: Variant) virtual |
|
_poll() virtual |
|
_rpc(peer: int, object: Object, method: StringName, args: Array) virtual |
|
void |
_set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual |
Descrizioni dei metodi
MultiplayerPeer _get_multiplayer_peer() virtual 🔗
Chiamato quando viene recuperato MultiplayerAPI.multiplayer_peer.
PackedInt32Array _get_peer_ids() virtual const 🔗
Callback per MultiplayerAPI.get_peers().
int _get_remote_sender_id() virtual const 🔗
Callback per MultiplayerAPI.get_remote_sender_id().
int _get_unique_id() virtual const 🔗
Callback per MultiplayerAPI.get_unique_id().
Error _object_configuration_add(object: Object, configuration: Variant) virtual 🔗
Callback per MultiplayerAPI.object_configuration_add().
Error _object_configuration_remove(object: Object, configuration: Variant) virtual 🔗
Callback per MultiplayerAPI.object_configuration_remove().
Callback per MultiplayerAPI.poll().
Error _rpc(peer: int, object: Object, method: StringName, args: Array) virtual 🔗
Callback per MultiplayerAPI.rpc().
void _set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual 🔗
Chiamato quando MultiplayerAPI.multiplayer_peer viene impostato.