diff --git a/UI/Controls/game_entry.gd b/UI/Controls/game_entry.gd new file mode 100644 index 00000000..80662597 --- /dev/null +++ b/UI/Controls/game_entry.gd @@ -0,0 +1,93 @@ +extends PanelContainer +class_name GameEntry + +enum Type {STEAM, ITCHIO} +var type: Type + +var steam_app_id: int +var itchio_app_url: String + +var steam_data: SteamAppData +var itchio_data: ItchIOAppData + +signal game_info_steam_pressed(steam_data: SteamAppData) +signal game_info_itchio_pressesd(itchio_data: ItchIOAppData) +signal entry_deleted(entry: GameEntry) + +func _ready() -> void: + populate() + %Refresh.pressed.connect(_reload_data) + %GameName.pressed.connect(_select_game) + %Promote.pressed.connect(_promote_game) + %SteamLink.pressed.connect(_launch_game_site) + %ItchLink.pressed.connect(_launch_game_site) + %Delete.pressed.connect(entry_deleted.emit.bind(self)) + +func populate() -> void: + %SteamLink.visible = type == Type.STEAM + %ItchLink.visible = type == Type.ITCHIO + + match type: + Type.STEAM: + if not steam_data: + steam_data = await %SteamService.get_steam_app_data(steam_app_id) + %GameName.text = steam_data.name + %GameName.tooltip_text = steam_data.name + var url_no_query: String = steam_data.header_image.split("?")[0] + %Background.texture = ImageTexture.create_from_image(await Globals.twitcher.media.load_image(url_no_query)) + Type.ITCHIO: + if not itchio_data: + itchio_data = await %ItchIOService.get_itch_app_data(itchio_app_url) + %GameName.text = itchio_data.title + var url: String = itchio_data.cover_image + %Background.texture = ImageTexture.create_from_image(await Globals.twitcher.media.load_image(url)) + +func _reload_data() -> void: + match type: + Type.STEAM: + steam_data = await %SteamService.get_steam_app_data(steam_app_id) + populate() + game_info_steam_pressed.emit(steam_data) + Type.ITCHIO: + itchio_data = await %ItchIOService.get_itch_app_data(itchio_app_url) + populate() + game_info_itchio_pressesd.emit(itchio_data) + +func _select_game() -> void: + if type == Type.STEAM: game_info_steam_pressed.emit(steam_data) + elif type == Type.ITCHIO: game_info_itchio_pressesd.emit(itchio_data) + +func _promote_game() -> void: + var msg: String = "Check out {title} by {developer}! {description} {link}" + var title: String + var developer: String + var description: String + var link: String + match type: + Type.STEAM: + title = steam_data.name + developer = steam_data.developers.front() + description = steam_data.short_description + link = steam_data.s_team_url + pass + Type.ITCHIO: + title = itchio_data.title + developer = itchio_data.developer + description = itchio_data.description.left(200) + "..." + link = itchio_data.url + msg = msg.format({ + "title": title, + "developer": developer, + "description": description, + "link": link + }) + Globals.twitcher.send_message(msg) + +func _launch_game_site() -> void: + var link: String + match type: + Type.STEAM: link = "https://s.team/a/%d" % steam_app_id + Type.ITCHIO: link = itchio_app_url + _: + link = "https://google.com" + OS.shell_open(link) diff --git a/UI/Controls/game_entry.gd.uid b/UI/Controls/game_entry.gd.uid new file mode 100644 index 00000000..8fe65d94 --- /dev/null +++ b/UI/Controls/game_entry.gd.uid @@ -0,0 +1 @@ +uid://c0gqgv8ixdudx diff --git a/UI/Controls/game_entry.tscn b/UI/Controls/game_entry.tscn new file mode 100644 index 00000000..496cde10 --- /dev/null +++ b/UI/Controls/game_entry.tscn @@ -0,0 +1,88 @@ +[gd_scene format=3 uid="uid://qu7opwfv2ejy"] + +[ext_resource type="Texture2D" uid="uid://bb2asei1pibev" path="res://UI/assets/bootstrap/arrow-repeat.png" id="1_b8obq"] +[ext_resource type="Script" uid="uid://c0gqgv8ixdudx" path="res://UI/Controls/game_entry.gd" id="1_eo48f"] +[ext_resource type="Script" uid="uid://chgufd1youdel" path="res://lib/games_info/steam_service.gd" id="1_lcnnc"] +[ext_resource type="Texture2D" uid="uid://eybcntflwjpx" path="res://UI/assets/bootstrap/megaphone.svg" id="2_7t4x7"] +[ext_resource type="Script" uid="uid://cyef5m8x5f7k6" path="res://lib/games_info/itch_io_service.gd" id="2_eo48f"] +[ext_resource type="Texture2D" uid="uid://pur2a3t6vlfb" path="res://UI/assets/simple/steam.svg" id="3_lcnnc"] +[ext_resource type="Texture2D" uid="uid://bw7yr2aonagxc" path="res://UI/assets/font_awesome/itch-io.svg" id="4_eo48f"] +[ext_resource type="Texture2D" uid="uid://i8rcx5bhkd5x" path="res://UI/assets/bootstrap/trash.svg" id="5_b1mm0"] + +[node name="GameEntry" type="PanelContainer" unique_id=2093938454] +offset_right = 8.0 +offset_bottom = 8.0 +size_flags_horizontal = 3 +script = ExtResource("1_eo48f") + +[node name="SteamService" type="Node" parent="." unique_id=1960802515] +unique_name_in_owner = true +script = ExtResource("1_lcnnc") +metadata/_custom_type_script = "uid://chgufd1youdel" + +[node name="ItchIOService" type="Node" parent="." unique_id=641518539] +unique_name_in_owner = true +script = ExtResource("2_eo48f") +metadata/_custom_type_script = "uid://cyef5m8x5f7k6" + +[node name="Background" type="TextureRect" parent="." unique_id=593212671] +unique_name_in_owner = true +layout_mode = 2 +expand_mode = 1 +stretch_mode = 6 + +[node name="HBoxContainer" type="HBoxContainer" parent="." unique_id=1820948686] +layout_mode = 2 + +[node name="Refresh" type="Button" parent="HBoxContainer" unique_id=827162280] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Refresh" +icon = ExtResource("1_b8obq") +icon_alignment = 1 +expand_icon = true + +[node name="GameName" type="Button" parent="HBoxContainer" unique_id=1669812435] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "Name of the game very very long name so that we check if the ellipsis work" +text_overrun_behavior = 3 + +[node name="Promote" type="Button" parent="HBoxContainer" unique_id=710639076] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Promote" +icon = ExtResource("2_7t4x7") +icon_alignment = 1 +expand_icon = true + +[node name="SteamLink" type="Button" parent="HBoxContainer" unique_id=1282286487] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Steam Page" +icon = ExtResource("3_lcnnc") +icon_alignment = 1 +expand_icon = true + +[node name="ItchLink" type="Button" parent="HBoxContainer" unique_id=414407013] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Itch Page" +icon = ExtResource("4_eo48f") +icon_alignment = 1 +expand_icon = true + +[node name="Delete" type="Button" parent="HBoxContainer" unique_id=1920032998] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Delete" +icon = ExtResource("5_b1mm0") +icon_alignment = 1 +expand_icon = true