extends PanelContainer const CHEVRONS = [ preload("res://UI/assets/font_awesome/chevron-left.svg"), preload("res://UI/assets/font_awesome/chevron-right.svg") ] @export var expanded: bool = false signal extra_expanding(is_expanding: bool) signal extra_expanded(is_expanded: bool) var is_extra_panel_expanded: bool var tw_expand: Tween var t_user: TwitchUser var chatter: Chatter func _ready() -> void: toggle_extra_panel(expanded) %ExpandExtraInfo.pressed.connect(func(): toggle_extra_panel(!is_extra_panel_expanded)) %LoadingSimple.hide() func show_busy() -> void: %LoadingSimple.show() func show_normal() -> void: %LoadingSimple.hide() func populate_from_twitch_user(_t_user: TwitchUser) -> void: %LoadingSimple.show() clear() t_user = _t_user if not t_user: return %Username.text = t_user.login %DisplayName.text = t_user.display_name %UserId.text = t_user.id %ProfilePictureURL.text = t_user.profile_image_url if t_user.profile_image_url: %AvatarImg.texture = await Globals.twitcher.media.load_profile_image(t_user) else: %AvatarImg.texture = preload("res://UI/assets/twitch_user_profile_pic.png") %Type.text = t_user.type %ChannelDescription.text = t_user.description %BroadcasterType.text = t_user.broadcaster_type %OfflineImageURL.text = t_user.offline_image_url %ViewCount.text = str(t_user.view_count) %LoadingSimple.hide() func populate_from_chatter(_chatter: Chatter) -> void: %LoadingSimple.show() clear() chatter = _chatter if not chatter: return t_user = await Globals.twitcher.get_user_by_id(chatter.twitch_id) %Username.text = t_user.login %DisplayName.text = t_user.display_name %UserId.text = t_user.id %ProfilePictureURL.text = t_user.profile_image_url if t_user.profile_image_url: %AvatarImg.texture = await Globals.twitcher.media.load_profile_image(t_user) else: %AvatarImg.texture = preload("res://UI/assets/twitch_user_profile_pic.png") %Type.text = t_user.type %ChannelDescription.text = t_user.description %BroadcasterType.text = t_user.broadcaster_type %OfflineImageURL.text = t_user.offline_image_url %ViewCount.text = str(t_user.view_count) %LoadingSimple.hide() func clear() -> void: %AvatarImg.texture = preload("res://UI/assets/twitch_user_profile_pic.png") %LoadingSimple.hide() %Username.text = "" %DisplayName.text = "" %UserId.text = "" %ProfilePictureURL.text = "" %ChatColor.color = Color.TRANSPARENT %Type.text = "" %ChannelDescription.text = "" %BroadcasterType.text = "" %OfflineImageURL.text = "" %ViewCount.text = "" func toggle_extra_panel(val: bool) -> void: is_extra_panel_expanded = val %ExpandExtraInfo.icon = CHEVRONS[0] if is_extra_panel_expanded else CHEVRONS[1] var min_size_x: float = 400 if is_extra_panel_expanded else 0 if tw_expand: tw_expand.kill() %ExtraInfo.show() tw_expand = create_tween() tw_expand.tween_callback(extra_expanding.emit.bind(is_extra_panel_expanded)) tw_expand.set_ease(Tween.EASE_OUT) tw_expand.set_trans(Tween.TRANS_CUBIC) tw_expand.tween_property(%ExtraInfo, ^"custom_minimum_size:x", min_size_x, 0.3) if !is_extra_panel_expanded: tw_expand.tween_property(%ExtraInfo, ^"visible", false, 0.0) tw_expand.tween_callback(extra_expanded.emit.bind(is_extra_panel_expanded))