Update multiplayer pong to godot 4 beta 5

This commit is contained in:
Rafael Correa
2022-11-22 15:34:33 -03:00
parent 0cfbbec3f9
commit 1a9aea09ef
13 changed files with 149 additions and 158 deletions

View File

@@ -1,8 +1,9 @@
[remap] [remap]
importer="texture" importer="texture"
type="StreamTexture2D" type="CompressedTexture2D"
path="res://.godot/imported/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" 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 compress/channel_pack=0
flags/filter=false mipmaps/generate=false
flags/mipmaps=false mipmaps/limit=-1
flags/anisotropic=false roughness/mode=0
flags/srgb=2 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 process/hdr_as_srgb=false
size_limit=0 process/hdr_clamp_exposure=false
detect_3d=true process/size_limit=0
svg/scale=1.0 detect_3d/compress_to=1

View File

@@ -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 type="Script" path="res://logic/ball.gd" id="1"]
[ext_resource path="res://ball.png" type="Texture2D" id=2] [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")

View File

@@ -1,8 +1,9 @@
[remap] [remap]
importer="texture" importer="texture"
type="StreamTexture2D" type="CompressedTexture2D"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" 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 compress/channel_pack=0
flags/filter=true mipmaps/generate=false
flags/mipmaps=false mipmaps/limit=-1
flags/anisotropic=false roughness/mode=0
flags/srgb=2 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 process/hdr_as_srgb=false
size_limit=0 process/hdr_clamp_exposure=false
detect_3d=true process/size_limit=0
svg/scale=1.0 detect_3d/compress_to=1

View File

@@ -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." is forwarded checked your router."
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[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"]

View File

@@ -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) get_parent().update_score.rpc(false)
rpc("_reset_ball", 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) get_parent().update_score.rpc(true)
rpc("_reset_ball", 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

View File

@@ -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) multiplayer.connect(&"peer_connected", self._player_connected)
get_tree().connect(&"network_peer_disconnected", self._player_disconnected) multiplayer.connect(&"peer_disconnected", self._player_disconnected)
get_tree().connect(&"connected_to_server", self._connected_ok) multiplayer.connect(&"connected_to_server", self._connected_ok)
get_tree().connect(&"connection_failed", self._connected_fail) multiplayer.connect(&"connection_failed", self._connected_fail)
get_tree().connect(&"server_disconnected", self._server_disconnected) 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 = ENetMultiplayerPeer.new()
peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
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 = ENetMultiplayerPeer.new()
peer.set_compression_mode(NetworkedMultiplayerENet.COMPRESS_RANGE_CODER)
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)

View File

@@ -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(): if is_multiplayer_authority():
# Random for new direction generated on each peer. # Random for new direction generated checked each peer.
area.rpc("bounce", left, randf()) area.bounce.rpc(left, randf())

View File

@@ -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. # set_multiplayer_authority is tree-recursive by default.
if get_tree().is_network_server(): 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():

View File

@@ -1,8 +1,9 @@
[remap] [remap]
importer="texture" importer="texture"
type="StreamTexture2D" type="CompressedTexture2D"
path="res://.godot/imported/paddle.png-0e798fb0912613386507c9904d5cc01a.stex" 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 compress/channel_pack=0
flags/filter=false mipmaps/generate=false
flags/mipmaps=false mipmaps/limit=-1
flags/anisotropic=false roughness/mode=0
flags/srgb=2 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 process/hdr_as_srgb=false
size_limit=0 process/hdr_clamp_exposure=false
detect_3d=true process/size_limit=0
svg/scale=1.0 detect_3d/compress_to=1

View File

@@ -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 type="Script" path="res://logic/paddle.gd" id="1"]
[ext_resource path="res://paddle.png" type="Texture2D" id=2] [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"]

View File

@@ -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 type="Script" path="res://logic/pong.gd" id="1"]
[ext_resource path="res://separator.png" type="Texture2D" id=2] [ext_resource type="Texture2D" uid="uid://b10swafhe08oj" path="res://separator.png" id="2"]
[ext_resource path="res://paddle.tscn" type="PackedScene" id=3] [ext_resource type="PackedScene" uid="uid://cpw46256eirwq" path="res://paddle.tscn" id="3"]
[ext_resource path="res://ball.tscn" type="PackedScene" id=4] [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

View File

@@ -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/viewport_width=640
window/size/height=400 window/size/viewport_height=400
window/dpi/allow_hidpi=true
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,"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,"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":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,"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,"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":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
] ]
} }

View File

@@ -1,8 +1,9 @@
[remap] [remap]
importer="texture" importer="texture"
type="StreamTexture2D" type="CompressedTexture2D"
path="res://.godot/imported/separator.png-f981c8489b9148e2e1dc63398273da74.stex" 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 compress/channel_pack=0
flags/filter=false mipmaps/generate=false
flags/mipmaps=false mipmaps/limit=-1
flags/anisotropic=false roughness/mode=0
flags/srgb=2 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 process/hdr_as_srgb=false
size_limit=0 process/hdr_clamp_exposure=false
detect_3d=true process/size_limit=0
svg/scale=1.0 detect_3d/compress_to=1