Skip to content

Commit a1114be

Browse files
authored
Merge pull request #8 from RevoluPowered/enet-demo-2
Better ENet Demo
2 parents b04747d + ec97013 commit a1114be

8 files changed

Lines changed: 158 additions & 0 deletions

File tree

demo/default_bus_layout.tres

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[gd_resource type="AudioBusLayout" load_steps=2 format=3 uid="uid://ceqh8sdin07i8"]
2+
3+
[sub_resource type="VOIPInputCapture" id="VOIPInputCapture_4opnt"]
4+
resource_name = "VOIPInputCapture"
5+
6+
[resource]
7+
bus/1/name = &"Mic"
8+
bus/1/solo = false
9+
bus/1/mute = true
10+
bus/1/bypass_fx = false
11+
bus/1/volume_db = 0.0
12+
bus/1/send = &"Master"
13+
bus/1/effect/0/effect = SubResource("VOIPInputCapture_4opnt")
14+
bus/1/effect/0/enabled = true

demo/main.gd

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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()

demo/main.tscn

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[gd_scene load_steps=3 format=3 uid="uid://dpsvywutgtu38"]
2+
3+
[ext_resource type="Script" path="res://main.gd" id="1_0j44c"]
4+
5+
[sub_resource type="AudioStreamMicrophone" id="AudioStreamMicrophone_d5gmj"]
6+
7+
[node name="Node3D" type="Node3D"]
8+
script = ExtResource("1_0j44c")
9+
10+
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
11+
stream = SubResource("AudioStreamMicrophone_d5gmj")
12+
autoplay = true
13+
bus = &"Mic"

demo/project.godot

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
; Engine configuration file.
2+
; It's best edited using the editor UI and not directly,
3+
; since the parameters that go here are not all obvious.
4+
;
5+
; Format:
6+
; [section] ; section goes between []
7+
; param=value ; assign values to parameters
8+
9+
config_version=5
10+
11+
[application]
12+
13+
config/name="Demo ENET Client"
14+
run/main_scene="res://main.tscn"
15+
config/features=PackedStringArray("4.2", "GL Compatibility")
16+
17+
[audio]
18+
19+
driver/enable_input=true
20+
21+
[rendering]
22+
23+
renderer/rendering_method="gl_compatibility"
24+
renderer/rendering_method.mobile="gl_compatibility"

demo/user.tscn

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[gd_scene load_steps=2 format=3 uid="uid://e8q0gjrr45rq"]
2+
3+
[sub_resource type="AudioStreamVOIP" id="AudioStreamVOIP_fqv3d"]
4+
5+
[node name="AudioStreamPlayer" type="AudioStreamPlayer"]
6+
stream = SubResource("AudioStreamVOIP_fqv3d")
7+
autoplay = true

demo_server/main.gd

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
extends Node
2+
3+
@export var SERVER_PORT = 80
4+
5+
func _ready():
6+
var peer = ENetMultiplayerPeer.new()
7+
peer.create_server(SERVER_PORT)
8+
multiplayer.multiplayer_peer = peer
9+
10+
@rpc("any_peer", "unreliable")
11+
func _voice_packet_received(_packet):
12+
pass

demo_server/main.tscn

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[gd_scene load_steps=2 format=3 uid="uid://7tvsoxgic3ep"]
2+
3+
[ext_resource type="Script" path="res://main.gd" id="1_hci1w"]
4+
5+
[node name="Node3D" type="Node3D"]
6+
script = ExtResource("1_hci1w")

demo_server/project.godot

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
; Engine configuration file.
2+
; It's best edited using the editor UI and not directly,
3+
; since the parameters that go here are not all obvious.
4+
;
5+
; Format:
6+
; [section] ; section goes between []
7+
; param=value ; assign values to parameters
8+
9+
config_version=5
10+
11+
[application]
12+
13+
config/name="Demo ENet Server"
14+
run/main_scene="res://main.tscn"
15+
config/features=PackedStringArray("4.2", "GL Compatibility")
16+
17+
[rendering]
18+
19+
renderer/rendering_method="gl_compatibility"
20+
renderer/rendering_method.mobile="gl_compatibility"

0 commit comments

Comments
 (0)