少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
System/Chat/ChatTip.cs
@@ -1,303 +1,303 @@
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ChatTip : MonoBehaviour
{
    private static ChatTip _inst = null;
    public static ChatTip Inst
    {
        get { return _inst; }
    }
    private void Awake()
    {
        _inst = this;
        InitCom();
    }
    private GameObject chatPrefab;
    private GameObject chatContent;
    private GameObject chatMask;
    private GameObject chatMaskRay;
    private GameObject chatUpMaskRay;
    private GameObject chatUp;
    private Button chatUpBtn;
    private Image chatUpImg;
    private bool isChatUp = false;
    [SerializeField] Vector2 m_ChatLowSize = Vector2.zero;
    [SerializeField] Vector2 m_ChatHighSize = Vector2.zero;
    public bool IsChatUp
    {
        get
        {
            return isChatUp;
        }
    }
    public event Action OnChatUpEvent;
    private Image chatBg;
    private ScrollerController chatUpCtrl;
    private RichText destText;
    private List<ChatData> chatUpDataList;
    private List<GameObject> chatItems = new List<GameObject>(ChatCtrl.CHAT_TIP_CNT);
    void InitCom()
    {
        chatBg = this.GetComponent<Image>("Image");
        chatContent = transform.Find("ChatMask/ChatContent").gameObject;
        chatPrefab = chatContent.transform.Find("ChatText").gameObject;
        chatMask = transform.Find("ChatMask").gameObject;
        chatMaskRay = chatMask.transform.Find("Ray").gameObject;
        UIEventTrigger.Get(chatMaskRay).OnNoParamsClick = OnChatClick;
        chatUpBtn = this.GetComponent<Button>("Image/Btn_UP");
        chatUpImg = chatUpBtn.GetComponent<Image>();
        chatUpBtn.onClick.AddListener(OnChatUpBtn);
        chatUp = transform.Find("ChatUp").gameObject;
        chatUpMaskRay = chatUp.transform.Find("Scroller/Ray").gameObject;
        UIEventTrigger.Get(chatUpMaskRay).OnNoParamsClick = OnChatClick;
        chatUpCtrl = chatUp.transform.Find("Controll").GetComponent<ScrollerController>();
        chatUpCtrl.lockType = EnhanceLockType.KeepVertical;
        destText = chatUp.transform.Find("ChatCell/ChatText").GetComponent<RichText>();
        chatUpCtrl.OnRefreshCell += OnRefreshChatUpCell;
        chatUpCtrl.OnGetDynamicSize += OnGetDynamicSize;
    }
    private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
    {
        destText.SetExtenalData(chatUpDataList[index].infoList);
        destText.text = SetChatExtraInfo(chatUpDataList[index]) + chatUpDataList[index].content;
        height = destText.preferredHeight;
        return true;
    }
    private void OnRefreshChatUpCell(ScrollerDataType type, CellView cell)
    {
        int index = cell.index;
        if (chatUpDataList != null && index < chatUpDataList.Count)
        {
            RichText text = cell.transform.Find("ChatText").GetComponent<RichText>();
            ChatData data = chatUpDataList[index];
            if (chatUpDataList[index].infoList != null)
            {
                text.SetExtenalData(chatUpDataList[index].infoList);
            }
            text.text = SetChatExtraInfo(chatUpDataList[index]) + chatUpDataList[index].content;
            text.OnClick = () =>
            {
                OnChatDataClick(data);
            };
        }
    }
    private void OnChatUpBtn()
    {
        if (!isChatUp)
        {
            isChatUp = true;
            chatBg.rectTransform.sizeDelta = m_ChatHighSize.Equals(Vector2.zero) ? new Vector2(470, 205) : m_ChatHighSize;
            chatMask.SetActive(false);
            chatUp.SetActive(true);
            OnInitUpChat();
            chatUpImg.transform.localScale = chatUpImg.transform.localScale.SetY(-1);
            chatUpCtrl.mScrollRect.verticalNormalizedPosition = 0;
        }
        else
        {
            isChatUp = false;
            chatBg.rectTransform.sizeDelta = m_ChatLowSize.Equals(Vector2.zero) ? new Vector2(470, 106) : m_ChatLowSize;
            chatUpImg.transform.localScale = chatUpImg.transform.localScale.SetY(1);
            chatUp.SetActive(false);
            chatMask.SetActive(true);
            OnRefreshAllChat();
        }
        if (OnChatUpEvent != null)
        {
            OnChatUpEvent();
        }
    }
    private void OnInitUpChat()
    {
        chatUpDataList = ChatCtrl.Inst.GetChatUpInfo();
        chatUpCtrl.Refresh();
        if (chatUpDataList != null && chatUpDataList.Count > 0)
        {
            for (int i = 0; i < chatUpDataList.Count; i++)
            {
                chatUpCtrl.AddCell(ScrollerDataType.Header, i);
            }
        }
        chatUpCtrl.Restart();
    }
    private void OnChatClick()
    {
        if (WindowCenter.Instance.CheckOpen<ChatWin>())
        {
            return;
        }
        ChatCtrl.Inst.presentChatType = ChatInfoType.World;
        var mapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
        if (mapId == 31230)
        {
            ChatCtrl.Inst.presentChatType = ChatInfoType.Fairy;
        }
        WindowCenter.Instance.Open<ChatWin>();
    }
    private void OnEnable()
    {
        ChatCtrl.OnRefreshChat += OnRefreshChatTip;
        MainInterfaceWin.Event_ChatCallback += OnChatTipClose;
        OnRefreshAllChat();
        //ChatCtrl.Inst.GetChatChannelShow();
        isChatUp = true;
        OnChatUpBtn();
    }
    private void OnChatTipClose()
    {
        if (isChatUp)
        {
            OnChatUpBtn();
        }
    }
    private void OnRefreshAllChat()
    {
        List<ChatData> list = ChatCtrl.Inst.GetChatInfo();
        for (int i = 0; i < list.Count; i++)
        {
            GameObject prefab = null;
            if (i >= chatItems.Count)
            {
                prefab = Instantiate(chatPrefab) as GameObject;
                prefab.transform.SetParent(chatContent.transform);
                prefab.transform.localScale = Vector3.one;
                Vector3 pos = prefab.transform.localPosition;
                prefab.transform.localPosition = pos.SetZ(0);
                prefab.SetActive(true);
                chatItems.Add(prefab);
            }
            else
            {
                prefab = chatItems[i];
                prefab.SetActive(true);
            }
            SetChatItemData(prefab, list[i]);
        }
        for (int i = chatItems.Count - 1; i >= list.Count; i--)
        {
            if (chatItems[i].activeSelf)
            {
                chatItems[i].SetActive(false);
            }
        }
    }
    void OnChatDataClick(ChatData data)
    {
        if (WindowCenter.Instance.CheckOpen<ChatWin>())
        {
            return;
        }
        ChatCtrl.Inst.presentChatType = data.type;
        var mapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
        if (mapId == 31230)
        {
            ChatCtrl.Inst.presentChatType = ChatInfoType.Fairy;
        }
        WindowCenter.Instance.Open<ChatWin>();
    }
    void OnRefreshChatTip(ChatInfoType type)
    {
        if (isChatUp)
        {
            OnInitUpChat();
        }
        else
        {
            OnRefreshAllChat();
        }
    }
    void SetChatItemData(GameObject prefab, ChatData data)
    {
        RichText text = prefab.GetComponent<RichText>();
        if (data.infoList != null)
        {
            text.SetExtenalData(data.infoList);
        }
        text.text = StringUtility.Contact(SetChatExtraInfo(data), data.content);
        text.OnClick = () =>
        {
            OnChatDataClick(data);
        };
    }
    string SetChatExtraInfo(ChatData data)
    {
        switch (data.type)
        {
            case ChatInfoType.World:
                {
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_World", (data as ChatUeseData).name);
                }
            case ChatInfoType.Area:
                return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_Area", (data as ChatUeseData).name);
            case ChatInfoType.Team:
                {
                    string playerName = (data as ChatUeseData).name;
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>", "ChatIcon_Team", playerName + (playerName != string.Empty ? ": " : string.Empty));
                }
            case ChatInfoType.Friend:
                break;
            case ChatInfoType.Fairy:
                {
                    string playerName = (data as ChatUeseData).name;
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>", "ChatIcon_Fairy", playerName + (playerName != string.Empty ? ": " : string.Empty));
                }
            case ChatInfoType.Trumpet:
                return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_Trumpet", (data as ChatTrumpetData).name);
            case ChatInfoType.Invite:
                return string.Format("<Img chat={0}/> ", "ChatIcon_Invite");
            case ChatInfoType.System:
                return string.Format("<Img chat={0}/> ", "ChatIcon_System");
        }
        return string.Empty;
    }
    private void OnDisable()
    {
        ChatCtrl.OnRefreshChat -= OnRefreshChatTip;
        MainInterfaceWin.Event_ChatCallback -= OnChatTipClose;
    }
    private void OnDestroy()
    {
        _inst = null;
    }
    public bool IsOpen
    {
        get
        {
            return gameObject.activeInHierarchy;
        }
    }
}
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ChatTip : MonoBehaviour
{
    private static ChatTip _inst = null;
    public static ChatTip Inst
    {
        get { return _inst; }
    }
    private void Awake()
    {
        _inst = this;
        InitCom();
    }
    private GameObject chatPrefab;
    private GameObject chatContent;
    private GameObject chatMask;
    private GameObject chatMaskRay;
    private GameObject chatUpMaskRay;
    private GameObject chatUp;
    private Button chatUpBtn;
    private Image chatUpImg;
    private bool isChatUp = false;
    [SerializeField] Vector2 m_ChatLowSize = Vector2.zero;
    [SerializeField] Vector2 m_ChatHighSize = Vector2.zero;
    public bool IsChatUp
    {
        get
        {
            return isChatUp;
        }
    }
    public event Action OnChatUpEvent;
    private Image chatBg;
    private ScrollerController chatUpCtrl;
    private RichText destText;
    private List<ChatData> chatUpDataList;
    private List<GameObject> chatItems = new List<GameObject>(ChatCtrl.CHAT_TIP_CNT);
    void InitCom()
    {
        chatBg = this.GetComponent<Image>("Image");
        chatContent = transform.Find("ChatMask/ChatContent").gameObject;
        chatPrefab = chatContent.transform.Find("ChatText").gameObject;
        chatMask = transform.Find("ChatMask").gameObject;
        chatMaskRay = chatMask.transform.Find("Ray").gameObject;
        UIEventTrigger.Get(chatMaskRay).OnNoParamsClick = OnChatClick;
        chatUpBtn = this.GetComponent<Button>("Image/Btn_UP");
        chatUpImg = chatUpBtn.GetComponent<Image>();
        chatUpBtn.onClick.AddListener(OnChatUpBtn);
        chatUp = transform.Find("ChatUp").gameObject;
        chatUpMaskRay = chatUp.transform.Find("Scroller/Ray").gameObject;
        UIEventTrigger.Get(chatUpMaskRay).OnNoParamsClick = OnChatClick;
        chatUpCtrl = chatUp.transform.Find("Controll").GetComponent<ScrollerController>();
        chatUpCtrl.lockType = EnhanceLockType.KeepVertical;
        destText = chatUp.transform.Find("ChatCell/ChatText").GetComponent<RichText>();
        chatUpCtrl.OnRefreshCell += OnRefreshChatUpCell;
        chatUpCtrl.OnGetDynamicSize += OnGetDynamicSize;
    }
    private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
    {
        destText.SetExtenalData(chatUpDataList[index].infoList);
        destText.text = SetChatExtraInfo(chatUpDataList[index]) + chatUpDataList[index].content;
        height = destText.preferredHeight;
        return true;
    }
    private void OnRefreshChatUpCell(ScrollerDataType type, CellView cell)
    {
        int index = cell.index;
        if (chatUpDataList != null && index < chatUpDataList.Count)
        {
            RichText text = cell.transform.Find("ChatText").GetComponent<RichText>();
            ChatData data = chatUpDataList[index];
            if (chatUpDataList[index].infoList != null)
            {
                text.SetExtenalData(chatUpDataList[index].infoList);
            }
            text.text = SetChatExtraInfo(chatUpDataList[index]) + chatUpDataList[index].content;
            text.OnClick = () =>
            {
                OnChatDataClick(data);
            };
        }
    }
    private void OnChatUpBtn()
    {
        if (!isChatUp)
        {
            isChatUp = true;
            chatBg.rectTransform.sizeDelta = m_ChatHighSize.Equals(Vector2.zero) ? new Vector2(470, 205) : m_ChatHighSize;
            chatMask.SetActive(false);
            chatUp.SetActive(true);
            OnInitUpChat();
            chatUpImg.transform.localScale = chatUpImg.transform.localScale.SetY(-1);
            chatUpCtrl.mScrollRect.verticalNormalizedPosition = 0;
        }
        else
        {
            isChatUp = false;
            chatBg.rectTransform.sizeDelta = m_ChatLowSize.Equals(Vector2.zero) ? new Vector2(470, 106) : m_ChatLowSize;
            chatUpImg.transform.localScale = chatUpImg.transform.localScale.SetY(1);
            chatUp.SetActive(false);
            chatMask.SetActive(true);
            OnRefreshAllChat();
        }
        if (OnChatUpEvent != null)
        {
            OnChatUpEvent();
        }
    }
    private void OnInitUpChat()
    {
        chatUpDataList = ChatCtrl.Inst.GetChatUpInfo();
        chatUpCtrl.Refresh();
        if (chatUpDataList != null && chatUpDataList.Count > 0)
        {
            for (int i = 0; i < chatUpDataList.Count; i++)
            {
                chatUpCtrl.AddCell(ScrollerDataType.Header, i);
            }
        }
        chatUpCtrl.Restart();
    }
    private void OnChatClick()
    {
        if (WindowCenter.Instance.CheckOpen<ChatWin>())
        {
            return;
        }
        ChatCtrl.Inst.presentChatType = ChatInfoType.World;
        var mapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
        if (mapId == 31230)
        {
            ChatCtrl.Inst.presentChatType = ChatInfoType.Fairy;
        }
        WindowCenter.Instance.Open<ChatWin>();
    }
    private void OnEnable()
    {
        ChatCtrl.OnRefreshChat += OnRefreshChatTip;
        MainInterfaceWin.Event_ChatCallback += OnChatTipClose;
        OnRefreshAllChat();
        //ChatCtrl.Inst.GetChatChannelShow();
        isChatUp = true;
        OnChatUpBtn();
    }
    private void OnChatTipClose()
    {
        if (isChatUp)
        {
            OnChatUpBtn();
        }
    }
    private void OnRefreshAllChat()
    {
        List<ChatData> list = ChatCtrl.Inst.GetChatInfo();
        for (int i = 0; i < list.Count; i++)
        {
            GameObject prefab = null;
            if (i >= chatItems.Count)
            {
                prefab = Instantiate(chatPrefab) as GameObject;
                prefab.transform.SetParent(chatContent.transform);
                prefab.transform.localScale = Vector3.one;
                Vector3 pos = prefab.transform.localPosition;
                prefab.transform.localPosition = pos.SetZ(0);
                prefab.SetActive(true);
                chatItems.Add(prefab);
            }
            else
            {
                prefab = chatItems[i];
                prefab.SetActive(true);
            }
            SetChatItemData(prefab, list[i]);
        }
        for (int i = chatItems.Count - 1; i >= list.Count; i--)
        {
            if (chatItems[i].activeSelf)
            {
                chatItems[i].SetActive(false);
            }
        }
    }
    void OnChatDataClick(ChatData data)
    {
        if (WindowCenter.Instance.CheckOpen<ChatWin>())
        {
            return;
        }
        ChatCtrl.Inst.presentChatType = data.type;
        var mapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
        if (mapId == 31230)
        {
            ChatCtrl.Inst.presentChatType = ChatInfoType.Fairy;
        }
        WindowCenter.Instance.Open<ChatWin>();
    }
    void OnRefreshChatTip(ChatInfoType type)
    {
        if (isChatUp)
        {
            OnInitUpChat();
        }
        else
        {
            OnRefreshAllChat();
        }
    }
    void SetChatItemData(GameObject prefab, ChatData data)
    {
        RichText text = prefab.GetComponent<RichText>();
        if (data.infoList != null)
        {
            text.SetExtenalData(data.infoList);
        }
        text.text = StringUtility.Contact(SetChatExtraInfo(data), data.content);
        text.OnClick = () =>
        {
            OnChatDataClick(data);
        };
    }
    string SetChatExtraInfo(ChatData data)
    {
        switch (data.type)
        {
            case ChatInfoType.World:
                {
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_World", (data as ChatUeseData).name);
                }
            case ChatInfoType.Area:
                return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_Area", (data as ChatUeseData).name);
            case ChatInfoType.Team:
                {
                    string playerName = (data as ChatUeseData).name;
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>", "ChatIcon_Team", playerName + (playerName != string.Empty ? ": " : string.Empty));
                }
            case ChatInfoType.Friend:
                break;
            case ChatInfoType.Fairy:
                {
                    string playerName = (data as ChatUeseData).name;
                    return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>", "ChatIcon_Fairy", playerName + (playerName != string.Empty ? ": " : string.Empty));
                }
            case ChatInfoType.Trumpet:
                return string.Format("<Img chat={0}/> <color=#109d06>{1}</color>: ", "ChatIcon_Trumpet", (data as ChatTrumpetData).name);
            case ChatInfoType.Invite:
                return string.Format("<Img chat={0}/> ", "ChatIcon_Invite");
            case ChatInfoType.System:
                return string.Format("<Img chat={0}/> ", "ChatIcon_System");
        }
        return string.Empty;
    }
    private void OnDisable()
    {
        ChatCtrl.OnRefreshChat -= OnRefreshChatTip;
        MainInterfaceWin.Event_ChatCallback -= OnChatTipClose;
    }
    private void OnDestroy()
    {
        _inst = null;
    }
    public bool IsOpen
    {
        get
        {
            return gameObject.activeInHierarchy;
        }
    }
}