StreamOverlay/UI/Panels/User/user_games.gd

86 lines
2.2 KiB
GDScript3
Raw Normal View History

extends PanelContainer
class_name UserGamesPanel
const GAME_ENTRY = preload("res://UI/Controls/game_entry.tscn")
@onready var splitter: HSplitContainer = %Splitter
var chatter: Chatter:
set(value):
chatter = value
if not chatter: return
clear()
populate_games()
func _ready() -> void:
%SteamSearch.pressed.connect(_handle_search)
%AddSteamGame.pressed.connect(_handle_add)
func _handle_search() -> void:
var info: String = %SteamGameInput.text
var app_id: int = -1
if info.begins_with("https:"):
var parts := Array(info.split("/"))
parts.reverse()
for part in parts:
if part.is_valid_int():
app_id = part.to_int()
break
elif info.is_valid_int():
app_id = info.to_int()
if app_id == -1: return
var data: SteamAppData = await %SteamService.get_steam_app_data(app_id)
if data:
%SteamAppPanel.display_app_info(data)
%SteamAppPanel.show()
func _handle_add() -> void:
var info: String = %SteamGameInput.text
var app_id: int = -1
if info.begins_with("https:"):
var parts = Array(info.split("/"))
parts.reverse()
for part in parts:
if part.is_valid_int():
app_id = part.to_int()
break
elif info.is_valid_int():
app_id = info.to_int()
if app_id == -1: return
var data: SteamAppData = await %SteamService.get_steam_app_data(app_id)
if data:
chatter.steam_games.append(app_id)
chatter.save()
clear()
populate_games()
func populate_games() -> void:
for game in chatter.steam_games:
var inst: GameEntry = GAME_ENTRY.instantiate()
inst.steam_app_id = game
inst.type = GameEntry.Type.STEAM
inst.game_info_steam_pressed.connect(func(x: SteamAppData):
%SteamAppPanel.show()
%SteamAppPanel.display_app_info(x)
)
%SteamList.add_child(inst)
for game in chatter.itch_games:
var inst: GameEntry = GAME_ENTRY.instantiate()
inst.itchio_app_url = chatter.itch_games[game]
inst.type = GameEntry.Type.ITCHIO
inst.game_info_itchio_pressesd.connect(func(x: ItchIOAppData):
%ItchAppPanel.show()
%ItchAppPanel.display_app_info(x)
)
%ItchList.add_child(inst)
func clear() -> void:
for node in %SteamList.get_children():
node.queue_free()
for node in %ItchList.get_children():
node.queue_free()
%SteamAppPanel.clear()
%ItchAppPanel.clear()