:github_url: hide .. meta:: :keywords: network .. _class_MultiplayerAPIExtension: MultiplayerAPIExtension ======================= **Eredita:** :ref:`MultiplayerAPI` **<** :ref:`RefCounted` **<** :ref:`Object` Classe di base utilizzata per estendere la :ref:`MultiplayerAPI`. .. rst-class:: classref-introduction-group Descrizione ---------------------- Questa classe puรฒ essere utilizzata per estendere o sostituire l'implementazione predefinita della :ref:`MultiplayerAPI` tramite script o estensioni. L'esempio seguente estende l'implementazione predefinita (:ref:`SceneMultiplayer`) registrando ogni RPC eseguita e ogni oggetto configurato per la replica. .. tabs:: .. code-tab:: gdscript 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 :ref:`SceneTree.set_multiplayer()` per iniziare a usare la :ref:`MultiplayerAPI` personalizzata: .. tabs:: .. code-tab:: gdscript # 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 :ref:`MultiplayerAPI.set_default_interface()` durante l'inizializzazione per configurarsi come implementazione predefinita. .. rst-class:: classref-reftable-group Metodi ------------ .. table:: :widths: auto +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`MultiplayerPeer` | :ref:`_get_multiplayer_peer`\ (\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`PackedInt32Array` | :ref:`_get_peer_ids`\ (\ ) |virtual| |const| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`_get_remote_sender_id`\ (\ ) |virtual| |const| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`_get_unique_id`\ (\ ) |virtual| |const| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`_object_configuration_add`\ (\ object\: :ref:`Object`, configuration\: :ref:`Variant`\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`_object_configuration_remove`\ (\ object\: :ref:`Object`, configuration\: :ref:`Variant`\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`_poll`\ (\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`_rpc`\ (\ peer\: :ref:`int`, object\: :ref:`Object`, method\: :ref:`StringName`, args\: :ref:`Array`\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`_set_multiplayer_peer`\ (\ multiplayer_peer\: :ref:`MultiplayerPeer`\ ) |virtual| | +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Descrizioni dei metodi -------------------------------------------- .. _class_MultiplayerAPIExtension_private_method__get_multiplayer_peer: .. rst-class:: classref-method :ref:`MultiplayerPeer` **_get_multiplayer_peer**\ (\ ) |virtual| :ref:`๐Ÿ”—` Chiamato quando viene recuperato :ref:`MultiplayerAPI.multiplayer_peer`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__get_peer_ids: .. rst-class:: classref-method :ref:`PackedInt32Array` **_get_peer_ids**\ (\ ) |virtual| |const| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.get_peers()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__get_remote_sender_id: .. rst-class:: classref-method :ref:`int` **_get_remote_sender_id**\ (\ ) |virtual| |const| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.get_remote_sender_id()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__get_unique_id: .. rst-class:: classref-method :ref:`int` **_get_unique_id**\ (\ ) |virtual| |const| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.get_unique_id()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__object_configuration_add: .. rst-class:: classref-method :ref:`Error` **_object_configuration_add**\ (\ object\: :ref:`Object`, configuration\: :ref:`Variant`\ ) |virtual| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.object_configuration_add()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__object_configuration_remove: .. rst-class:: classref-method :ref:`Error` **_object_configuration_remove**\ (\ object\: :ref:`Object`, configuration\: :ref:`Variant`\ ) |virtual| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.object_configuration_remove()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__poll: .. rst-class:: classref-method :ref:`Error` **_poll**\ (\ ) |virtual| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.poll()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__rpc: .. rst-class:: classref-method :ref:`Error` **_rpc**\ (\ peer\: :ref:`int`, object\: :ref:`Object`, method\: :ref:`StringName`, args\: :ref:`Array`\ ) |virtual| :ref:`๐Ÿ”—` Callback per :ref:`MultiplayerAPI.rpc()`. .. rst-class:: classref-item-separator ---- .. _class_MultiplayerAPIExtension_private_method__set_multiplayer_peer: .. rst-class:: classref-method |void| **_set_multiplayer_peer**\ (\ multiplayer_peer\: :ref:`MultiplayerPeer`\ ) |virtual| :ref:`๐Ÿ”—` Chiamato quando :ref:`MultiplayerAPI.multiplayer_peer` viene impostato. .. |virtual| replace:: :abbr:`virtual (Questo metodo dovrebbe solitamente essere sovrascritto dall'utente per aver un effetto.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Questo metodo non ha effetti collaterali. Non modifica alcuna variabile appartenente all'istanza.)` .. |vararg| replace:: :abbr:`vararg (Questo metodo accetta qualsiasi numero di argomenti oltre a quelli descritti qui.)` .. |constructor| replace:: :abbr:`constructor (Questo metodo รจ utilizzato per creare un tipo.)` .. |static| replace:: :abbr:`static (Questo metodo non necessita di alcun'istanza per essere chiamato, quindi puรฒ essere chiamato direttamente usando il nome della classe.)` .. |operator| replace:: :abbr:`operator (Questo metodo descrive un operatore valido da usare con questo tipo come operando di sinistra.)` .. |bitfield| replace:: :abbr:`BitField (Questo valore รจ un intero composto da una maschera di bit dei seguenti flag.)` .. |void| replace:: :abbr:`void (Nessun valore restituito.)`