Skip to content

Commit f610db4

Browse files
feat(game): Host-only mode (#283)
Co-authored-by: Tamás Gálffy <[email protected]>
1 parent 9e61aed commit f610db4

File tree

4 files changed

+48
-35
lines changed

4 files changed

+48
-35
lines changed

examples/forest-brawl/forest-brawl.tscn

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ font_size = 64
2929
[node name="Network" type="Node" parent="."]
3030

3131
[node name="Brawler Spawner" type="Node" parent="Network" node_paths=PackedStringArray("spawn_root", "camera", "joining_screen", "name_input")]
32+
unique_name_in_owner = true
3233
script = ExtResource("5_qv1fx")
3334
player_scene = ExtResource("7_tcy3g")
3435
spawn_root = NodePath("../../Players")
@@ -196,6 +197,11 @@ text = "16384"
196197
layout_mode = 2
197198
size_flags_horizontal = 4
198199

200+
[node name="Host Only Button" type="Button" parent="UI/Network Popup/LAN/Actions Row"]
201+
layout_mode = 2
202+
size_flags_horizontal = 4
203+
text = "Host Only"
204+
199205
[node name="Host Button" type="Button" parent="UI/Network Popup/LAN/Actions Row"]
200206
layout_mode = 2
201207
size_flags_horizontal = 4
@@ -265,6 +271,10 @@ placeholder_text = "Host OID"
265271
[node name="Connect Actions Row" type="HBoxContainer" parent="UI/Network Popup/Noray"]
266272
layout_mode = 2
267273

274+
[node name="Host Only Button" type="Button" parent="UI/Network Popup/Noray/Connect Actions Row"]
275+
layout_mode = 2
276+
text = "Host Only"
277+
268278
[node name="Host Button" type="Button" parent="UI/Network Popup/Noray/Connect Actions Row"]
269279
layout_mode = 2
270280
text = "Host"
@@ -277,26 +287,20 @@ text = "Join"
277287
layout_mode = 2
278288
text = "Force Relay"
279289

280-
[node name="Noray Bootstrapper" type="Node" parent="UI/Network Popup" node_paths=PackedStringArray("connect_ui", "noray_address_input", "noray_connect_button", "noray_disconnect_button", "oid_input", "host_oid_input", "host_button", "join_button", "force_relay_check")]
290+
[node name="LAN Bootstrapper" type="Node" parent="UI/Network Popup" node_paths=PackedStringArray("connect_ui", "address_input", "port_input")]
291+
script = ExtResource("12_gjc7i")
292+
connect_ui = NodePath("..")
293+
address_input = NodePath("../LAN/Address Row/Address LineEdit")
294+
port_input = NodePath("../LAN/Address Row/Port LineEdit")
295+
296+
[node name="Noray Bootstrapper" type="Node" parent="UI/Network Popup" node_paths=PackedStringArray("connect_ui", "noray_address_input", "oid_input", "host_oid_input", "force_relay_check")]
281297
script = ExtResource("11_vpdh0")
282298
connect_ui = NodePath("..")
283299
noray_address_input = NodePath("../Noray/Noray Address Row/Address LineEdit")
284-
noray_connect_button = NodePath("../Noray/Noray Actions Row/Connect Button")
285-
noray_disconnect_button = NodePath("../Noray/Noray Actions Row/Disconnect Button")
286300
oid_input = NodePath("../Noray/OID Row/OID Value")
287301
host_oid_input = NodePath("../Noray/Connect Host Row/Host LineEdit")
288-
host_button = NodePath("../Noray/Connect Actions Row/Host Button")
289-
join_button = NodePath("../Noray/Connect Actions Row/Join Button")
290302
force_relay_check = NodePath("../Noray/Connect Actions Row/Force Relay Checkbox")
291303

292-
[node name="LAN Bootstrapper" type="Node" parent="UI/Network Popup" node_paths=PackedStringArray("connect_ui", "address_input", "port_input", "host_button", "join_button")]
293-
script = ExtResource("12_gjc7i")
294-
connect_ui = NodePath("..")
295-
address_input = NodePath("../LAN/Address Row/Address LineEdit")
296-
port_input = NodePath("../LAN/Address Row/Port LineEdit")
297-
host_button = NodePath("../LAN/Actions Row/Host Button")
298-
join_button = NodePath("../LAN/Actions Row/Join Button")
299-
300304
[node name="Player stats" type="Control" parent="UI" node_paths=PackedStringArray("score_label", "score_manager")]
301305
visible = false
302306
layout_mode = 1
@@ -362,3 +366,12 @@ vertical_alignment = 1
362366
[node name="Score Screen" parent="UI" instance=ExtResource("14_85lvt")]
363367
visible = false
364368
layout_mode = 1
369+
370+
[connection signal="pressed" from="UI/Network Popup/LAN/Actions Row/Host Only Button" to="UI/Network Popup/LAN Bootstrapper" method="host_only"]
371+
[connection signal="pressed" from="UI/Network Popup/LAN/Actions Row/Host Button" to="UI/Network Popup/LAN Bootstrapper" method="host"]
372+
[connection signal="pressed" from="UI/Network Popup/LAN/Actions Row/Join Button" to="UI/Network Popup/LAN Bootstrapper" method="join"]
373+
[connection signal="pressed" from="UI/Network Popup/Noray/Noray Actions Row/Connect Button" to="UI/Network Popup/Noray Bootstrapper" method="connect_to_noray"]
374+
[connection signal="pressed" from="UI/Network Popup/Noray/Noray Actions Row/Disconnect Button" to="UI/Network Popup/Noray Bootstrapper" method="disconnect_from_noray"]
375+
[connection signal="pressed" from="UI/Network Popup/Noray/Connect Actions Row/Host Only Button" to="UI/Network Popup/Noray Bootstrapper" method="host_only"]
376+
[connection signal="pressed" from="UI/Network Popup/Noray/Connect Actions Row/Host Button" to="UI/Network Popup/Noray Bootstrapper" method="host"]
377+
[connection signal="pressed" from="UI/Network Popup/Noray/Connect Actions Row/Join Button" to="UI/Network Popup/Noray Bootstrapper" method="join"]

examples/forest-brawl/scripts/brawler-spawner.gd

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
extends Node
2+
class_name BrawlerSpawner
23

34
@export var player_scene: PackedScene
45
@export var spawn_root: Node
56
@export var camera: FollowingCamera
67
@export var joining_screen: Control
78
@export var name_input: LineEdit
89

10+
var spawn_host_avatar: bool = true
911
var avatars: Dictionary = {}
1012

1113
func _ready():
@@ -28,8 +30,9 @@ func _handle_connected(id: int):
2830
joining_screen.visible = false
2931

3032
func _handle_host():
31-
# Spawn own avatar on host machine
32-
_spawn(1)
33+
if spawn_host_avatar:
34+
# Spawn own avatar on host machine
35+
_spawn(1)
3336

3437
func _handle_new_peer(id: int):
3538
# Spawn an avatar for new player

examples/shared/scripts/lan-bootstrapper.gd

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ extends Node
44
@export var connect_ui: Control
55
@export var address_input: LineEdit
66
@export var port_input: LineEdit
7-
@export var host_button: Button
8-
@export var join_button: Button
97

10-
func _ready():
11-
join_button.button_up.connect(_join)
12-
host_button.button_up.connect(_host)
8+
@onready var brawler_spawner := %"Brawler Spawner" as BrawlerSpawner
139

14-
func _host():
10+
func host_only():
11+
brawler_spawner.spawn_host_avatar = false
12+
host()
13+
14+
func host():
1515
var host = _parse_input()
1616
if host.size() == 0:
1717
return ERR_CANT_RESOLVE
@@ -48,7 +48,7 @@ func _host():
4848
# are assumed to be absent, hence starting NetworkTime manually
4949
NetworkTime.start()
5050

51-
func _join():
51+
func join():
5252
var host = _parse_input()
5353
if host.size() == 0:
5454
return ERR_CANT_RESOLVE

examples/shared/scripts/noray-bootstrapper.gd

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,20 @@ enum Role { NONE, HOST, CLIENT }
55
@export_category("UI")
66
@export var connect_ui: Control
77
@export var noray_address_input: LineEdit
8-
@export var noray_connect_button: Button
9-
@export var noray_disconnect_button: Button
108
@export var oid_input: LineEdit
119
@export var host_oid_input: LineEdit
12-
@export var host_button: Button
13-
@export var join_button: Button
1410
@export var force_relay_check: CheckBox
1511

12+
@onready var brawler_spawner := %"Brawler Spawner" as BrawlerSpawner
13+
1614
var role = Role.NONE
1715

1816
func _ready():
19-
noray_connect_button.button_up.connect(_connect_to_noray)
20-
noray_disconnect_button.button_up.connect(_disconnect_from_noray)
21-
host_button.button_up.connect(_host)
22-
join_button.button_up.connect(_join)
23-
2417
Noray.on_oid.connect(func(oid): oid_input.text = oid)
2518
Noray.on_connect_nat.connect(_handle_connect_nat)
2619
Noray.on_connect_relay.connect(_handle_connect_relay)
2720

28-
func _connect_to_noray():
21+
func connect_to_noray():
2922
# Connect to noray
3023
var err = OK
3124
var address = noray_address_input.text
@@ -55,11 +48,15 @@ func _connect_to_noray():
5548
print("Registered local port: %d" % Noray.local_port)
5649
return OK
5750

58-
func _disconnect_from_noray():
51+
func disconnect_from_noray():
5952
Noray.disconnect_from_host()
6053
oid_input.clear()
6154

62-
func _host():
55+
func host_only():
56+
brawler_spawner.spawn_host_avatar = false
57+
host()
58+
59+
func host():
6360
if Noray.local_port <= 0:
6461
return ERR_UNCONFIGURED
6562

@@ -94,7 +91,7 @@ func _host():
9491
# are assumed to be absent, hence starting NetworkTime manually
9592
NetworkTime.start()
9693

97-
func _join():
94+
func join():
9895
role = Role.CLIENT
9996

10097
if force_relay_check.button_pressed:

0 commit comments

Comments
 (0)