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.

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

MultiplayerPeer

_get_multiplayer_peer() virtual

PackedInt32Array

_get_peer_ids() virtual const

int

_get_remote_sender_id() virtual const

int

_get_unique_id() virtual const

Error

_object_configuration_add(object: Object, configuration: Variant) virtual

Error

_object_configuration_remove(object: Object, configuration: Variant) virtual

Error

_poll() virtual

Error

_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().


Error _poll() virtual 🔗

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.