using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
public class ChatBubbleManager : GameSystemManager<ChatBubbleManager>
|
{
|
public Dictionary<int, ChatBubble> chatBubbles = new Dictionary<int, ChatBubble>();
|
|
public event Action chatBubbleStateRefresh;
|
|
bool serverInited = false;
|
public override void Init()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent;
|
}
|
|
public override void Release()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
bubblesIfo.Clear();
|
serverInited = false;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
serverInited = true;
|
}
|
|
private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType)
|
{
|
if (refreshType == PlayerDataType.ExAttr10 && serverInited)
|
{
|
SysNotifyMgr.Instance.ShowTip("ChangeBubbleSuccess");
|
}
|
}
|
|
public bool TryGetBubble(int id, out ChatBubble bubble)
|
{
|
return chatBubbles.TryGetValue(id, out bubble);
|
}
|
|
public bool IsBubbleGot(int id)
|
{
|
ChatBubble bubble;
|
if (TryGetBubble(id, out bubble))
|
{
|
// var config = ChatBubbleBoxConfig.Get(id);
|
bool got = false;
|
|
if (bubblesIfo.ContainsKey(id) && bubblesIfo[id].State == 1)
|
{
|
got = true;
|
}
|
// if (!got && config.NeedLV != 0)
|
// {
|
// return PlayerDatas.Instance.baseData.LV >= config.NeedLV;
|
// }
|
return got;
|
}
|
return false;
|
}
|
|
#region 服务端数据
|
|
//聊天气泡框
|
public struct BubbleBox
|
{
|
public int State; //是否已激活
|
public int EndTime; //到期时间戳,0为永久
|
public int Star; //星级
|
}
|
|
public Dictionary<int, BubbleBox> bubblesIfo = new Dictionary<int, BubbleBox>();
|
|
public void UpdateBubbleState(HA717_tagMCChatBubbleBoxState package)
|
{
|
List<int> list = null;
|
if (serverInited)
|
{
|
list = new List<int>();
|
foreach (var id in chatBubbles.Keys)
|
{
|
if (!IsBubbleGot(id))
|
{
|
list.Add(id);
|
}
|
}
|
}
|
|
for (int i = 0; i < package.Count; i++)
|
{
|
var info = package.BoxList[i];
|
bubblesIfo[info.BoxID] = new BubbleBox()
|
{
|
State = info.State,
|
EndTime = (int)info.EndTime,
|
Star = info.Star,
|
};
|
}
|
|
if (serverInited)
|
{
|
if (list != null)
|
{
|
for (int i = 0; i < list.Count; i++)
|
{
|
if (IsBubbleGot(list[i]))
|
{
|
SendUseBubble(list[i]);
|
break;
|
}
|
}
|
}
|
}
|
if (chatBubbleStateRefresh != null)
|
{
|
chatBubbleStateRefresh();
|
}
|
}
|
|
public void SendUseBubble(int id)
|
{
|
if (!IsBubbleGot(id))
|
{
|
return;
|
}
|
if (id == PlayerDatas.Instance.baseData.bubbleId)
|
{
|
return;
|
}
|
CA230_tagCMSetChatBubbleBox pak = new CA230_tagCMSetChatBubbleBox();
|
pak.BubbleBoxType = (byte)id;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
#endregion
|
|
public struct ChatBubble
|
{
|
public int id;
|
public RectOffset leftPadding;
|
public RectOffset rifhtPadding;
|
public Color32 color;
|
|
public string GetBubbleIcon(bool left, ref bool isFlip)
|
{
|
return string.Empty;
|
// var config = ChatBubbleBoxConfig.Get(id);
|
// isFlip = false;
|
// if (left)
|
// {
|
// if (string.IsNullOrEmpty(config.leftBubbleIcon))
|
// {
|
// isFlip = true;
|
// return config.rightBubbleIcon;
|
// }
|
// return config.leftBubbleIcon;
|
// }
|
// else
|
// {
|
// if (string.IsNullOrEmpty(config.rightBubbleIcon))
|
// {
|
// isFlip = true;
|
// return config.leftBubbleIcon;
|
// }
|
// return config.rightBubbleIcon;
|
// }
|
}
|
}
|
}
|