Browse Source

Update multiplayer pong to godot 4 beta 5

Rafael Correa 2 years ago
parent
commit
1a9aea09ef

+ 14 - 15
networking/multiplayer_pong/ball.png.import

@@ -1,8 +1,9 @@
 [remap]
 [remap]
 
 
 importer="texture"
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex"
+type="CompressedTexture2D"
+uid="uid://i1imfdcn7ui"
+path="res://.godot/imported/ball.png-9a4ca347acb7532f6ae347744a6b04f7.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 [deps]
 
 
 source_file="res://ball.png"
 source_file="res://ball.png"
-dest_files=["res://.godot/imported/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex"]
+dest_files=["res://.godot/imported/ball.png-9a4ca347acb7532f6ae347744a6b04f7.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/fix_alpha_border=true
 process/premult_alpha=false
 process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 7 - 7
networking/multiplayer_pong/ball.tscn

@@ -1,16 +1,16 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://bjmldn1x3lpa"]
 
 
-[ext_resource path="res://logic/ball.gd" type="Script" id=1]
-[ext_resource path="res://ball.png" type="Texture2D" id=2]
+[ext_resource type="Script" path="res://logic/ball.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://i1imfdcn7ui" path="res://ball.png" id="2"]
 
 
-[sub_resource type="CircleShape2D" id=1]
+[sub_resource type="CircleShape2D" id="1"]
 radius = 5.11969
 radius = 5.11969
 
 
 [node name="Ball" type="Area2D"]
 [node name="Ball" type="Area2D"]
-script = ExtResource( 1 )
+script = ExtResource("1")
 
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
 [node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource( 2 )
+texture = ExtResource("2")
 
 
 [node name="Shape3D" type="CollisionShape2D" parent="."]
 [node name="Shape3D" type="CollisionShape2D" parent="."]
-shape = SubResource( 1 )
+shape = SubResource("1")

+ 14 - 15
networking/multiplayer_pong/icon.png.import

@@ -1,8 +1,9 @@
 [remap]
 [remap]
 
 
 importer="texture"
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
+type="CompressedTexture2D"
+uid="uid://djyutu2uyhiw7"
+path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 [deps]
 
 
 source_file="res://icon.png"
 source_file="res://icon.png"
-dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"]
+dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=true
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/fix_alpha_border=true
 process/premult_alpha=false
 process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 18 - 21
networking/multiplayer_pong/lobby.tscn

@@ -1,8 +1,10 @@
-[gd_scene load_steps=2 format=2]
+[gd_scene load_steps=2 format=3 uid="uid://f85s2avde6r4"]
 
 
-[ext_resource path="res://logic/lobby.gd" type="Script" id=1]
+[ext_resource type="Script" path="res://logic/lobby.gd" id="1"]
 
 
 [node name="Lobby" type="Control"]
 [node name="Lobby" type="Control"]
+layout_mode = 3
+anchors_preset = 8
 anchor_left = 0.5
 anchor_left = 0.5
 anchor_top = 0.5
 anchor_top = 0.5
 anchor_right = 0.5
 anchor_right = 0.5
@@ -11,13 +13,13 @@ offset_left = -320.0
 offset_top = -200.0
 offset_top = -200.0
 offset_right = 320.0
 offset_right = 320.0
 offset_bottom = 200.0
 offset_bottom = 200.0
+grow_horizontal = 2
+grow_vertical = 2
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 2
 size_flags_vertical = 2
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Title" type="Label" parent="."]
 [node name="Title" type="Label" parent="."]
+layout_mode = 0
 offset_left = 210.0
 offset_left = 210.0
 offset_top = 40.0
 offset_top = 40.0
 offset_right = 430.0
 offset_right = 430.0
@@ -25,19 +27,19 @@ offset_bottom = 80.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
 text = "Multiplayer Pong"
 text = "Multiplayer Pong"
-align = 1
-valign = 1
 
 
 [node name="LobbyPanel" type="Panel" parent="."]
 [node name="LobbyPanel" type="Panel" parent="."]
+layout_mode = 0
 offset_left = 210.0
 offset_left = 210.0
 offset_top = 160.0
 offset_top = 160.0
 offset_right = 430.0
 offset_right = 430.0
 offset_bottom = 270.0
 offset_bottom = 270.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 2
 size_flags_vertical = 2
-script = ExtResource( 1 )
+script = ExtResource("1")
 
 
 [node name="AddressLabel" type="Label" parent="LobbyPanel"]
 [node name="AddressLabel" type="Label" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 10.0
 offset_left = 10.0
 offset_top = 10.0
 offset_top = 10.0
 offset_right = 62.0
 offset_right = 62.0
@@ -47,6 +49,7 @@ size_flags_vertical = 0
 text = "Address"
 text = "Address"
 
 
 [node name="Address" type="LineEdit" parent="LobbyPanel"]
 [node name="Address" type="LineEdit" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 10.0
 offset_left = 10.0
 offset_top = 30.0
 offset_top = 30.0
 offset_right = 210.0
 offset_right = 210.0
@@ -56,6 +59,7 @@ size_flags_vertical = 2
 text = "127.0.0.1"
 text = "127.0.0.1"
 
 
 [node name="HostButton" type="Button" parent="LobbyPanel"]
 [node name="HostButton" type="Button" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 10.0
 offset_left = 10.0
 offset_top = 60.0
 offset_top = 60.0
 offset_right = 90.0
 offset_right = 90.0
@@ -65,6 +69,7 @@ size_flags_vertical = 2
 text = "Host"
 text = "Host"
 
 
 [node name="JoinButton" type="Button" parent="LobbyPanel"]
 [node name="JoinButton" type="Button" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 130.0
 offset_left = 130.0
 offset_top = 60.0
 offset_top = 60.0
 offset_right = 210.0
 offset_right = 210.0
@@ -74,50 +79,42 @@ size_flags_vertical = 2
 text = "Join"
 text = "Join"
 
 
 [node name="StatusOk" type="Label" parent="LobbyPanel"]
 [node name="StatusOk" type="Label" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 10.0
 offset_left = 10.0
 offset_top = 90.0
 offset_top = 90.0
 offset_right = 210.0
 offset_right = 210.0
 offset_bottom = 104.0
 offset_bottom = 104.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
-custom_colors/font_color = Color(0, 1, 0.015625, 1)
-align = 1
 
 
 [node name="StatusFail" type="Label" parent="LobbyPanel"]
 [node name="StatusFail" type="Label" parent="LobbyPanel"]
+layout_mode = 0
 offset_left = 10.0
 offset_left = 10.0
 offset_top = 90.0
 offset_top = 90.0
 offset_right = 210.0
 offset_right = 210.0
 offset_bottom = 104.0
 offset_bottom = 104.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
-custom_colors/font_color = Color(1, 0, 0, 1)
-align = 1
 
 
 [node name="PortForward" type="Label" parent="LobbyPanel"]
 [node name="PortForward" type="Label" parent="LobbyPanel"]
 visible = false
 visible = false
+layout_mode = 0
 offset_left = -128.0
 offset_left = -128.0
 offset_top = 136.0
 offset_top = 136.0
 offset_right = 124.0
 offset_right = 124.0
 offset_bottom = 184.0
 offset_bottom = 184.0
-custom_constants/line_spacing = 6
 text = "If you want non-LAN clients to connect,
 text = "If you want non-LAN clients to connect,
 make sure the port 8910 in UDP
 make sure the port 8910 in UDP
-is forwarded on your router."
-align = 1
-__meta__ = {
-"_edit_use_anchors_": false
-}
+is forwarded checked your router."
 
 
 [node name="FindPublicIP" type="LinkButton" parent="LobbyPanel"]
 [node name="FindPublicIP" type="LinkButton" parent="LobbyPanel"]
 visible = false
 visible = false
+layout_mode = 0
 offset_left = 155.0
 offset_left = 155.0
 offset_top = 152.0
 offset_top = 152.0
 offset_right = 328.0
 offset_right = 328.0
 offset_bottom = 166.0
 offset_bottom = 166.0
 text = "Find your public IP address"
 text = "Find your public IP address"
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [connection signal="pressed" from="LobbyPanel/HostButton" to="LobbyPanel" method="_on_host_pressed"]
 [connection signal="pressed" from="LobbyPanel/HostButton" to="LobbyPanel" method="_on_host_pressed"]
 [connection signal="pressed" from="LobbyPanel/JoinButton" to="LobbyPanel" method="_on_join_pressed"]
 [connection signal="pressed" from="LobbyPanel/JoinButton" to="LobbyPanel" method="_on_join_pressed"]

+ 8 - 8
networking/multiplayer_pong/logic/ball.gd

@@ -21,15 +21,15 @@ func _process(delta):
 	if (ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > _screen_size.y and direction.y > 0):
 	if (ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > _screen_size.y and direction.y > 0):
 		direction.y = -direction.y
 		direction.y = -direction.y
 
 
-	if is_network_master():
+	if is_multiplayer_authority():
 		# Only the master will decide when the ball is out in
 		# Only the master will decide when the ball is out in
 		# the left side (it's own side). This makes the game
 		# the left side (it's own side). This makes the game
 		# playable even if latency is high and ball is going
 		# playable even if latency is high and ball is going
 		# fast. Otherwise ball might be out in the other
 		# fast. Otherwise ball might be out in the other
 		# player's screen but not this one.
 		# player's screen but not this one.
 		if ball_pos.x < 0:
 		if ball_pos.x < 0:
-			get_parent().rpc("update_score", false)
-			rpc("_reset_ball", false)
+			get_parent().update_score.rpc(false)
+			_reset_ball.rpc(false)
 	else:
 	else:
 		# Only the puppet will decide when the ball is out in
 		# Only the puppet will decide when the ball is out in
 		# the right side, which is it's own side. This makes
 		# the right side, which is it's own side. This makes
@@ -37,11 +37,11 @@ func _process(delta):
 		# is going fast. Otherwise ball might be out in the
 		# is going fast. Otherwise ball might be out in the
 		# other player's screen but not this one.
 		# other player's screen but not this one.
 		if ball_pos.x > _screen_size.x:
 		if ball_pos.x > _screen_size.x:
-			get_parent().rpc("update_score", true)
-			rpc("_reset_ball", true)
+			get_parent().update_score.rpc(true)
+			_reset_ball.rpc(true)
 
 
 
 
-remotesync func bounce(left, random):
+@rpc(any_peer, call_local) func bounce(left, random):
 	# Using sync because both players can make it bounce.
 	# Using sync because both players can make it bounce.
 	if left:
 	if left:
 		direction.x = abs(direction.x)
 		direction.x = abs(direction.x)
@@ -53,11 +53,11 @@ remotesync func bounce(left, random):
 	direction = direction.normalized()
 	direction = direction.normalized()
 
 
 
 
-remotesync func stop():
+@rpc(any_peer, call_local) func stop():
 	stopped = true
 	stopped = true
 
 
 
 
-remotesync func _reset_ball(for_left):
+@rpc(any_peer, call_local) func _reset_ball(for_left):
 	position = _screen_size / 2
 	position = _screen_size / 2
 	if for_left:
 	if for_left:
 		direction = Vector2.LEFT
 		direction = Vector2.LEFT

+ 16 - 16
networking/multiplayer_pong/logic/lobby.gd

@@ -1,7 +1,7 @@
 extends Control
 extends Control
 
 
 # Default game server port. Can be any number between 1024 and 49151.
 # Default game server port. Can be any number between 1024 and 49151.
-# Not on the list of registered or common ports as of November 2020:
+# Not checked the list of registered or common ports as of November 2020:
 # https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
 # https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
 const DEFAULT_PORT = 8910
 const DEFAULT_PORT = 8910
 
 
@@ -17,11 +17,11 @@ var peer = null
 
 
 func _ready():
 func _ready():
 	# Connect all the callbacks related to networking.
 	# Connect all the callbacks related to networking.
-	get_tree().connect(&"network_peer_connected", self._player_connected)
-	get_tree().connect(&"network_peer_disconnected", self._player_disconnected)
-	get_tree().connect(&"connected_to_server", self._connected_ok)
-	get_tree().connect(&"connection_failed", self._connected_fail)
-	get_tree().connect(&"server_disconnected", self._server_disconnected)
+	multiplayer.connect(&"peer_connected", self._player_connected)
+	multiplayer.connect(&"peer_disconnected", self._player_disconnected)
+	multiplayer.connect(&"connected_to_server", self._connected_ok)
+	multiplayer.connect(&"connection_failed", self._connected_fail)
+	multiplayer.connect(&"server_disconnected", self._server_disconnected)
 
 
 #### Network callbacks from SceneTree ####
 #### Network callbacks from SceneTree ####
 
 
@@ -30,14 +30,14 @@ func _player_connected(_id):
 	# Someone connected, start the game!
 	# Someone connected, start the game!
 	var pong = load("res://pong.tscn").instantiate()
 	var pong = load("res://pong.tscn").instantiate()
 	# Connect deferred so we can safely erase it from the callback.
 	# Connect deferred so we can safely erase it from the callback.
-	pong.connect(&"game_finished", self._end_game, [], CONNECT_DEFERRED)
+	pong.connect(&"game_finished",Callable(self._end_game).bind(CONNECT_DEFERRED))
 
 
 	get_tree().get_root().add_child(pong)
 	get_tree().get_root().add_child(pong)
 	hide()
 	hide()
 
 
 
 
 func _player_disconnected(_id):
 func _player_disconnected(_id):
-	if get_tree().is_network_server():
+	if multiplayer.is_server():
 		_end_game("Client disconnected")
 		_end_game("Client disconnected")
 	else:
 	else:
 		_end_game("Server disconnected")
 		_end_game("Server disconnected")
@@ -52,7 +52,7 @@ func _connected_ok():
 func _connected_fail():
 func _connected_fail():
 	_set_status("Couldn't connect", false)
 	_set_status("Couldn't connect", false)
 
 
-	get_tree().set_network_peer(null) # Remove peer.
+	multiplayer.set_multiplayer_peer(null) # Remove peer.
 	host_button.set_disabled(false)
 	host_button.set_disabled(false)
 	join_button.set_disabled(false)
 	join_button.set_disabled(false)
 
 
@@ -69,7 +69,7 @@ func _end_game(with_error = ""):
 		get_node(^"/root/Pong").free()
 		get_node(^"/root/Pong").free()
 		show()
 		show()
 
 
-	get_tree().set_network_peer(null) # Remove peer.
+	multiplayer.set_multiplayer_peer(null) # Remove peer.
 	host_button.set_disabled(false)
 	host_button.set_disabled(false)
 	join_button.set_disabled(false)
 	join_button.set_disabled(false)
 
 
@@ -87,15 +87,15 @@ func _set_status(text, isok):
 
 
 
 
 func _on_host_pressed():
 func _on_host_pressed():
-	peer = NetworkedMultiplayerENet.new()
-	peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
+	peer = ENetMultiplayerPeer.new()
 	var err = peer.create_server(DEFAULT_PORT, 1) # Maximum of 1 peer, since it's a 2-player game.
 	var err = peer.create_server(DEFAULT_PORT, 1) # Maximum of 1 peer, since it's a 2-player game.
 	if err != OK:
 	if err != OK:
 		# Is another server running?
 		# Is another server running?
 		_set_status("Can't host, address in use.",false)
 		_set_status("Can't host, address in use.",false)
 		return
 		return
+	peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
 
 
-	get_tree().set_network_peer(peer)
+	multiplayer.set_multiplayer_peer(peer)
 	host_button.set_disabled(true)
 	host_button.set_disabled(true)
 	join_button.set_disabled(true)
 	join_button.set_disabled(true)
 	_set_status("Waiting for player...", true)
 	_set_status("Waiting for player...", true)
@@ -111,10 +111,10 @@ func _on_join_pressed():
 		_set_status("IP address is invalid", false)
 		_set_status("IP address is invalid", false)
 		return
 		return
 
 
-	peer = NetworkedMultiplayerENet.new()
-	peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
+	peer = ENetMultiplayerPeer.new()
 	peer.create_client(ip, DEFAULT_PORT)
 	peer.create_client(ip, DEFAULT_PORT)
-	get_tree().set_network_peer(peer)
+	peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
+	multiplayer.set_multiplayer_peer(peer)
 
 
 	_set_status("Connecting...", true)
 	_set_status("Connecting...", true)
 
 

+ 6 - 6
networking/multiplayer_pong/logic/paddle.gd

@@ -11,7 +11,7 @@ var _you_hidden = false
 
 
 func _process(delta):
 func _process(delta):
 	# Is the master of the paddle.
 	# Is the master of the paddle.
-	if is_network_master():
+	if is_multiplayer_authority():
 		_motion = Input.get_axis(&"move_up", &"move_down")
 		_motion = Input.get_axis(&"move_up", &"move_down")
 
 
 		if not _you_hidden and _motion != 0:
 		if not _you_hidden and _motion != 0:
@@ -21,7 +21,7 @@ func _process(delta):
 
 
 		# Using unreliable to make sure position is updated as fast
 		# Using unreliable to make sure position is updated as fast
 		# as possible, even if one of the calls is dropped.
 		# as possible, even if one of the calls is dropped.
-		rpc_unreliable("set_pos_and_motion", position, _motion)
+		set_pos_and_motion.rpc(position, _motion)
 	else:
 	else:
 		if not _you_hidden:
 		if not _you_hidden:
 			_hide_you_label()
 			_hide_you_label()
@@ -33,7 +33,7 @@ func _process(delta):
 
 
 
 
 # Synchronize position and speed to the other peers.
 # Synchronize position and speed to the other peers.
-puppet func set_pos_and_motion(pos, motion):
+@rpc(unreliable) func set_pos_and_motion(pos, motion):
 	position = pos
 	position = pos
 	_motion = motion
 	_motion = motion
 
 
@@ -44,6 +44,6 @@ func _hide_you_label():
 
 
 
 
 func _on_paddle_area_enter(area):
 func _on_paddle_area_enter(area):
-	if is_network_master():
-		# Random for new direction generated on each peer.
-		area.rpc("bounce", left, randf())
+	if is_multiplayer_authority():
+		# Random for new direction generated checked each peer.
+		area.bounce.rpc(left, randf())

+ 7 - 7
networking/multiplayer_pong/logic/pong.gd

@@ -16,18 +16,18 @@ var score_right = 0
 func _ready():
 func _ready():
 	# By default, all nodes in server inherit from master,
 	# By default, all nodes in server inherit from master,
 	# while all nodes in clients inherit from puppet.
 	# while all nodes in clients inherit from puppet.
-	# set_network_master is tree-recursive by default.
-	if get_tree().is_network_server():
+	# set_multiplayer_authority is tree-recursive by default.
+	if multiplayer.is_server():
 		# For the server, give control of player 2 to the other peer.
 		# For the server, give control of player 2 to the other peer.
-		player2.set_network_master(get_tree().get_network_connected_peers()[0])
+		player2.set_multiplayer_authority(multiplayer.get_peers()[0])
 	else:
 	else:
 		# For the client, give control of player 2 to itself.
 		# For the client, give control of player 2 to itself.
-		player2.set_network_master(get_tree().get_network_unique_id())
+		player2.set_multiplayer_authority(multiplayer.get_unique_id())
 
 
-	print("Unique id: ", get_tree().get_network_unique_id())
+	print("Unique id: ", multiplayer.get_unique_id())
 
 
 
 
-remotesync func update_score(add_to_left):
+@rpc(any_peer, call_local) func update_score(add_to_left):
 	if add_to_left:
 	if add_to_left:
 		score_left += 1
 		score_left += 1
 		score_left_node.set_text(str(score_left))
 		score_left_node.set_text(str(score_left))
@@ -45,7 +45,7 @@ remotesync func update_score(add_to_left):
 
 
 	if game_ended:
 	if game_ended:
 		$ExitGame.show()
 		$ExitGame.show()
-		$Ball.rpc("stop")
+		$Ball.stop.rpc()
 
 
 
 
 func _on_exit_game_pressed():
 func _on_exit_game_pressed():

+ 14 - 15
networking/multiplayer_pong/paddle.png.import

@@ -1,8 +1,9 @@
 [remap]
 [remap]
 
 
 importer="texture"
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/paddle.png-0e798fb0912613386507c9904d5cc01a.stex"
+type="CompressedTexture2D"
+uid="uid://bjw2yb853klh2"
+path="res://.godot/imported/paddle.png-0e798fb0912613386507c9904d5cc01a.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 [deps]
 
 
 source_file="res://paddle.png"
 source_file="res://paddle.png"
-dest_files=["res://.godot/imported/paddle.png-0e798fb0912613386507c9904d5cc01a.stex"]
+dest_files=["res://.godot/imported/paddle.png-0e798fb0912613386507c9904d5cc01a.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/fix_alpha_border=true
 process/premult_alpha=false
 process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 7 - 8
networking/multiplayer_pong/paddle.tscn

@@ -1,20 +1,20 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3 uid="uid://cpw46256eirwq"]
 
 
-[ext_resource path="res://logic/paddle.gd" type="Script" id=1]
-[ext_resource path="res://paddle.png" type="Texture2D" id=2]
+[ext_resource type="Script" path="res://logic/paddle.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://bjw2yb853klh2" path="res://paddle.png" id="2"]
 
 
-[sub_resource type="CapsuleShape2D" id=1]
+[sub_resource type="CapsuleShape2D" id="1"]
 radius = 4.78568
 radius = 4.78568
 height = 23.6064
 height = 23.6064
 
 
 [node name="Paddle" type="Area2D"]
 [node name="Paddle" type="Area2D"]
-script = ExtResource( 1 )
+script = ExtResource("1")
 
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
 [node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource( 2 )
+texture = ExtResource("2")
 
 
 [node name="Shape3D" type="CollisionShape2D" parent="."]
 [node name="Shape3D" type="CollisionShape2D" parent="."]
-shape = SubResource( 1 )
+shape = SubResource("1")
 
 
 [node name="You" type="Label" parent="."]
 [node name="You" type="Label" parent="."]
 offset_left = -26.0
 offset_left = -26.0
@@ -24,6 +24,5 @@ offset_bottom = -19.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
 text = "You"
 text = "You"
-align = 1
 
 
 [connection signal="area_entered" from="." to="." method="_on_paddle_area_enter"]
 [connection signal="area_entered" from="." to="." method="_on_paddle_area_enter"]

+ 12 - 15
networking/multiplayer_pong/pong.tscn

@@ -1,35 +1,34 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=5 format=3 uid="uid://bafoh1ief0147"]
 
 
-[ext_resource path="res://logic/pong.gd" type="Script" id=1]
-[ext_resource path="res://separator.png" type="Texture2D" id=2]
-[ext_resource path="res://paddle.tscn" type="PackedScene" id=3]
-[ext_resource path="res://ball.tscn" type="PackedScene" id=4]
+[ext_resource type="Script" path="res://logic/pong.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://b10swafhe08oj" path="res://separator.png" id="2"]
+[ext_resource type="PackedScene" uid="uid://cpw46256eirwq" path="res://paddle.tscn" id="3"]
+[ext_resource type="PackedScene" uid="uid://bjmldn1x3lpa" path="res://ball.tscn" id="4"]
 
 
 [node name="Pong" type="Node2D"]
 [node name="Pong" type="Node2D"]
-script = ExtResource( 1 )
+script = ExtResource("1")
 
 
 [node name="ColorRect" type="ColorRect" parent="."]
 [node name="ColorRect" type="ColorRect" parent="."]
 offset_right = 640.0
 offset_right = 640.0
 offset_bottom = 400.0
 offset_bottom = 400.0
+grow_horizontal = 2
+grow_vertical = 2
 color = Color(0.141176, 0.152941, 0.164706, 1)
 color = Color(0.141176, 0.152941, 0.164706, 1)
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 
 [node name="Separator" type="Sprite2D" parent="."]
 [node name="Separator" type="Sprite2D" parent="."]
 position = Vector2(320, 200)
 position = Vector2(320, 200)
-texture = ExtResource( 2 )
+texture = ExtResource("2")
 
 
-[node name="Player1" parent="." instance=ExtResource( 3 )]
+[node name="Player1" parent="." instance=ExtResource("3")]
 modulate = Color(0, 1, 1, 1)
 modulate = Color(0, 1, 1, 1)
 position = Vector2(32.49, 188.622)
 position = Vector2(32.49, 188.622)
 left = true
 left = true
 
 
-[node name="Player2" parent="." instance=ExtResource( 3 )]
+[node name="Player2" parent="." instance=ExtResource("3")]
 modulate = Color(1, 0, 1, 1)
 modulate = Color(1, 0, 1, 1)
 position = Vector2(608.88, 188.622)
 position = Vector2(608.88, 188.622)
 
 
-[node name="Ball" parent="." instance=ExtResource( 4 )]
+[node name="Ball" parent="." instance=ExtResource("4")]
 position = Vector2(320.387, 189.525)
 position = Vector2(320.387, 189.525)
 
 
 [node name="ScoreLeft" type="Label" parent="."]
 [node name="ScoreLeft" type="Label" parent="."]
@@ -40,7 +39,6 @@ offset_bottom = 30.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
 text = "0"
 text = "0"
-align = 1
 
 
 [node name="ScoreRight" type="Label" parent="."]
 [node name="ScoreRight" type="Label" parent="."]
 offset_left = 360.0
 offset_left = 360.0
@@ -50,7 +48,6 @@ offset_bottom = 30.0
 size_flags_horizontal = 2
 size_flags_horizontal = 2
 size_flags_vertical = 0
 size_flags_vertical = 0
 text = "0"
 text = "0"
-align = 1
 
 
 [node name="WinnerLeft" type="Label" parent="."]
 [node name="WinnerLeft" type="Label" parent="."]
 visible = false
 visible = false

+ 12 - 10
networking/multiplayer_pong/project.godot

@@ -6,7 +6,7 @@
 ;   [section] ; section goes between []
 ;   [section] ; section goes between []
 ;   param=value ; assign values to parameters
 ;   param=value ; assign values to parameters
 
 
-config_version=4
+config_version=5
 
 
 [application]
 [application]
 
 
@@ -15,6 +15,7 @@ config/description="A multiplayer demo of the classical pong game.
 One of the players should press 'host', while the
 One of the players should press 'host', while the
 other should select the address and press 'join'."
 other should select the address and press 'join'."
 run/main_scene="res://lobby.tscn"
 run/main_scene="res://lobby.tscn"
+config/features=PackedStringArray("4.0")
 config/icon="res://icon.png"
 config/icon="res://icon.png"
 
 
 [debug]
 [debug]
@@ -23,11 +24,12 @@ gdscript/warnings/return_value_discarded=false
 
 
 [display]
 [display]
 
 
-window/size/width=640
-window/size/height=400
-window/dpi/allow_hidpi=true
+window/size/viewport_width=640
+window/size/viewport_height=400
 window/stretch/mode="2d"
 window/stretch/mode="2d"
 window/stretch/aspect="expand"
 window/stretch/aspect="expand"
+window/size/width=640
+window/size/height=400
 stretch_2d=true
 stretch_2d=true
 
 
 [gdnative]
 [gdnative]
@@ -38,20 +40,20 @@ singletons=[]
 
 
 move_down={
 move_down={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 ]
 }
 }
 move_up={
 move_up={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"store_command":true,"alt_pressed":false,"shift_pressed":false,"meta_pressed":false,"command_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
 ]
 ]
 }
 }
 
 

+ 14 - 15
networking/multiplayer_pong/separator.png.import

@@ -1,8 +1,9 @@
 [remap]
 [remap]
 
 
 importer="texture"
 importer="texture"
-type="StreamTexture2D"
-path="res://.godot/imported/separator.png-f981c8489b9148e2e1dc63398273da74.stex"
+type="CompressedTexture2D"
+uid="uid://b10swafhe08oj"
+path="res://.godot/imported/separator.png-f981c8489b9148e2e1dc63398273da74.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
@@ -10,26 +11,24 @@ metadata={
 [deps]
 [deps]
 
 
 source_file="res://separator.png"
 source_file="res://separator.png"
-dest_files=["res://.godot/imported/separator.png-f981c8489b9148e2e1dc63398273da74.stex"]
+dest_files=["res://.godot/imported/separator.png-f981c8489b9148e2e1dc63398273da74.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
-compress/hdr_mode=0
+compress/hdr_compression=1
 compress/bptc_ldr=0
 compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
-flags/repeat=0
-flags/filter=false
-flags/mipmaps=false
-flags/anisotropic=false
-flags/srgb=2
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/fix_alpha_border=true
 process/premult_alpha=false
 process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=true
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1