Files
tekton/scripts/ui/friend_row.gd
T
2026-05-11 17:24:47 +08:00

68 lines
2.1 KiB
GDScript

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"