extends PanelContainer ## FriendRow — Single row in the friends list inside SocialPanel. @onready var _name_label: Label = %NameLabel @onready var _state_label: Label = %StateLabel @onready var _dm_btn: TextureButton = %DMBtn @onready var _accept_btn: TextureButton = %AcceptBtn @onready var _decline_btn: TextureButton = %DeclineBtn @onready var _remove_btn: TextureButton = %RemoveBtn var _user_id: String var _username: String var _panel: Control # reference to SocialPanel for opening DM func setup(uid: String, uname: String, state: int, panel: Control) -> void: _user_id = uid _username = uname _panel = panel _name_label.text = uname _dm_btn.visible = false _accept_btn.visible = false _decline_btn.visible = false _remove_btn.visible = false _state_label.visible = false match state: -1: # Search result (Not friend) _accept_btn.visible = true if not _accept_btn.pressed.is_connected(_on_accept): _accept_btn.pressed.connect(_on_accept) FriendManager.STATE_FRIEND: _state_label.visible = true _dm_btn.visible = true _remove_btn.visible = true if not _dm_btn.pressed.is_connected(_on_dm): _dm_btn.pressed.connect(_on_dm) if not _remove_btn.pressed.is_connected(_on_remove): _remove_btn.pressed.connect(_on_remove) FriendManager.STATE_INVITE_OUT: _state_label.text = "(invite sent)" _state_label.visible = true FriendManager.STATE_INVITE_IN: _state_label.text = "Incoming Request" _state_label.visible = true _accept_btn.visible = true _decline_btn.visible = true if not _accept_btn.pressed.is_connected(_on_accept): _accept_btn.pressed.connect(_on_accept) if not _decline_btn.pressed.is_connected(_on_remove): _decline_btn.pressed.connect(_on_remove) func _on_dm(): _panel.call("open_dm", _user_id, _username) func _on_remove(): FriendManager.remove_friend(_user_id) queue_free() func _on_accept(): FriendManager.add_friend_by_id(_user_id) _accept_btn.visible = false _decline_btn.visible = false _dm_btn.visible = true _remove_btn.visible = true _state_label.text = "LAST ONLINE: Just now"