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() во время инициализации, чтобы настроить себя в качестве реализации по умолчанию.
Методы
_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 |
Описания метода
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().
Обратный вызов для 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.