public void BePopulatedCorrectly()
    {
        var message = new ChatEntry.Model()
        {
            messageType   = ChatMessage.Type.PUBLIC,
            senderName    = "user-test",
            recipientName = "",
            bodyText      = "test message",
        };

        entry.Populate(message);

        Assert.AreEqual(entry.worldMessageColor, entry.body.color);
        Assert.AreEqual("<b>user-test:</b>", entry.username.text);
        Assert.AreEqual("<b>user-test:</b> test message", entry.body.text);

        message.messageType = ChatMessage.Type.PRIVATE;
        message.subType     = ChatEntry.Model.SubType.PRIVATE_TO;

        entry.Populate(message);
        Assert.AreEqual(entry.privateToMessageColor, entry.username.color);

        message.subType = ChatEntry.Model.SubType.PRIVATE_FROM;
        entry.Populate(message);
        Assert.AreEqual(entry.privateFromMessageColor, entry.username.color);

        message.messageType = ChatMessage.Type.SYSTEM;
        entry.Populate(message);
        Assert.AreEqual(entry.systemColor, entry.body.color);
    }
示例#2
0
    public virtual void AddEntry(ChatEntry.Model chatEntryModel, bool setScrollPositionToBottom = false)
    {
        var       chatEntryGO = Instantiate(Resources.Load(ENTRY_PATH) as GameObject, chatEntriesContainer);
        ChatEntry chatEntry   = chatEntryGO.GetComponent <ChatEntry>();

        if (enableFadeoutMode && EntryIsVisible(chatEntry))
        {
            chatEntry.SetFadeout(true);
        }
        else
        {
            chatEntry.SetFadeout(false);
        }

        chatEntry.Populate(chatEntryModel);

        if (chatEntryModel.messageType == ChatMessage.Type.PRIVATE)
        {
            chatEntry.OnPress += OnPressPrivateMessage;
        }

        chatEntry.OnTriggerHover += OnMessageTriggerHover;
        chatEntry.OnCancelHover  += OnMessageCancelHover;

        entries.Add(chatEntry);

        SortEntries();

        Utils.ForceUpdateLayout(transform as RectTransform, delayed: false);

        if (setScrollPositionToBottom)
        {
            scrollRect.verticalNormalizedPosition = 0;
        }
    }
    public void AddChatMessage(ChatEntry.Model chatEntryModel, bool setScrollPositionToBottom = false)
    {
        view.AddEntry(chatEntryModel, setScrollPositionToBottom);

        if (view.entries.Count > MAX_CHAT_ENTRIES)
        {
            UnityEngine.Object.Destroy(view.entries[0].gameObject);
            view.entries.Remove(view.entries[0]);
        }
    }
示例#4
0
    public void TrimWhenTooMuchMessagesAreInView()
    {
        for (int i = 0; i < ChatHUDController.MAX_CHAT_ENTRIES + 5; i++)
        {
            var msg = new ChatEntry.Model()
            {
                messageType = ChatMessage.Type.PUBLIC,
                senderName  = "test" + i,
                bodyText    = "test" + i,
            };

            controller.AddChatMessage(msg);
        }

        Assert.AreEqual(ChatHUDController.MAX_CHAT_ENTRIES, controller.view.entries.Count);
        Assert.AreEqual("test5", controller.view.entries[0].model.bodyText);
    }
示例#5
0
    public void AddAndClearChatEntriesProperly()
    {
        var msg = new ChatEntry.Model()
        {
            messageType = ChatMessage.Type.PUBLIC,
            senderName  = "test",
            bodyText    = "test",
        };

        controller.AddChatMessage(msg);

        Assert.AreEqual(1, controller.view.entries.Count);
        Assert.AreEqual(msg, controller.view.entries[0].model);

        controller.view.CleanAllEntries();

        Assert.AreEqual(0, controller.view.entries.Count);
    }
    public static ChatEntry.Model ChatMessageToChatEntry(ChatMessage message)
    {
        ChatEntry.Model model = new ChatEntry.Model();

        var ownProfile = UserProfile.GetOwnUserProfile();

        model.messageType = message.messageType;
        model.bodyText    = message.body;
        model.timestamp   = message.timestamp;

        if (message.recipient != null)
        {
            var recipientProfile = UserProfileController.userProfilesCatalog.Get(message.recipient);
            model.recipientName = recipientProfile != null ? recipientProfile.userName : message.recipient;
        }

        if (message.sender != null)
        {
            var senderProfile = UserProfileController.userProfilesCatalog.Get(message.sender);
            model.senderName = senderProfile != null ? senderProfile.userName : message.sender;
            model.senderId   = message.sender;
        }

        if (model.messageType == ChatMessage.Type.PRIVATE)
        {
            if (message.recipient == ownProfile.userId)
            {
                model.subType     = ChatEntry.Model.SubType.PRIVATE_FROM;
                model.otherUserId = message.sender;
            }
            else if (message.sender == ownProfile.userId)
            {
                model.subType     = ChatEntry.Model.SubType.PRIVATE_TO;
                model.otherUserId = message.recipient;
            }
            else
            {
                model.subType = ChatEntry.Model.SubType.NONE;
            }
        }

        return(model);
    }
示例#7
0
    private void AddSeparatorEntryIfNeeded(ChatEntry.Model chatEntryModel)
    {
        DateTime entryDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

        entryDateTime = GetDateTimeFromUnixTimestampMilliseconds(chatEntryModel.timestamp);

        if (!dateSeparators.Exists(separator =>
                                   separator.model.date.Year == entryDateTime.Year &&
                                   separator.model.date.Month == entryDateTime.Month &&
                                   separator.model.date.Day == entryDateTime.Day))
        {
            var chatEntrySeparatorGO = Instantiate(Resources.Load(ENTRY_PATH_SEPARATOR) as GameObject, chatEntriesContainer);
            DateSeparatorEntry dateSeparatorEntry = chatEntrySeparatorGO.GetComponent <DateSeparatorEntry>();
            dateSeparatorEntry.Populate(new DateSeparatorEntry.Model
            {
                date = entryDateTime
            });
            dateSeparators.Add(dateSeparatorEntry);
        }
    }
示例#8
0
    public override void AddEntry(ChatEntry.Model chatEntryModel, bool setScrollPositionToBottom = false)
    {
        AddSeparatorEntryIfNeeded(chatEntryModel);

        var       chatEntryGO = Instantiate(Resources.Load(chatEntryModel.subType == ChatEntry.Model.SubType.PRIVATE_TO ? ENTRY_PATH_SENT : ENTRY_PATH_RECEIVED) as GameObject, chatEntriesContainer);
        ChatEntry chatEntry   = chatEntryGO.GetComponent <ChatEntry>();

        chatEntry.SetFadeout(false);
        chatEntry.Populate(chatEntryModel);

        chatEntry.OnTriggerHover += OnMessageTriggerHover;
        chatEntry.OnCancelHover  += OnMessageCancelHover;

        entries.Add(chatEntry);
        Utils.ForceUpdateLayout(transform as RectTransform, delayed: false);

        if (setScrollPositionToBottom)
        {
            scrollRect.verticalNormalizedPosition = 0;
        }
    }