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() { } }