278 lines
9.9 KiB
C#
278 lines
9.9 KiB
C#
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()
|
|
{
|
|
|
|
}
|
|
|
|
}
|