86 lines
2.2 KiB
GDScript3
86 lines
2.2 KiB
GDScript3
|
|
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()
|