using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
public class TitleModel : Model, IBeforePlayerDataInitialize,IPlayerLoginOk
|
{
|
const string TITLEKEY = "Title";
|
|
public override void Init()
|
{
|
GlobalTimeEvent.Instance.secondEvent += SecondEvent;
|
}
|
|
public override void UnInit()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
serverInited = false;
|
roletitles.Clear();
|
}
|
|
private void SecondEvent()
|
{
|
foreach (var _id in roletitles.Keys)
|
{
|
if (!IsTitleGain(_id) && !roletitles[_id].outTimeNotify)
|
{
|
roletitles[_id].outTimeNotify = true;
|
if (roletitles[_id].isEquiped)
|
{
|
var hero = PlayerDatas.Instance.hero;
|
if (hero != null)
|
{
|
hero.RequestName();
|
}
|
}
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
UpdateRedpoint();
|
}
|
}
|
}
|
|
public event Action OnRefreshGainTitle;
|
private Dictionary<int, TitleData> roletitles = new Dictionary<int, TitleData>();
|
public void OnRoleTitleRefresh(H0335_tagPlayerDienstgradPack vNetData)
|
{
|
if (vNetData.Count < 1)
|
{
|
return;
|
}
|
for (int i = 0; i < vNetData.Items.Length; i++)
|
{
|
int id = (int)vNetData.Items[i].GradID;
|
byte state = vNetData.Items[i].State;
|
string gaintime = vNetData.Items[i].CreateTime;
|
SetTitleData(id, state, gaintime);
|
}
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
UpdateRedpoint();
|
}
|
|
public void OnRoleTitleRefresh(H0439_tagPlayerChangeDienstgrad vNetData)
|
{
|
RefreshTitleEquip((int)vNetData.GradID);
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
}
|
|
private void RefreshTitleEquip(int id)
|
{
|
foreach (TitleData title in roletitles.Values)
|
{
|
if (title.id == id)
|
{
|
title.isEquiped = true;
|
}
|
else
|
{
|
title.isEquiped = false;
|
}
|
}
|
}
|
|
public TitleData GetTitleEquip()
|
{
|
foreach (TitleData title in roletitles.Values)
|
{
|
if (title.isEquiped)
|
{
|
return title;
|
}
|
}
|
return null;
|
}
|
|
public void OnRoleTitleRefresh(H0336_tagPlayerGetDienstgrad vNetData)
|
{
|
int id = (int)vNetData.GradID;
|
string gaintime = vNetData.CreateTime;
|
byte state = 0;
|
SetTitleData(id, state, gaintime);
|
if (serverInited)
|
{
|
SetGet(id, true);
|
}
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
UpdateRedpoint();
|
}
|
|
public void OnRoleTitleRefresh(H0337_tagPlayerDelDienstgrad vNetData)
|
{
|
int id = (int)vNetData.GradID;
|
if (roletitles.ContainsKey(id))
|
{
|
TitleData title = roletitles[id];
|
roletitles.Remove(id);
|
title = null;
|
}
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
UpdateRedpoint();
|
}
|
|
void SetTitleData(int id, byte state, string gaintime)
|
{
|
TitleData title = null;
|
roletitles.TryGetValue(id, out title);
|
if (title == null)
|
{
|
title = new TitleData();
|
roletitles.Add(id, title);
|
}
|
title.id = id;
|
title.isEquiped = IsTitleEquip(state);
|
var dateTimeString = UIHelper.GetTime(gaintime);
|
try
|
{
|
title.gainTime = Convert.ToDateTime(dateTimeString);
|
}
|
catch (Exception e)
|
{
|
DebugEx.LogError(e.Message);
|
}
|
//title.expireTime = expireTime;
|
title.outTimeNotify = false;
|
}
|
|
private bool IsTitleEquip(byte state)
|
{
|
if (state < 1)
|
{
|
return false;
|
}
|
int k = 1 << 0;
|
if ((state & k) == k)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
public Dictionary<int, TitleData> GetAllGainTitle()
|
{
|
return roletitles;
|
}
|
|
public bool IsTitleGain(int id)
|
{
|
TitleData title = null;
|
if (roletitles.TryGetValue(id, out title))
|
{
|
var config = DienstgradConfig.Get(id);
|
var expireTime = config.Prescription;
|
if (expireTime == 0)
|
{
|
return true;
|
}
|
return GetTitleSurplusSeconds(id) > 0;
|
}
|
return false;
|
}
|
|
public TitleData GetGainTitle(int id)
|
{
|
TitleData title = null;
|
roletitles.TryGetValue(id, out title);
|
return title;
|
}
|
|
public int presentSelectTitle { get; set; }
|
public List<int> roleTitleList = new List<int>();
|
|
private bool serverInited { get; set; }
|
|
public bool IsNewGet(int _id)
|
{
|
if (!IsTitleGain(_id))
|
{
|
return false;
|
}
|
return LocalSave.GetBool(StringUtility.Contact(TITLEKEY, PlayerDatas.Instance.baseData.PlayerID, _id), false);
|
}
|
|
public void SetTitlesGet()
|
{
|
foreach (var _id in roletitles.Keys)
|
{
|
SetGet(_id);
|
}
|
UpdateRedpoint();
|
}
|
|
public void SetGet(int _id,bool _get = false)
|
{
|
LocalSave.SetBool(StringUtility.Contact(TITLEKEY, PlayerDatas.Instance.baseData.PlayerID, _id), _get);
|
}
|
|
public int GetTitleSurplusSeconds(int _id)
|
{
|
TitleData title = null;
|
if (roletitles.TryGetValue(_id, out title))
|
{
|
var config = DienstgradConfig.Get(_id);
|
var expireTime = config.Prescription;
|
if (expireTime == 0)
|
{
|
return 0;
|
}
|
DateTime t = title.gainTime.AddTicks(expireTime * TimeSpan.TicksPerSecond);
|
DateTime n = TimeUtility.ServerNow;
|
TimeSpan span = t - n;
|
return Mathf.Max(0, (int)span.TotalSeconds);
|
}
|
return 0;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
serverInited = true;
|
UpdateRedpoint();
|
}
|
|
#region 红点
|
private Redpoint m_TitleRedpoint=new Redpoint(10101, 1010104);
|
public Redpoint titleRedpoint
|
{
|
get { return m_TitleRedpoint; }
|
}
|
|
public void UpdateRedpoint()
|
{
|
titleRedpoint.state = RedPointState.None;
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Title))
|
{
|
return;
|
}
|
foreach (var _key in roletitles.Keys)
|
{
|
if (IsNewGet(_key))
|
{
|
titleRedpoint.state = RedPointState.Simple;
|
break;
|
}
|
}
|
}
|
#endregion
|
}
|
|
public class TitleData
|
{
|
public int id;
|
public bool isEquiped;
|
public DateTime gainTime;
|
//public uint expireTime;
|
|
public bool outTimeNotify = false;
|
}
|
}
|
|