|
| 1 | +extends Node |
| 2 | + |
| 3 | +@export var SERVER_URL = "127.0.0.1" |
| 4 | +@export var SERVER_PORT = 80 |
| 5 | + |
| 6 | +var user = load("res://user.tscn") |
| 7 | + |
| 8 | +var mic_capture: VOIPInputCapture |
| 9 | + |
| 10 | +var users = {} # {Peer ID: AudioStreamPlayer} |
| 11 | + |
| 12 | +func _ready(): |
| 13 | + multiplayer.peer_connected.connect(_peer_connected) |
| 14 | + multiplayer.peer_disconnected.connect(_peer_disconnected) |
| 15 | + multiplayer.connected_to_server.connect(_connected_to_server) |
| 16 | + multiplayer.connection_failed.connect(_connection_failed) |
| 17 | + multiplayer.server_disconnected.connect(_server_disconnected) |
| 18 | + |
| 19 | + var mic_bus = AudioServer.get_bus_index("Mic") |
| 20 | + mic_capture = AudioServer.get_bus_effect(mic_bus, 0) |
| 21 | + mic_capture.packet_ready.connect(self._voice_packet_ready) |
| 22 | + |
| 23 | + var peer = ENetMultiplayerPeer.new() |
| 24 | + peer.create_client(SERVER_URL, SERVER_PORT) |
| 25 | + multiplayer.multiplayer_peer = peer |
| 26 | + |
| 27 | + |
| 28 | +func _peer_connected(id): |
| 29 | + if id != 1: |
| 30 | + print("Peer connected with ID ", id) |
| 31 | + users[id] = user.instantiate() |
| 32 | + add_child(users[id]) |
| 33 | + |
| 34 | +func _peer_disconnected(id): |
| 35 | + if id != 1: |
| 36 | + print("Peer disconnected with ID ", id) |
| 37 | + users[id].queue_free() |
| 38 | + users.erase(id) |
| 39 | + |
| 40 | + |
| 41 | +func _connected_to_server(): |
| 42 | + print("Connected to server ", SERVER_URL, ":", SERVER_PORT) |
| 43 | + |
| 44 | +func _connection_failed(): |
| 45 | + print("Failed to connect to server ", SERVER_URL, ":", SERVER_PORT) |
| 46 | + |
| 47 | +func _server_disconnected(): |
| 48 | + print("Server disconnected.") |
| 49 | + |
| 50 | + |
| 51 | +func _voice_packet_ready(packet): |
| 52 | + if multiplayer.multiplayer_peer.get_connection_status() == MultiplayerPeer.CONNECTION_CONNECTED: |
| 53 | + _voice_packet_received.rpc(packet) |
| 54 | + |
| 55 | +@rpc("any_peer", "unreliable") |
| 56 | +func _voice_packet_received(packet): |
| 57 | + var sender_id = multiplayer.get_remote_sender_id() |
| 58 | + users[sender_id].stream.push_packet(packet) |
| 59 | + |
| 60 | + |
| 61 | +func _process(_delta): |
| 62 | + mic_capture.send_test_packets() |
0 commit comments