123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- :github_url: hide
- .. meta::
- :keywords: network
- .. DO NOT EDIT THIS FILE!!!
- .. Generated automatically from Godot engine sources.
- .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py.
- .. XML source: https://github.com/godotengine/godot/tree/master/doc/classes/MultiplayerAPIExtension.xml.
- .. _class_MultiplayerAPIExtension:
- MultiplayerAPIExtension
- =======================
- **Inherits:** :ref:`MultiplayerAPI<class_MultiplayerAPI>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
- Base class used for extending the :ref:`MultiplayerAPI<class_MultiplayerAPI>`.
- .. rst-class:: classref-introduction-group
- Description
- -----------
- This class can be used to extend or replace the default :ref:`MultiplayerAPI<class_MultiplayerAPI>` implementation via script or extensions.
- The following example extend the default implementation (:ref:`SceneMultiplayer<class_SceneMultiplayer>`) by logging every RPC being made, and every object being configured for replication.
- .. tabs::
- .. code-tab:: gdscript
- extends MultiplayerAPIExtension
- class_name LogMultiplayer
-
- # We want to extend the default SceneMultiplayer.
- var base_multiplayer = SceneMultiplayer.new()
-
- func _init():
- # Just passthrough base signals (copied to var to avoid cyclic reference)
- var cts = connected_to_server
- var cf = connection_failed
- 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.peer_connected.connect(func(id): pc.emit(id))
- base_multiplayer.peer_disconnected.connect(func(id): pd.emit(id))
-
- func _poll():
- return base_multiplayer.poll()
-
- # Log RPC being made and forward it to the default multiplayer.
- func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
- print("Got RPC for %d: %s::%s(%s)" % [peer, object, method, args])
- return base_multiplayer.rpc(peer, object, method, args)
-
- # Log configuration add. E.g. root path (nullptr, NodePath), replication (Node, Spawner|Synchronizer), custom.
- func _object_configuration_add(object, config: Variant) -> Error:
- if config is MultiplayerSynchronizer:
- print("Adding synchronization configuration for %s. Synchronizer: %s" % [object, config])
- elif config is MultiplayerSpawner:
- print("Adding node %s to the spawn list. Spawner: %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("Removing synchronization configuration for %s. Synchronizer: %s" % [object, config])
- elif config is MultiplayerSpawner:
- print("Removing node %s from the spawn list. Spawner: %s" % [object, config])
- return base_multiplayer.object_configuration_remove(object, config)
-
- # These can be optional, but in our case we want to extend SceneMultiplayer, so forward everything.
- 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_peer_ids() -> PackedInt32Array:
- return base_multiplayer.get_peers()
- Then in your main scene or in an autoload call :ref:`SceneTree.set_multiplayer<class_SceneTree_method_set_multiplayer>` to start using your custom :ref:`MultiplayerAPI<class_MultiplayerAPI>`:
- .. tabs::
- .. code-tab:: gdscript
- # autoload.gd
- func _enter_tree():
- # Sets our custom multiplayer as the main one in SceneTree.
- get_tree().set_multiplayer(LogMultiplayer.new())
- Native extensions can alternatively use the :ref:`MultiplayerAPI.set_default_interface<class_MultiplayerAPI_method_set_default_interface>` method during initialization to configure themselves as the default implementation.
- .. rst-class:: classref-reftable-group
- Methods
- -------
- .. table::
- :widths: auto
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`MultiplayerPeer<class_MultiplayerPeer>` | :ref:`_get_multiplayer_peer<class_MultiplayerAPIExtension_private_method__get_multiplayer_peer>`\ (\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`_get_peer_ids<class_MultiplayerAPIExtension_private_method__get_peer_ids>`\ (\ ) |virtual| |const| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`int<class_int>` | :ref:`_get_remote_sender_id<class_MultiplayerAPIExtension_private_method__get_remote_sender_id>`\ (\ ) |virtual| |const| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`int<class_int>` | :ref:`_get_unique_id<class_MultiplayerAPIExtension_private_method__get_unique_id>`\ (\ ) |virtual| |const| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`_object_configuration_add<class_MultiplayerAPIExtension_private_method__object_configuration_add>`\ (\ object\: :ref:`Object<class_Object>`, configuration\: :ref:`Variant<class_Variant>`\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`_object_configuration_remove<class_MultiplayerAPIExtension_private_method__object_configuration_remove>`\ (\ object\: :ref:`Object<class_Object>`, configuration\: :ref:`Variant<class_Variant>`\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`_poll<class_MultiplayerAPIExtension_private_method__poll>`\ (\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Error<enum_@GlobalScope_Error>` | :ref:`_rpc<class_MultiplayerAPIExtension_private_method__rpc>`\ (\ peer\: :ref:`int<class_int>`, object\: :ref:`Object<class_Object>`, method\: :ref:`StringName<class_StringName>`, args\: :ref:`Array<class_Array>`\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | |void| | :ref:`_set_multiplayer_peer<class_MultiplayerAPIExtension_private_method__set_multiplayer_peer>`\ (\ multiplayer_peer\: :ref:`MultiplayerPeer<class_MultiplayerPeer>`\ ) |virtual| |
- +-------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- .. rst-class:: classref-section-separator
- ----
- .. rst-class:: classref-descriptions-group
- Method Descriptions
- -------------------
- .. _class_MultiplayerAPIExtension_private_method__get_multiplayer_peer:
- .. rst-class:: classref-method
- :ref:`MultiplayerPeer<class_MultiplayerPeer>` **_get_multiplayer_peer**\ (\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__get_multiplayer_peer>`
- Called when the :ref:`MultiplayerAPI.multiplayer_peer<class_MultiplayerAPI_property_multiplayer_peer>` is retrieved.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__get_peer_ids:
- .. rst-class:: classref-method
- :ref:`PackedInt32Array<class_PackedInt32Array>` **_get_peer_ids**\ (\ ) |virtual| |const| :ref:`🔗<class_MultiplayerAPIExtension_private_method__get_peer_ids>`
- Callback for :ref:`MultiplayerAPI.get_peers<class_MultiplayerAPI_method_get_peers>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__get_remote_sender_id:
- .. rst-class:: classref-method
- :ref:`int<class_int>` **_get_remote_sender_id**\ (\ ) |virtual| |const| :ref:`🔗<class_MultiplayerAPIExtension_private_method__get_remote_sender_id>`
- Callback for :ref:`MultiplayerAPI.get_remote_sender_id<class_MultiplayerAPI_method_get_remote_sender_id>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__get_unique_id:
- .. rst-class:: classref-method
- :ref:`int<class_int>` **_get_unique_id**\ (\ ) |virtual| |const| :ref:`🔗<class_MultiplayerAPIExtension_private_method__get_unique_id>`
- Callback for :ref:`MultiplayerAPI.get_unique_id<class_MultiplayerAPI_method_get_unique_id>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__object_configuration_add:
- .. rst-class:: classref-method
- :ref:`Error<enum_@GlobalScope_Error>` **_object_configuration_add**\ (\ object\: :ref:`Object<class_Object>`, configuration\: :ref:`Variant<class_Variant>`\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__object_configuration_add>`
- Callback for :ref:`MultiplayerAPI.object_configuration_add<class_MultiplayerAPI_method_object_configuration_add>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__object_configuration_remove:
- .. rst-class:: classref-method
- :ref:`Error<enum_@GlobalScope_Error>` **_object_configuration_remove**\ (\ object\: :ref:`Object<class_Object>`, configuration\: :ref:`Variant<class_Variant>`\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__object_configuration_remove>`
- Callback for :ref:`MultiplayerAPI.object_configuration_remove<class_MultiplayerAPI_method_object_configuration_remove>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__poll:
- .. rst-class:: classref-method
- :ref:`Error<enum_@GlobalScope_Error>` **_poll**\ (\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__poll>`
- Callback for :ref:`MultiplayerAPI.poll<class_MultiplayerAPI_method_poll>`.
- .. rst-class:: classref-item-separator
- ----
- .. _class_MultiplayerAPIExtension_private_method__rpc:
- .. rst-class:: classref-method
- :ref:`Error<enum_@GlobalScope_Error>` **_rpc**\ (\ peer\: :ref:`int<class_int>`, object\: :ref:`Object<class_Object>`, method\: :ref:`StringName<class_StringName>`, args\: :ref:`Array<class_Array>`\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__rpc>`
- Callback for :ref:`MultiplayerAPI.rpc<class_MultiplayerAPI_method_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<class_MultiplayerPeer>`\ ) |virtual| :ref:`🔗<class_MultiplayerAPIExtension_private_method__set_multiplayer_peer>`
- Called when the :ref:`MultiplayerAPI.multiplayer_peer<class_MultiplayerAPI_property_multiplayer_peer>` is set.
- .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
- .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
- .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
- .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
- .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
- .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
- .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)`
- .. |void| replace:: :abbr:`void (No return value.)`
|