Networking and menu cleanup, added nosteam window flag
This commit is contained in:
@@ -1,75 +1,47 @@
|
|||||||
extends CanvasLayer
|
extends CanvasLayer
|
||||||
|
|
||||||
@onready var use_steam_check: CheckButton = %UseSteamCheck
|
|
||||||
@onready var ip_edit: LineEdit = %IPEdit
|
@onready var quit_button: Button = %QuitButton
|
||||||
@onready var join_ip_button: Button = %JoinIPButton
|
|
||||||
@onready var steam_host_button: Button = %SteamHostButton
|
@onready var steam_host_button: Button = %SteamHostButton
|
||||||
@onready var steam_lobby_id_edit: LineEdit = %SteamLobbyIDEdit
|
@onready var steam_lobby_id_edit: LineEdit = %SteamLobbyIDEdit
|
||||||
@onready var join_steam_button: Button = %JoinSteamButton
|
@onready var join_steam_button: Button = %JoinSteamButton
|
||||||
@onready var quit_button: Button = %QuitButton
|
|
||||||
@onready var ip_host_button: Button = %IPHostButton
|
|
||||||
@onready var steam_controls: VBoxContainer = %SteamControls
|
@onready var steam_controls: VBoxContainer = %SteamControls
|
||||||
@onready var e_net_controls: VBoxContainer = %ENetControls
|
|
||||||
@onready var steam_avatar: TextureRect = %SteamAvatar
|
@onready var steam_avatar: TextureRect = %SteamAvatar
|
||||||
@onready var steam_username_label: Label = %SteamUsernameLabel
|
@onready var steam_username_label: Label = %SteamUsernameLabel
|
||||||
|
|
||||||
|
@onready var ip_host_button: Button = %IPHostButton
|
||||||
|
@onready var e_net_controls: VBoxContainer = %ENetControls
|
||||||
@onready var username_input: LineEdit = %UsernameInput
|
@onready var username_input: LineEdit = %UsernameInput
|
||||||
@onready var ip_avatar_image: TextureButton = %IPAvatarImage
|
@onready var ip_avatar_image: TextureButton = %IPAvatarImage
|
||||||
|
@onready var ip_edit: LineEdit = %IPEdit
|
||||||
|
@onready var join_ip_button: Button = %JoinIPButton
|
||||||
|
|
||||||
|
|
||||||
const TEST_LEVEL = preload("uid://tnw1q8a7ndio")
|
const TEST_LEVEL = preload("uid://tnw1q8a7ndio")
|
||||||
const PLAYER = preload("uid://cq6ovfsdvnt40")
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||||
|
check_command_line()
|
||||||
|
quit_button.pressed.connect(func(): get_tree().quit())
|
||||||
|
|
||||||
#if OS.has_feature("server"):
|
if OS.has_feature("nosteam"):
|
||||||
#add_world()
|
steam_controls.hide()
|
||||||
#NetworkManager.start_server()
|
e_net_controls.show()
|
||||||
#hide()
|
|
||||||
|
|
||||||
use_steam_check.toggled.connect(_on_use_steam_toggled)
|
|
||||||
|
|
||||||
join_ip_button.pressed.connect(_on_ip_join_pressed)
|
join_ip_button.pressed.connect(_on_ip_join_pressed)
|
||||||
quit_button.pressed.connect(func(): get_tree().quit())
|
|
||||||
ip_host_button.pressed.connect(_on_host_ip_pressed)
|
ip_host_button.pressed.connect(_on_host_ip_pressed)
|
||||||
username_input.text_changed.connect(_on_username_input_text_changed)
|
username_input.text_changed.connect(_on_username_input_text_changed)
|
||||||
ip_avatar_image.pressed.connect(_on_ip_avatar_clicked)
|
ip_avatar_image.pressed.connect(_on_ip_avatar_clicked)
|
||||||
|
return
|
||||||
|
|
||||||
join_steam_button.pressed.connect(_on_join_steam_pressed)
|
join_steam_button.pressed.connect(_on_join_steam_pressed)
|
||||||
steam_host_button.pressed.connect(_on_host_steam_pressed)
|
steam_host_button.pressed.connect(_on_host_steam_pressed)
|
||||||
steam_lobby_id_edit.text_changed.connect(_on_lobby_text_changed)
|
steam_lobby_id_edit.text_changed.connect(_on_lobby_text_changed)
|
||||||
|
|
||||||
Steam.join_requested.connect(_on_lobby_join_requested)
|
Steam.join_requested.connect(_on_lobby_join_requested)
|
||||||
|
|
||||||
check_command_line()
|
|
||||||
|
|
||||||
func _on_use_steam_toggled(toggled_on: bool):
|
|
||||||
if toggled_on:
|
|
||||||
if !Steamworks.is_initalized:
|
|
||||||
push_error("Steam not initalized, reverting to IP")
|
|
||||||
steam_controls.hide()
|
|
||||||
use_steam_check.button_pressed = false
|
|
||||||
else:
|
|
||||||
steam_controls.show()
|
|
||||||
e_net_controls.hide()
|
|
||||||
steam_username_label.text = Steamworks.steam_username
|
steam_username_label.text = Steamworks.steam_username
|
||||||
steam_avatar.texture = Steamworks.steam_avatar
|
steam_avatar.texture = await Steamworks.get_player_avatar(Steamworks.steam_id)
|
||||||
else:
|
|
||||||
e_net_controls.show()
|
|
||||||
steam_controls.hide()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_ip_join_pressed():
|
|
||||||
var avatar: ImageTexture = ImageTexture.create_from_image(ip_avatar_image.texture_normal.get_image())
|
|
||||||
NetworkManager.join_server(ip_edit.text, username_input.text, avatar)
|
|
||||||
add_world()
|
|
||||||
hide()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_host_ip_pressed():
|
|
||||||
var avatar: ImageTexture = ImageTexture.create_from_image(ip_avatar_image.texture_normal.get_image())
|
|
||||||
NetworkManager.start_server(username_input.text, avatar)
|
|
||||||
add_world()
|
|
||||||
hide()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_host_steam_pressed():
|
func _on_host_steam_pressed():
|
||||||
@@ -113,6 +85,22 @@ func check_command_line() -> void:
|
|||||||
hide()
|
hide()
|
||||||
|
|
||||||
|
|
||||||
|
#region Non steam
|
||||||
|
|
||||||
|
func _on_ip_join_pressed():
|
||||||
|
var avatar: ImageTexture = ImageTexture.create_from_image(ip_avatar_image.texture_normal.get_image())
|
||||||
|
NetworkManager.join_server(ip_edit.text, username_input.text, avatar)
|
||||||
|
add_world()
|
||||||
|
hide()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_host_ip_pressed():
|
||||||
|
var avatar: ImageTexture = ImageTexture.create_from_image(ip_avatar_image.texture_normal.get_image())
|
||||||
|
NetworkManager.start_server(username_input.text, avatar)
|
||||||
|
add_world()
|
||||||
|
hide()
|
||||||
|
|
||||||
|
|
||||||
func _on_username_input_text_changed(new_text: String) -> void:
|
func _on_username_input_text_changed(new_text: String) -> void:
|
||||||
if new_text == "":
|
if new_text == "":
|
||||||
ip_host_button.hide()
|
ip_host_button.hide()
|
||||||
@@ -149,3 +137,4 @@ func _on_ip_avatar_clicked():
|
|||||||
|
|
||||||
add_child(file_dialog)
|
add_child(file_dialog)
|
||||||
file_dialog.popup_centered()
|
file_dialog.popup_centered()
|
||||||
|
#endregion
|
||||||
|
|||||||
@@ -51,19 +51,12 @@ layout_mode = 2
|
|||||||
size_flags_horizontal = 6
|
size_flags_horizontal = 6
|
||||||
text = "Multiplayer Template Game"
|
text = "Multiplayer Template Game"
|
||||||
|
|
||||||
[node name="UseSteamCheck" type="CheckButton" parent="Control/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2" unique_id=2050719522]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
layout_mode = 2
|
|
||||||
size_flags_horizontal = 3
|
|
||||||
text = "Use Steam"
|
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer" unique_id=1028494634]
|
[node name="HBoxContainer" type="HBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer" unique_id=1028494634]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
|
|
||||||
[node name="SteamControls" type="VBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=614477215]
|
[node name="SteamControls" type="VBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=614477215]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
@@ -112,6 +105,7 @@ text = "Host"
|
|||||||
|
|
||||||
[node name="ENetControls" type="VBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1909532057]
|
[node name="ENetControls" type="VBoxContainer" parent="Control/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer" unique_id=1909532057]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 4
|
size_flags_vertical = 4
|
||||||
|
|||||||
@@ -34,17 +34,8 @@ func _connect_multiplayer_signals(is_server: bool):
|
|||||||
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
||||||
|
|
||||||
|
|
||||||
func start_server(username: String, avatar: ImageTexture):
|
|
||||||
is_steam_lobby = false
|
|
||||||
ip_username = username
|
|
||||||
ip_avatar = avatar
|
|
||||||
enet_peer.create_server(port)
|
|
||||||
multiplayer.multiplayer_peer = enet_peer
|
|
||||||
_connect_multiplayer_signals(true)
|
|
||||||
add_player(1)
|
|
||||||
|
|
||||||
|
|
||||||
func start_steam_lobby():
|
func start_steam_lobby():
|
||||||
|
create_loading_screen("Creating lobby...")
|
||||||
Steam.lobby_created.connect(_on_steam_lobby_created)
|
Steam.lobby_created.connect(_on_steam_lobby_created)
|
||||||
Steam.createLobby(Steam.LOBBY_TYPE_PUBLIC, 10)
|
Steam.createLobby(Steam.LOBBY_TYPE_PUBLIC, 10)
|
||||||
is_host_steam = true
|
is_host_steam = true
|
||||||
@@ -63,18 +54,7 @@ func _on_steam_lobby_created(result: int, lobby_id: int) -> void:
|
|||||||
is_steam_lobby = true
|
is_steam_lobby = true
|
||||||
add_player(1)
|
add_player(1)
|
||||||
print("Lobby created. ID: " + str(lobby_id))
|
print("Lobby created. ID: " + str(lobby_id))
|
||||||
print("Steam ID for host: " + str(steam_peer.get_steam_id_for_peer_id(1)))
|
loading_screen.queue_free()
|
||||||
print("Steam ID for host (from autoload): " + str(Steamworks.steam_id))
|
|
||||||
|
|
||||||
|
|
||||||
func join_server(ip: String, username: String, avatar: ImageTexture):
|
|
||||||
is_steam_lobby = false
|
|
||||||
ip_username = username
|
|
||||||
ip_avatar = avatar
|
|
||||||
enet_peer.create_client(ip, port)
|
|
||||||
multiplayer.multiplayer_peer = enet_peer
|
|
||||||
_connect_multiplayer_signals(false)
|
|
||||||
create_loading_screen()
|
|
||||||
|
|
||||||
|
|
||||||
func join_steam_lobby(lobby_id: int):
|
func join_steam_lobby(lobby_id: int):
|
||||||
@@ -118,12 +98,6 @@ func set_player_details_steam(peer_id: int, steam_id: int):
|
|||||||
await player_list[peer_id].set_player_info_steam(steam_id)
|
await player_list[peer_id].set_player_info_steam(steam_id)
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_local")
|
|
||||||
func set_player_details_ip(peer_id: int, username: String, avatar_bytes: PackedByteArray):
|
|
||||||
if player_list.has(peer_id):
|
|
||||||
await player_list[peer_id].set_player_info_ip(username, avatar_bytes)
|
|
||||||
|
|
||||||
|
|
||||||
func add_player(peer_id: int):
|
func add_player(peer_id: int):
|
||||||
var new_player: Player = PLAYER.instantiate()
|
var new_player: Player = PLAYER.instantiate()
|
||||||
new_player.name = str(peer_id)
|
new_player.name = str(peer_id)
|
||||||
@@ -173,3 +147,32 @@ func _cleanup_steam_signals():
|
|||||||
Steam.lobby_created.disconnect(_on_steam_lobby_created)
|
Steam.lobby_created.disconnect(_on_steam_lobby_created)
|
||||||
if Steam.lobby_joined.is_connected(_on_join_steam_lobby):
|
if Steam.lobby_joined.is_connected(_on_join_steam_lobby):
|
||||||
Steam.lobby_joined.disconnect(_on_join_steam_lobby)
|
Steam.lobby_joined.disconnect(_on_join_steam_lobby)
|
||||||
|
|
||||||
|
|
||||||
|
#region Non-steam
|
||||||
|
func start_server(username: String, avatar: ImageTexture):
|
||||||
|
is_steam_lobby = false
|
||||||
|
ip_username = username
|
||||||
|
ip_avatar = avatar
|
||||||
|
enet_peer.create_server(port)
|
||||||
|
multiplayer.multiplayer_peer = enet_peer
|
||||||
|
_connect_multiplayer_signals(true)
|
||||||
|
add_player(1)
|
||||||
|
|
||||||
|
|
||||||
|
func join_server(ip: String, username: String, avatar: ImageTexture):
|
||||||
|
is_steam_lobby = false
|
||||||
|
ip_username = username
|
||||||
|
ip_avatar = avatar
|
||||||
|
enet_peer.create_client(ip, port)
|
||||||
|
multiplayer.multiplayer_peer = enet_peer
|
||||||
|
_connect_multiplayer_signals(false)
|
||||||
|
create_loading_screen()
|
||||||
|
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_local")
|
||||||
|
func set_player_details_ip(peer_id: int, username: String, avatar_bytes: PackedByteArray):
|
||||||
|
if player_list.has(peer_id):
|
||||||
|
await player_list[peer_id].set_player_info_ip(username, avatar_bytes)
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|||||||
@@ -1,30 +1,38 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
var use_steam := true
|
||||||
var is_initalized: bool = false
|
var is_initalized: bool = false
|
||||||
|
var steam_id: int = 0
|
||||||
var steam_id: int
|
var steam_username: String = "None"
|
||||||
var steam_username: String
|
|
||||||
var steam_avatar: ImageTexture
|
var steam_avatar: ImageTexture
|
||||||
|
|
||||||
var tmp_avatar_image_texture: ImageTexture
|
var tmp_avatar_image_texture: ImageTexture
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
if is_initalized: return
|
if is_initalized: return
|
||||||
|
if OS.has_feature("nosteam"):
|
||||||
|
print("[Steamworks] Window has flag 'nosteam', skipping steam initalization")
|
||||||
|
use_steam = false
|
||||||
|
return
|
||||||
|
|
||||||
var response := Steam.steamInitEx()
|
var response := Steam.steamInitEx()
|
||||||
if response["status"] != 0:
|
if response["status"] != 0:
|
||||||
push_warning("Steam failed to initalize: " + str(response))
|
push_error("Steam failed to initalize: " + str(response))
|
||||||
|
print("Steam failed to initalize. Error code: " + str(response))
|
||||||
|
await get_tree().create_timer(1).timeout
|
||||||
|
get_tree().quit()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
print("Steam initalized successfully")
|
||||||
|
is_initalized = true
|
||||||
|
|
||||||
steam_id = Steam.getSteamID()
|
steam_id = Steam.getSteamID()
|
||||||
steam_username = Steam.getPersonaName()
|
steam_username = Steam.getPersonaName()
|
||||||
steam_avatar = await get_player_avatar(steam_id)
|
steam_avatar = await get_player_avatar(steam_id)
|
||||||
|
|
||||||
print("Steam initalized successfully")
|
|
||||||
is_initalized = true
|
|
||||||
|
|
||||||
|
|
||||||
func get_player_avatar(steam_id: int) -> ImageTexture:
|
func get_player_avatar(steam_id: int) -> ImageTexture:
|
||||||
|
if !is_initalized or !use_steam: return
|
||||||
Steam.getPlayerAvatar(Steam.AVATAR_LARGE, steam_id)
|
Steam.getPlayerAvatar(Steam.AVATAR_LARGE, steam_id)
|
||||||
var result = await Steam.avatar_loaded # returns (avatar_id, width, avatar_data)
|
var result = await Steam.avatar_loaded # returns (avatar_id, width, avatar_data)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user