MomentItem.cs 2.81 KB
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

/**
 * 功能描述: 单条朋友圈+动态初始化 
 * @author wangQc
 * @date 2025/6/4 09:20
 */
public class MomentItem : MonoBehaviour
{
    public Image avatarImage;
    public TextMeshProUGUI usernameText;
    public TextMeshProUGUI contentText;

    
    public Transform imageGrid; // 父对象,用于图片缩略图排列
    public GameObject imagePrefab; // 小图预制体

    public Transform videoGrid; // 父对象
    public GameObject videoPlayer; // 视频播放器
    
    public TextMeshProUGUI fromAndTime;
    public TextMeshProUGUI likeIcon;

    public Transform likeGrid; // 父对象,用于点赞emjoi排列
    public GameObject likePrefab; // 点赞emjoi预制体

    public TextMeshProUGUI likesText;
    public TextMeshProUGUI commentsText;
    
    public DanmakuManager danmakuManager;



    public void Setup(Moment moment,List<Like> likeList)
    {
        usernameText.text = moment.username;
        contentText.text = moment.text;
        fromAndTime.text = moment.fromAndTime;
        StartCoroutine(ImageLoader.LoadImage(moment.avatarUrl, avatarImage));
        
        Button likeIconBtn = likeIcon.GetComponent<Button>();
        likeIconBtn.onClick.AddListener(() =>
        {
            likeGrid.gameObject.SetActive(true);
        });


        // 清空之前的图片
        foreach (Transform child in imageGrid)
            Destroy(child.gameObject);
        foreach (string url in moment.imageUrls)
        {
            GameObject imgObj = Instantiate(imagePrefab, imageGrid);
            Image img = imgObj.GetComponent<Image>();
            StartCoroutine(ImageLoader.LoadImage(url, img));

            Button btn = imgObj.GetComponent<Button>();
            btn.onClick.AddListener(() => ImageViewer.Instance.ShowImage(url));
        }
        
        
        
        //点赞图片以及文字初始化
        foreach (Transform child in likeGrid)
            Destroy(child.gameObject);
        foreach (Like like in likeList)
        {
            GameObject evaluateObj = Instantiate(likePrefab, likeGrid);
            var evaluateTextMeshPro = evaluateObj.GetComponent<TextMeshProUGUI>();
            evaluateTextMeshPro.text = like.icon;
            
            Button evaluateBtn = evaluateObj.GetComponent<Button>();
            evaluateBtn.onClick.AddListener(() =>
            {
                Debug.Log(like.bullet);
                likeIcon.text = like.icon;
                likeGrid.gameObject.SetActive(false);
                danmakuManager.AddDanmaku(like.bullet);
            });
        }

        likesText.text = "❤" + string.Join(", ", moment.likes);
        commentsText.text = "";
        foreach (var c in moment.comments)
            commentsText.text += $"{c.user}: {c.text}\n";
    }
}