Ejemplo n.º 1
0
    internal void RemoveChatHead(ChatHeadButton chatHead, bool saveStatusInStorage = true)
    {
        if (chatHead == null)
        {
            return;
        }

        var animator = chatHead.GetComponent <ShowHideAnimator>();

        if (animator != null)
        {
            animator.OnWillFinishHide -= Animator_OnWillFinishHide;
            animator.OnWillFinishHide += Animator_OnWillFinishHide;
            animator.Hide();
        }
        else
        {
            Destroy(chatHead.gameObject);
        }

        chatHeads.Remove(chatHead);

        if (saveStatusInStorage)
        {
            LatestOpenChatsList.Model chatHeadToRemove = CommonScriptableObjects.latestOpenChats.GetList().FirstOrDefault(c => c.userId == chatHead.profile.userId);
            CommonScriptableObjects.latestOpenChats.Remove(chatHeadToRemove);
            SaveLatestOpenChats();
        }
    }
Ejemplo n.º 2
0
    internal ChatHeadButton AddChatHead(string userId, ulong timestamp, bool saveStatusInStorage = true)
    {
        var existingHead = chatHeads.FirstOrDefault(x => x.profile.userId == userId);

        if (existingHead != null)
        {
            existingHead.lastTimestamp = timestamp;
            SortChatHeads();

            if (saveStatusInStorage)
            {
                LatestOpenChatsList.Model existingHeadInStorage = CommonScriptableObjects.latestOpenChats.GetList().FirstOrDefault(c => c.userId == userId);
                if (existingHeadInStorage != null)
                {
                    existingHeadInStorage.lastTimestamp = timestamp;
                    SaveLatestOpenChats();
                }
            }

            return(existingHead);
        }

        GameObject     prefab   = Resources.Load(CHAT_HEAD_PATH) as GameObject;
        GameObject     instance = Instantiate(prefab, container);
        ChatHeadButton chatHead = instance.GetComponent <ChatHeadButton>();

        chatHead.Initialize(UserProfileController.userProfilesCatalog.Get(userId));
        chatHead.lastTimestamp = timestamp;
        chatHead.OnToggleOn   += OnToggleOn;
        chatHead.OnToggleOff  += OnToggleOff;

        if (friendsController != null &&
            friendsController.GetFriends().TryGetValue(userId, out FriendsController.UserStatus friendStatus))
        {
            chatHead.SetOnlineStatus(friendStatus.presence == PresenceStatus.ONLINE);
        }

        var animator = chatHead.GetComponent <ShowHideAnimator>();

        if (animator != null)
        {
            animator.Show();
        }

        chatHeads.Add(chatHead);
        SortChatHeads();

        if (saveStatusInStorage)
        {
            CommonScriptableObjects.latestOpenChats.Add(new LatestOpenChatsList.Model {
                userId = userId, lastTimestamp = timestamp
            });
            SaveLatestOpenChats();
        }

        if (chatHeads.Count > MAX_GROUP_SIZE)
        {
            var lastChatHead = chatHeads[chatHeads.Count - 1];
            RemoveChatHead(lastChatHead, saveStatusInStorage);
        }

        return(chatHead);
    }