Files
JJBB/Assets/Project/Script/GUI/Chat/ChatHistoryLogicFriend.cs
2024-08-23 15:49:34 +08:00

237 lines
9.1 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using Games.GlobeDefine;
using Games.ChatHistory;
using Games.Item;
using GCGame.Table;
using GCGame;
using Module.Log;
using Google.ProtocolBuffers;
public class ChatHistoryLogicFriend : ChatHistoryLogic
{
public GameObject _ChatTimePrefab;
public GameObject _ChatInfoSys;
public void OnDisable()
{
PlayerPreferenceData.SetFriendChatHistory(GameManager.gameManager.PlayerDataPool.ChatHistory.FriendChatList);
}
#region chat history
public override void OnReceiveChat()
{
int HistoryCount = GameManager.gameManager.PlayerDataPool.ChatHistory.ChatHistoryList.Count;
ChatHistoryItem LastHistory = GameManager.gameManager.PlayerDataPool.ChatHistory.ChatHistoryList[HistoryCount - 1];
if ((LastHistory.EChannel == GC_CHAT.CHATTYPE.CHAT_TYPE_FRIEND || LastHistory.EChannel == GC_CHAT.CHATTYPE.CHAT_TYPE_TELL))
{
bool isNeedInsertTime = false;
if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid != LastHistory.SenderGuid)
{
if (LastHistory.SenderGuid == 0)
{
if (string.Equals("1", LastHistory.SenderName))
{
LastHistory.SenderIcon = Utils.GetSysIconName(Utils.SysIconType.Sys);
}
else if (string.Equals("2", LastHistory.SenderName))
{
LastHistory.SenderIcon = Utils.GetSysIconName(Utils.SysIconType.Guild);
}
isNeedInsertTime = GameManager.gameManager.PlayerDataPool.ChatHistory.AddFriendChat(LastHistory.SenderGuid, LastHistory.SenderName,
LastHistory.SenderIcon, LastHistory.SenderLevel, LastHistory.SenderGuid, LastHistory.SenderVIPLevel, LastHistory.SenderPrivilegeVIP, LastHistory);
}
else
{
isNeedInsertTime = GameManager.gameManager.PlayerDataPool.ChatHistory.AddFriendChat(LastHistory.SenderGuid, LastHistory.SenderName,
LastHistory.SenderIcon, LastHistory.SenderLevel,
LastHistory.SenderGuid, LastHistory.SenderVIPLevel, LastHistory.SenderPrivilegeVIP, LastHistory);
}
}
else
{
isNeedInsertTime = GameManager.gameManager.PlayerDataPool.ChatHistory.AddFriendChat(LastHistory.ReceiverGuid, LastHistory.ReceiverName, "",
0, LastHistory.SenderGuid, -1, -1, LastHistory);
}
if (_FriendGuid == LastHistory.SenderGuid
|| GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid == LastHistory.SenderGuid)
{
if(isNeedInsertTime)
InsertTime(GCGame.Utils.GetServerDateTime().ToString());
{
HandleChatHistory(LastHistory);
}
}
}
}
protected override void HandleChatHistory(ChatHistoryItem history, bool showLast = true)
{
if (history.SenderGuid == GlobeVar.SYSFRIEND_GUID || history.IsSystem)
{
var chatLogInfo = GetIdleChatLogItem(_ChatInfoSys);
chatLogInfo.SetChatLog(history);
if (showLast)
{
chatLogInfo.RectTransform.SetAsLastSibling();
_ShowingChatLog.Add(chatLogInfo);
}
else
{
chatLogInfo.RectTransform.SetAsFirstSibling();
_ShowingChatLog.Insert(0, chatLogInfo);
}
}
else
{
base.HandleChatHistory(history, showLast);
}
}
public override void ShowHistory(UInt64 friendGuid)
{
_FriendGuid = friendGuid;
_SelectedCannel = (int)GC_CHAT.CHATTYPE.CHAT_TYPE_FRIEND;
ClearHistory();
ClearUnReanNew();
FriendChat friendInfo = GameManager.gameManager.PlayerDataPool.ChatHistory.GetFriendChat(friendGuid);
if (friendInfo == null || friendInfo.ChatList==null)
return;
int maxCount = friendInfo.ChatList.Count;
maxCount = Math.Min(_SHOW_COUNT_IN_SINGLE_WIN, maxCount);
int startIdx = friendInfo.ChatList.Count - maxCount;
for (int j = startIdx; j < startIdx + maxCount; ++j)
{
var chatInfo = friendInfo.ChatList[j];
ShowChatItem(friendInfo, chatInfo);
}
if (_ShowingChatLog.Count > 0)
{
_ShowingHistoryIdxMin = startIdx;
_ShowingHistoryIdxMax = startIdx + maxCount - 1;
}
}
public override void UpdateChannelHistoryRange(int idxStart, bool isUp)
{
FriendChat friendInfo = GameManager.gameManager.PlayerDataPool.ChatHistory.GetFriendChat(_FriendGuid);
if (friendInfo == null || friendInfo.ChatList == null)
return;
int showedCnt = 0;
if (isUp)
{
for (int j = idxStart; j >= 0; --j)
{
var chatItem = friendInfo.ChatList[j];
ShowChatItem(friendInfo, chatItem,false);
_ShowingHistoryIdxMin = j;
++showedCnt;
if (showedCnt == _SHOW_COUNT_IN_SINGLE_WIN * 0.5f)
{
break;
}
}
}
}
public override void UpdateChannelHistory()
{
ClearHistory();
ClearUnReanNew();
ShowHistory(_FriendGuid);
}
private void ShowChatItem(FriendChat friendInfo, FriendChatRecord chatInfo, bool isLast = true)
{
if (chatInfo._TempChatHistory == null)
{
chatInfo._TempChatHistory = new ChatHistoryItem();
chatInfo._TempChatHistory.EChannel = GC_CHAT.CHATTYPE.CHAT_TYPE_FRIEND;
chatInfo._TempChatHistory.ChatInfo = chatInfo.ChatInfo;
chatInfo._TempChatHistory._ReadTip = chatInfo._ReadTip > 0;
}
else
{
chatInfo._ReadTip = chatInfo._TempChatHistory._ReadTip ? 1 : 0;
}
ChatHistoryItem chatHistory = chatInfo._TempChatHistory;
switch (chatInfo.RecordType)
{
case FriendChatRecord.RECORD_TYPE.Time:
InsertTime(chatHistory.ChatInfo);
return;
case FriendChatRecord.RECORD_TYPE.OtherChat:
chatHistory.SenderGuid = friendInfo.ChatGuid;
chatHistory.SenderName = friendInfo.ChatName;
chatHistory.SenderIcon = friendInfo.ChatIcon;
chatHistory.SenderLevel = friendInfo.ChatLevel;
chatHistory.SenderVIPLevel = friendInfo.VIPLevel;
chatHistory.SenderPrivilegeVIP = friendInfo.PrivilegeVIP;
chatHistory.HeadBGType = chatInfo._HeadType;
chatHistory.ChatPopType = chatInfo._ChatPopType;
break;
case FriendChatRecord.RECORD_TYPE.MyChat:
chatHistory.SenderGuid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid;
chatHistory.SenderName = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.RoleName;
chatHistory.SenderIcon = Utils.GetProfessionSpriteName(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession);
chatHistory.SenderLevel = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level;
chatHistory.SenderVIPLevel = VipData.GetVipLv();
chatHistory.SenderPrivilegeVIP = GameManager.gameManager.PlayerDataPool.GetMaxPrivilegeVip();
chatHistory.HeadBGType = GameManager.gameManager.PlayerDataPool.PlayerOrnamentStateInfo.OrnamentHeadBGID;
chatHistory.ChatPopType = GameManager.gameManager.PlayerDataPool.PlayerOrnamentStateInfo.OrnamentChatBGID;
break;
case FriendChatRecord.RECORD_TYPE.SysChat:
chatHistory.SenderGuid = friendInfo.ChatGuid;
chatHistory.SenderName = friendInfo.ChatName;
chatHistory.SenderIcon = Utils.GetSysIconName(Utils.SysIconType.Sys);
chatHistory.SenderLevel = friendInfo.ChatLevel;
break;
case FriendChatRecord.RECORD_TYPE.GuideChat:
chatHistory.SenderGuid = friendInfo.ChatGuid;
chatHistory.SenderName = friendInfo.ChatName;
chatHistory.SenderIcon = Utils.GetSysIconName(Utils.SysIconType.Guild);
chatHistory.SenderLevel = friendInfo.ChatLevel;
chatHistory.HeadBGType = chatInfo._HeadType;
chatHistory.ChatPopType = chatInfo._ChatPopType;
break;
}
try
{
HandleChatHistory(chatInfo._TempChatHistory, isLast);
}
catch (Exception e)
{
LogModule.ErrorLog("chat history error:" + e.ToString());
}
}
private void InsertTime(string timeStr)
{
var chatLogInfo = GetIdleChatLogItem(_ChatTimePrefab);
var chatTimeLog = chatLogInfo as ChatInfoLogItemTime;
chatTimeLog.SetTime(timeStr);
}
#endregion
}