Files
JJBB/Assets/Project/Script/GUI/Chat/ChatLinkBase.cs

278 lines
9.9 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Item;
using Games.ChatHistory;
using Games.Fellow;
public class ChatLinkBase
{
#region static
public enum ChatLinkType
{
Emoji,
Item,
Equip,
SelfPos,
CharName,
TeamAward,
Act,
GuildTransport,
Aucation,
Voice,
TeamJoin,
RespondGuild,
Pet,
UI,
GuildHistory,
//需要打开对应UI并定位到物品位置
ActivePet, //激活宠物
ActiveTitle, // 激活称号
ActiveAdvanceFashion, // 激活进阶时装
ActiveFashion = 18, // 激活时装
Act_Gift = 19, // 运营活动
Act_PRIVILEGEVIP = 20, // 特权Vip
Image = 21,
Act_Vip = 22, // vip奖励
EquipEnhance = 23, // 装备套装强化
ConscribeGuild = 24, //帮会招募
CallFunc, //调用静态函数
}
public static ChatLinkBase CreateChatLink(int emojiID)
{
var chatLink = new ChatLinkEmoji();
chatLink.SetLinkEmoji(emojiID);
return chatLink;
}
public static ChatLinkBase CreateChatLink(GameItem itemInfo)
{
if (!itemInfo.IsEquipMent())
{
var chatLink = new ChatLinkItem();
chatLink.SetLinkItem(itemInfo);
return chatLink;
}
else
{
var chatLink = new ChatLinkEquip();
chatLink.SetLinkItem(itemInfo);
return chatLink;
}
}
public static ChatLinkBase CreateChatLink(Fellow petInfo)
{
var chatLink = new ChatLinkPet();
chatLink.SetLinkItem(petInfo);
return chatLink;
}
public static ChatLinkBase CreateChatLink(int sceneID, int cannelID, Vector3 pos)
{
var chatLink = new ChatLinkSelfPos();
chatLink.SetLinkSelfPos(sceneID, cannelID, pos);
return chatLink;
}
public static ChatLinkBase CreateChatLinkBySendStr(Text text, ChatHistoryItem chatHistory, string linkStr, bool showBlackColor = true)
{
int start = linkStr.IndexOf(UnderLine);
string linkLine = linkStr;
if (start != -1)
{
linkLine = linkLine.Remove(start, UnderLine.Length + 6);
}
linkLine = linkLine.TrimEnd(',');
string strParam = linkLine.Substring(StrStartCnt, linkLine.Length - StrEndCnt - StrStartCnt + 1);
string[] strParams = strParam.Split(StrSplit);
if (strParams.Length < 1)
return null;
int type = int.Parse(strParams[0]);
switch ((ChatLinkType)type)
{
case ChatLinkType.Emoji:
var chatEmoji = new ChatLinkEmoji();
chatEmoji.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatEmoji;
case ChatLinkType.Item:
var chatItem= new ChatLinkItem();
chatItem._ShowBlackColor = showBlackColor;
chatItem.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatItem;
case ChatLinkType.Equip:
var chatEquip = new ChatLinkEquip();
chatEquip._ShowBlackColor = showBlackColor;
chatEquip.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatEquip;
case ChatLinkType.SelfPos:
var chatSelfPos = new ChatLinkSelfPos();
chatSelfPos.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatSelfPos;
case ChatLinkType.CharName:
var chatCharName = new ChatLinkName();
chatCharName.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatCharName;
case ChatLinkType.TeamAward:
var charTeamAward = new ChatLinkTeamAward();
charTeamAward.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return charTeamAward;
case ChatLinkType.Act:
var chatJoinAct = new ChatLinkJoinAct();
chatJoinAct.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatJoinAct;
case ChatLinkType.GuildTransport:
var chatGuildTrans = new ChatLinkGuildTransport();
chatGuildTrans.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatGuildTrans;
case ChatLinkType.Aucation:
var chatJoinAucation = new ChatLinkAucation();
chatJoinAucation.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatJoinAucation;
case ChatLinkType.TeamJoin:
var chatJoinTeam = new ChatLinkTeamJoin();
chatJoinTeam.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatJoinTeam;
case ChatLinkType.RespondGuild:
var chatRespondGuild = new ChatLinkRespondGuild();
chatRespondGuild.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatRespondGuild;
case ChatLinkType.ConscribeGuild:
var chatConscribeGuild = new ChatLinkConscribeGuild();
chatConscribeGuild.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatConscribeGuild;
case ChatLinkType.Pet:
var chatLinkPet = new ChatLinkPet();
chatLinkPet._ShowBlackColor = showBlackColor;
chatLinkPet.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatLinkPet;
case ChatLinkType.UI:
var chatLinkUI = new ChatLinkOpenUI();
chatLinkUI._ShowBlackColor = showBlackColor;
chatLinkUI.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatLinkUI;
case ChatLinkType.GuildHistory:
var guildHostoryLinkUI = new GuildHistoryLink();
guildHostoryLinkUI._ShowBlackColor = showBlackColor;
guildHostoryLinkUI.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return guildHostoryLinkUI;
case ChatLinkType.ActiveAdvanceFashion:
case ChatLinkType.ActiveFashion:
case ChatLinkType.ActivePet:
case ChatLinkType.ActiveTitle:
{
var linkActiveFuncUI = new ChatLinkActiveFunc();
linkActiveFuncUI._ShowBlackColor = showBlackColor;
linkActiveFuncUI.SetChatLinkType((ChatLinkType)type);
linkActiveFuncUI.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return linkActiveFuncUI;
}
case ChatLinkType.Act_Gift:
case ChatLinkType.Act_PRIVILEGEVIP:
case ChatLinkType.Act_Vip:
var linkActUI = new ChatLinkActUI();
linkActUI._ShowBlackColor = showBlackColor;
linkActUI.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return linkActUI;
case ChatLinkType.Image:
var vipIcon = new ChatLinkImage();
vipIcon.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return vipIcon;
case ChatLinkType.EquipEnhance:
var equipEnhanceTip = new ChatLinkEquipEhance();
equipEnhanceTip.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return equipEnhanceTip;
case ChatLinkType.CallFunc:
var chatlinkFunc = new ChatLinkCallFunc();
chatlinkFunc.SetLinkBySendStr(text, chatHistory, linkStr, strParams);
return chatlinkFunc;
}
return null;
}
public const string UnderLine = "Line_";
public const char StrSplit = ',';
public const string StrSendStart = "[#";
public const int StrStartCnt = 2;
public const string StrSendEnd = "]";
public const int StrEndCnt = 1;
#endregion
public string LineColor = "";
public string StrShow;
private string m_StrInput;
public string StrInput
{
get { return m_StrInput; }
set
{
if (value.Contains(UnderLine))
{
int start = value.IndexOf(UnderLine);
m_StrInput = value.Remove(start, UnderLine.Length + 6);
}
else
m_StrInput = value;
}
}
private string m_StrSend;
public string StrSend
{
get { return m_StrSend; }
set
{
if (value.Contains(UnderLine))
{
int start = value.IndexOf(UnderLine);
LineColor = value.Substring(start + UnderLine.Length, 6);
m_StrSend = value.Remove(start, UnderLine.Length + 6);
}
else
m_StrSend = value;
}
}
public int StartPosInText;
public int EndPosInText;
public int StartPosInShowText;
public int EndPosInShowText;
public virtual void SetLinkBySendStr(Text text, ChatHistoryItem chatHistory, string linkStr, string[] linkParams)
{
}
protected static float _WidthFixed = -1;
protected static float _HeightFixed = -1;
protected static float _TextHeightDelta = -1;
protected static float _EmojiWidthFixed = -1;
public virtual void SetLinkAfterLayout(Text text)
{
if (_WidthFixed < 0)
{
_WidthFixed = text.preferredWidth / text.cachedTextGeneratorForLayout.rectExtents.width;
_HeightFixed = text.preferredHeight / text.cachedTextGeneratorForLayout.rectExtents.height;
_TextHeightDelta = text.cachedTextGeneratorForLayout.rectExtents.height * 0.1f;
}
}
public virtual void ClearLink()
{
}
}