Merging networking features #5
@ -12,6 +12,8 @@ var lobby_id: int = 0
|
||||
var lobby_members: Array = []
|
||||
var lobby_members_max: int = 4
|
||||
|
||||
signal user_joined_lobby(steam_id: int, username: String)
|
||||
|
||||
func _ready() -> void:
|
||||
var init_result = Steam.steamInit(true, 480)
|
||||
if init_result["status"] <= 1:
|
||||
@ -141,6 +143,7 @@ func read_p2p_packet() -> void:
|
||||
"handshake":
|
||||
GameConsole.print_line("Handshake from: " + read_data["username"])
|
||||
get_lobby_members()
|
||||
user_joined_lobby.emit(packet_sender, read_data["username"])
|
||||
"chat":
|
||||
GameConsole.print_line(read_data["username"] + ": " + read_data["message"])
|
||||
_:
|
||||
|
@ -5,26 +5,31 @@ extends Control
|
||||
@export var host_button: Button
|
||||
@export var join_button: Button
|
||||
@export var lobby_id: LineEdit
|
||||
@export var pfp: TextureRect
|
||||
@export var username: Label
|
||||
@export var hosted_lobby_id: Label
|
||||
|
||||
@export var user_box1: HBoxContainer
|
||||
@export var user_box2: HBoxContainer
|
||||
@export var user_box3: HBoxContainer
|
||||
@export var user_box4: HBoxContainer
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
host_button.button_down.connect(_on_host_button_pressed)
|
||||
join_button.button_down.connect(_on_join_button_pressed)
|
||||
|
||||
network_manager.user_joined_lobby.connect(_on_user_joined_lobby)
|
||||
|
||||
username.text = network_manager.username
|
||||
|
||||
user_box1.get_node("Username").text = network_manager.username
|
||||
|
||||
if network_manager.avatar_texture == null:
|
||||
GameConsole.log_error("Avatar texture is null!")
|
||||
get_tree().create_timer(0.005).timeout.connect(
|
||||
func():
|
||||
pfp.texture = network_manager.avatar_texture
|
||||
user_box1.get_node("PFP").texture = network_manager.avatar_texture
|
||||
)
|
||||
else:
|
||||
pfp.texture = network_manager.avatar_texture
|
||||
user_box1.get_node("PFP").texture = network_manager.avatar_texture
|
||||
|
||||
|
||||
func _on_host_button_pressed() -> void:
|
||||
@ -39,3 +44,38 @@ func _on_host_button_pressed() -> void:
|
||||
|
||||
func _on_join_button_pressed() -> void:
|
||||
network_manager.join_lobby(int(lobby_id.text))
|
||||
|
||||
|
||||
func _on_user_joined_lobby(user_id: int, username: String) -> void:
|
||||
if network_manager.lobby_members[1] == null:
|
||||
user_box2.get_node("Username").text = username
|
||||
user_box2.get_node("PFP").texture = load_avatar(user_id)
|
||||
user_box2.visible = true
|
||||
elif network_manager.lobby_members[2] == null:
|
||||
user_box3.get_node("Username").text = username
|
||||
user_box3.get_node("PFP").texture = load_avatar(user_id)
|
||||
user_box3.visible = true
|
||||
elif network_manager.lobby_members[3] == null:
|
||||
user_box4.get_node("Username").text = username
|
||||
user_box4.get_node("PFP").texture = load_avatar(user_id)
|
||||
user_box4.visible = true
|
||||
else:
|
||||
GameConsole.log_error("Lobby is full!")
|
||||
|
||||
|
||||
func load_avatar(user_id: int) -> ImageTexture:
|
||||
Steam.getPlayerAvatar(user_id)
|
||||
|
||||
Steam.avatar_loaded.connect(
|
||||
func(_user_id: int, avatar_size: int, avatar_buffer: PackedByteArray) -> void:
|
||||
var avatar_image: Image = Image.create_from_data(avatar_size, avatar_size, false, Image.FORMAT_RGBA8, avatar_buffer)
|
||||
if avatar_size > 128:
|
||||
avatar_image.resize(128, 128, Image.INTERPOLATE_LANCZOS)
|
||||
|
||||
if avatar_image != null:
|
||||
return ImageTexture.create_from_image(avatar_image)
|
||||
else:
|
||||
GameConsole.log_error("Failed to create avatar image!")
|
||||
)
|
||||
return null
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
[node name="NetworkManager" parent="." instance=ExtResource("1_i1w5w")]
|
||||
|
||||
[node name="UiRoot" type="Control" parent="." node_paths=PackedStringArray("network_manager", "host_button", "join_button", "lobby_id", "pfp", "username", "hosted_lobby_id")]
|
||||
[node name="UiRoot" type="Control" parent="." node_paths=PackedStringArray("network_manager", "host_button", "join_button", "lobby_id", "hosted_lobby_id", "user_box1", "user_box2", "user_box3", "user_box4")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@ -20,9 +20,11 @@ network_manager = NodePath("../NetworkManager")
|
||||
host_button = NodePath("Panel/HBoxContainer/VBoxContainer/Host")
|
||||
join_button = NodePath("Panel/HBoxContainer/VBoxContainer/Join")
|
||||
lobby_id = NodePath("Panel/HBoxContainer/VBoxContainer/LobbyID")
|
||||
pfp = NodePath("Panel/HBoxContainer/VBoxContainer2/HBoxContainer/PFP")
|
||||
username = NodePath("Panel/HBoxContainer/VBoxContainer2/HBoxContainer/Username")
|
||||
hosted_lobby_id = NodePath("Panel/HBoxContainer/VBoxContainer/HostedLobbyID")
|
||||
user_box1 = NodePath("Panel/HBoxContainer/VBoxContainer2/UserBox1")
|
||||
user_box2 = NodePath("Panel/HBoxContainer/VBoxContainer2/UserBox2")
|
||||
user_box3 = NodePath("Panel/HBoxContainer/VBoxContainer2/UserBox3")
|
||||
user_box4 = NodePath("Panel/HBoxContainer/VBoxContainer2/UserBox4")
|
||||
|
||||
[node name="Panel" type="Panel" parent="UiRoot"]
|
||||
layout_mode = 1
|
||||
@ -65,17 +67,62 @@ text = "Lobby hosted: "
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2"]
|
||||
[node name="UserBox1" type="HBoxContainer" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PFP" type="TextureRect" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/HBoxContainer"]
|
||||
[node name="PFP" type="TextureRect" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox1"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
texture = ExtResource("3_co2ix")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Username" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/HBoxContainer"]
|
||||
[node name="Username" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox1"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "username"
|
||||
text = "Hagrid 1"
|
||||
|
||||
[node name="UserBox2" type="HBoxContainer" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PFP" type="TextureRect" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox2"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
texture = ExtResource("3_co2ix")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Username" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox2"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "Hagrid 2"
|
||||
|
||||
[node name="UserBox3" type="HBoxContainer" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PFP" type="TextureRect" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox3"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
texture = ExtResource("3_co2ix")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Username" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox3"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "Hagrid 3"
|
||||
|
||||
[node name="UserBox4" type="HBoxContainer" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PFP" type="TextureRect" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox4"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
texture = ExtResource("3_co2ix")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="Username" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer2/UserBox4"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
text = "Hagrid 4"
|
||||
|
Loading…
Reference in New Issue
Block a user