MultiplayerAPIExtension

Наследует: MultiplayerAPI < RefCounted < Object

Базовый класс, используемый для расширения MultiplayerAPI.

Описание

Этот класс можно использовать для расширения или замены реализации по умолчанию MultiplayerAPI с помощью скрипта или расширений.

Следующий пример расширяет реализацию по умолчанию (SceneMultiplayer), регистрируя каждый выполненный RPC и каждый объект, настроенный для репликации.

extends MultiplayerAPIExtension
class_name LogMultiplayer

# Мы хотим расширить стандартный SceneMultiplayer.
var base_multiplayer = SceneMultiplayer.new()

func _init():
    # Просто пропускаются базовые сигналы (скопированные в var, чтобы избежать циклических ссылок)
    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()

# Регистрируйте выполняемые RPC-запросы и пересылайте их в многопользовательскую игру по умолчанию.
func _rpc(peer: int, object: Object, method: StringName, args: Array) -> Error:
    print("Получил RPC для %d: %s::%s(%s)" % [peer, object, method, args])
    return base_multiplayer.rpc(peer, object, method, args)

# Добавление конфигурации журнала. Например, корневой путь (nullptr, NodePath), репликация (Node, Spawner|Synchronizer), пользовательский.
func _object_configuration_add(object, config: Variant) -> Error:
    if config is MultiplayerSynchronizer:
        print("Добавление конфигурации синхронизации для %s. Синхронизатор: %s" % [object, config])
    elif config is MultiplayerSpawner:
        print("Добавление узла %s в список появления. Spawner: %s" % [object, config])
    return base_multiplayer.object_configuration_add(object, config)

# Удаление конфигурации журнала. Например, корневой путь (nullptr, NodePath), репликация (Node, Spawner|Synchronizer), настраиваемый.
func _object_configuration_remove(object, config: Variant) -> Error:
    if config is MultiplayerSynchronizer:
        print("Удаление конфигурации синхронизации для %s. Синхронизатор: %s" % [object, config])
    elif config is MultiplayerSpawner:
        print("Удаление узла %s из списка появления. Spawner: %s" % [object, config])
    return base_multiplayer.object_configuration_remove(object, config)

# Они могут быть необязательными, но в нашем случае мы хотим расширить SceneMultiplayer, поэтому пересылаем все.
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()

Затем в вашей основной сцене или в автозагрузке вызовите SceneTree.set_multiplayer(), чтобы начать использовать ваш пользовательский MultiplayerAPI:

# autoload.gd
func _enter_tree():
    # Устанавливает наш пользовательский многопользовательский режим в качестве основного в SceneTree.
    get_tree().set_multiplayer(LogMultiplayer.new())

Собственные расширения могут также использовать метод MultiplayerAPI.set_default_interface() во время инициализации, чтобы настроить себя в качестве реализации по умолчанию.

Методы

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


Описания метода

MultiplayerPeer _get_multiplayer_peer() virtual 🔗

Вызывается при извлечении MultiplayerAPI.multiplayer_peer.


PackedInt32Array _get_peer_ids() virtual const 🔗

Обратный вызов для MultiplayerAPI.get_peers().


int _get_remote_sender_id() virtual const 🔗

Обратный вызов для MultiplayerAPI.get_remote_sender_id().


int _get_unique_id() virtual const 🔗

Обратный вызов для MultiplayerAPI.get_unique_id().


Error _object_configuration_add(object: Object, configuration: Variant) virtual 🔗

Обратный вызов для MultiplayerAPI.object_configuration_add().


Error _object_configuration_remove(object: Object, configuration: Variant) virtual 🔗

Обратный вызов для MultiplayerAPI.object_configuration_remove().


Error _poll() virtual 🔗

Обратный вызов для MultiplayerAPI.poll().


Error _rpc(peer: int, object: Object, method: StringName, args: Array) virtual 🔗

Обратный вызов для MultiplayerAPI.rpc().


void _set_multiplayer_peer(multiplayer_peer: MultiplayerPeer) virtual 🔗

Вызывается, когда установлен MultiplayerAPI.multiplayer_peer.